From 2f264f2c92d202608cb54cf6f06abf8e2aa0e875 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 8 Feb 2020 22:44:31 +0100 Subject: [PATCH 001/601] Change: Heading for 1.11 now --- bin/ai/compat_1.10.nut | 2 ++ bin/ai/compat_1.11.nut | 6 ++++++ bin/ai/regression/regression_info.nut | 2 +- bin/game/compat_1.10.nut | 2 ++ bin/game/compat_1.11.nut | 6 ++++++ os/os2/installer/make_installer.cmd | 2 +- os/rpm/openttd.spec | 4 ++-- os/windows/installer/install.nsi | 6 +++--- src/ai/ai_info.cpp | 3 ++- src/game/game_info.cpp | 3 ++- src/os/windows/ottdres.rc.in | 4 ++-- src/rev.cpp.in | 2 +- src/saveload/saveload.h | 2 +- src/script/api/ai_changelog.hpp | 4 +++- src/script/api/game_changelog.hpp | 4 +++- 15 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 bin/ai/compat_1.11.nut create mode 100644 bin/game/compat_1.11.nut diff --git a/bin/ai/compat_1.10.nut b/bin/ai/compat_1.10.nut index 3081fb58e8..2baaddb836 100644 --- a/bin/ai/compat_1.10.nut +++ b/bin/ai/compat_1.10.nut @@ -4,3 +4,5 @@ * 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 . */ + +AILog.Info("1.10 API compatibility in effect."); diff --git a/bin/ai/compat_1.11.nut b/bin/ai/compat_1.11.nut new file mode 100644 index 0000000000..3081fb58e8 --- /dev/null +++ b/bin/ai/compat_1.11.nut @@ -0,0 +1,6 @@ +/* + * 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 . + */ diff --git a/bin/ai/regression/regression_info.nut b/bin/ai/regression/regression_info.nut index 020b186faf..758754cfe7 100644 --- a/bin/ai/regression/regression_info.nut +++ b/bin/ai/regression/regression_info.nut @@ -4,7 +4,7 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.10"; } + function GetAPIVersion() { return "1.11"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } } diff --git a/bin/game/compat_1.10.nut b/bin/game/compat_1.10.nut index 3081fb58e8..1c85766c0f 100644 --- a/bin/game/compat_1.10.nut +++ b/bin/game/compat_1.10.nut @@ -4,3 +4,5 @@ * 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 . */ + +GSLog.Info("1.10 API compatibility in effect."); diff --git a/bin/game/compat_1.11.nut b/bin/game/compat_1.11.nut new file mode 100644 index 0000000000..3081fb58e8 --- /dev/null +++ b/bin/game/compat_1.11.nut @@ -0,0 +1,6 @@ +/* + * 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 . + */ diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd index 3addeca1ae..885b2dc623 100644 --- a/os/os2/installer/make_installer.cmd +++ b/os/os2/installer/make_installer.cmd @@ -1,6 +1,6 @@ @echo off -set OPENTTD_VERSION=1.10.0 +set OPENTTD_VERSION=1.11.0 set OPENSFX_VERSION=0.8.0 set NOSOUND_VERSION=0.8.0 set OPENGFX_VERSION=1.2.0 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 340a9886b9..134caad38e 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.10.beta2 +Version: 1.11.beta1 Release: 0 -%define srcver 1.10.0-beta2 +%define srcver 1.11.0-beta1 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 2561b76d55..b6837c559e 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -1,9 +1,9 @@ # Version numbers to update !define APPV_MAJOR 1 -!define APPV_MINOR 10 +!define APPV_MINOR 11 !define APPV_MAINT 0 -!define APPV_BUILD 1 -!define APPV_EXTRA "-beta2" +!define APPV_BUILD 0 +!define APPV_EXTRA "-beta1" !define APPNAME "OpenTTD" ; Define application name !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 2d80003f6b..6e1ef6cecd 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -27,7 +27,8 @@ static bool CheckAPIVersion(const char *api_version) return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0; + strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0 || + strcmp(api_version, "1.11") == 0; } #if defined(_WIN32) diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index 91a463bed5..a039401b32 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -24,7 +24,8 @@ static bool CheckAPIVersion(const char *api_version) { return strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0; + strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0 || + strcmp(api_version, "1.11") == 0; } #if defined(_WIN32) diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index 5b375790a3..af27de4bdf 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -77,8 +77,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,10,0,!!ISODATE!! - PRODUCTVERSION 1,10,0,!!ISODATE!! + FILEVERSION 1,11,0,!!ISODATE!! + PRODUCTVERSION 1,11,0,!!ISODATE!! FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 003fb5556e..48b29f349d 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -80,4 +80,4 @@ const byte _openttd_revision_tagged = !!ISTAG!!; * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. */ -const uint32 _openttd_newgrf_version = 1 << 28 | 10 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; +const uint32 _openttd_newgrf_version = 1 << 28 | 11 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 14c8c32315..eeb0c58f27 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -301,7 +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. + SLV_ENDING_YEAR, ///< 218 PR#7747 v1.10 Configurable ending year. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 9eea9ab152..bcb7df67f2 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -13,10 +13,12 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * - * \b 1.10.0 + * \b 1.11.0 * * This version is not yet released. The following changes are not set in stone yet. * + * \b 1.10.0 + * * API additions: * \li AIGroup::SetPrimaryColour * \li AIGroup::SetSecondaryColour diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 235dcee986..df8c663a03 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -13,10 +13,12 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * - * \b 1.10.0 + * \b 1.11.0 * * This version is not yet released. The following changes are not set in stone yet. * + * \b 1.10.0 + * * API additions: * \li GSVehicle::BuildVehicleWithRefit * \li GSVehicle::GetBuildWithRefitCapacity From e340934d04a26a8917f23f73141556e85fbae0b1 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 9 Feb 2020 11:44:45 +0000 Subject: [PATCH 002/601] Fix #7988: Memory leak when using custom depot names --- src/depot.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/depot.cpp b/src/depot.cpp index 05e2af3d4a..9207c63629 100644 --- a/src/depot.cpp +++ b/src/depot.cpp @@ -27,6 +27,8 @@ INSTANTIATE_POOL_METHODS(Depot) */ Depot::~Depot() { + free(this->name); + if (CleaningPool()) return; if (!IsDepotTile(this->xy) || GetDepotIndex(this->xy) != this->index) { From e31d75c926103edce3751195f8e178ad305c0e39 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 9 Feb 2020 19:45:40 +0100 Subject: [PATCH 003/601] Update: Translations from eints basque: 17 changes by Thadah --- src/lang/basque.txt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 401b7b9b42..351a252638 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -187,6 +187,7 @@ STR_COLOUR_ORANGE :Laranja STR_COLOUR_BROWN :Marroia STR_COLOUR_GREY :Grisa STR_COLOUR_WHITE :Zuria +STR_COLOUR_DEFAULT :Lehenetsia # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -252,6 +253,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Ezkutuak STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Ezkutuak erakutsi STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Botoi hau gaituz, ezkutuak dauden trenak erakusten dira +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Botoi hau gaituz, ezkutuko itsasontziak ere erakusten dira # Query window STR_BUTTON_DEFAULT :{BLACK}Lehenetsia @@ -960,6 +962,7 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Pantaila STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Pantailaren resulozioa aukeratu STR_GAME_OPTIONS_RESOLUTION_OTHER :besteak +STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interfaze tamaina STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Tamaina doblea @@ -1091,6 +1094,7 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Ezarpenak lehen STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Balio ezberdinak dituzten ezarpenak zure joko berriaren ezarpenekin alderatuta STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Bezero ezarpenak (ez dira partidatan gordetzen; joko guztiei eragiten die) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Jokoaren ezarpenak (gordetako partidetan bilduta; bakarrik partida berriei eragiten die) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Enpresa ezarpenak (partidan gordeta; bakarrik uneko enpresari eragiten dio) STR_CONFIG_SETTINGS_NONE :{WHITE}- Ezer ez - @@ -1270,6 +1274,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Zakarra STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Oso Zakarra STR_CONFIG_SETTING_VARIETY :Barietateen distribuzioa: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :Ibai kantitatea: {STRING} +STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Aukeratu zenbat ibai sortuko diren STR_CONFIG_SETTING_TREE_PLACER :Zuhaitz kokatzeko algoritmoa: {STRING} STR_CONFIG_SETTING_TREE_PLACER_NONE :Ezer ez STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Jatorrizkoa @@ -1446,6 +1451,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Betea STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kolorezko albisteak {STRING}. urtean agertzen dira STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Egunkarien mezuak kolorean imprimatuko diren urtea. Urte hau baino lehenago txuri/beltz monokromoa erabiliko da STR_CONFIG_SETTING_STARTING_YEAR :Hasierako urtea: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gaitu ekonomia leuna (aldaketa gehiago baina txikiagoak): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Gaitua dagoenean, industrien ekoizpena gehiagotan aldatuko da baina urrats txikiagotan. Aukera honek gehienetan ez du eraginik izango industriak NewGRF batek ezartzen baditu STR_CONFIG_SETTING_ALLOW_SHARES :Beste konpainien akzioak erostea baimendu: {STRING} @@ -1551,6 +1557,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metrikoa (zp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Pisu unitateak: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Pisu bat erabiltzaile interfazean erakusten denean, aukeratutako unitateetan erakutsi STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (ton/tona) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metrikoa (t/tona) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) @@ -1576,6 +1583,7 @@ STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interfa STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Orokorra STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Leihoak STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Eraikuntza +STR_CONFIG_SETTING_ADVISORS :{ORANGE}Albisteak / Aholkulariak STR_CONFIG_SETTING_COMPANY :{ORANGE}Konpainia STR_CONFIG_SETTING_VEHICLES :{ORANGE}Ibilgailuak STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Fisika @@ -2253,7 +2261,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Bide sei STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Norabide bakarreko bide seinalea (elektrikoa){}Norabide bakarreko bide seinalea bloke berdinean tren bat baino gehiago egotea ahalbidetzen du, trenak gelditzeko tokia aurkitu badezake. Ezin dira atzekaldetik pasa STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Seinaleak aldatu{}Aukeratua dagoenean, aukeratutako seinalea aldatuko da hautatutako seinale motagatik. Krtl+Klik mota aldatuko du, Shift+Klik gutxi gora beherako kostea erakutsiko du STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Arrastratzerakoan seinale dentsitatea -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Seinale dentsitatea jeitsi +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Seinale distantzia jaitsi STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Seinale dentsitatea igo # Bridge selection window @@ -2578,11 +2586,15 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} koadroak/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{BLACK} Zama kudeaketa: STR_FRAMERATE_GL_TRAINS :{WHITE} Trenen tick-ak: STR_FRAMERATE_GL_SHIPS :{WHITE} Itsasontzien tick-ak: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMESCRIPT :Jokoaren scripta ############ End of leave-in-this-order @@ -2647,6 +2659,7 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Garaiera STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamaina: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Aldatu maparen garaiera maximoa STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Elur garaiera aldatu STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Hasierako urtea aldatu @@ -2718,6 +2731,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Bertsioa STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Gutxienezko bertsio bateragarria: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Aurrezarria (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametroak: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ez dago informaziorik @@ -3428,6 +3442,7 @@ STR_REPLACE_ELRAIL_VEHICLES :Tren ibilgailu STR_REPLACE_MONORAIL_VEHICLES :Monorail trenak STR_REPLACE_MAGLEV_VEHICLES :Tren magnetikoak +STR_REPLACE_TRAM_VEHICLES :Tranbia ibilgailuak STR_REPLACE_REMOVE_WAGON :{BLACK}Bagoiak ezabatu: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ordezkatze automatikoari agindu trenaren luzera errespetatzea, bagoiak ezabatuz luzera handitzen badute (trenaren hasierako bagoietik hasita) @@ -4159,6 +4174,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Ezin da STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Ezin da hemen tranbiarik ezabatu... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... ez dago biderik STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... ez dago tranbia biderik +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... errepidea ez da bateragarria # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Ezin dira hemen urbideak eraiki... From 30fe0015e2152e0cada8997e760271f31a001a1a Mon Sep 17 00:00:00 2001 From: Samu Date: Fri, 17 Jan 2020 19:58:07 +0000 Subject: [PATCH 004/601] Fix #7944: Demolishing locks built on rivers didn't always restore the river --- src/water_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index d1ab57f347..12195d8dca 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -301,7 +301,7 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag if (ret.Failed()) return ret; /* middle tile */ - WaterClass wc_middle = IsWaterTile(tile) ? GetWaterClass(tile) : WATER_CLASS_CANAL; + WaterClass wc_middle = HasTileWaterGround(tile) ? GetWaterClass(tile) : WATER_CLASS_CANAL; ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); if (ret.Failed()) return ret; cost.AddCost(ret); From 9e4eee1b9e348841dbf306547dda2c560cd7f851 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 9 Feb 2020 20:10:32 +0100 Subject: [PATCH 005/601] Codechange: Refactor road bridge catenary drawing --- src/tunnelbridge_cmd.cpp | 49 +++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 9023ea2233..6a803cca79 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1104,6 +1104,32 @@ static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo *ti, Axis } } +/** + * Retrieve the sprites required for catenary on a road/tram bridge. + * @param rti RoadTypeInfo for the road or tram type to get catenary for + * @param head_tile Bridge head tile with roadtype information + * @param offset Sprite offset identifying flat to sloped bridge tiles + * @param head Are we drawing bridge head? + * @param[out] spr_back Back catenary sprite to use + * @param[out] spr_front Front catenary sprite to use + */ +static void GetBridgeRoadCatenary(const RoadTypeInfo *rti, TileIndex head_tile, int offset, bool head, SpriteID &spr_back, SpriteID &spr_front) +{ + static const SpriteID back_offsets[6] = { 95, 96, 99, 102, 100, 101 }; + static const SpriteID front_offsets[6] = { 97, 98, 103, 106, 104, 105 }; + + /* Simplified from DrawRoadTypeCatenary() to remove all the special cases required for regular ground road */ + spr_back = GetCustomRoadSprite(rti, head_tile, ROTSG_CATENARY_BACK, head ? TCX_NORMAL : TCX_ON_BRIDGE); + spr_front = GetCustomRoadSprite(rti, head_tile, ROTSG_CATENARY_FRONT, head ? TCX_NORMAL : TCX_ON_BRIDGE); + if (spr_back == 0 || spr_front == 0) { + spr_back = SPR_TRAMWAY_BASE + back_offsets[offset]; + spr_front = SPR_TRAMWAY_BASE + front_offsets[offset]; + } else { + spr_back += 23 + offset; + spr_front += 23 + offset; + } +} + /** * Draws the road and trambits over an already drawn (lower end) of a bridge. * @param head_tile bridge head tile with roadtype information @@ -1126,9 +1152,6 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off bool trans_front[4] = { false }; static const SpriteID overlay_offsets[6] = { 0, 1, 11, 12, 13, 14 }; - static const SpriteID back_offsets[6] = { 95, 96, 99, 102, 100, 101 }; - static const SpriteID front_offsets[6] = { 97, 98, 103, 106, 104, 105 }; - if (head || !IsInvisibilitySet(TO_BRIDGES)) { /* Road underlay takes precedence over tram */ trans_back[0] = !head && IsTransparencySet(TO_BRIDGES); @@ -1168,25 +1191,9 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off trans_back[3] = IsTransparencySet(TO_CATENARY); trans_front[0] = IsTransparencySet(TO_CATENARY); if (road_rti != nullptr && HasRoadCatenaryDrawn(road_rt)) { - seq_back[3] = GetCustomRoadSprite(road_rti, head_tile, ROTSG_CATENARY_BACK, head ? TCX_NORMAL : TCX_ON_BRIDGE); - seq_front[0] = GetCustomRoadSprite(road_rti, head_tile, ROTSG_CATENARY_FRONT, head ? TCX_NORMAL : TCX_ON_BRIDGE); - if (seq_back[3] == 0 || seq_front[0] == 0) { - seq_back[3] = SPR_TRAMWAY_BASE + back_offsets[offset]; - seq_front[0] = SPR_TRAMWAY_BASE + front_offsets[offset]; - } else { - seq_back[3] += 23 + offset; - seq_front[0] += 23 + offset; - } + GetBridgeRoadCatenary(road_rti, head_tile, offset, head, seq_back[3], seq_front[0]); } else if (tram_rti != nullptr && HasRoadCatenaryDrawn(tram_rt)) { - seq_back[3] = GetCustomRoadSprite(tram_rti, head_tile, ROTSG_CATENARY_BACK, head ? TCX_NORMAL : TCX_ON_BRIDGE); - seq_front[0] = GetCustomRoadSprite(tram_rti, head_tile, ROTSG_CATENARY_FRONT, head ? TCX_NORMAL : TCX_ON_BRIDGE); - if (seq_back[3] == 0 || seq_front[0] == 0) { - seq_back[3] = SPR_TRAMWAY_BASE + back_offsets[offset]; - seq_front[0] = SPR_TRAMWAY_BASE + front_offsets[offset]; - } else { - seq_back[3] += 23 + offset; - seq_front[0] += 23 + offset; - } + GetBridgeRoadCatenary(tram_rti, head_tile, offset, head, seq_back[3], seq_front[0]); } } From 45838d0105eaa569ed27b62452d21621b61c4bf0 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 9 Feb 2020 20:24:56 +0100 Subject: [PATCH 006/601] Fix #7958: Use NewGRF provided catenary sprites when either front or back is overridden --- src/tunnelbridge_cmd.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 6a803cca79..c5e2f8d9bb 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1121,12 +1121,12 @@ static void GetBridgeRoadCatenary(const RoadTypeInfo *rti, TileIndex head_tile, /* Simplified from DrawRoadTypeCatenary() to remove all the special cases required for regular ground road */ spr_back = GetCustomRoadSprite(rti, head_tile, ROTSG_CATENARY_BACK, head ? TCX_NORMAL : TCX_ON_BRIDGE); spr_front = GetCustomRoadSprite(rti, head_tile, ROTSG_CATENARY_FRONT, head ? TCX_NORMAL : TCX_ON_BRIDGE); - if (spr_back == 0 || spr_front == 0) { + if (spr_back == 0 && spr_front == 0) { spr_back = SPR_TRAMWAY_BASE + back_offsets[offset]; spr_front = SPR_TRAMWAY_BASE + front_offsets[offset]; } else { - spr_back += 23 + offset; - spr_front += 23 + offset; + if (spr_back != 0) spr_back += 23 + offset; + if (spr_front != 0) spr_front += 23 + offset; } } From 8800225bdb7de1f0a44fc7924afc513d54218ccc Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 9 Feb 2020 23:10:12 +0000 Subject: [PATCH 007/601] Fix #7993: Compile warning in kick/ban debug messages --- src/console_cmds.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 30982d8214..4706bfd914 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -529,7 +529,7 @@ DEF_CONSOLE_CMD(ConKick) /* Reason for kicking supplied */ size_t kick_message_length = strlen(argv[2]); if (kick_message_length >= 255) { - IConsolePrintF(CC_ERROR, "ERROR: Maximum kick message length is 254 characters. You entered %d characters.", kick_message_length); + IConsolePrintF(CC_ERROR, "ERROR: Maximum kick message length is 254 characters. You entered " PRINTF_SIZE " characters.", kick_message_length); return false; } else { return ConKickOrBan(argv[1], false, argv[2]); @@ -553,7 +553,7 @@ DEF_CONSOLE_CMD(ConBan) /* Reason for kicking supplied */ size_t kick_message_length = strlen(argv[2]); if (kick_message_length >= 255) { - IConsolePrintF(CC_ERROR, "ERROR: Maximum kick message length is 254 characters. You entered %d characters.", kick_message_length); + IConsolePrintF(CC_ERROR, "ERROR: Maximum kick message length is 254 characters. You entered " PRINTF_SIZE " characters.", kick_message_length); return false; } else { return ConKickOrBan(argv[1], true, argv[2]); From 2b6df2544fd2896e09eac24598721e5259ff791f Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 13 Oct 2019 10:19:38 +0100 Subject: [PATCH 008/601] Codechange: Don't fail configure if SDL2 is not detected --- config.lib | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/config.lib b/config.lib index df3b23fed1..6738561e20 100644 --- a/config.lib +++ b/config.lib @@ -2405,16 +2405,17 @@ detect_sdl() { log 1 "checking SDL... disabled" sdl_config="" + sdl2_config="" return 0 fi - if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then + if [ "$with_sdl" != "1" ] && [ "$with_cocoa" = "2" ]; then log 1 "configure: error: it is impossible to compile both SDL and COCOA" log 1 "configure: error: please deselect one of them and try again" exit 1 fi - if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then + if [ "$with_sdl" != "1" ] && [ "$enable_dedicated" != "0" ]; then log 1 "configure: error: it is impossible to compile a dedicated with SDL" log 1 "configure: error: please deselect one of them and try again" exit 1 @@ -2424,6 +2425,7 @@ detect_sdl() { log 1 "checking SDL... dedicated server, skipping" sdl_config="" + sdl2_config="" return 0 fi @@ -2443,10 +2445,16 @@ detect_sdl() { if [ $with_sdl = "sdl1" ]; then detect_pkg_config "2" "sdl" "sdl_config" "1.2" - elif [ $with_sdl = "sdl2" ] || [ -x `which sdl2-config` ]; then + elif [ $with_sdl = "sdl2" ]; then detect_pkg_config "2" "sdl2" "sdl2_config" "2.0" else - detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2" + sdl2_config="" + if [ -x `which sdl2-config` ]; then + detect_pkg_config "$with_sdl" "sdl2" "sdl2_config" "2.0" + fi + if [ -z "$sdl2_config" ]; then + detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2" + fi fi } From 183c2a35bd6ec194e063267155bcc63e59891525 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 10 Feb 2020 19:45:41 +0100 Subject: [PATCH 009/601] Update: Translations from eints dutch: 2 changes by JanWillem spanish (mexican): 2 changes by Absay --- src/lang/dutch.txt | 2 ++ src/lang/spanish_MX.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 67273ad3ce..b993a76a6c 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2168,6 +2168,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Ongeldig STR_NETWORK_ERROR_SERVER_FULL :{WHITE}De server is vol STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Je bent verbannen van deze server STR_NETWORK_ERROR_KICKED :{WHITE}Je bent van de server geschopt +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Reden: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Valsspelen is niet toegestaan op deze server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Je stuurde te veel commando's naar de server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Het invoeren van het wachtwoord duurde te lang @@ -2227,6 +2228,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ga STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Je gaf {2:CURRENCY_LONG} aan {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De server heeft de sessie gesloten STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} is eruit geschopt. Reden: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Download extra inhoud diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 0d46dd2d5f..11f97a3dfc 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2169,6 +2169,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrase STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor está completo STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Se te ha prohibido el acceso al servidor STR_NETWORK_ERROR_KICKED :{WHITE}Has sido expulsado del servidor +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Razón: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}No se permiten trucos en este servidor STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Estabas enviando demasiados comandos al servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Tardaste demasiado en introducir la contraseña @@ -2228,6 +2229,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} le STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {2:CURRENCY_LONG} cedidos a la empresa {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha cerrado la sesión STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Se está reiniciando el servidor...{}Espera por favor... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} ha sido expulsado. Razón: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Descarga de contenido From 2196cd3cf87f2fa164ad746b87e2686e2b207158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charl=C3=A8ne?= Date: Tue, 11 Feb 2020 12:45:36 +0100 Subject: [PATCH 010/601] Fix: OpenBSD endianness detection --- src/core/endian_type.hpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index b674928ee6..1b927ef45a 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -33,6 +33,13 @@ # else # define TTD_ENDIAN TTD_BIG_ENDIAN # endif +#elif defined(__OpenBSD__) +# include +# if BYTE_ORDER == LITTLE_ENDIAN +# define TTD_ENDIAN TTD_LITTLE_ENDIAN +# else +# define TTD_ENDIAN TTD_BIG_ENDIAN +# endif #elif !defined(TESTING) # include # if __BYTE_ORDER == __LITTLE_ENDIAN From acb3d10832c92c9f93c3a4d50b00774274bac8c7 Mon Sep 17 00:00:00 2001 From: Quipyowert2 <38995150+Quipyowert2@users.noreply.github.com> Date: Wed, 12 Feb 2020 21:04:53 -0800 Subject: [PATCH 011/601] Codechange: Format unsigned integers with %u instead of %i or %d. --- src/fios.cpp | 2 +- src/newgrf_profiling.cpp | 2 +- src/pathfinder/npf/queue.cpp | 10 +++++----- src/strgen/strgen.cpp | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/fios.cpp b/src/fios.cpp index 24487174b8..61f08d93a9 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -697,7 +697,7 @@ public: if (f == nullptr) return false; ScenarioIdentifier id; - int fret = fscanf(f, "%i", &id.scenid); + int fret = fscanf(f, "%u", &id.scenid); FioFCloseFile(f); if (fret != 1) return false; strecpy(id.filename, filename, lastof(id.filename)); diff --git a/src/newgrf_profiling.cpp b/src/newgrf_profiling.cpp index e9a0dd92d2..17f32384d7 100644 --- a/src/newgrf_profiling.cpp +++ b/src/newgrf_profiling.cpp @@ -109,7 +109,7 @@ uint32 NewGRFProfiler::Finish() fputs("Tick,Sprite,Feature,Item,CallbackID,Microseconds,Depth,Result\n", f); for (const Call &c : this->calls) { - fprintf(f, "%u,%u,0x%X,%d,0x%X,%u,%u,%u\n", c.tick, c.root_sprite, c.feat, c.item, (uint)c.cb, c.time, c.subs, c.result); + fprintf(f, "%u,%u,0x%X,%u,0x%X,%u,%u,%u\n", c.tick, c.root_sprite, c.feat, c.item, (uint)c.cb, c.time, c.subs, c.result); total_microseconds += c.time; } diff --git a/src/pathfinder/npf/queue.cpp b/src/pathfinder/npf/queue.cpp index 64ea3bfcae..960cda8e5c 100644 --- a/src/pathfinder/npf/queue.cpp +++ b/src/pathfinder/npf/queue.cpp @@ -305,16 +305,16 @@ void Hash::PrintStatistics() const } printf( "---\n" - "Hash size: %d\n" - "Nodes used: %d\n" - "Non empty buckets: %d\n" - "Max collision: %d\n", + "Hash size: %u\n" + "Nodes used: %u\n" + "Non empty buckets: %u\n" + "Max collision: %u\n", this->num_buckets, this->size, used_buckets, max_collision ); printf("{ "); for (i = 0; i <= max_collision; i++) { if (usage[i] > 0) { - printf("%d:%d ", i, usage[i]); + printf("%u:%u ", i, usage[i]); #if 0 if (i > 0) { uint j; diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index c59be0021d..87bac5ab63 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -310,7 +310,7 @@ struct HeaderFileWriter : HeaderWriter, FileWriter { fprintf(this->fh, "\n" "static const uint LANGUAGE_PACK_VERSION = 0x%X;\n" - "static const uint LANGUAGE_MAX_PLURAL = %d;\n" + "static const uint LANGUAGE_MAX_PLURAL = %u;\n" "static const uint LANGUAGE_MAX_PLURAL_FORMS = %d;\n\n", (uint)data.Version(), (uint)lengthof(_plural_forms), max_plural_forms ); From 05b50aa437cd8049f6cc822264cfa74851957710 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 14 Feb 2020 19:45:39 +0100 Subject: [PATCH 012/601] Update: Translations from eints afrikaans: 179 changes by Maccie123 chinese (traditional): 4 changes by firetimer chinese (simplified): 100 changes by firetimer --- src/lang/afrikaans.txt | 189 +++++++++++++++++++++++++++++-- src/lang/simplified_chinese.txt | 115 ++++++++++++++++--- src/lang/traditional_chinese.txt | 4 + 3 files changed, 283 insertions(+), 25 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 2d7202a86e..bcf3e0efe6 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -188,6 +188,8 @@ STR_COLOUR_ORANGE :Oranje STR_COLOUR_BROWN :Bruin STR_COLOUR_GREY :Grys STR_COLOUR_WHITE :Wit +STR_COLOUR_RANDOM :Lukraak +STR_COLOUR_DEFAULT :Default # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mpu @@ -234,6 +236,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Kies kri STR_BUTTON_SORT_BY :{BLACK}Sorteer volgens STR_BUTTON_LOCATION :{BLACK}Ligging STR_BUTTON_RENAME :{BLACK}Hernoem +STR_BUTTON_CATCHMENT :{BLACK}Dekking +STR_TOOLTIP_CATCHMENT :{BLACK}Wissel dekking van die vertoonarea STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Maak venster toe STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Venster titel - sleep om venster te beweeg @@ -262,6 +266,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Deur hie STR_BUTTON_DEFAULT :{BLACK}Gewone STR_BUTTON_CANCEL :{BLACK}Kanselleer STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Waarskuwing: bedieneradministrateurs kan moontlik die teks wat hier ingevoer is, lees. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -335,6 +340,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Vergroot STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Verklein die skerm STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bou spoorweg spoor STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bou paaie +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Bou trempaaie STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bou skip hawe STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bou lughawens STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Maak die landargitektuur nutsbalk oop om, land te verhoog/verlaag, boome beplant, ens. @@ -355,6 +361,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landskap STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Dorp generasie STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Nywerheid generasie STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Pad konstruksie +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tremweg konstruksie STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant bome. Shift skakel gebou/wys koste beraaming STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plaas teken STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plaas voorwerp. Shift skakel tussen bou/aanduiding koste beraming @@ -463,6 +470,7 @@ STR_TOOLBAR_SOUND_MUSIC :Klank/musiek ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laaste boodskap/nuus verslag STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Boodskapgeskiedenis +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vee alle boodskappe uit ############ range ends here ############ range for about menu starts @@ -471,6 +479,7 @@ 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_SHOW_FRAMERATE :Wys raamkoers STR_ABOUT_MENU_ABOUT_OPENTTD :Oor 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :"Sprite" rigter STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :skakel beperkte bokse @@ -643,6 +652,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Geen musiek beskikbaar STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Liedjie STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel @@ -663,11 +673,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Skakel m STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vertoon musiek snit keuse venster # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Musiek Program - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Liedjie Indeks STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Maak skoon +STR_PLAYLIST_CHANGE_SET :{BLACK}Verander stel STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Maak huidige musiek keuse skoon (slegs Bestelling1 of Bestelling2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Verander musiekkeuse na 'n ander geïnstalleerde stel STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op 'n liedjie om by huidige musieklys by te sit (slegs Bestelling1 of Bestelling2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op musiek lied om te verwyder van huidige program (Slegs Gewoonte1 of Gewoonte2) @@ -803,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Bestuurder) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} borg konstruksie van nuwe dorp {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}'n Nuwe dorp genaamd {TOWN} is gebou! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}'n Nuwe {STRING} word naby {TOWN} gebou! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nuwe {STRING} word naby {TOWN} beplant! @@ -851,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}Nuwe {STRING} nou beskikbaar! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Maak die groepvenster oop en fokus op die voertuiggroep 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 @@ -871,9 +886,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Toonvenster {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopie na toonvenster +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Verander toonvenster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Dupliseer die ligging van die hooftoonvenster na die toonvenster -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Plak vanaf toonvenster +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Verander hoofaansig STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Plak die lokasie van die gesigspunt na die hoofskerm # Game options window @@ -916,6 +931,11 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Suid Afrikaanse STR_GAME_OPTIONS_CURRENCY_CUSTOM :Pasmaak... STR_GAME_OPTIONS_CURRENCY_GEL :Georgiaanse Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iraanse Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nuwe Russiese Ruble (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexikaanse peso (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Nuwe Taiwan dollar (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Pad voertuie @@ -978,7 +998,11 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbel groote STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad grootte +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Skrifgrootte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad grootte STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafikastel STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kies die basis-grafikastel stel om te gebruik @@ -1162,6 +1186,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Laat landargite STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Laat Landargitektuur onder geboue en spore sonder om dit te verwyder STR_CONFIG_SETTING_CATCHMENT :Laat meer realisties groote opvangsgebied toe: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Laat verskillende groote opvang gebiede toe vir verskillende tipes stasies en lughawens +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Maatskappy stasies kan industriëe bedien met aangehegte neutrale stasies: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Indien gekies, kan industrieë met aangeslote stasies (soos Olie Rigs) ook bedien word deur maatskappybesitte stasies wat in die omgewing gebou word. As dit af is, mag hierdie industrieë slegs deur hul aangeslote stasies bedien word. Enige nabygeleë maatskappystasies sal dit nie kan bedien nie, en die aangehegte stasie sal ook niks anders as die industrie bedien nie STR_CONFIG_SETTING_EXTRADYNAMITE :Laat verwydering van meer stad-besite paaie, bruge, ens toe: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Maak dit makliker om dorps eiendom en infrastruktuur te verwyder STR_CONFIG_SETTING_TRAIN_LENGTH :Maximum lengte van treine: {STRING} @@ -1178,8 +1204,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Die steilte van STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Krans helling vir pad vervoer: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Die steilte van die helling vir 'n pad voertuig. Hoër waardes maak dit moeliker om teen die helling uit te klim -STR_CONFIG_SETTING_FORBID_90_DEG :Verbied triene en skepe om 90 graad draaie te maak: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 grade draaie kom voor wanneer 'n horisontale spoor direk gevolg deur 'n vertikale spoor op die aangrensende teël, dus waardeur die trein 'n 90 grade draai maak deur die teël rand in plaas van die gewone 45 grade vir 'n ander spoor kombinasies. Dit geld ook vir die draai radius van skepe +STR_CONFIG_SETTING_FORBID_90_DEG :Verbied treine om 90° draaie te maak: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 grade draaie kom voor wanneer 'n horisontale spoor direk gevolg deur 'n vertikale spoor op die aangrensende teël, dus waardeur die trein 'n 90 grade draai maak deur die teël rand in plaas van die gewone 45 grade vir 'n ander spoor kombinasies. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Laat toe dat stasies lanks mekaar gebind kan word: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Laat die toevoeging van dele van 'n stasie sonder om direk aan die bestaande dele te raak toe. Ctrl+klik om die nuwe dele te plaas STR_CONFIG_SETTING_INFLATION :Inflasie: {STRING} @@ -1235,7 +1261,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Vlegtuig spoed STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel die relatiewe spoed van vliegtuie, met vergelyking van ander voertuig tipes, om so die bedrag van die inkomste van vliegtuie te verminder. STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Aantal vliegtuig botsings: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Stel die kans van 'n vliegtuig ongeluk om te gebeur +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Stel die kans van 'n vliegtuig ongeluk om te gebeur.{}* Groot vliegtuie het altyd risiko om neer te stort wanneer hulle op klein lughawens beland STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Verminderd STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normaal @@ -1247,6 +1273,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Verander STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktuur onderhoud: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :As dit geaktiveer is sal dit veroorsaak dat infrastruktuur onderhoudskoste verhoog. Die koste groei oor-proporsioneel met die netwerk grootte, wat groter maatskappye meer as kleiner maatskappye benadeel +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Maatskappy beginkleur: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Kies beginkleur vir die maatskappy STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lughawes verval nooit nie: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wanner hierdie stelling geaktiveer is, maak dit dat alle lughawens ewig beskikbaar bly, na hul bekendstelling datum @@ -1281,6 +1309,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Toon stadsbevol STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Vertoon die bevolking van 'n stad in die naametiket op die kaart STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Dikte van lyn in grafieke: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Wydte van kaartlyne. A dun lyn is meer akkuraat om te lees, maar 'n dikker lyn is makliker om te sien en te onderskei van ander lyne. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Toon die NewGRF se naam in die bou van voertuie skerm: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Voeg 'n lyn by die venster vir die bou van voertuie wat wys uit watter NewGRF die geselekteerde voertuig kom. STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Die landskap beheer die basies spelopsies vir verskillende vrag en hoe dorpe groei. NewGRF en spelskrips gee meer opsies. @@ -1292,7 +1322,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Tipe terrein: { STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Slegs TerraGenesis) Bergagtigheid van die land STR_CONFIG_SETTING_INDUSTRY_DENSITY :Nywerheidsdigtheid: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Kies hoeveel nywerhede geskep gaan word en hoeveel gedurende die spel te handhaaf -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimum afstand vanaf rand vir olieraffinaderye: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimum afstand vanaf rand vir olie industrieë: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderye word net naby die kaart kant gebou, dit is, teen die kus vir eiland kaarte STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeu lyn hoogte: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Beheer die hoogte van die sneeuvlak. Die sneeuvlak bepaal ook hoeveel nywerhede geskep word en hoe vinnig dorpe groei. @@ -1331,6 +1361,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Kleur van die t STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donkergroen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet +STR_CONFIG_SETTING_SCROLLMODE_RMB :Skuif kaart met RMB STR_CONFIG_SETTING_SMOOTH_SCROLLING :Maak kykpoort beweegings glad: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Beheer hoe die hoofvertoonvenster skuif na 'n spesifieke posisie - as dit geaktiveer is, dan skuif die venster glad na die posisie toe, andersins skuif die venster direk na die posisie toe. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Toon 'n meting wanneer jy verskeie bou-gereedskap gebruik: {STRING} @@ -1362,6 +1393,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl-klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Af +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Maak venster toe met regter-klik: {STRING} STR_CONFIG_SETTING_AUTOSAVE :Outostoor: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tyd tussen outomatiese spelstore @@ -1449,6 +1481,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Laat AI in mult STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Laat AI Rekenaaar spelers by 'n multi-speler spel toe STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes voor die skripte gestaak word: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Die maksimum hoeveelheid berekeningstappe wat 'n skrip kan vat in een beurt +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maksimum geheueverbruik per skript: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Hoeveel geheue 'n enkele skrif kan verbruik voordat dit met geweld beëindig word. Dit kan moontlik vergroot word vir groot kaarte. STR_CONFIG_SETTING_SERVINT_ISPERCENT :Diens pouse is in persente: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kies of voertuie gediens word gebasseer op tydsduur vanaf vorige diens of as die voertuig se betroubaarheid met 'n sekere persentasie geval het van die maksimum @@ -1507,10 +1541,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Vol STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Gekleurde nuus verskyn in: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :In watter jaar begin koerante in kleur vertoon. Voor dit is hulle swart en wit. STR_CONFIG_SETTING_STARTING_YEAR :Jaar om te begin: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Telling jaareinde: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Die jaar wat die speletjie eindig vir telling doeleindes. Aan die einde van hierdie jaar word die maatskappy se telling aangeteken en die skerm met 'n hoogste telling word vertoon, maar die spelers kan daarna speel.{} As dit voor die beginjaar is, word die skerm met 'n hoogste telling nooit vertoon nie. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktiveer geleike ekonomie (meer, kleiner veranderings): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :As dit geaktiveer is sal nywerheidsvervaarding meer gereeld verander met kleiner veranderinge elke keer. Hierdie stelling het gewoonlik geen effek met nywerhede van NewGRFs nie. STR_CONFIG_SETTING_ALLOW_SHARES :Laat die koop van aandeele van ander maatskappye toe: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :As dit geaktiveer is, kan aandele in maatskappye gekoop en verkoop word. Aandele is net in maatskappye beskikbaar na 'n sekere aantal jaar. +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum maatskappyouderdom om aandele te verhandel: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Stel die minimum ouderdom van 'n maatskappy in vir ander om aandele by hulle te kan koop en verkoop. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Persentasie van wins om te betaal in voerder systeem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Persentasie wins wat gedeel word met die tussengangerstasies in oordragstelsels vir beter beheer oor die wins STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Wanneer die muis gesleep word, plaas 'n sein elke: {STRING} @@ -1551,6 +1591,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Aktiveering van STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verbode STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Toegelaat STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Toegelaat, eie dorp uitleg +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Stad-vragproduksie: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hoeveel vrag word deur huise in dorpe geproduseer, relatief tot die algemene bevolking van die stad.{} Kwadratiese groei: 'n Dorp wat twee keer so groot is, genereer vier keer soveel passasiers.{} Lineêre groei: 'n Stad twee keer so groot, genereer twee keer soveel passasiers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kwadraties (oorspronklik) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineêre STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Binne speletjie plasing van bome: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheer die ewekansige voorkoms van bome tydens die spel. Dit kan 'n invloed op nywerhede hê wat staatmaak op die groei van bome, byvoorbeeld hout meulens @@ -1791,6 +1835,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Verander STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiveer modifisering van produksie waardes: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Kleur Skema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurskemas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Wys trein kleur skemas @@ -2050,6 +2095,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Loskoppe STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaffer is beskerm. Voer wagwoord in STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Kliëntelys # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys @@ -2098,7 +2144,7 @@ STR_NETWORK_CHAT_ALL :[Almal] {STRING STR_NETWORK_CHAT_OSKTITLE :{BLACK}Tik boodskap vir klets # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Geen netwerk ontwerp gevind of voldoen sonder ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Geen netwerk toestelle gevind STR_NETWORK_ERROR_NOSERVER :{WHITE}Kan nie enige netwerk speletjies vind nie STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Die verskaffer het nie die versoek geantwoord nie STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kan nie konnekteer te danke aan newgrf mispas nie @@ -2114,6 +2160,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Verkeerd STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Die verskaffer is vol STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Jy is verban op hierdie server STR_NETWORK_ERROR_KICKED :{WHITE}Jy is van die spel geskop +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Rede: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Kullery word nie toegelaat op hierdie bediener STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Jy het te veel opdragte na die bediener gestuur STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE} Jy het te lank gevat om die wagwoord in te sleutel @@ -2173,6 +2220,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} he STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Jy het {1:STRING} {2:CURRENCY_LONG} gegee STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Die verskaffer het die sessie toegemaak STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Die verskaffer is besig om te weerbegin...{}Wag asb... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} is geskop. Rede: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Laai Inhoud af @@ -2265,6 +2313,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Vragvers STR_LINKGRAPH_LEGEND_ALL :{BLACK}Almal STR_LINKGRAPH_LEGEND_NONE :{BLACK}Geen STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Kies maatskappye om te ws +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ongebruik @@ -2349,9 +2398,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinas STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Pad aanwyser (robot){}Laat meer as een trein per blok toe solank die trein 'n bestemming veilig kan bereik. Gewone pad aanwysers word geïgnoreer as 'n trein in die teenoorgestelde rigting ry STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Een-rigting pad aanwyser (robot){}Laat meer as een trein per blok toe solank die trein 'n bestemming veilig kan bereik. 'n Een-rigting pad aanwysers laat verkeer slegs in een rigting toe STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Verander Sinjaal{}Klik op 'n bestaande sinjaal om dit na die verkose tipe te verander, Ctrl+klik om na die bestaande tipe te verander. Shift+klik vir kwotasie -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Sein sleep digtheid -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Verminder sein sleep digtheid -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Verhoog sein sleep digtheid +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Sein sleep afstand +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Verminder sein sleep afstand +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Verhoog sein sleep afstand # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies Spoor Brug @@ -2389,7 +2438,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bou pad STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bou tonnel. Shift kies tussen bou/kwotasie STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Skakel bou/verwydering van pad konstruksie STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Skakel bou/verwyder vir tremweg konstruksie +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Skakel om / opgradeer die tipe pad. Shift wissel tussen gebou / toon kosteberaming +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Die tipe tram omskakel / opgradeer. Shift wissel tussen gebou/toon kosteberaming +STR_ROAD_NAME_ROAD :Pad +STR_ROAD_NAME_TRAM :Tremweg # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Pad Depot Oriëntering @@ -2573,8 +2626,12 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lughawe STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NuweGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Vrag aangeneem: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Spoor tipe: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Padtipe: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tremtipe: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Spoorlyn spoed limiet: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Pad spoedgrens: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Trem spoedgrens: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rotse @@ -2674,9 +2731,44 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Die OpenTTD span # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Raamkoers +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulasietempo: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafiekraamkoers: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal videorame per sekonde gelewer. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Huidige spel spoed faktor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe vinnig die spel tans werk, in vergelyking met die verwagte snelheid teen normale simulasietempo. +STR_FRAMERATE_CURRENT :{WHITE}Huidig +STR_FRAMERATE_AVERAGE :{WHITE}Gemiddeld +STR_FRAMERATE_MEMORYUSE :{WHITE}Geheue +STR_FRAMERATE_DATA_POINTS :{BLACK}Data gebaseer op metings van {COMMA} +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} rame +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} rame +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} rame +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{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}Speletjie lus totaal: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Vraghantering +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Skakel grafiekvertraging +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Wêreld toonvensters: +STR_FRAMERATE_VIDEO :{BLACK}Video-afvoer: +STR_FRAMERATE_SOUND :{BLACK}Klankvermenging: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI totaal: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Speletjieskrif +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Speletjie lus +STR_FRAMETIME_CAPTION_GL_ECONOMY :Vraghantering +STR_FRAMETIME_CAPTION_VIDEO :Video-uitset +STR_FRAMETIME_CAPTION_SOUND :Klankvermenging +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI skrip totaal +STR_FRAMETIME_CAPTION_GAMESCRIPT :Speletjie skrip +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2702,6 +2794,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spel Bes STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen inligting beskikbaar STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Oorskryf lêer +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Is u seker dat u die bestaande lêer wil oorskryf? STR_SAVELOAD_OSKTITLE :{BLACK}Tik 'n naam in vir die stoor-speeletjie @@ -2819,7 +2914,10 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Weergawe STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. versoenbare weergawe: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Default (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Default (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Geen STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Geen informasie beskikbaar STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Gelyke lêer nie gevind nie @@ -2964,6 +3062,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Tik 'n n STR_TOWN_DIRECTORY_CAPTION :{WHITE}Dorpe STR_TOWN_DIRECTORY_NONE :{ORANGE}- Geen - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Stad){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Dorpname - klik op 'n naam om skerm daarna te skuif. Ctrl+klik om 'n nuwe venster vir die dorp oop te maak STR_TOWN_POPULATION :{BLACK}Wêreldbevolking: {COMMA} @@ -2971,6 +3070,7 @@ STR_TOWN_POPULATION :{BLACK}Wêreldb STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (City) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Bevolking: {ORANGE}{COMMA}{BLACK} Huise: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} laas maand: {ORANGE}{COMMA}{BLACK} maks: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Vrag nodig om dorp te laat groei: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vereis STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} vereis in winter @@ -2995,6 +3095,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Hernoem Dorp # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} plaaslike raad +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zone +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Toon sone binne die plaaslike owerheidsgrense STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Vervoer maatskappy graderings: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Aksies beskikbaar: @@ -3023,6 +3125,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop di # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Doelwitte STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale Doelwitte +STR_GOALS_SPECTATOR :Globale doelwitte STR_GOALS_GLOBAL_TITLE :{BLACK}Globale doelwitte: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Geen - @@ -3071,6 +3174,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Storieboek STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globale Storieboek +STR_STORY_BOOK_SPECTATOR :Globale Storieboek STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Bladsy {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Kies 'n bladsy om na toe te gaan in hierdie lys @@ -3250,6 +3354,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Spoorstukke: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Seine STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Padstukke: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Trem stukke: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Waterteëls: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanale STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasies: @@ -3260,8 +3365,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Nywerhede STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Geen - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% vervoer){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} en {NUM} meer... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nywerheidsname - klik op 'n naam om skerm na nywerheid te skuif. Ctrl+klik maak 'n nuwe venster vir die nywerheid oop +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Aanvaarde vrag: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Vervaardigde vrag: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Alle vragtipes +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Geen # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3271,7 +3385,13 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Skuif sk STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksie vlak: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Die nywerheid het aangekondig dat dit binnekort gaan sluit! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Benodig: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Benodig: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wagtend{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander produksie (veelvoude van 8, tot en met 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander produksie vlakke (persentasie, tot 800%) @@ -3321,6 +3441,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ongegroepeerde STR_GROUP_DEFAULT_SHIPS :Ongegroepeerde skepe STR_GROUP_DEFAULT_AIRCRAFTS :Ongegroepeerde vliegtuig +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepe - klik op 'n groep om alle voertuie in hierdie groep te lys. Sleep en los om te rangskik volgens hiërargie. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om groep te skep @@ -3336,6 +3457,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Verwyder alle v STR_GROUP_RENAME_CAPTION :{BLACK}Hernoem 'n groep +STR_GROUP_PROFIT_THIS_YEAR :Wins hierdie jaar: +STR_GROUP_PROFIT_LAST_YEAR :Wins verlede jaar: +STR_GROUP_OCCUPANCY :Huidige verbruik: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nuwe treine @@ -3344,9 +3469,11 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nuwe monospoor STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nuwe Maglev Voertuie STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nuwe Pad Voertuie +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nuwe Trem Voertuie ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Spoorweg Voertuie +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nuwe Padvoertuie STR_BUY_VEHICLE_SHIP_CAPTION :Nuwe Skepe STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nuwe Vliegtuig ############ range for vehicle availability ends @@ -3362,15 +3489,19 @@ STR_PURCHASE_INFO_REFITTABLE :(herboubaar) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Ontwerp: {GOLD}{NUM}{BLACK} Leeftyd: {GOLD}{COMMA} jaar STR_PURCHASE_INFO_RELIABILITY :{BLACK}Maks. betroubaarheid: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Kos: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Koste: {GOLD}{CURRENCY_LONG}{BLACK} (Herbou Koste: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Massa: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Kos: {GOLD}{CURRENCY_LONG}{BLACK} Spoed: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Koste: {GOLD}{CURRENCY_LONG}{BLACK} (Herbou Koste: {GOLD}{CURRENCY_LONG}{BLACK}) Spoed: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasiteit: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Self Krag Waens: {GOLD}+{POWER}{BLACK} Gewig: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Herboubaar na: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alle vrag tipes +STR_PURCHASE_INFO_NONE :Geen STR_PURCHASE_INFO_ALL_BUT :Alles behalwe {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks. Traktiewe Poging: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Afstand: {GOLD}{COMMA} teëls +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Vliegtuig tipe: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Trein kieslys - klik op voertuig vir inligting. CTRL+kliek vir wegsteek van die voertuig tipe STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Pad voertuig kieslys - klik op voertuig vir inligting. CTRL+kliek vir wegsteek van die voertuig tipe @@ -3382,12 +3513,19 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Koop Voe STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Bou skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Koop vliegtuig +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Koop en Herbou Voertuig +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Koop en herbou voertuig +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Koop en herbou skip +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Koop en Herbou Vliegtuig STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose lokomotief/wa. Shift+klik vir kwotasie STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose voertuig. Shift+klik vir kwotasie STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose skip. Shift+klik vir kwotasie STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose vliegtuig. Shift+klik vir kwotasie +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Koop en monteer die gemerkte voertuig. Shift+Click toon geskatte koste sonder aankoopkoste +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK} Koop en herbou die gemerkte skip. Shift+Click toon geskatte koste sonder aankoopkoste +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Koop en monteer die gemerkte vliegtuig. Shift+Click toon geskatte koste sonder aankoopkoste STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoem STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoem @@ -3499,10 +3637,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Boodskap STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Ons het sopas 'n nuwe {STRING} ontwerp, sal jy belangstel om hierdie voertuig eksklusief vir 'n jaar te gebruik. Hierdie word gedoen om te kyk hoe die voertuig doen voordat hy wereld wyd in produksie gesit word? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :spoorweg lokomotief +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :geëlektrifiseerde spoorweglokomotief STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monospoor lokomotief STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :maglev lokomotief STR_ENGINE_PREVIEW_ROAD_VEHICLE :padvoertuig +STR_ENGINE_PREVIEW_TRAM_VEHICLE :tremweg voertuie STR_ENGINE_PREVIEW_AIRCRAFT :vliegtuig STR_ENGINE_PREVIEW_SHIP :skip @@ -3510,6 +3650,10 @@ STR_ENGINE_PREVIEW_SHIP :skip STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Koste: {CURRENCY_LONG} Massa: {WEIGHT_SHORT}{}Spoed: {VELOCITY} Krag: {POWER}{}Loopkoste: {CURRENCY_LONG}/jr{}Kapasitiet: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Koste: {CURRENCY_LONG} Gewig: {WEIGHT_SHORT}{}Spoed: {VELOCITY} Krag: {POWER} Maks. Treg Krag: {6:FORCE}{}Lopende Koste: {4:CURRENCY_LONG}/jaar{}Kapasitiet: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Koste: {CURRENCY_LONG} Maks. Spoed: {VELOCITY}{}Kapasiteit: {CARGO_LONG}{}Lopende Koste: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Koste: {CURRENCY_LONG} Maks. Spoed: {VELOCITY}{}Vliegtuig Tipe: {STRING}{}Kapasiteit: {CARGO_LONG}, {CARGO_LONG}{}Lopende Koste: {CURRENCY_LONG}/jr +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Koste: {CURRENCY_LONG} Maks. Spoed: {VELOCITY}{}Vliegtuig tipe: {STRING}{}Kapasiteit: {CARGO_LONG}{}Lopende koste: {CURRENCY_LONG}/jr +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Koste: {CURRENCY_LONG} Maks. Spoed: {VELOCITY}{}Vliegtuig tipe: {STRING} Afstand: {COMMA} tiles{}Kapasiteit: {CARGO_LONG}, {CARGO_LONG}{}Lopende Koste: {CURRENCY_LONG}/jr +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Koste: {CURRENCY_LONG} Maks. Spoed: {VELOCITY}{}Vliegtuig tipe: {STRING} Afstand: {COMMA} teëls{}Kapasiteit: {CARGO_LONG}{}Lopende Koste: {CURRENCY_LONG}/jr # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Vervang {STRING} - {STRING} @@ -3539,14 +3683,19 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Druk om STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Skakel tussen enjin en wa vervang vensters STR_REPLACE_ENGINES :Enjin STR_REPLACE_WAGONS :Waens +STR_REPLACE_ALL_RAILTYPE :Alle spoorvoertuie +STR_REPLACE_ALL_ROADTYPE :Alle padvoertuie STR_REPLACE_HELP_RAILTYPE :{BLACK}Kies die soort spoor waarvoor lokomotiewe vervang moet word +STR_REPLACE_HELP_ROADTYPE :{BLACK}Kies die padtipe waarvoor u enjins wil vervang STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Toon aan watter enjin die linker gekose enjin mee vervang moet word , indien enige STR_REPLACE_RAIL_VEHICLES :Treine STR_REPLACE_ELRAIL_VEHICLES :Elektriese treine STR_REPLACE_MONORAIL_VEHICLES :Monospoor voertuie STR_REPLACE_MAGLEV_VEHICLES :Maglev Voertuie +STR_REPLACE_ROAD_VEHICLES :Padvoertuie +STR_REPLACE_TRAM_VEHICLES :Tremweg voertuie STR_REPLACE_REMOVE_WAGON :{BLACK}Wa verwydering: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Maak autovervanging die lengte van 'n trein dieselfde hou deur verwydering waens (deur voor te begin), indien die enjin vervanging die trein langer sal maak @@ -3632,6 +3781,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} ja{P ar STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ja{P ar re} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Maks. spoed: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. spoed: {LTBLUE}{VELOCITY} {BLACK}Vliegtuig tipe: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Maks. spoed: {LTBLUE}{VELOCITY} {BLACK}Vliegtuig tipe: {LTBLUE}{STRING} {BLACK}Afstand: {LTBLUE}{COMMA}teëls STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Gewig: {LTBLUE}{WEIGHT_SHORT} {BLACK}Krag: {LTBLUE}{POWER}{BLACK} Maks. spoed: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Massa: {LTBLUE}{WEIGHT_SHORT} {BLACK}Krag: {LTBLUE}{POWER}{BLACK} Maks. spoed: {LTBLUE}{VELOCITY} {BLACK}Maks. T.E.: {LTBLUE}{FORCE} @@ -3765,6 +3916,7 @@ STR_ORDER_CONDITIONAL_AGE :Ouderdom (jare) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Benodig diens STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Altyd STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Oorblywende leeftyd (jare) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimum betroubaarheid STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hoe om die voertuig data te vergelyk met die gegeewe waarde STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is gelyk aan @@ -3995,6 +4147,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Kies bel STR_AI_LIST_CANCEL :{BLACK}Kanseleer STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Moenie skrif verander nie +STR_SCREENSHOT_CAPTION :{WHITE}Neem 'n skermkiekie +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normale skermkiekie +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Skermkiekie volledig ingezoom +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Verstek zoomkiekie +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Volledige kiekie van die kaart +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Hoogtekaart-skermkiekie +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap-skermkiekie # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters @@ -4268,6 +4427,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen ges STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Moet eers spoor verwyder STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Pad is een rigting of geblok STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Vlak kruisings word nie toegelaat vir die spoor tipe nie +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Vlakoorgange nie toegelaat vir hierdie padtipe nie STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan nie seinligte hier bou nie... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan nie spore hier bou nie... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan nie spore hier verwyder nie... @@ -4287,6 +4447,12 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan nie STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan nie tremweg van hier af verwyder nie... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... daar is geen pad nie STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... daar is geen tremweg nie +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}kan nie padtipe hier verander nie... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kan nie tremtipe hier omskakel nie ... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Geen geskikte pad +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Geen geskikte tremweg nie +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... onverenigbare pad +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... onversoenbare tremweg # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kan nie kanaale hier bou nie... @@ -4339,6 +4505,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Kan nie STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Kan nie groep uitvee nie... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Kan nie groep hernoem nie... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Kan nie die huidige groep instel nie +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... lusse in die groephiërargie word nie toegelaat nie STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan nie alle voertuie van groep verwyder nie... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan nie die voertuig tot hierdie groep voeg nie... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan nie gedeelde voertuie by groep voeg nie... @@ -4449,6 +4616,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Oorspronklike T STR_BASESOUNDS_WIN_DESCRIPTION :Oorspronklike Transport Tycoon Deluxe Windows uitgawe klanke. STR_BASESOUNDS_NONE_DESCRIPTION :'n Klank stel sonder enige klanke. STR_BASEMUSIC_WIN_DESCRIPTION :Oorspronklike Transport Tycoon Deluxe Windows uitgawe musiek. +STR_BASEMUSIC_DOS_DESCRIPTION :Oorspronklike Transport Tycoon Deluxe DOS-uitgawe musiek. +STR_BASEMUSIC_TTO_DESCRIPTION :Oorspronklike Transport Tycoon (Original/World Editor) musiek van die DOS-uitgawe. STR_BASEMUSIC_NONE_DESCRIPTION :'n Musiek stel sonder enige musiek. ##id 0x2000 diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 61a251897b..2fece1d86e 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -672,6 +672,7 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}开启/ STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}打开音乐选单窗口 # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}音乐列表 - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}全部音轨列表 STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}当前选用'{STRING}'列表 @@ -863,6 +864,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}打开该运输工具所属的组 STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} 将不再接受 {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} 将不再接受 {STRING} 和 {STRING} @@ -883,10 +885,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}视点 {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}复制到视点 +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}将主视角复制到视点 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}将额外视点移动到屏幕中心的位置 -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}移动到视点 -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}将屏幕中心移动到额外视点的位置 +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}移动主视角到该视点 +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}将主视角移动到额外视点的位置 # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}游戏选项 @@ -932,6 +934,7 @@ STR_GAME_OPTIONS_CURRENCY_RUB :新俄罗斯卢 STR_GAME_OPTIONS_CURRENCY_MXN :墨西哥比索 (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :新台币 (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :中国人民币 (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :港币 (HKD) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}汽车行驶 @@ -994,8 +997,10 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :正常大小 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :两倍大小 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :四倍大小 +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}字体大小 STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}选择此字体大小 +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :正常 STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :两倍大小 STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :四倍大小 @@ -1181,6 +1186,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :允许在建筑 STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :允许在建筑和轨道下方改变地形而不需要拆除他们 STR_CONFIG_SETTING_CATCHMENT :允许更真实的客源范围:{STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :启用时不同类型的车站和机场有不同的客源范围 +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :公司私有车站可以服务自带车站的工业设施:{STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :启用后,自带车站的工业设施(如钻井平台)也可以被临近的公司私有车站服务。禁用后,这些工业设施只能被它们自带的车站服务。任何临近的公司车站将不能服务它们,工业设施自有车站也不会提供除本工业设施的产品以外的其他产品 STR_CONFIG_SETTING_EXTRADYNAMITE :允许拆除更多的由城镇所有的公路、桥梁、隧道等:{STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :启用时更容易拆除城市自有的设施和建筑 @@ -1198,7 +1204,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :每一格斜坡 STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :斜坡对汽车速度影响率: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :每一格斜坡对汽车速度的影响率,数值越大,汽车越难爬上斜坡 -STR_CONFIG_SETTING_FORBID_90_DEG :禁止列车和轮船 90 度转弯:{STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :禁止列车 90 度转弯:{STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :当水平方向轨道与垂直方向轨道交叉时,没有采用45度的轨道组合连接,而是采用轨道90度直接连接时,列车通过时需要90度转弯,当本设置”打开“时,将禁止火车90度转弯。 STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :允许非毗邻站台合并:{STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :“打开”时允许为已经存在的车站添加不相邻的站台,建造新的部分时需要按住Ctrl键 @@ -1255,8 +1261,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :飞机速度因 STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :设置飞机与其它车辆类型的相对速率,使飞机运输收入减少 STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :空难: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :设置空难发生的概率 -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :不出现 +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :设置随机空难发生的概率。{}* 无论其值如何,大型飞机降落小机场时总有可能坠毁。 +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :不出现* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :较少出现 STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :正常 STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :允许在城镇所属的道路上建通过式车站: {STRING} @@ -1303,6 +1309,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :在城镇名称 STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :在地图城镇名称标签上显示人口数量 STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :图表曲线宽度: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :图表中曲线的宽度,细线清晰易读,粗线容易分辨颜色 +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :在建造运输工具窗口中显示 NewGRF 的名字:{STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :在建造运输工具窗口中添加一行,显示选中运输工具来自的 NewGRF。 STR_CONFIG_SETTING_LANDSCAPE :景观: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :此设置决定基本的游戏场景、有什么货物可供运输,以及城镇发展的所需条件。然而,NewGRF 及游戏脚本可以比此设置更加细致地设置游戏场景 @@ -1314,8 +1322,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :地貌类型: { STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(仅限生成地图时) 多丘陵地形 STR_CONFIG_SETTING_INDUSTRY_DENSITY :工业布局: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :设置地图生成过程中,工业数量及一、二级工业比例。 -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :炼油厂距地图边缘的最大距离:{STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :炼油厂只能在地图边缘建设或者海岛海岸。 +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :石油工业距地图边缘的最大距离:{STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :限制炼油厂和油井到地图边缘或海岛海岸的最大距离。对于大于 256 格的地图,该值将按比例放大。 STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪线高度:{STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :控制在寒带气候中雪线高度.大雪会影响工业和城镇发展需求. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地面粗糙度 (仅限生成地图时):{STRING} @@ -1353,6 +1361,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :设置缩略地 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :绿色 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :深绿色 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :紫色 +STR_CONFIG_SETTING_SCROLLMODE :视点滚动方式:{STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :滚动地图的行为 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :鼠标右键移动视角,鼠标指针不跟随移动 STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :鼠标右键移动地图,鼠标指针不跟随移动 @@ -1539,10 +1548,16 @@ 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} -STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :“打开”时,允许买卖其它公司股份,但必须持有达到一定年限 +STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :“打开”时,允许买卖其它公司股份。被入股公司必须经营一定年限 +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :公司可发售股份的最小已存续年份数:{STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :设置公司可发售股份的最小已存续年份数。 STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :转运系统中支付的利润百分比 {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :设定在转运系统中支付给前一环节的收入百分比, 从而对收入有更多的控制权 STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :当拖动时,放置信号灯每隔:{STRING} @@ -1584,6 +1599,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :禁止 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :允许 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :允许,自定义城镇布局 STR_CONFIG_SETTING_TOWN_CARGOGENMODE :城镇货物生成:{STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :城镇客货产出与人口的关系。{}平方增长:两倍大小的城镇生产四倍的旅客。{}线性增长:两倍大小的城镇生产两倍的旅客。 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :四倍(原版) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :线性 @@ -1745,7 +1761,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... 禁 STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... 禁用基础意义设置 '{STRING}': 未找到 STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... 禁用基础音乐设置 '{STRING}': 未找到 STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}内存溢出 -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}无法编配{BYTES}作为sprite快取。sprite快取的大小已降至{BYTES}。OpenTTD的效能将受到影晌。请尝试停用32bpp图形及/或减少放大倍数,以减低內存要求 +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}无法分配 {BYTES} 的 Sprite 缓存。Sprite 缓存的大小已降至 {BYTES}。OpenTTD 的性能将受到影响。请尝试停用 32bpp 图形及/或减少放大倍数,以降低内存需求 # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1845,7 +1861,7 @@ STR_LIVERY_ELECTRIC :电力机车 STR_LIVERY_MONORAIL :单轨机车 STR_LIVERY_MAGLEV :磁悬浮机车 STR_LIVERY_DMU :DMU 机车 -STR_LIVERY_EMU :EMU 机车 +STR_LIVERY_EMU :电力动车组 STR_LIVERY_PASSENGER_WAGON_STEAM :客运机车(蒸汽) STR_LIVERY_PASSENGER_WAGON_DIESEL :客运机车(内燃机) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :客运机车(电力) @@ -2136,7 +2152,7 @@ STR_NETWORK_CHAT_ALL :[全体] {STRIN STR_NETWORK_CHAT_OSKTITLE :{BLACK}请输入联机聊天内容 # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}没有网络设备或者编译时未使用 ENABLE_NETWORK 参数 +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}未找到网络设备 STR_NETWORK_ERROR_NOSERVER :{WHITE}未找到任何联机游戏 STR_NETWORK_ERROR_NOCONNECTION :{WHITE}服务器没有响应 STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}因为 NewGRF 不匹配而无法连接 @@ -2152,6 +2168,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}密码 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}服务器已经满员 STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}您的IP已被该服务器封禁(ban) STR_NETWORK_ERROR_KICKED :{WHITE}您已被踢出服务器 +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}原因:{STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}此服务器不允许作弊 STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}您向服务器发送操作指令过于频繁 STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}输入密码超时 @@ -2211,6 +2228,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** 您送了 {2:CURRENCY_LONG} 给 {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}服务器关闭了进程 STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}服务器正在重新启动。{}请等待…… +STR_NETWORK_MESSAGE_KICKED :*** {STRING} 被踢出服务器。原因:({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}下载内容 @@ -2617,6 +2635,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}接受货物:{LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}铁轨类型: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}道路类型:{LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}电车类型:{LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}轨道限速: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}道路限速:{LTBLUE}{VELOCITY} @@ -2634,10 +2653,10 @@ STR_LAI_CLEAR_DESCRIPTION_DESERT :沙漠 STR_LAI_RAIL_DESCRIPTION_TRACK :铁路 轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :有通过信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :有入口信号灯的铁路轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :有出口信号灯的铁路 轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :有出口信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :有复合信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :有路径信号灯的铁路轨道 -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :铁路 有单向路径信号灯的轨道 +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :有单向路径信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :有通过信号灯和入口信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :有通过信号灯和出口信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :有通过信号灯和复合信号灯的铁路轨道 @@ -2653,7 +2672,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :有出口信号 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :有复合信号灯和路径信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :有复合信号灯和单向路径信号灯的铁路轨道 STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :有路径信号灯和单向路径信号灯的铁路轨道 -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :铁路 列车车库 +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :铁路列车车库 STR_LAI_ROAD_DESCRIPTION_ROAD :公路 STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :带路灯的公路 @@ -2723,12 +2742,17 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}帧率 STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}模拟速率: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}每秒仿真的游戏时刻数。 STR_FRAMERATE_RATE_BLITTER :{BLACK}帧率:{STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}每秒渲染更新的图像帧。 STR_FRAMERATE_SPEED_FACTOR :{BLACK}当前游戏速度:{DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}当前游戏运行速度,与正常速度之比率 STR_FRAMERATE_CURRENT :{WHITE}当前 +STR_FRAMERATE_AVERAGE :{WHITE}平均 +STR_FRAMERATE_MEMORYUSE :{WHITE}内存 +STR_FRAMERATE_DATA_POINTS :{BLACK}数据基于 {COMMA} 个采样 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} fps STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fps @@ -2737,10 +2761,18 @@ 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}游戏周期总计: +STR_FRAMERATE_GL_ECONOMY :{BLACK} 货物处理: +STR_FRAMERATE_GL_TRAINS :{BLACK} 列车耗时: STR_FRAMERATE_GL_ROADVEHS :{BLACK} 道路车辆耗时: STR_FRAMERATE_GL_SHIPS :{BLACK} 船只耗时: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} 飞机耗时: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} 世界耗时: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} 货物分配图延时: +STR_FRAMERATE_DRAWING :{BLACK}图形渲染: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} 辅助视点: STR_FRAMERATE_VIDEO :{BLACK}视频输出: STR_FRAMERATE_SOUND :{BLACK}混响: STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI 总计: @@ -2748,13 +2780,20 @@ STR_FRAMERATE_GAMESCRIPT :{BLACK} 游 STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :游戏周期 STR_FRAMETIME_CAPTION_GL_ECONOMY :货物处理 +STR_FRAMETIME_CAPTION_GL_TRAINS :列车耗时 STR_FRAMETIME_CAPTION_GL_ROADVEHS :道路车辆耗时 +STR_FRAMETIME_CAPTION_GL_SHIPS :船只耗时 STR_FRAMETIME_CAPTION_GL_AIRCRAFT :飞机耗时 STR_FRAMETIME_CAPTION_GL_LANDSCAPE :世界耗时 +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :货物分配图延时 STR_FRAMETIME_CAPTION_DRAWING :图形渲染 STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :世界视点渲染 +STR_FRAMETIME_CAPTION_VIDEO :视频输出 STR_FRAMETIME_CAPTION_SOUND :混响 +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI 脚本总计 +STR_FRAMETIME_CAPTION_GAMESCRIPT :游戏脚本 STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2902,7 +2941,9 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}最低 STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5 码:{SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}调色板: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :默认 (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :默认 (D) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :传统 (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :传统 (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}参数:{SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :无 @@ -2985,6 +3026,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :图像读取时 STR_NEWGRF_ERROR_GRM_FAILED :GRF源文件不可访问 (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} 被 {STRING} 禁用 STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :错误/未知的sprite输出格式 (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :参数列表元素过多(sprite {3:NUM}, 属性 {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :无效的产品回调函数 (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}注意! @@ -3084,6 +3127,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :重命名城镇 # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} 地方政府 STR_LOCAL_AUTHORITY_ZONE :{BLACK}城区 +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}显示地方政府行政区边界 STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}对运输公司评价: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}可执行的操作: @@ -3341,6 +3385,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}铁路: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}信号灯 STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}道路: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}电车设施: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}水运: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}运河 STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}站台: @@ -3351,8 +3396,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}每年{C # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工业设施 STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- 没有 - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% 已运输){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING},{STRING},{STRING}以及其余 {NUM} 个…… STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}工业设施{}点击可以将屏幕中心移动到其所在位置. 单击的同时按住Ctrl会在新视点中显示工业位置 +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}接受的货物:{SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}产出的货物:{SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :所有货物类型 +STR_INDUSTRY_DIRECTORY_FILTER_NONE :无 # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3363,7 +3417,10 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产 STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}需要: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}产出:{YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}需要: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 等待中{STRING} @@ -3415,11 +3472,13 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :未分组汽车 STR_GROUP_DEFAULT_SHIPS :未分组船只 STR_GROUP_DEFAULT_AIRCRAFTS :未分组飞机 +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}组 - 点击一个组别以显示所有隶属此组的车辆。拖曳组别标签以重新排列组别的次序和层级。 STR_GROUP_CREATE_TOOLTIP :{BLACK}创建分组 STR_GROUP_DELETE_TOOLTIP :{BLACK}删除分组 STR_GROUP_RENAME_TOOLTIP :{BLACK}重命名该分组 +STR_GROUP_LIVERY_TOOLTIP :{BLACK}改变所选组的配色方案 STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}点击以停止本组自动更新功能的使用 STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}删除分组 @@ -3446,6 +3505,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :新电车 ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :新列车 +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :新汽车 STR_BUY_VEHICLE_SHIP_CAPTION :购买船只 STR_BUY_VEHICLE_AIRCRAFT_CAPTION :购买飞机 ############ range for vehicle availability ends @@ -3462,8 +3522,10 @@ STR_PURCHASE_INFO_REFITTABLE :(可改装) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}设计日期:{GOLD}{NUM}{BLACK} 寿命:{GOLD}{COMMA} 年 STR_PURCHASE_INFO_RELIABILITY :{BLACK}最大可靠性:{GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}售价:{GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}售价: {GOLD}{CURRENCY_LONG}{BLACK} (改装费用: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}重量:{GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}售价:{GOLD}{CURRENCY_LONG}{BLACK} 速度:{GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}售价:{GOLD}{CURRENCY_LONG}{BLACK} (改装费用:{GOLD}{CURRENCY_LONG}{BLACK}) 速度:{GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}运载能力:{GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}功率:{GOLD}+{POWER}{BLACK} 重量:{GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}可改装为:{GOLD}{STRING} @@ -3485,6 +3547,8 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}购买 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}购买飞机 STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}购买并改装 +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}购买并改装 +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}购买并改装船只 STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}购买并改装飞机 STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的列车,按住 Shift 键单击可以显示所需资金 @@ -3492,6 +3556,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}购买 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的船只,按住 Shift 键单击可以显示所需资金 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的飞机,按住 Shift 键单击可以显示所需资金 +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的列车。按住 Shift 键单击可以显示所需资金 +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的汽车。按住 Shift 键单击可以显示所需资金 +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的船只。按住 Shift 键单击可以显示所需资金 +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :购买并改装选定的飞机,按住 Shift 键单击可以显示所需资金 STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}重命名 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}重命名 @@ -3603,10 +3671,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}来自 STR_ENGINE_PREVIEW_MESSAGE :{GOLD}我们新近设计了一款{STRING}{}您愿意在产品正式上市前试用一年吗? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :火车机车 +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :电气化铁路机车 STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :单轨机车 STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :磁悬浮机车 STR_ENGINE_PREVIEW_ROAD_VEHICLE :汽车 +STR_ENGINE_PREVIEW_TRAM_VEHICLE :电车 STR_ENGINE_PREVIEW_AIRCRAFT :飞机 STR_ENGINE_PREVIEW_SHIP :船只 @@ -3658,6 +3728,8 @@ STR_REPLACE_ELRAIL_VEHICLES :电力机车 STR_REPLACE_MONORAIL_VEHICLES :单轨列车 STR_REPLACE_MAGLEV_VEHICLES :磁悬浮列车 +STR_REPLACE_ROAD_VEHICLES :路面交通工具 +STR_REPLACE_TRAM_VEHICLES :电车 STR_REPLACE_REMOVE_WAGON :{BLACK}清理挂车:{ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}当车辆升级可能造成列车变长时{}自动从最前面的挂车去掉若干节以保证列车长度不变 @@ -4109,6 +4181,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}选择 STR_AI_LIST_CANCEL :{BLACK}取消 STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}不修改本 AI +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}高度图截图 +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}小地图截图 # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 参数 @@ -4382,6 +4461,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}没有 STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}必须先拆除轨道 STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}这是单行道或这条路被堵死了 STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}该轨道类型不允许建设平交道 +STR_ERROR_CROSSING_DISALLOWED_ROAD :该道路类型不允许建设平交道 STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}不能在这里设置信号灯…… STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}不能在这里铺设轨道…… STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}不能从这里拆除轨道…… @@ -4402,7 +4482,11 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}无法 STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... 这里没有道路 STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... 这里没有电车轨道 STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}无法转换道路类型 +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}无法转换电车道类型 STR_ERROR_NO_SUITABLE_ROAD :{WHITE}没有合适的道路 +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}没有合适的电车道 +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... 不兼容的道路 +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... 不兼容的电车道 # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}不能在这里兴建运河…… @@ -4455,6 +4539,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}无法 STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}无法删除分组…… STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}无法重命名分组…… STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}无法移动分组... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... 组从属关系不能出现自环 STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}无法从该组移除所有运输工具 STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}无法添加运输工具到该组…… STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}无法添加共享指令的运输工具到该组…… diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 4c3570ce23..38dc262c7b 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2674,9 +2674,11 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 開發小組 # Framerate display window +STR_FRAMERATE_DATA_POINTS :{BLACK}數據基於 {COMMA} 個採樣 ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI 腳本總計 ############ End of leave-in-this-order @@ -3071,6 +3073,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}點選 # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}的歷史紀錄 STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}全局歷史紀錄 +STR_STORY_BOOK_SPECTATOR :全局歷史紀錄 STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :第{NUM}頁 STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}在下拉式選單中選擇一頁以前往該頁觀看 @@ -3539,6 +3542,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}按下 STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}在車頭及車廂替換畫面間切換。 STR_REPLACE_ENGINES :車頭 STR_REPLACE_WAGONS :車廂 +STR_REPLACE_ALL_ROADTYPE :所有公路車輛 STR_REPLACE_HELP_RAILTYPE :{BLACK}選擇您要替換車頭的軌道種類 STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}顯示左方的車頭要替換成哪種車頭 From 47790b09a41429fd7673d152e0c64c33630505ee Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 14 Feb 2020 17:53:24 +0100 Subject: [PATCH 013/601] Codechange: Simplify CheckAPIVersion() --- src/ai/ai_info.cpp | 8 +++----- src/game/game_info.cpp | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 6e1ef6cecd..c5280fe5d6 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -15,6 +15,7 @@ #include "../debug.h" #include "../string_func.h" #include "../rev.h" +#include #include "../safeguards.h" @@ -24,11 +25,8 @@ */ static bool CheckAPIVersion(const char *api_version) { - return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || - strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || - strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0 || - strcmp(api_version, "1.11") == 0; + static const std::set versions = { "0.7", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11" }; + return versions.find(api_version) != versions.end(); } #if defined(_WIN32) diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index a039401b32..77725c5e7b 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -13,6 +13,7 @@ #include "game_info.hpp" #include "game_scanner.hpp" #include "../debug.h" +#include #include "../safeguards.h" @@ -22,10 +23,8 @@ */ static bool CheckAPIVersion(const char *api_version) { - return strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || - strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0 || - strcmp(api_version, "1.11") == 0; + static const std::set versions = {"1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11"}; + return versions.find(api_version) != versions.end(); } #if defined(_WIN32) From 87909855c885d110907fa0f4e39a81137ed206de Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 15 Feb 2020 19:45:40 +0100 Subject: [PATCH 014/601] Update: Translations from eints italian: 2 changes by AlphaJack korean: 8 changes by telk5093 --- src/lang/italian.txt | 2 ++ src/lang/korean.txt | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 13aa90c0dd..84b6646f6c 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2192,6 +2192,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Password STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Il server è pieno STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sei stato bandito da questo server STR_NETWORK_ERROR_KICKED :{WHITE}Sei stato espulso dalla partita +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Motivo: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}I trucchi non sono ammessi su questo server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Stavano venendo inviati troppi comandi al server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Si è impiegato troppo tempo ad inserire la password @@ -2251,6 +2252,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Hai donato {2:CURRENCY_LONG} a {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Il server ha chiuso la sessione STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Il server si sta riavviando...{}Attendere prego... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} è stato espulso. Motivo: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Download contenuti diff --git a/src/lang/korean.txt b/src/lang/korean.txt index eae3d2cb1b..24396dd98d 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1973,7 +1973,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}서버 STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}서버 주소: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}시작 날짜: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}현재 날짜: {WHITE}{DATE_SHORT} -STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}암호가 걸려있습니다! +STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}비밀번호가 걸려있습니다! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}서버 오프라인 STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}서버가 꽉 참 STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}버전 다름 @@ -1998,8 +1998,8 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}새 멀 STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}게임 이름: STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}멀티플레이 게임 선택 메뉴에서 보여질 게임 제목입니다. -STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}암호 설정 -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}자유로운 접근을 막고 싶을 때 암호를 설정할 수 있습니다 +STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}비밀번호 설정 +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}서버에 공개적으로 접근하는 것을 막고 싶을 때 비밀번호를 걸어 보호합니다. STR_NETWORK_START_SERVER_UNADVERTISED :아니요 STR_NETWORK_START_SERVER_ADVERTISED :예 @@ -2129,15 +2129,15 @@ STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}송금 STR_COMPANY_PASSWORD_CANCEL :{BLACK}입력한 비밀번호는 저장하지 않기 STR_COMPANY_PASSWORD_OK :{BLACK}이 회사에 새 비밀번호 부여 STR_COMPANY_PASSWORD_CAPTION :{WHITE}회사 비밀번호 -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}회사 비밀번호 기본값 +STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}회사 비밀번호 기본값으로 설정 STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}이 회사 비밀번호를 새 회사의 비밀번호 기본값으로 사용 # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}참여 STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}이 회사로 참가해서 플레이합니다 -STR_COMPANY_VIEW_PASSWORD :{BLACK}암호 +STR_COMPANY_VIEW_PASSWORD :{BLACK}비밀번호 STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}다른 참가자가 이 회사에 참여하여 플레이하지 못 하도록 암호로 보호합니다 -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}회사 암호 설정 +STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}회사 비밀번호 설정 # Network chat STR_NETWORK_CHAT_SEND :{BLACK}보내기 @@ -2165,7 +2165,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}접속 STR_NETWORK_ERROR_TIMEOUT :{WHITE}접속자 #{NUM}의 입력 시간이 초과되었습니다 STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}프로토콜 오류가 발생되어 연결이 끊어졌습니다 STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}이 접속자의 게임 버전이 서버의 버전과 일치하지 않습니다 -STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}잘못된 암호입니다 +STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}잘못된 비밀번호입니다 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}서버에 인원이 가득 찼습니다 STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}서버 관리자에 의해 접속이 차단되었습니다 STR_NETWORK_ERROR_KICKED :{WHITE}서버에서 강제로 추방되었습니다 @@ -2188,7 +2188,7 @@ STR_NETWORK_ERROR_CLIENT_NOT_AUTHORIZED :권한 없음 STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :잘못된 패킷 수신 STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :잘못된 버전 STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :이미 사용중인 이름 -STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :잘못된 암호 +STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :잘못된 비밀번호 STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :DoCommand 구문 내의 잘못된 회사 STR_NETWORK_ERROR_CLIENT_KICKED :강제추방 STR_NETWORK_ERROR_CLIENT_CHEATER :치트 사용 시도 From 7f693ce497d949b8f66e00a40f4477681ac71af1 Mon Sep 17 00:00:00 2001 From: LCD 47 Date: Thu, 16 Jan 2020 18:20:21 +0200 Subject: [PATCH 015/601] Fix: [SDL2] support pasting from clipboard on Linux --- src/os/unix/unix.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index dc54badbd1..e4e1d687c2 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -24,6 +24,10 @@ #include #include +#ifdef WITH_SDL2 +#include +#endif + #ifdef __APPLE__ #include #elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__) @@ -266,6 +270,19 @@ int CDECL main(int argc, char *argv[]) #ifndef WITH_COCOA bool GetClipboardContents(char *buffer, const char *last) { +#ifdef WITH_SDL2 + if (SDL_HasClipboardText() == SDL_FALSE) { + return false; + } + + char *clip = SDL_GetClipboardText(); + if (clip != NULL) { + strecpy(buffer, clip, last); + SDL_free(clip); + return true; + } +#endif + return false; } #endif From 0c80ae5288a80a012f6c89de569ce8447832fbb3 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 15 Feb 2020 03:08:29 +0100 Subject: [PATCH 016/601] Fix: Ignore not printable characters when layouting a string --- src/gfx_layout.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index f093a53863..584a712736 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -631,6 +631,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str, } else if (c >= SCC_FIRST_FONT && c <= SCC_LAST_FONT) { state.SetFontSize((FontSize)(c - SCC_FIRST_FONT)); } else { + /* Filter out non printable characters */ + if (!IsPrintable(c)) continue; /* Filter out text direction characters that shouldn't be drawn, and * will not be handled in the fallback non ICU case because they are * mostly needed for RTL languages which need more ICU support. */ From 4552b17691fa7c4f1fdb4ca7652ca48278a68fec Mon Sep 17 00:00:00 2001 From: Quipyowert2 <38995150+Quipyowert2@users.noreply.github.com> Date: Sun, 16 Feb 2020 17:57:22 -0800 Subject: [PATCH 017/601] Codechange: Avoid copying function parameters by using const references --- src/ai/ai_gui.cpp | 2 +- src/company_cmd.cpp | 6 +++--- src/company_func.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index a0552628cd..d61cfea0dc 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -589,7 +589,7 @@ struct AISettingsWindow : public Window { } private: - bool IsEditableItem(const ScriptConfigItem config_item) const + bool IsEditableItem(const ScriptConfigItem &config_item) const { return _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0; } diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 6308c14472..835a7c4a8b 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -208,7 +208,7 @@ bool CheckCompanyHasMoney(CommandCost &cost) * @param c Company to pay the bill. * @param cost Money to pay. */ -static void SubtractMoneyFromAnyCompany(Company *c, CommandCost cost) +static void SubtractMoneyFromAnyCompany(Company *c, const CommandCost &cost) { if (cost.GetCost() == 0) return; assert(cost.GetExpensesType() != INVALID_EXPENSES); @@ -237,7 +237,7 @@ static void SubtractMoneyFromAnyCompany(Company *c, CommandCost cost) * Subtract money from the #_current_company, if the company is valid. * @param cost Money to pay. */ -void SubtractMoneyFromCompany(CommandCost cost) +void SubtractMoneyFromCompany(const CommandCost &cost) { Company *c = Company::GetIfValid(_current_company); if (c != nullptr) SubtractMoneyFromAnyCompany(c, cost); @@ -248,7 +248,7 @@ void SubtractMoneyFromCompany(CommandCost cost) * @param company Company paying the bill. * @param cst Cost of a command. */ -void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst) +void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cst) { Company *c = Company::Get(company); byte m = c->money_fraction; diff --git a/src/company_func.h b/src/company_func.h index cec6110044..01f5859104 100644 --- a/src/company_func.h +++ b/src/company_func.h @@ -25,8 +25,8 @@ void CompanyAdminBankrupt(CompanyID company_id); void UpdateLandscapingLimits(); bool CheckCompanyHasMoney(CommandCost &cost); -void SubtractMoneyFromCompany(CommandCost cost); -void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cost); +void SubtractMoneyFromCompany(const CommandCost& cost); +void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost& cost); CommandCost CheckOwnership(Owner owner, TileIndex tile = 0); CommandCost CheckTileOwnership(TileIndex tile); From 5c19668fdb3c1b77439bde1968a4075ac02a2b79 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 15 Feb 2020 11:53:31 +0000 Subject: [PATCH 018/601] Doc: [Script] Add a note about how wagon connectivity works for scripts --- bin/ai/regression/tst_regression/main.nut | 3 +++ bin/ai/regression/tst_regression/result.txt | 3 +++ src/script/api/script_vehicle.hpp | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut index 5ace44eec7..65742d71b3 100644 --- a/bin/ai/regression/tst_regression/main.nut +++ b/bin/ai/regression/tst_regression/main.nut @@ -1690,6 +1690,9 @@ function Regression::Vehicle() print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 9)); print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 27)); print(" BuildVehicle(): " + AIVehicle.BuildVehicle(10008, 27)); + print(" IsValidVehicle(17): " + AIVehicle.IsValidVehicle(17)); + print(" IsValidVehicle(18): " + AIVehicle.IsValidVehicle(18)); + print(" IsValidVehicle(19): " + AIVehicle.IsValidVehicle(19)); // 19 is immediately joined to 18 print(" MoveWagonChain(): " + AIVehicle.MoveWagonChain(18, 0, 17, 0)); print(" GetNumWagons(): " + AIVehicle.GetNumWagons(17)); print(" GetLength(): " + AIVehicle.GetLength(17)); diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index 18ae14cb7a..4cb74aaa54 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -9115,6 +9115,9 @@ ERROR: IsEnd() is invalid as Begin() is never called BuildVehicle(): 17 BuildVehicle(): 18 BuildVehicle(): 19 + IsValidVehicle(17): true + IsValidVehicle(18): true + IsValidVehicle(19): false MoveWagonChain(): true GetNumWagons(): 3 GetLength(): 24 diff --git a/src/script/api/script_vehicle.hpp b/src/script/api/script_vehicle.hpp index 4b8a4687ab..3c242d56fe 100644 --- a/src/script/api/script_vehicle.hpp +++ b/src/script/api/script_vehicle.hpp @@ -312,6 +312,10 @@ public: * @return The VehicleID of the new vehicle, or an invalid VehicleID when * it failed. Check the return value using IsValidVehicle. In test-mode * 0 is returned if it was successful; any other value indicates failure. + * @note Unlike the GUI, wagons are not automatically attached to trains, + * only to existing free wagons. This means that BuildVehicle can sometimes + * return an ID indicating success, but IsValidVehicle check will + * fail. You should use MoveWagon to attach free wagons to trains. * @note In Test Mode it means you can't assign orders yet to this vehicle, * as the vehicle isn't really built yet. Build it for real first before * assigning orders. From 4bc78835e8fbf320bdae976708e64bab55f9be1a Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 15 Feb 2020 12:30:16 +0000 Subject: [PATCH 019/601] Fix #6399: Create parent directories if they don't already exist --- src/fileio.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/fileio.cpp b/src/fileio.cpp index dc3813bcaa..5797c592b3 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -527,10 +527,24 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, /** * Create a directory with the given name + * If the parent directory does not exist, it will try to create that as well. * @param name the new name of the directory */ void FioCreateDirectory(const char *name) { + char dirname[MAX_PATH]; + strecpy(dirname, name, lastof(dirname)); + char *p = strrchr(dirname, PATHSEPCHAR); + if (p != nullptr) { + *p = '\0'; + DIR *dir = ttd_opendir(dirname); + if (dir == nullptr) { + FioCreateDirectory(dirname); // Try creating the parent directory, if we couldn't open it + } else { + closedir(dir); + } + } + /* Ignore directory creation errors; they'll surface later on, and most * of the time they are 'directory already exists' errors anyhow. */ #if defined(_WIN32) From 9116b2238676139644346c022f24e908926df322 Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 19 Feb 2020 16:44:46 +0100 Subject: [PATCH 020/601] Fix #8011, f5381798: Dock tile in TTD savegame was only 2 bytes --- src/saveload/oldloader_sl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 659216c0c8..402c1c5cc4 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -716,7 +716,7 @@ static const OldChunks station_chunk[] = { OCL_NULL( 4 ), ///< bus/lorry tile OCL_SVAR( OC_TILE, Station, train_station.tile ), OCL_SVAR( OC_TILE, Station, airport.tile ), - OCL_NULL( 4 ), ///< dock tile + OCL_NULL( 2 ), ///< dock tile OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Station, train_station.w ), OCL_NULL( 1 ), ///< sort-index, no longer in use From 75031c9693ee0525c75e8e02ead345b1f8264735 Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 20 Feb 2020 09:27:51 +0000 Subject: [PATCH 021/601] Fix: provide two sets of tram tracks not one in the GUI icon for building tramway --- bin/baseset/openttd.grf | Bin 510237 -> 510264 bytes media/extra_grf/openttdgui_build_tram.png | Bin 1017 -> 2287 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/baseset/openttd.grf b/bin/baseset/openttd.grf index 111004c175ba03f894e0b8f3a2bf67b29df4d524..550863ff9168cb00b997f01a329c4b4f6d05d1b8 100644 GIT binary patch delta 223 zcmbO`Nq)y9`Gyw87N!>F7M2#)Eo|Gl>$#b^Sy)(EUa&JUG2IYlVq|*2%gn;c`aqhI z`Gg1~^92z`mK)NH%m*|Wxh~keU_YS2%EZdW%=NSFGLtQA5=VGzp(Yif(Ifmw!Dx&uz->AhT@Bg2l_isFmhb5 zw|T(6qk@@(nd8NW8|*t$Ac`1ScPwCJf1&l_!vppmDa`E5><@JwuE} Zoh%$oY)ov-EG+F&JZ#&ec-Rl`0RR(AOymFn delta 215 zcmdlnNq+7m`Gyw87N!>F7M2#)Eo|Gl>zTQknORs_Ua&JUG2IYlVq|*2%f!NZLxhp} zga{+^1rbJ;8`6x-3p6g+9ME84VrAyKVDo}~gUthx7d9`X57;m=KhStk!OX?XdZ6Nl zNQVtGGc)IfiWlq`wmw+!Lgc{~M$R1z7#VLUKG^a?f5V9lHXAA!*)ME)!M-8og~)>s z%kiy7z;lm5|oh*z@FGL>dFtTlAVPRroV|ppc$ozu+WJqVt%iif9 XPP2+kKQNEgsr?EM+x9Cw>?wNy&tgpr diff --git a/media/extra_grf/openttdgui_build_tram.png b/media/extra_grf/openttdgui_build_tram.png index d9af8effe2d2ccb820df1d8a24251e13aae68f9e..bc1133ac2bbd5eb310db0a828439d479fa4fa532 100644 GIT binary patch delta 1490 zcmey#{$6l{0dqZPfk$L90|U1(2s1Lwnj^u$z{-;u5>XQ2>tmIipR1RclAn~SSCL!5 z00K7l6$OdO*{LN8NvY|XdA3ULckfqH$V{%1*XS zQL?vFu&J=B$SufCElE_U$j!+swyLmI0-IZJl~-&964zH!0IMm^!3Zj%k|2Q_413-^$jg8E$j6SjP#9+bc<5bbc-wVN)jt{ z^NN*WM!2LFCl_TFlw{`TDS(VjOv*1Uu~kxnnp=@u05>|35U#i&BfliSI3pj2*>GtT8!B=Oe0|}T zV0BDxF5HUZ64$a4u@_2!jb5UwyNq$jC zetr%tt^#0gR&aI(#f_zchHqkWW**2Rnn=1*T@p)DZIz4+j0|)QjC73*>O%}Ht&9w; zjLo7T%6#)vGSe#2m4Q{6Ss7cvRHc?ArX-dm;!~HBY?YQ@l$%&$tCX3Wn4YR%ke9Bc z01rMZ=lq=fqI%!_6p(|EB|M#-1B&v~GILUGm5PJhofJG>oy`m_&CGO-^bEnS^!2s! z%quQQ%u7!7bg@;c$Su&z%uKOLwlq&oGfgqkO-f2j(KRtOu+UAiuuRlVHZx7NG)uFz zFiACo>37LbF3nBNt1p2WkV2vX{zaMTnR$shP=iP}2b3#w>kE8+tvoV|OY(~$}9z)Uub=nYCcGN5j(Z2XiYcRlT@7gCi-*tPvuCesLK2B+voL+^j%l?tbMa^FPl+d=#{(IpIiSkOL8@w@uqb$ Ps6_U3^>bP0l+XkKj%)0p delta 192 zcmaDa_>+Bu0W%k4lDE4HLkFv@$7Ee*@p=aK5>H=O_Q#BJ47{dB`wRXtFfi16x;TbN zTuz;Mk?W`dhx6)-Ue*8q*RQ|Y`|_E$!4rWChQ}6|DYtR_U|jU*&>X#wH(d@N$yM^@ zboBP}-;|{OF6hJDA9@z&)Fy`HJ(Fe+d!+Ye%laeNFZ(5C%{Zi6`Eco7q3vNQozh#> z`SaFlW~kY{cC1jdJMB0_y;?-?`^5e4e=x7-W(iRhh+WRWz`)??>gTe~DWM4f@{CW7 From 0ade8b20feb10db88e5bde93252654bb82ed6d08 Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 18 Feb 2020 19:50:38 +0100 Subject: [PATCH 022/601] Fix #7998: Crash when scripts tried to access companies with invalid IDs. --- src/script/api/script_company.cpp | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp index 873475f0aa..5769c97faa 100644 --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -27,11 +27,11 @@ /* static */ ScriptCompany::CompanyID ScriptCompany::ResolveCompanyID(ScriptCompany::CompanyID company) { if (company == COMPANY_SELF) { - if (!::Company::IsValidID((::CompanyID)_current_company)) return COMPANY_INVALID; + if (!::Company::IsValidID(_current_company)) return COMPANY_INVALID; return (CompanyID)((byte)_current_company); } - return ::Company::IsValidID((::CompanyID)company) ? company : COMPANY_INVALID; + return ::Company::IsValidID(company) ? company : COMPANY_INVALID; } /* static */ bool ScriptCompany::IsMine(ScriptCompany::CompanyID company) @@ -116,9 +116,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get((::CompanyID)company)->cur_economy.income; + return ::Company::Get(company)->cur_economy.income; } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].income; + return ::Company::Get(company)->old_economy[quarter - 1].income; } /* static */ Money ScriptCompany::GetQuarterlyExpenses(ScriptCompany::CompanyID company, uint32 quarter) @@ -128,9 +128,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get((::CompanyID)company)->cur_economy.expenses; + return ::Company::Get(company)->cur_economy.expenses; } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].expenses; + return ::Company::Get(company)->old_economy[quarter - 1].expenses; } /* static */ int32 ScriptCompany::GetQuarterlyCargoDelivered(ScriptCompany::CompanyID company, uint32 quarter) @@ -140,9 +140,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo.GetSum >(); + return ::Company::Get(company)->cur_economy.delivered_cargo.GetSum >(); } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo.GetSum >(); + return ::Company::Get(company)->old_economy[quarter - 1].delivered_cargo.GetSum >(); } /* static */ int32 ScriptCompany::GetQuarterlyPerformanceRating(ScriptCompany::CompanyID company, uint32 quarter) @@ -152,7 +152,7 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) return -1; - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].performance_history; + return ::Company::Get(company)->old_economy[quarter - 1].performance_history; } /* static */ Money ScriptCompany::GetQuarterlyCompanyValue(ScriptCompany::CompanyID company, uint32 quarter) @@ -162,9 +162,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::CalculateCompanyValue(::Company::Get((::CompanyID)company)); + return ::CalculateCompanyValue(::Company::Get(company)); } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].company_value; + return ::Company::Get(company)->old_economy[quarter - 1].company_value; } @@ -173,7 +173,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return -1; - return ::Company::Get((CompanyID)company)->money; + return ::Company::Get(company)->money; } /* static */ Money ScriptCompany::GetLoanAmount() @@ -250,7 +250,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return INVALID_TILE; - TileIndex loc = ::Company::Get((CompanyID)company)->location_of_HQ; + TileIndex loc = ::Company::Get(company)->location_of_HQ; return (loc == 0) ? INVALID_TILE : loc; } @@ -264,7 +264,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return false; - return ::Company::Get((CompanyID)company)->settings.engine_renew; + return ::Company::Get(company)->settings.engine_renew; } /* static */ bool ScriptCompany::SetAutoRenewMonths(int16 months) @@ -277,7 +277,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return 0; - return ::Company::Get((CompanyID)company)->settings.engine_renew_months; + return ::Company::Get(company)->settings.engine_renew_months; } /* static */ bool ScriptCompany::SetAutoRenewMoney(Money money) @@ -292,7 +292,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return 0; - return ::Company::Get((CompanyID)company)->settings.engine_renew_money; + return ::Company::Get(company)->settings.engine_renew_money; } /* static */ bool ScriptCompany::SetPrimaryLiveryColour(LiveryScheme scheme, Colours colour) From ea7044a74b9b6ccf003c88dfc8ab0ca3f991a777 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sat, 22 Feb 2020 14:51:58 +0000 Subject: [PATCH 023/601] Fix f5381798: Station::GetTileArea reduced docks to a single tile (#8014) --- src/station_cmd.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 385072b956..060e5a0d53 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -400,13 +400,10 @@ void Station::GetTileArea(TileArea *ta, StationType type) const case STATION_DOCK: case STATION_OILRIG: *ta = this->docking_station; - break; + return; default: NOT_REACHED(); } - - ta->w = 1; - ta->h = 1; } /** From a4a6e5dfb43337625068d954c0b6834d33afc0a1 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 23 Feb 2020 19:45:39 +0100 Subject: [PATCH 024/601] Update: Translations from eints croatian: 20 changes by VoyagerOne --- src/lang/croatian.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index a39f33ce9b..32acb9f92c 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -960,6 +960,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otvori prozor grupe fokusiran na grupu odabranog vozila 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} @@ -1404,6 +1405,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Prikaži broj s STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Prikaži broj stanovnika uz nazive gradova na karti STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Debljina linija u grafikonima: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Debljina linije u grafikonima. Tanja linija je preciznija za čitanje, deblja linija je lakša za vidjeti i boje su lakše za razabrati +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Prikaži ime NewGRF-a u prozoru za izgradnju vozila: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj redak u prozor izgradnje vozila koji će pokazati iz kojeg NewGRF-a dolazi odabrano vozilo. STR_CONFIG_SETTING_LANDSCAPE :Krajolik: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Tereni određuju osnovne scenarije za igru s različitim teretima i preduvjetima za rast gradova. NewGRF-ovi i Skripte Igre omogućavaju detaljnije kontrole i postavke. @@ -1641,6 +1644,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Sve STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Vijesti u boji pojavljuju se: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Godina u kojoj će se novine početi izdavati u boji. Prije ove godine, koriste se crno/bijele novine STR_CONFIG_SETTING_STARTING_YEAR :Početna godina: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Godina kraja bodovanja: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Godina koje igra završava u smislu bodovanja. Na kraju ove godine, bilježe se bodovi kompanije i prikazuje se tablica najviših bodova ali igrači mogu nastaviti igru.{}Ako je ovo prije početne godine, tablica najviših bodova se nikada neće prikazati. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikada STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabilno gospodarstvo (više manjih izazova): {STRING} 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} @@ -2257,6 +2264,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Pogrešn STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Poslužitelj je pun STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Zabranjen ti je pristup ovom poslužitelju STR_NETWORK_ERROR_KICKED :{WHITE}Izbačen si iz igre +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Razlog: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Na ovome poslužitelju varanje nije dopušteno STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Slali ste previše naredbi na server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Trebalo vam je previše vremena za unošenje lozinke @@ -2316,6 +2324,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} je STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dao si {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Poslužitelj je zatvorio sesiju STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Poslužitelj se ponovno pokreće...{}Molimo pričekajte... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} je izbačen. Razlog: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Preuzimanje sadržaja @@ -3490,6 +3499,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST 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 +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Prihvaćeni teret: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Proizvedeni teret: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Sve vrste tereta +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Ništa # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4264,6 +4277,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Odaberi STR_AI_LIST_CANCEL :{BLACK}Odustani STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemoj mijenjati skriptu +STR_SCREENSHOT_CAPTION :{WHITE}Napravi sliku zaslova +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalna snimka zaslona +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Maksimalno zumirana slika zaslona +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Snimka ekrana sa zumom osnovne postavke +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Slika cijele mape +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Slika visinske mape +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Slika mini-mape # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri From d1b7eb2de1d79acfcae1e591cf66d95be6b5f5c7 Mon Sep 17 00:00:00 2001 From: Quipyowert2 <38995150+Quipyowert2@users.noreply.github.com> Date: Thu, 20 Feb 2020 16:30:36 -0800 Subject: [PATCH 025/601] Codechange: Limit field width to avoid sscanf crash --- src/network/network.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index e8c99c89bb..0e3d086301 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -917,7 +917,8 @@ void NetworkGameLoop() if (*p == ' ') p++; cp = CallocT(1); int company; - int ret = sscanf(p, "%x; %x; %x; %x; %x; %x; %x; \"%[^\"]\"", &next_date, &next_date_fract, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text); + assert_compile(sizeof(cp->text) == 128); + int ret = sscanf(p, "%x; %x; %x; %x; %x; %x; %x; \"%127[^\"]\"", &next_date, &next_date_fract, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text); /* There are 8 pieces of data to read, however the last is a * string that might or might not exist. Ignore it if that * string misses because in 99% of the time it's not used. */ From 71913607540088819b60f12b765504ab7dfe7a64 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 16 Feb 2020 22:03:12 +0000 Subject: [PATCH 026/601] Change: Keep News Window usable by only storing the 1024 latest news messages --- src/news_gui.cpp | 94 +++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index f963a876a4..01b69677e3 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -44,6 +44,7 @@ const NewsItem *_statusbar_news_item = nullptr; static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages +static uint MAX_NEWS_AMOUNT = 1 << 10; ///< Do not exceed this number of news messages static uint _total_news = 0; ///< current number of news items static NewsItem *_oldest_news = nullptr; ///< head of news items queue NewsItem *_latest_news = nullptr; ///< tail of news items queue @@ -729,6 +730,50 @@ static void MoveToNextNewsItem() } } +/** Delete a news item from the queue */ +static void DeleteNewsItem(NewsItem *ni) +{ + /* Delete the news from the news queue. */ + if (ni->prev != nullptr) { + ni->prev->next = ni->next; + } else { + assert(_oldest_news == ni); + _oldest_news = ni->next; + } + + if (ni->next != nullptr) { + ni->next->prev = ni->prev; + } else { + assert(_latest_news == ni); + _latest_news = ni->prev; + } + + _total_news--; + + if (_forced_news == ni || _current_news == ni) { + /* When we're the current news, go to the previous item first; + * we just possibly made that the last news item. */ + if (_current_news == ni) _current_news = ni->prev; + + /* About to remove the currently forced item (shown as newspapers) || + * about to remove the currently displayed item (newspapers) */ + MoveToNextNewsItem(); + } + + if (_statusbar_news_item == ni) { + /* When we're the current news, go to the previous item first; + * we just possibly made that the last news item. */ + _statusbar_news_item = ni->prev; + + /* About to remove the currently displayed item (ticker, or just a reminder) */ + MoveToNextTickerItem(); + } + + delete ni; + + SetWindowDirty(WC_MESSAGE_HISTORY, 0); +} + /** * Add a new newsitem to be shown. * @param string String to display @@ -777,6 +822,11 @@ void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceTy ni->next = nullptr; _latest_news = ni; + /* Keep the number of stored news items to a managable number */ + if (_total_news > MAX_NEWS_AMOUNT) { + DeleteNewsItem(_oldest_news); + } + SetWindowDirty(WC_MESSAGE_HISTORY, 0); } @@ -844,50 +894,6 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32 p1, ui return CommandCost(); } -/** Delete a news item from the queue */ -static void DeleteNewsItem(NewsItem *ni) -{ - /* Delete the news from the news queue. */ - if (ni->prev != nullptr) { - ni->prev->next = ni->next; - } else { - assert(_oldest_news == ni); - _oldest_news = ni->next; - } - - if (ni->next != nullptr) { - ni->next->prev = ni->prev; - } else { - assert(_latest_news == ni); - _latest_news = ni->prev; - } - - _total_news--; - - if (_forced_news == ni || _current_news == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - if (_current_news == ni) _current_news = ni->prev; - - /* About to remove the currently forced item (shown as newspapers) || - * about to remove the currently displayed item (newspapers) */ - MoveToNextNewsItem(); - } - - if (_statusbar_news_item == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - _statusbar_news_item = ni->prev; - - /* About to remove the currently displayed item (ticker, or just a reminder) */ - MoveToNextTickerItem(); - } - - delete ni; - - SetWindowDirty(WC_MESSAGE_HISTORY, 0); -} - /** * Delete a news item type about a vehicle. * When the news item type is INVALID_STRING_ID all news about the vehicle gets deleted. From d44a2e409c29b53db3e6c05e50d6fcce57d024de Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 29 Feb 2020 11:21:30 +0000 Subject: [PATCH 027/601] Codechange: [AzurePipelines] Update MacOS image to 10.14 --- azure-pipelines-ci.yml | 2 +- azure-pipelines/templates/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index c58a856d93..719ac84b56 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -58,7 +58,7 @@ jobs: - job: macos displayName: 'MacOS' pool: - vmImage: 'macOS-10.13' + vmImage: 'macOS-10.14' variables: MACOSX_DEPLOYMENT_TARGET: 10.9 diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index 00e5b1040a..b0852c1c20 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -141,7 +141,7 @@ jobs: - job: macos displayName: 'MacOS' pool: - vmImage: 'macOS-10.13' + vmImage: 'macOS-10.14' dependsOn: source variables: From 971201b3b7877028140863304a0e8dd63f7e4df8 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 13 Mar 2020 11:47:54 +0000 Subject: [PATCH 028/601] Fix: [AI/GS] CanBuildConnectedRoadPartsHere neighbours tiles were at times incorrect --- src/script/api/script_road.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/script_road.cpp b/src/script/api/script_road.cpp index f842581784..e1549b0d77 100644 --- a/src/script/api/script_road.cpp +++ b/src/script/api/script_road.cpp @@ -401,7 +401,7 @@ static bool NormaliseTileOffset(int32 *tile) if (::DistanceManhattan(tile, start) != 1 || ::DistanceManhattan(tile, end) != 1) return -1; /* ROAD_NW ROAD_SW ROAD_SE ROAD_NE */ - static const TileIndexDiff neighbours[] = {::TileDiffXY(0, -1), ::TileDiffXY(1, 0), ::TileDiffXY(0, 1), ::TileDiffXY(-1, 0)}; + const TileIndexDiff neighbours[] = {::TileDiffXY(0, -1), ::TileDiffXY(1, 0), ::TileDiffXY(0, 1), ::TileDiffXY(-1, 0)}; Array *existing = (Array*)alloca(sizeof(Array) + lengthof(neighbours) * sizeof(int32)); existing->size = 0; From 424770d6623d5accf2edfd7a99980ada8dc28ae7 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 3 Mar 2020 20:46:54 +0000 Subject: [PATCH 029/601] Fix: [AI/GS] Consider neutral station setting when creating tile lists --- src/script/api/script_tilelist.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/script/api/script_tilelist.cpp b/src/script/api/script_tilelist.cpp index b9a2ed5298..7f4e3ca5cf 100644 --- a/src/script/api/script_tilelist.cpp +++ b/src/script/api/script_tilelist.cpp @@ -79,6 +79,9 @@ ScriptTileList_IndustryAccepting::ScriptTileList_IndustryAccepting(IndustryID in const Industry *i = ::Industry::Get(industry_id); + /* Check if this industry is only served by its neutral station */ + if (i->neutral_station != nullptr && !_settings_game.station.serve_neutral_industries) return; + /* Check if this industry accepts anything */ { bool cargo_accepts = false; @@ -116,6 +119,9 @@ ScriptTileList_IndustryProducing::ScriptTileList_IndustryProducing(IndustryID in const Industry *i = ::Industry::Get(industry_id); + /* Check if this industry is only served by its neutral station */ + if (i->neutral_station != nullptr && !_settings_game.station.serve_neutral_industries) return; + /* Check if this industry produces anything */ bool cargo_produces = false; for (byte j = 0; j < lengthof(i->produced_cargo); j++) { From ce7374ec25ef7bdb0d36316454695be4ad953538 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 17 Mar 2020 19:45:41 +0100 Subject: [PATCH 030/601] 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 24396dd98d..062d246f41 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :내 회사에 STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :내 회사가 수송하는 산업시설의 생산량이 변하면 소식으로 알려줍니다. STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :경쟁사에 의한 산업시설의 생산량 변동: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :경쟁사가 수송하고 있는 산업시설의 생산량이 변하면 메시지로 알려줍니다. -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :다른 산업 생산물 변화: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :기타 산업시설의 생산량 변동: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :아무도 수송하지 않는 산업시설의 생산량이 변하면 소식으로 알려줍니다. STR_CONFIG_SETTING_NEWS_ADVICE :내 회사의 차량에 관한 권고 / 정보: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :주의를 기울여야하는 차량에 대한 메시지를 표시합니다. From 6fde8547595c2ae99e823a8afd2bdcf7c094cffb Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 18 Mar 2020 19:45:40 +0100 Subject: [PATCH 031/601] Update: Translations from eints french: 3 changes by glx --- src/lang/french.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index 29655d4fc6..8ac3641948 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1310,6 +1310,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Afficher la pop STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Afficher la population des villes dans leur label sur la carte STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Épaisseur des lignes dans les graphiques{NBSP}: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Épaisseur de la ligne dans les graphiques. Une ligne fine est lisible plus précisément, une ligne épaisse est plus facile à voir et les couleurs sont plus facile à distinguer +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Afficher le nom du NewGRF dans la fenêtre d'achat des véhicules{NBSP}: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ajoute une ligne à la fenêtre d'achat des véhicules, montrant de quel NewGRF provient le véhicule sélectionné. STR_CONFIG_SETTING_LANDSCAPE :Paysage{NBSP}: {STRING} @@ -2168,6 +2169,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Mot de p STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Le serveur est complet STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Vous êtes banni de ce serveur STR_NETWORK_ERROR_KICKED :{WHITE}Vous avez été exclu de la partie +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Raison{NBSP}: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Tricher n'est pas autorisé sur ce serveur STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Vous envoyiez trop de commandes au serveur STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Vous avez mis trop de temps pour entrer le mot de passe @@ -2227,6 +2229,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} a STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Vous avez donné {2:CURRENCY_LONG} à {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Le serveur a fermé la session STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Le serveur redémarre...{}Veuillez patienter... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} a été exclu. Raison{NBSP}: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Téléchargement de modules From 4a079407e778e2e72165f541969b49e74c530fd0 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 20 Mar 2020 19:45:41 +0100 Subject: [PATCH 032/601] Update: Translations from eints hungarian: 26 changes by Brumi korean: 3 changes by telk5093 --- src/lang/hungarian.txt | 26 ++++++++++++++++++++++++++ src/lang/korean.txt | 6 +++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 2de61c1ea6..124deed6e9 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -928,6 +928,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ide kattintva megnyílik a járműlista, kijelölve a jármű csoportját 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} @@ -1372,6 +1373,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mutassa a telep STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Település lakosságszámának kijelzése a címkéjén STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :A vonalak vastagsága a grafikonokon: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Vonalak szélessége a grafikonokon. A vékony vonal precízebben olvasható, míg a vastagabb jobban látható és a színek jobban megkülönböztethetőek +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :NewGRF nevének mutatása a járművásárlási ablakban: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :A járművásárlási ablakban egy külön sorban legyen kiírva a NewGRF neve, amiből a kiválasztott jármű jön. STR_CONFIG_SETTING_LANDSCAPE :Táj: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :A tájak alapvető játékbeállításokat határoznak meg különféle árukkal és településnövekedési tényezőkkel. A NewGRF-ek és a játékszkriptek segítségével ez még tovább hangolható. @@ -1609,10 +1612,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Teljes STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Színes újságcikkek megjelenése: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Az év, melytől az újságok színesben jelennek meg. Az adott év előtt azok fekete-fehérek STR_CONFIG_SETTING_STARTING_YEAR :Játék induló dátuma: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Játék végi pontozás ebben az évben: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :A játék ebben az évben ér véget pontozás szempontjából. Ennek az évnek a végén a vállalat teljesítménypontszáma rögzítésre kerül, és adott esetben megjelenik a rekord táblán, de a játékosok ezután folytathatják a játékot.{}Ha ez a kezdő év elé van állítva, akkor a rekord tábla sosem jelenik meg. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Soha STR_CONFIG_SETTING_SMOOTH_ECONOMY :Egyenletes gazdaság (több, kisebb változás): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Bekapcsolva a gazdasági épületek termelése gyakrabban és kisebb lépésekben változik. Ennek a beállításnak általában nincs hatása, ha a gazdasági épületeket NewGRF nyújta STR_CONFIG_SETTING_ALLOW_SHARES :Más vállalatokból lehet részvényt vásárolni: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Bekapcsolva engedélyezi más vállalatok részvényeinek megvásárlását. A részvények csak akkor elérhetőek, ha a vállalat elért egy bizonyos kort +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Vállalatok minimális életkora részvénykibocsátáshoz: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Egy vállalatnak legalább ennyi évesnek kell lennie ahhoz, hogy más vállalatok kereskedhessenek a részvényeivel. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Ráhordó rendszereknek kifizetett profitszázalék: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :A bevételek százaléka, mely a közbenső szállítóknak, ráhordó járatoknak kerül kifizetésre, nagyobb ellenőrzést adva a bevétel felett STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Húzáskor helyezzen jelzőket minden {STRING} @@ -2223,6 +2232,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Rossz je STR_NETWORK_ERROR_SERVER_FULL :{WHITE}A szerver tele van STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Ki vagy tiltva erről a szerverről STR_NETWORK_ERROR_KICKED :{WHITE}Ki lettél rúgva a szerverről +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Oka: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Ez a szerver nem engedi a csalást STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Túl sok parancsot küldtél a szervernek STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Túl sokáig tartott a jelszó beírása @@ -2282,6 +2292,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} a STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {1:STRING} vállalatnak sikeresen átutaltál {2:CURRENCY_LONG}-t STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}A szerver leállította a játékot STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}A szerver újraindul...{}Türelem... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} ki lett rúgva. Oka: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Tartalom letöltés @@ -3449,9 +3460,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Gazdasági épületek STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nincs - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% elszállítva){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} és {NUM} további... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Gazdasági épületek neve - a névre kattintva a fő nézetet a választott objektumra irányíthatod. Ctrl+kattintással új látképet nyit a gazdasági épület pozíciójára +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Elfogad: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Termel: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Minden rakománytípus +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Semmi # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4226,6 +4245,13 @@ 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 +STR_SCREENSHOT_CAPTION :{WHITE}Képmentés +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normál képernyőkép +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Maximális nagyítású képernyőkép +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Alapértelmezett nagyítású képernyőkép +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Teljes térképes képernyőkép +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Magasságtérkép mentése +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minitérkép mentése # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paraméterek diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 062d246f41..c298cbfc2b 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3822,7 +3822,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}무게: STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}무게: {LTBLUE}{WEIGHT_SHORT} {BLACK}힘: {LTBLUE}{POWER}{BLACK} 최고 속력: {LTBLUE}{VELOCITY} {BLACK}최고 견인력: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}올해 이익: {LTBLUE}{CURRENCY_LONG} (작년: {CURRENCY_LONG}) -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}신뢰도: {LTBLUE}{COMMA}% {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}신뢰도: {LTBLUE}{COMMA}% {BLACK}최근 점검 이후 고장 횟수: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}수송량: {LTBLUE}없음{STRING} @@ -3832,8 +3832,8 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}수송 STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}환승 수익: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}정비 간격: {LTBLUE}{COMMA}일마다{BLACK} 마지막 정비 날짜: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}정비 간격: {LTBLUE}{COMMA}%{BLACK} 이하일 때 마지막 정비 날짜: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}정비 간격: {LTBLUE}{COMMA}일{BLACK}마다 마지막 정비 날짜: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}정비 기준: {LTBLUE}{COMMA}%{BLACK} 떨어지면 마지막 정비 날짜: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}점검 기준값을 10만큼 올립니다. CTRL+클릭하면 점검 기준값을 5만큼 올립니다 STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}점검 기준값을 10만큼 내립니다. CTRL+클릭하면 점검 기준값을 5만큼 내립니다 From e7da6616ba13397a702a16e9cb51aee02a2b41ae Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 21 Mar 2020 19:45:42 +0100 Subject: [PATCH 033/601] Update: Translations from eints polish: 20 changes by MaksOPENTTD1 --- src/lang/polish.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 01b0e92c7a..c7e2ee6102 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1244,6 +1244,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otwórz grupę okien skoncentrowanych na grupie pojazdów 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} @@ -1688,6 +1689,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Pokaż populacj STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Wyświetlaj populację miast w ich etykietach na mapie STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grubość linii na wykresie: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grubość linii na wykresach. Cienka linia jest dokładniejsza, grubsza linia jest bardziej widoczna a kolory łatwiejsze do odróżnienia +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Pokaż nazwę tego NewGRF'a w oknie pojazdu budowlanego: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj linię do okna pojazdów budowlanych, pokazujących z którego NewGRF wybrany pojazd pochodzi. STR_CONFIG_SETTING_LANDSCAPE :Krajobraz: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajobrazy określają podstawowe scenariusze gry, które różnią się przedsiębiorstwami, towarami i wymogami dla rozwoju miast. Pliki NewGRF i skrypty umożliwiają dokładniejszą kontrolę warunków rozgrywki @@ -1925,6 +1928,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Pełne STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Pojawienie się kolorowych wiadomości w: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Rok, w którym wiadomości w gazetach są drukowane w kolorze. Przed tym rokiem drukowane są monochromatyczne czarno-białe STR_CONFIG_SETTING_STARTING_YEAR :Data rozpoczęcia gry: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Punktacja na koniec roku: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok, w którym gra się kończy na cel punktacji. Na koniec tego roku, punkty firmy są zarejestrowane i ekran wyników najwyższych jest pokazywany, ale gracze mogą po tym dalej grać.{}Jeżeli jest to przed rokiem startowym, ekran wyników najwyższych nie jest nigdy pokazywany. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nigdy STR_CONFIG_SETTING_SMOOTH_ECONOMY :Pozwól na łagodną ekonomię (więcej małych zmian): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kiedy włączone, produkcja zakładów zmienia się częściej, ale mniejszymi krokami. To ustawienie zazwyczaj nie daje żadnego efektu, jeśli typy zakładów są pobierane z NewGRFów STR_CONFIG_SETTING_ALLOW_SHARES :Pozwól kupować udziały w innych firmach: {STRING} @@ -2541,6 +2548,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Złe has STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serwer jest pełny STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Masz zabroniony dostęp do tego serwera STR_NETWORK_ERROR_KICKED :{WHITE}Zostałeś wyrzucony z serwera +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Powód: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Ułatwienia są niedozwolone na tym serwerze STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Wysyłano zbyt dużo komend na serwer STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Zbyt długo wprowadzałeś hasło @@ -2600,6 +2608,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} da STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dałeś {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serwer zamknął sesję STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Restart serwera...{}Proszę czekać... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} został wyrzucony. Powód: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Przeglądarka dodatkowej zawartości @@ -3774,6 +3783,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} więcej... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nazwy zakładów - kliknij na nazwie zakładu by wyśrodkować na nim widok. Ctrl+klik otwiera nowy podgląd na lokacji zakładu +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Akceptowane cargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Wyprodukowane cargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Wszystkie typy cargo +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Żadne # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4554,6 +4567,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Wybierz STR_AI_LIST_CANCEL :{BLACK}Anuluj STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nie zmieniaj skryptu +STR_SCREENSHOT_CAPTION :{WHITE}Zrób zrzut ekranu +STR_SCREENSHOT_SCREENSHOT :{BLACK} Normalny zrzut ekranu +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Maksymalnie przybliżono na zrzucie ekranu +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zrzut ekranu z domyślnym przybliżeniem +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Zrzut ekranu całej mapy +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Zrzut ekranu mapy wysokościowej +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK} Zrzut ekranu minimapy # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry From 3a08a7e99d4fada983ff78c4e104efae1151b4f8 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sun, 22 Mar 2020 14:02:48 +0000 Subject: [PATCH 034/601] Fix: Ignore clicks on non-applicable global goals (#8035) --- src/goal_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 7a77b30146..19a4327532 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -86,7 +86,7 @@ struct GoalListWindow : public Window { if (y < 0) return; for (const Goal *s : Goal::Iterate()) { - if (s->company == this->window_number) { + if (s->company == this->window_number && s->company != INVALID_COMPANY) { y--; if (y == 0) { this->HandleClick(s); From 3e680c50ca2db1fcf4103eb0ee2ac7f7b0c545c6 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sun, 22 Mar 2020 14:05:10 +0000 Subject: [PATCH 035/601] Change: Open company window when clicking on a company goal (#8033) --- src/goal_gui.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 19a4327532..faab18c8e2 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -19,6 +19,7 @@ #include "core/geometry_func.hpp" #include "company_func.h" #include "company_base.h" +#include "company_gui.h" #include "story_base.h" #include "command_func.h" #include "string_func.h" @@ -106,7 +107,12 @@ struct GoalListWindow : public Window { TileIndex xy; switch (s->type) { case GT_NONE: return; - case GT_COMPANY: return; + + case GT_COMPANY: + /* s->dst here is not a tile, but a CompanyID. + * Show the window with the overview of the company instead. */ + ShowCompany((CompanyID)s->dst); + return; case GT_TILE: if (!IsValidTile(s->dst)) return; From 55e81d39737ccf7d7bbcca92d997ac4db862176d Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 22 Mar 2020 19:45:41 +0100 Subject: [PATCH 036/601] Update: Translations from eints polish: 22 changes by MaksOPENTTD1 --- src/lang/polish.txt | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index c7e2ee6102..48e9dd73b9 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2200,18 +2200,18 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Wyjście -STR_ABANDON_GAME_QUERY :{YELLOW}Czy jesteś pewien że chcesz skończyć grę? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Czy jesteś pewien że chcesz opuścić ten scenariusz? +STR_ABANDON_GAME_QUERY :{YELLOW}Czy jesteś pewien, że chcesz skończyć tą grę? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Czy jesteś pewny, że chcesz opuścić ten scenariusz? # Cheat window -STR_CHEATS :{WHITE}Oszukiwanie -STR_CHEATS_TOOLTIP :{BLACK}Pole wyboru wskazuje czy użyłeś już wcześniej tego oszustwa -STR_CHEATS_WARNING :{BLACK}Ostrzeżenie! Właśnie chcesz zdradzić swoich współzawodników. Miej na uwadze, że taka hańba będzie pamiętana na wieki +STR_CHEATS :{WHITE}Oszustwa +STR_CHEATS_TOOLTIP :{BLACK}Pole wyboru wskazuje, czy użyłeś już wcześniej tego oszustwa +STR_CHEATS_WARNING :{BLACK}Ostrzeżenie! Właśnie chcesz zdradzić swoich współzawodników. Miej na uwadze, że taka hańba będzie pamiętana na wieczność STR_CHEAT_MONEY :{LTBLUE}Zwiększ ilość pieniędzy o {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Grasz jako firma: {ORANGE}{COMMA} -STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magiczny buldożer (usuwanie przedsiębiorstw, obiektów nieprzesuwalnych): {ORANGE}{STRING} -STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunele mogą się przecinać: {ORANGE}{STRING} -STR_CHEAT_NO_JETCRASH :{LTBLUE}Odrzutowce nie będą rozbijać się (często) na małych lotniskach: {ORANGE} {STRING} +STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magiczny buldożer (usuwanie przedsiębiorstw, nieprzesuwalnych obiektów): {ORANGE}{STRING} +STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunele mogą się krzyżować ze sobą: {ORANGE}{STRING} +STR_CHEAT_NO_JETCRASH :{LTBLUE}Odrzutowce nie będą (tak często) się rozbijać na małych lotniskach: {ORANGE} {STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Edytuj maksymalną wysokość mapy: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Edytuj maksymalną wysokość gór na mapie STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Klimat umiarkowany @@ -2219,8 +2219,8 @@ STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Klimat arktyczn STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Klimat tropikalny STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Krajobraz zabawkowy STR_CHEAT_CHANGE_DATE :{LTBLUE}Zmień datę: {ORANGE}{DATE_SHORT} -STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmiana obecnego roku -STR_CHEAT_SETUP_PROD :{LTBLUE}Pozwól modyfikować wielkość produkcji przedsiębiorstw: {ORANGE}{STRING} +STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmień obecny rok +STR_CHEAT_SETUP_PROD :{LTBLUE}Włącz modyfikowanie wielkości produkcji przedsiębiorstw: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Schemat kolorów @@ -3433,7 +3433,7 @@ STR_NEWGRF_BROKEN :{WHITE}Zachowan STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Zmieniony stan wagonu silnikowego '{1:ENGINE}', gdy był poza halą warsztatów STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Zmiana długości pojazdu '{1:ENGINE}' , który nie jest zatrzymany w hali STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Zmieniono ładowność pojazdu na '{1:ENGINE}', kiedy nie był w hali warsztatów lub w trakcie przebudowy -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Pociąg '{VEHICLE}' należący do '{COMPANY}' ma niepoprawną długość. Prawdopodobnie spowodowane jest to problemami z NewGRFami. Gra może stracić synchronizację lub się zawiesić +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Pociąg '{VEHICLE}' należący do '{COMPANY}' ma niepoprawną długość. Prawdopodobnie spowodowane jest to problemami z NewGRF'ami. Gra może się odsychronizować lub się zawiesić STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' dostarcza niepoprawnych danych STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacje o ładunku/naprawie dla '{1:ENGINE}' różnią się od listy zakupu po zbudowaniu. Może to spowodować, że autoodnowienie/-zamiana nie wykona remontu poprawnie @@ -3648,14 +3648,14 @@ STR_STATION_VIEW_GROUP_D_S_V :Cel-Źródło-P STR_STATION_VIEW_GROUP_D_V_S :Cel-Przez-Źródło ############ range for rating starts -STR_CARGO_RATING_APPALLING :Zatrważające -STR_CARGO_RATING_VERY_POOR :Liche -STR_CARGO_RATING_POOR :Marne +STR_CARGO_RATING_APPALLING :Okropne +STR_CARGO_RATING_VERY_POOR :Bardzo słabe +STR_CARGO_RATING_POOR :Słabe STR_CARGO_RATING_MEDIOCRE :Przeciętne STR_CARGO_RATING_GOOD :Dobre STR_CARGO_RATING_VERY_GOOD :Bardzo dobre -STR_CARGO_RATING_EXCELLENT :Wyśmienite -STR_CARGO_RATING_OUTSTANDING :Niezrównane +STR_CARGO_RATING_EXCELLENT :Wspaniałe +STR_CARGO_RATING_OUTSTANDING :Niezwykłe ############ range for rating ends STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centruj główny widok na pozycji stacji. Ctrl+klik otwiera nowy podgląd na lokację stacji @@ -3758,7 +3758,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Sprzedaj STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nazwa firmy STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nazwisko prezesa -STR_BUY_COMPANY_MESSAGE :{WHITE}Szukamy firmy transportowej, która przejęłaby naszą firmę{}{}Chcesz kupić {COMPANY} za {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Szukamy firmy transportowej, która przejęłaby naszą firmę.{}{}Chcesz zakupić {COMPANY} za {CURRENCY_LONG}? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastruktura firmy {COMPANY} @@ -3916,9 +3916,9 @@ STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks. si STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Zasięg: {GOLD}{COMMA} pól STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Typ samolotu: {GOLD}{STRING} -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista wyboru pociągów - kliknij na pojeździe, aby uzyskać informacje. Ctrl+klik przełącza ukrywanie typu pojazdu -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista wyboru pojazdów drogowych - kliknij na pojeździe, aby uzyskać więcej informacji. Ctrl+klik przełącza ukrywanie typu pojazdu -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista wyboru statków - kliknij na statku, aby uzyskać informacje. Ctrl+klik przełącza ukrywanie typu statku +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista wyboru pociągów - kliknij na pojazd, aby uzyskać informacje. Ctrl+klik przełącza ukrywanie typu pojazdu +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista wyboru pojazdów drogowych - kliknij na pojazd, aby uzyskać więcej informacji. Ctrl+klik przełącza ukrywanie typu pojazdu +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista wyboru statków - kliknij na statek, aby uzyskać informacje. Ctrl+klik przełącza ukrywanie typu statku STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista wyboru samolotów - kliknij na samolocie, aby uzyskać informacje. Ctrl+klik przełącza ukrywanie typu samolotu STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kup tabor kolejowy @@ -4530,7 +4530,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno de # AI configuration window STR_AI_CONFIG_CAPTION :{WHITE}Konfiguracja SI / Game Script -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Game Script, który zostanie załadowany dla następnej gry +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Game Script, który zostanie załadowany podczas kolejnej gry STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}SI, które zostaną załadowane podczas kolejnej gry STR_AI_CONFIG_HUMAN_PLAYER :Ludzki gracz STR_AI_CONFIG_RANDOM_AI :Losowe SI @@ -4582,7 +4582,7 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Zamknij STR_AI_SETTINGS_RESET :{BLACK}Resetuj STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_START_DELAY :Liczba dni, które odczekuje SI przed aktywacją po uruchomieniu poprzedniego (zwiększ lub zmniejsz): {ORANGE}{STRING} +STR_AI_SETTINGS_START_DELAY :Liczba dni, aby aktywować tą SI po uruchomieniu poprzedniej (zwiększ lub zmniejsz): {ORANGE}{STRING} # Textfile window From 2cc9afe057a076cca5e22755053849cfdfbb4798 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 27 Mar 2020 19:45:41 +0100 Subject: [PATCH 037/601] Update: Translations from eints danish: 2 changes by Knogle --- src/lang/danish.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 2fc165c2c8..748a90defd 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2168,6 +2168,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Forkert STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveren er fuld STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bandlyst fra denne server STR_NETWORK_ERROR_KICKED :{WHITE}Du blev smidt ud af spillet +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Grund: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Snyderi er ikke tilladt på denne server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du tog for lang tid om at indtaste adgangskoden @@ -2227,6 +2228,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ga STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Du gav {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serveren har lukket ned for dette spil STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serveren genstarter...{}Vent venligst... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} blev sparket ud. Grund: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Download af indhold From 0b5e0522b6c3842c9b77d5b67b488b4060bc1f82 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 23 Mar 2020 18:28:55 +0100 Subject: [PATCH 038/601] Fix #8043, c02ef3e4: Incorrect handling of global road/tram hotkeys --- src/road_gui.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 8f5c96f986..ea34102ee7 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -717,26 +717,38 @@ struct BuildRoadToolbarWindow : Window { * @param last_build Last build road type * @return ES_HANDLED if hotkey was accepted. */ -static EventState RoadTramToolbarGlobalHotkeys(int hotkey, RoadType last_build) +static EventState RoadTramToolbarGlobalHotkeys(int hotkey, RoadType last_build, RoadTramType rtt) { - Window *w = (_game_mode == GM_NORMAL) ? ShowBuildRoadToolbar(last_build) : ShowBuildRoadScenToolbar(last_build); + Window* w = nullptr; + switch (_game_mode) { + case GM_NORMAL: + if (!CanBuildVehicleInfrastructure(VEH_ROAD, rtt)) return ES_NOT_HANDLED; + w = ShowBuildRoadToolbar(last_build); + break; + + case GM_EDITOR: + if ((GetRoadTypes(true) & ((rtt == RTT_ROAD) ? ~_roadtypes_type : _roadtypes_type)) == ROADTYPES_NONE) return ES_NOT_HANDLED; + w = ShowBuildRoadScenToolbar(last_build); + break; + + default: + break; + } + if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); } static EventState RoadToolbarGlobalHotkeys(int hotkey) { - if (_game_mode == GM_NORMAL && !CanBuildVehicleInfrastructure(VEH_ROAD, RTT_ROAD)) return ES_NOT_HANDLED; - extern RoadType _last_built_roadtype; - return RoadTramToolbarGlobalHotkeys(hotkey, _last_built_roadtype); + return RoadTramToolbarGlobalHotkeys(hotkey, _last_built_roadtype, RTT_ROAD); } static EventState TramToolbarGlobalHotkeys(int hotkey) { - if (_game_mode != GM_NORMAL || !CanBuildVehicleInfrastructure(VEH_ROAD, RTT_TRAM)) return ES_NOT_HANDLED; extern RoadType _last_built_tramtype; - return RoadTramToolbarGlobalHotkeys(hotkey, _last_built_tramtype); + return RoadTramToolbarGlobalHotkeys(hotkey, _last_built_tramtype, RTT_TRAM); } static Hotkey roadtoolbar_hotkeys[] = { From 4d4005d8b7455fba8fe4e59dc99727a4caec6edf Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 20 Mar 2020 10:46:57 +0000 Subject: [PATCH 039/601] Fix #8039: [AI/GS] SetOrderFlags and GetOrderDestination didn't work for oil rigs --- src/script/api/script_order.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/script_order.cpp b/src/script/api/script_order.cpp index 3290e51034..5166c06144 100644 --- a/src/script/api/script_order.cpp +++ b/src/script/api/script_order.cpp @@ -261,7 +261,7 @@ static int ScriptOrderPositionToRealOrderPosition(VehicleID vehicle_id, ScriptOr } } else if (st->ship_station.tile != INVALID_TILE) { TILE_AREA_LOOP(t, st->ship_station) { - if (IsDockTile(t) && GetStationIndex(t) == st->index) return t; + if (IsTileType(t, MP_STATION) && (IsDock(t) || IsOilRig(t)) && GetStationIndex(t) == st->index) return t; } } else if (st->bus_stops != nullptr) { return st->bus_stops->xy; From 57553cd8098ac003b3d5df6b9778214e6933c5d7 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Mon, 24 Feb 2020 22:49:11 +0000 Subject: [PATCH 040/601] Fix #8020: Add missing docking tiles around industry neutral stations --- src/saveload/afterload.cpp | 8 +++----- src/saveload/saveload_internal.h | 1 + src/saveload/station_sl.cpp | 11 +++++++++++ src/ship_cmd.cpp | 1 + src/water_cmd.cpp | 4 ++++ 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 022fd28e93..63e4b37e64 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3116,13 +3116,11 @@ bool AfterLoadGame() if (IsDock(t) || IsOilRig(t)) Station::GetByTile(t)->ship_station.Add(t); } } - - /* Scan for docking tiles */ - for (Station *st : Station::Iterate()) { - if (st->ship_station.tile != INVALID_TILE) UpdateStationDockingTiles(st); - } } + /* Update station docking tiles. */ + AfterLoadScanDockingTiles(); + /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */ Station::RecomputeCatchmentForAll(); diff --git a/src/saveload/saveload_internal.h b/src/saveload/saveload_internal.h index 8a3f433c22..69dfb5dbf9 100644 --- a/src/saveload/saveload_internal.h +++ b/src/saveload/saveload_internal.h @@ -29,6 +29,7 @@ void AfterLoadVehicles(bool part_of_load); void FixupTrainLengths(); void AfterLoadStations(); void AfterLoadRoadStops(); +void AfterLoadScanDockingTiles(); void ResetLabelMaps(); void AfterLoadLabelMaps(); void AfterLoadStoryBook(); diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 1d3612ae31..b0e91b4e75 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -141,6 +141,17 @@ void AfterLoadRoadStops() } } +/** + * (Re)scan for station docking tiles after loading a savegame. + */ +void AfterLoadScanDockingTiles() +{ + /* Scan for docking tiles */ + for (Station *st : Station::Iterate()) { + if (st->ship_station.tile != INVALID_TILE) UpdateStationDockingTiles(st); + } +} + static const SaveLoad _roadstop_desc[] = { SLE_VAR(RoadStop, xy, SLE_UINT32), SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45), diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 1758454add..28e6be4f34 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -613,6 +613,7 @@ bool IsShipDestinationTile(TileIndex tile, StationID station) const Industry *i = Industry::GetByTile(t); if (i->neutral_station != nullptr && i->neutral_station->index == station) return true; } + if (IsTileType(t, MP_STATION) && IsOilRig(t) && GetStationIndex(t) == station) return true; } return false; } diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 12195d8dca..5e37c16dd7 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -196,6 +196,10 @@ void CheckForDockingTile(TileIndex t) SetDockingTile(t, true); } } + if (IsTileType(tile, MP_STATION) && IsOilRig(tile)) { + Station::GetByTile(tile)->docking_station.Add(t); + SetDockingTile(t, true); + } } } From bd3a5876b0a730d4a5fc9e29a8446b7810c1697a Mon Sep 17 00:00:00 2001 From: Sebastian Pauka Date: Wed, 26 Feb 2020 15:06:50 +1100 Subject: [PATCH 041/601] Fix #7644: [Cocoa] Manually set colorspace to sRGB --- src/video/cocoa/cocoa_v.h | 1 + src/video/cocoa/wnd_quartz.mm | 22 +++++----------------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 7535eaada0..40646f887b 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -84,6 +84,7 @@ public: int buffer_depth; ///< Colour depth of used frame buffer void *pixel_buffer; ///< used for direct pixel access void *window_buffer; ///< Colour translation from palette to screen + CGColorSpaceRef color_space; //< Window color space id window; ///< Pointer to window object # define MAX_DIRTY_RECTS 100 diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index d4c5369414..c73dd32e7d 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -346,6 +346,9 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) [ this->window makeKeyAndOrderFront:nil ]; } + [this->window setColorSpace:[NSColorSpace sRGBColorSpace]]; + this->color_space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); + bool ret = WindowResized(); this->UpdatePalette(0, 256); @@ -395,6 +398,7 @@ WindowQuartzSubdriver::~WindowQuartzSubdriver() CGContextRelease(this->cgcontext); + CGColorSpaceRelease(this->color_space); free(this->window_buffer); free(this->pixel_buffer); } @@ -565,21 +569,6 @@ bool WindowQuartzSubdriver::WindowResized() this->window_width = (int)newframe.size.width; this->window_height = (int)newframe.size.height; - /* Get screen colour space. */ - CGColorSpaceRef color_space = NULL; - -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - if ([ this->window respondsToSelector:@selector(colorSpace) ]) { - color_space = [ [ this->window colorSpace ] CGColorSpace ]; - CGColorSpaceRetain(color_space); - } -#endif -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (color_space == NULL && MacOSVersionIsAtLeast(10, 5, 0)) color_space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); -#endif - if (color_space == NULL) color_space = CGColorSpaceCreateDeviceRGB(); - if (color_space == NULL) error("Could not get system colour space. You might need to recalibrate your monitor."); - /* Create Core Graphics Context */ free(this->window_buffer); this->window_buffer = (uint32*)malloc(this->window_width * this->window_height * 4); @@ -591,10 +580,9 @@ bool WindowQuartzSubdriver::WindowResized() this->window_height, // height 8, // bits per component this->window_width * 4, // bytes per row - color_space, // color space + this->color_space, // color space kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host ); - CGColorSpaceRelease(color_space); assert(this->cgcontext != NULL); CGContextSetShouldAntialias(this->cgcontext, FALSE); From 8f9654c5c658f2129838ba104a44f974f3388a2f Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 31 Mar 2020 13:58:27 +0100 Subject: [PATCH 042/601] Fix: [Script] Random deviation upper bound range should be inclusive --- src/script/script_config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index e359afb1e9..4ebd049161 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -131,7 +131,7 @@ void ScriptConfig::AddRandomDeviation() { for (ScriptConfigItemList::const_iterator it = this->GetConfigList()->begin(); it != this->GetConfigList()->end(); it++) { if ((*it).random_deviation != 0) { - this->SetSetting((*it).name, InteractiveRandomRange((*it).random_deviation * 2) - (*it).random_deviation + this->GetSetting((*it).name)); + this->SetSetting((*it).name, InteractiveRandomRange((*it).random_deviation * 2 + 1) - (*it).random_deviation + this->GetSetting((*it).name)); } } } From e7b901462e6d3b0b31c9861191cbdfd2fcbfc7aa Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 31 Mar 2020 15:47:29 +0100 Subject: [PATCH 043/601] Doc: [Script] Make it clear random_deviation and CONFIG_RANDOM range upper bounds are inclusive --- src/script/api/script_info_docs.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/script/api/script_info_docs.hpp b/src/script/api/script_info_docs.hpp index be5d0cec6f..36d2b859ab 100644 --- a/src/script/api/script_info_docs.hpp +++ b/src/script/api/script_info_docs.hpp @@ -203,7 +203,7 @@ public: /** Miscellaneous flags for Script settings. */ enum ScriptConfigFlags { CONFIG_NONE, ///< Normal setting. - CONFIG_RANDOM, ///< When randomizing the Script, pick any value between min_value and max_value. + CONFIG_RANDOM, ///< When randomizing the Script, pick any value between min_value and max_value (inclusive). CONFIG_BOOLEAN, ///< This value is a boolean (either 0 (false) or 1 (true) ). CONFIG_INGAME, ///< This setting can be changed while the Script is running. CONFIG_DEVELOPER, ///< This setting will only be visible when the Script development tools are active. @@ -230,8 +230,8 @@ public: * - custom_value The default value if the custom difficulty level * is selected. Required. * - random_deviation If this property has a nonzero value, then the - * actual value of the setting in game will be - * user_configured_value + random(-random_deviation, random_deviation). + * actual value of the setting in game will be randomized in the range + * [user_configured_value - random_deviation, user_configured_value + random_deviation] (inclusive). * Not allowed if the CONFIG_RANDOM flag is set, otherwise optional. * - step_size The increase/decrease of the value every time the user * clicks one of the up/down arrow buttons. Optional, default is 1. From 71e79edfc1adaa4ea1e19d6ec87cb045ef7f69fe Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 4 Apr 2020 19:45:40 +0200 Subject: [PATCH 044/601] Update: Translations from eints estonian: 32 changes by taavi --- src/lang/estonian.txt | 44 +++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index ef21a51e46..64ea5dbc6d 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -318,6 +318,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Selle nu STR_BUTTON_DEFAULT :{BLACK}Esialgne STR_BUTTON_CANCEL :{BLACK}Tühista STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Hoiatus: Serveriadministraatorid võivad olla võimelised lugema siinset teksti. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -411,6 +412,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Maastiku STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Linnade tekitamine STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Tööstuste tekitamine STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Maanteede ehitamine +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Trammiteede ehitamine STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puid. Shift valib ehitamise/hinna kuvamise režiimi STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Paigalda silt STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Paigalda objekt. Shift valib ehitamise/hinna kuvamise režiimi @@ -526,7 +528,7 @@ STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-ala andmed 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_SCREENSHOT :Kuvapaugutus STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner @@ -930,7 +932,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vaateaken {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopeeri vaateaknasse STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopeeri praegune vaade vaateaknasse -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Kleebi vaateaknast +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Muuda peamist vaadet STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Vaateala koha võtmine peamiseks vaateks # Game options window @@ -1513,6 +1515,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tehismõistus m STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Võimaldab arvutil osaleda mitmikmängudes STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcode-d ennem skripte on peatatud: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksimaalne arv arvutamise käike mida skript võib teha ühel sammul +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Hooldusvälp protsentides: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Vali kas sõiduki hooldus käivitub vastavalt ajale mis on möödunud viimasest hooldusest või kui sõiduki usaldusväärsus langeb allapoole lubatud piiri sõiduki maksimaalsest usaldusväärsuse protsendist @@ -2116,6 +2119,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Katkesta STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server on kaitstud. Sisesta salasõna STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõte on kaitstud. Sisesta salasõna +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientide nimekiri # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientide nimekiri @@ -2180,6 +2184,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Vale sal STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server on täis STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sinu sisenemine siia serverisse on keelatud STR_NETWORK_ERROR_KICKED :{WHITE}Sind visati mängust välja +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Põhjus: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Selles serveris on petmine keelatud STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Sa saatsid serverile liiga palju käsklusi korraga STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Sisestasid salasõna liiga kaua @@ -2415,7 +2420,7 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinee STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Täiustatud signaal (elektriline){}Kui rongide tee kahe signaali vahel kordagi ei ristu, siis täiustatud signaalidega saab signaalivahedesse siseneda korraga mitu rongi. Täiustatud signaalidest saab tagant mööduda STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ühesuunaline täiustatud signaal (elektriline){}Kui rongide tee kahe signaali vahel kordagi ei ristu, siis täiustatud signaalidega saab signaalivahedesse siseneda korraga mitu rongi. Ühesuunalistest täiustatud signaalidest ei saa tagant mööduda STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signaalide teisendamine{}Kui see on valitud, siis olemasoleval signaalil klõpsates teisendatakse see määratud signaalitüübiks ja -variandiks. Samal ajal Ctrl klahvi all hoides lülitutakse olemasoleva variandi vahel. Shift+klõps näitab teisendamise eeldatavat maksumust -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Signaalide paigaldustihedus +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Signaalide paigalduskaugus STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Kahanda signaalide paigaldustihedust STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenda signaalide paigaldustihedust @@ -2456,6 +2461,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Ehita tr STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Lülitu maanteede ehitamise ja lammutamise vahel STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Lülitu trammitee ehitamise ja lammutamise vahel +STR_ROAD_NAME_ROAD :Sõidutee # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Depoo suund @@ -2652,7 +2658,7 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Põllud STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Lumine maa STR_LAI_CLEAR_DESCRIPTION_DESERT :Kõrb -STR_LAI_RAIL_DESCRIPTION_TRACK :Raudtee rööbas +STR_LAI_RAIL_DESCRIPTION_TRACK :Raudteerööbas STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Raudtee rööpad koos blokksignaalidega STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Raudtee rööpad koos eelsignaalidega STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Raudtee rööpad väljasõidusignaalidega @@ -2674,7 +2680,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Raudtee rööpa STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Raudtee rööpad koos komineeriutd ja täiustatud signaalidega STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Raudtee rööpad koos komineeritud ja ühesuunaliste täiustatud signaalidega STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Raudtee rööpad koos täisutatud ja ühesuunaliste täiustatud signaalidega -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Raudtee Rongidepoo +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Raudteedepoo STR_LAI_ROAD_DESCRIPTION_ROAD :Sõidutee STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Valgustatud sõidutee @@ -2756,9 +2762,11 @@ STR_FRAMERATE_GAMELOOP :{BLACK}Mänguts STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Õhusõiduki sammud: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Ahelgraafiku viide: STR_FRAMERATE_DRAWING :{BLACK}Graafika renderdamine: +STR_FRAMERATE_VIDEO :{BLACK}Videoväljund: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Õhusõiduki sammud +STR_FRAMETIME_CAPTION_DRAWING :Graafika renderdamine ############ End of leave-in-this-order @@ -2901,6 +2909,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versioon STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. ühilduv versioon: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palett: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Vaikimisi (D) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameetrid: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Andmed puuduvad @@ -2947,7 +2956,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Mine ett STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Eelmine spait STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the begin STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liiguta spraiti , muutes X ja Y tasakaalu +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liiguta spraiti, muutes X ja Y tasakaalu. Ctrl+klõps, et liigutada kaheksa ühiku võrra korraga STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Lähtesta suhteline STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Lähtesta praegused suhtelised kõrvalekalded STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X kõrvalekalle: {NUM}, Y kõrvalekalle: {NUM} (Absoluutne) @@ -3079,6 +3088,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Linna nime vahe # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} kohalik omavalitsus +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Näita kohaliku omavalitsuse haldusala STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ettevõtete hinnangud: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Pakutavad toimingud: @@ -3355,6 +3365,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate ke STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikkuse tase: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööstus teatab kohesest sulgemisest! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040) @@ -3469,6 +3481,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Ehita ve STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Ehita laev STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Ehita lennuk +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja seadista lennuk ümber STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud raudteesõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud mootorsõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind @@ -4045,7 +4058,7 @@ STR_AI_GAME_SCRIPT :{BLACK}Mängu S STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Vaata Mängu Skripti logi STR_ERROR_AI_NO_AI_FOUND :Laadimiseks sobivat tehismõistust ei leitud.{}See on asendustehismõistus, ning ei tee midagi.{}Tehismõistuseid saab laadida kasutades 'Internetisisu' süsteemi. -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Tõrge ühe töötava tehismõistusega. Palun teavitage sellest tehismõistuse autorit koos ekraanitõmmisega tehismõistuse tõrkeotsingu aknast. +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Tõrge ühe töötava tehismõistusega. Palun teavitage sellest tehismõistuse autorit koos kuvapaugutusega tehismõistuse tõrkeotsingu aknast. STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tehismõistuse / GameScript-i silumise akent saab vaadata ainult server # AI configuration window @@ -4087,6 +4100,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vali esi STR_AI_LIST_CANCEL :{BLACK}Loobu STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ära skripti muuda +STR_SCREENSHOT_CAPTION :{WHITE}Tee kuvapaugutus +STR_SCREENSHOT_SCREENSHOT :{BLACK}Tavaline kuvapaugutus +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Täiesti sisse suumitud kuvapaugutus +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Vaikimisi kuvapaugutuse suum +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Terve kaardi kuvapaugutus +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Kõrguskaardi kuvapaugutus +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Väikese kaardi kuvapaugutus # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameetrid @@ -4135,7 +4155,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Eeldatav # Saveload messages STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ikka salvestamisel,{}palun oota salvestuse lõpuni! -STR_ERROR_AUTOSAVE_FAILED :{WHITE}Isesalvestamine ebaõnnestus +STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automaatsalvestus ebaõnnestus STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ei suuda kettalt lugeda STR_ERROR_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine nurjus{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Faili ei saa kustutada @@ -4170,11 +4190,11 @@ STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Kaardi STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Mäng ei leidnud helisid. Helid saad paigaldada Internetisisu laadimise aknast # Screenshot related messages -STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Hiiglaslik pilt -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Ekraanitõmmise mõõtmed saavad olema {COMMA} x {COMMA} pikslit. Ekraanitõmmise tegemine võib võtta mõne aja. Kas sa oled kindel, et sa soovid jätkata +STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Hiiglaslik kuvapaugutus +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Kuvapaugutuse mõõtmed saavad olema {COMMA} x {COMMA} pikslit. Kuvapaugutuse tegemine võib võtta tükk aega. Kas sa oled kindel, et sa soovid jätkata? -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Ekraanitõmmis edukalt salvestatud nimega '{STRING}' -STR_ERROR_SCREENSHOT_FAILED :{WHITE}Ekraanitõmmise võtmine nurjus! +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvapaugutus on edukalt salvestatud nimega '{STRING}' +STR_ERROR_SCREENSHOT_FAILED :{WHITE}Kuvapaugutuse tegemine nurjus! # Error message titles STR_ERROR_MESSAGE_CAPTION :{YELLOW}Sõnum From 2514f43909b08c62a9e34703bcdbb89081faef9c Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Sun, 5 Apr 2020 19:34:36 +0200 Subject: [PATCH 045/601] Fix #8055, c02ef3e: Crash when roadtype availability changed with the road toolbar open (#8058) --- src/road_gui.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/road_gui.cpp b/src/road_gui.cpp index ea34102ee7..45ab0f6f8b 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -305,17 +305,6 @@ struct BuildRoadToolbarWindow : Window { if (!gui_scope) return; if (_game_mode != GM_EDITOR && !CanBuildVehicleInfrastructure(VEH_ROAD, GetRoadTramType(this->roadtype))) delete this; - bool can_build = _game_mode != GM_EDITOR; - this->SetWidgetsDisabledState(!can_build, - WID_ROT_DEPOT, - WID_ROT_BUS_STATION, - WID_ROT_TRUCK_STATION, - WIDGET_LIST_END); - if (!can_build) { - DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_ROAD); - DeleteWindowById(WC_BUS_STATION, TRANSPORT_ROAD); - DeleteWindowById(WC_TRUCK_STATION, TRANSPORT_ROAD); - } } void Initialize(RoadType roadtype) From 7fe291667fbe75f01b03980fa3654b1bf387117f Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 5 Apr 2020 15:42:03 +0200 Subject: [PATCH 046/601] Fix #8060, 5880f14: Restore admin network API compatibility. --- src/network/network_type.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/network/network_type.h b/src/network/network_type.h index 5f796b83d7..5a77053469 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -74,18 +74,23 @@ enum NetworkPasswordType { NETWORK_COMPANY_PASSWORD, ///< The password of the company. }; -/** Destination of our chat messages. */ +/** + * Destination of our chat messages. + * @warning The values of the enum items are part of the admin network API. Only append at the end. + */ enum DestType { DESTTYPE_BROADCAST, ///< Send message/notice to all clients (All) DESTTYPE_TEAM, ///< Send message/notice to everyone playing the same company (Team) DESTTYPE_CLIENT, ///< Send message/notice to only a certain client (Private) }; -/** Actions that can be used for NetworkTextMessage */ +/** + * Actions that can be used for NetworkTextMessage. + * @warning The values of the enum items are part of the admin network API. Only append at the end. + */ enum NetworkAction { NETWORK_ACTION_JOIN, NETWORK_ACTION_LEAVE, - NETWORK_ACTION_KICKED, NETWORK_ACTION_SERVER_MESSAGE, NETWORK_ACTION_CHAT, NETWORK_ACTION_CHAT_COMPANY, @@ -95,9 +100,13 @@ enum NetworkAction { NETWORK_ACTION_COMPANY_SPECTATOR, NETWORK_ACTION_COMPANY_JOIN, NETWORK_ACTION_COMPANY_NEW, + NETWORK_ACTION_KICKED, }; -/** The error codes we send around in the protocols. */ +/** + * The error codes we send around in the protocols. + * @warning The values of the enum items are part of the admin network API. Only append at the end. + */ enum NetworkErrorCode { NETWORK_ERROR_GENERAL, // Try to use this one like never From b50d77b831c60f9f162a6f1d2bc9ca19e702784e Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 6 Apr 2020 16:39:58 +0200 Subject: [PATCH 047/601] Fix #8064: Incorrect display of refit capacity --- src/articulated_vehicles.cpp | 2 +- src/engine_func.h | 2 +- src/vehicle.cpp | 2 +- src/vehicle_func.h | 2 +- src/vehicle_gui.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp index 7e828bf439..4f42c6955c 100644 --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -169,7 +169,7 @@ CargoArray GetCapacityOfArticulatedParts(EngineID engine) * @param cargo_type Selected refitted cargo type * @param cargo_capacity Capacity of selected refitted cargo type */ -void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint16 cargo_capacity) +void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity) { cargoes->Clear(); *refits = 0; diff --git a/src/engine_func.h b/src/engine_func.h index 472600cf77..97bfd0894b 100644 --- a/src/engine_func.h +++ b/src/engine_func.h @@ -24,7 +24,7 @@ extern const uint8 _engine_offsets[4]; bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company); bool IsEngineRefittable(EngineID engine); -void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint16 cargo_capacity); +void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity); void SetYearEngineAgingStops(); void StartupOneEngine(Engine *e, Date aging_date); diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 2c57d970de..ae5af64a1a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -82,7 +82,7 @@ static const uint GEN_HASHX_MASK = (1 << GEN_HASHX_BITS) - 1; static const uint GEN_HASHY_MASK = ((1 << GEN_HASHY_BITS) - 1) << GEN_HASHX_BITS; VehicleID _new_vehicle_id; -uint16 _returned_refit_capacity; ///< Stores the capacity after a refit operation. +uint _returned_refit_capacity; ///< Stores the capacity after a refit operation. uint16 _returned_mail_refit_capacity; ///< Stores the mail capacity after a refit operation (Aircraft only). diff --git a/src/vehicle_func.h b/src/vehicle_func.h index aa8334ebb0..ec14e526af 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -165,7 +165,7 @@ CommandCost EnsureNoVehicleOnGround(TileIndex tile); CommandCost EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits); extern VehicleID _new_vehicle_id; -extern uint16 _returned_refit_capacity; +extern uint _returned_refit_capacity; extern uint16 _returned_mail_refit_capacity; bool CanVehicleUseStation(EngineID engine_type, const struct Station *st); diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index fe21325168..50cbdc4bc8 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -39,7 +39,7 @@ enum VehicleInvalidateWindowData { struct TestedEngineDetails { Money cost; ///< Refit cost CargoID cargo; ///< Cargo type - uint16 capacity; ///< Cargo capacity + uint capacity; ///< Cargo capacity uint16 mail_capacity; ///< Mail capacity if available }; From d50e4641ae3f7041ee138b104aa4f031b609368a Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 7 Apr 2020 19:45:39 +0200 Subject: [PATCH 048/601] Update: Translations from eints luxembourgish: 9 changes by Phreeze --- src/lang/luxembourgish.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index af1f380672..cf50956910 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1309,6 +1309,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Weis d'Awunnerz STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Weis d'Awunnerzuel vu Stied an deenen hirem Label un op der Kaart STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Déckt vun de Linnen vun de Grafiken: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breed vun de Linnen an de Grafiken. Eng dënn Linn kann méi präzis gelies ginn, eng méi déck kann besser gesinn ginn an d'Faarwen sinn besser ze ënnerscheeden +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Den NewGRF Numm an der Gefier-kafen Fënster uweisen: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Weist eng Zeil an der Fënster un wou Gefier kaf ginn, aus wéi engem NewGRF dat Gefier geluede gouf. STR_CONFIG_SETTING_LANDSCAPE :Landschaft: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landschaften definéiren basis Spillszenarien mat verschiddenen Wueren an Stiedwuesstumviraussetzungen. NewGRF an Gamescripter erlaben méi fein Astellungen. @@ -2166,6 +2168,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Falscht STR_NETWORK_ERROR_SERVER_FULL :{WHITE}De Server ass voll STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du bass vun dësem Server gebannt STR_NETWORK_ERROR_KICKED :{WHITE}Du goufs aus dem Spill geheit +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Grond: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Cheaten ass op dësem Server net erlaabt STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du hues zevill Befehler un de Server geschéckt STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du hues ze laang gebraucht fir e Passwuert anzeginn @@ -2225,6 +2228,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} hu STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Du hues dem {1:STRING} {2:CURRENCY_LONG} ginn STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De Server huet d'Sessioun zougemaach STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De Server gëtt nei gestart...{}W.e.g. waarden... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} gouf gekickt. Grond: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Lueden Inhalt erof @@ -3399,6 +3403,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST 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 +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Akzeptéiert Wuer: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produzéiert Wuer: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :All Wuerentypen +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Keng # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4179,6 +4187,7 @@ STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Voll gez 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 +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap-Screenshot # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter From 7aab7642bf11160cc530e256e6768986dc444136 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 8 Apr 2020 19:45:39 +0200 Subject: [PATCH 049/601] Update: Translations from eints catalan: 30 changes by juanjo --- src/lang/catalan.txt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index dac7abf0f0..622283e04b 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -236,6 +236,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filtra p STR_BUTTON_SORT_BY :{BLACK}Ordena per: STR_BUTTON_LOCATION :{G=Masculin}{BLACK}Lloc STR_BUTTON_RENAME :{BLACK}Canvia el nom +STR_TOOLTIP_CATCHMENT :{BLACK}Mostra/Amaga l'àrea de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Tanca la finestra STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Títol de la finestra: arrossegueu el títol per desplaçar la finestra. @@ -264,6 +265,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Activant STR_BUTTON_DEFAULT :{BLACK}Predeterminat STR_BUTTON_CANCEL :{BLACK}Cancel·la STR_BUTTON_OK :{BLACK}D'acord +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Avís: Els administradors del servidor potser poden llegir el que escriviu aquí. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -927,6 +929,7 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgià ( STR_GAME_OPTIONS_CURRENCY_IRR :Rial iranià (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rus modern (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicà (MXN) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi xinès (CNY) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera @@ -1178,6 +1181,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Permet la modif STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permet modelar el terreny sota les vies, els edificis i altres elements sense eliminar-los. STR_CONFIG_SETTING_CATCHMENT :Estableix una mida més real de l'àrea d'influència: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Permet tenir diferents mides de zones de captació de càrrega per diferents tipus d'estacions (aeroports, estacions de tren, etc.). +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Les estacions de la companyia poden donar servei a industries amb estacions neutrals: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE :Permet l'esborrat de carreteres, ponts i túnels propietat de les poblacions: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Aquesta opció permet fer més fàcil l'esborrat d'infraestructures i construccions propietat de la població STR_CONFIG_SETTING_TRAIN_LENGTH :Longitud màxima dels trens: {STRING} @@ -1299,6 +1303,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostra els habi STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Mostra els habitants a les etiquetes dels noms de les poblacions al mapa STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Gruix de les línies dels gràfics: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Gruix de la línia als gràfics. Una línia més fina és més llegible, una línia més gruixuda és més fàcil de veure i els colors són més fàcils de distingir +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostra el nom del NewGRF a la finestra de construcció de vehicles: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Afegeix una línia a la finestra de construcció de vehicles que mostri de quin NewGRF és el vehicle seleccionat. STR_CONFIG_SETTING_LANDSCAPE :Paisatge: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :El tipus de paisatge defineix escenaris amb diferents tipus de càrrega i requisits per al creixement de les poblacions. Els NewGRF i l'script de la partida poden modificar-ne l'aparença i el comportament @@ -1475,6 +1481,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permet IA en mu STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permet a les IA participar en partides multijugador. STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes abans de suspendre els scripts: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Màxim nombre de passos de càlcul que un script pot fer en un torn +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Ús de memòria màxim per script: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :Els intervals de revisions es mostren en percentatges: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Escull si les revisions dels vehicles depenen del temps passat des de la darrera revisió o de la caiguda d'un cert percentatge de la fiabilitat màxima @@ -1533,10 +1540,12 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Complet STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Les notícies en color apareixen el: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Any en què els diaris comencen a fer anuncis en color. Abans d'aquest any, imprimiran en blanc i negre. STR_CONFIG_SETTING_STARTING_YEAR :Any d'inici: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activa economia suau (més canvis però més petits): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quan està activat, els canvis de producció de la indústria són més habituals, i en passos més petits. Aquest paràmetre usualment no té efecte, si el tipus d'indústria estan proveïts per un NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permet comprar participacions d'altres companyies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Permet comprar i vendre accions de les companyies. Les accions només estan disponibles per companyies d'una certa edat. +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edat mínima de la companyia per negociar participacions: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentatge del benefici total a pagar en transferències: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentatge del benefici donat a branques intermediàries dins els sistemes, donant més control sobre els beneficis STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :En arrossegar, col·locar senyals cada: {STRING} @@ -2423,7 +2432,10 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construe STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construeix un túnel per a tramvies. Shift commuta construeix/mostra el cost estimat STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Intercanvia funció construeix/treu per la construcció de carreteres STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Canvia construeix/treu de la construcció de vies de tramvia +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converteix/Millora el tipus de carretera. Shift commuta entre construir o mostrar-ne el cost estimat. +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converteix/Millora el tipus de tramvia. Shift commuta construeix/mostra el cost estimat. +STR_ROAD_NAME_ROAD :Carretera # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientació de la cotxera @@ -2726,6 +2738,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{NBSP}fps STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{NBSP}fps STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{NBSP}fps +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA}{NBSP}ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}{NBSP}s ############ Leave those lines in this order!! @@ -3091,6 +3104,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Canvia el nom d # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} autoritat local +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ratis de la companyia de transports: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Accions disponibles: @@ -3348,6 +3362,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Trossos de vies: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Senyals STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Trossos de carretera: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Trossos de tramvia: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Cel·les d'aigua: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canals STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estacions: @@ -3358,8 +3373,10 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústries STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Cap - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} (transportat: {COMMA}{NBSP}%){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nom de les indústries - clica al nom per centrar la vista en la indústria. Ctrl+Clic obre una nova vista al lloc de la indústria +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Tots els tipus de càrrega # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3456,6 +3473,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Compra de nous ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Compra de nous vehicles sobre vies +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Automòbils nous STR_BUY_VEHICLE_SHIP_CAPTION :Compra de nous vaixells STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Compra de noves aeronaus ############ range for vehicle availability ends @@ -3471,6 +3489,7 @@ STR_PURCHASE_INFO_REFITTABLE :(remodelable) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Dissenyat: {GOLD}{NUM}{BLACK} Vida: {GOLD}{COMMA} any{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Fiabilitat màxima: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cost: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost del remodelat: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Pes: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Velocitat: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacitat: {GOLD}{CARGO_LONG}, {CARGO_LONG} @@ -3493,6 +3512,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Compra e STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Compra el vaixell STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Compra l'aeronau +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela vehicles STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el tren/vagó seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehicle marcat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. @@ -3614,6 +3634,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=Femenin}loco STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=Femenin}locomotora de maglev STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=Masculin}automòbil +STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramvia STR_ENGINE_PREVIEW_AIRCRAFT :{G=Masculin}avió STR_ENGINE_PREVIEW_SHIP :{G=Masculin}vaixell @@ -3663,6 +3684,8 @@ STR_REPLACE_ELRAIL_VEHICLES :Trens Elèctric STR_REPLACE_MONORAIL_VEHICLES :Trens monorail STR_REPLACE_MAGLEV_VEHICLES :Trens maglev +STR_REPLACE_ROAD_VEHICLES :Automòbils +STR_REPLACE_TRAM_VEHICLES :Tramvies STR_REPLACE_REMOVE_WAGON :{BLACK}Treure vagons: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fer que la substitució automàtica mantingui la llargada del tren eliminant vagons (començant pel front), si substituint la màquina el tren es fa més llarg @@ -4114,6 +4137,10 @@ 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. +STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de pantalla normal +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zoom de la captura de pantalla per defecte +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de pantalla del mapa d'alçades +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Paràmetres {STRING} @@ -4387,6 +4414,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Via de t STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}...abans s'ha de treure la via. STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}La carretera és un d'un sol sentit o està bloquejada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Els passos a nivell no estan permesos en aquest tipus de via +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}No s'admeten passos a nivell en aquest tipus de carretera. STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Aquí no es poden construir senyals... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Aquí no es pot construir la via de tren... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Aquí no es pot treure la via de tren... @@ -4406,6 +4434,8 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Aquí no STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No puc treure la via de tramvia d'aquí... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... no hi ha carretera STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... no hi ha via de tramvia +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... la carretera és incompatible. +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... El tipus de tramvia és incompatible. # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Aquí no es poden construir canals... From 1e3e960fce149b7e6be4b1e9eecff4d3fe1c2a20 Mon Sep 17 00:00:00 2001 From: arikover Date: Tue, 31 Mar 2020 22:23:41 +0200 Subject: [PATCH 050/601] Add: Hotkey for Land Info in normal mode - added a hotkey for land_info in normal mode - no default key is set --- src/toolbar_gui.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index d2fe466911..303e4c7293 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2018,6 +2018,7 @@ enum MainToolbarHotkeys { MTHK_BUILD_AIRPORT, MTHK_BUILD_TREES, MTHK_MUSIC, + MTHK_LANDINFO, MTHK_AI_DEBUG, MTHK_SMALL_SCREENSHOT, MTHK_ZOOMEDIN_SCREENSHOT, @@ -2086,6 +2087,7 @@ struct MainToolbarWindow : Window { EventState OnHotkey(int hotkey) override { + CallBackFunction cbf = CBF_NONE; switch (hotkey) { case MTHK_PAUSE: ToolbarPauseClick(this); break; case MTHK_FASTFORWARD: ToolbarFastForwardClick(this); break; @@ -2126,8 +2128,10 @@ struct MainToolbarWindow : Window { case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break; case MTHK_SIGN_LIST: ShowSignList(); break; + case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break; default: return ES_NOT_HANDLED; } + if (cbf != CBF_NONE) _last_started_action = cbf; return ES_HANDLED; } @@ -2238,6 +2242,7 @@ static Hotkey maintoolbar_hotkeys[] = { Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT), Hotkey((uint16)0, "client_list", MTHK_CLIENT_LIST), Hotkey((uint16)0, "sign_list", MTHK_SIGN_LIST), + Hotkey((uint16)0, "land_info", MTHK_LANDINFO), HOTKEY_LIST_END }; HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys); From f14a69e52f77b442e8615f102f5152cb0ef0d2ed Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Fri, 10 Apr 2020 11:05:52 +0300 Subject: [PATCH 051/601] Fix a5681d3e: Make goal question ID use 16 bits again (#8072) --- src/goal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/goal.cpp b/src/goal.cpp index 9c9441e9ee..02ec85255f 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -244,7 +244,7 @@ CommandCost CmdSetGoalCompleted(TileIndex tile, DoCommandFlag flags, uint32 p1, */ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { - uint16 uniqueid = (GoalType)GB(p1, 0, 16); + uint16 uniqueid = (uint16)GB(p1, 0, 16); CompanyID company = (CompanyID)GB(p1, 16, 8); ClientID client = (ClientID)GB(p1, 16, 16); From 9339e4dcad8aa74ff1b2723ea63a2e31c23f5d44 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 12 Apr 2020 00:03:49 +0200 Subject: [PATCH 052/601] Fix #8081: Check for waypoints when removing docking tiles --- src/station_cmd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 060e5a0d53..b883838841 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2601,7 +2601,8 @@ void RemoveDockingTile(TileIndex t) if (!IsValidTile(tile)) continue; if (IsTileType(tile, MP_STATION)) { - UpdateStationDockingTiles(Station::GetByTile(tile)); + Station *st = Station::GetByTile(tile); + if (st != nullptr) UpdateStationDockingTiles(st); } else if (IsTileType(tile, MP_INDUSTRY)) { Station *neutral = Industry::GetByTile(tile)->neutral_station; if (neutral != nullptr) UpdateStationDockingTiles(neutral); From e90d065f11c22f17744e08877bc6b47dc81a5f90 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 14:13:23 +0200 Subject: [PATCH 053/601] Fix: [OSX] Prepend OSX SDK path to the framework search path if building with a custom SDK sysroot. --- config.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.lib b/config.lib index 6738561e20..45c0d7f810 100644 --- a/config.lib +++ b/config.lib @@ -1657,7 +1657,7 @@ make_cflags_and_ldflags() { if [ "$with_cocoa" != "0" ]; then CFLAGS="$CFLAGS -DWITH_COCOA" - LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox" + LIBS="$LIBS -F$osx_sdk_path/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox" if [ "$enable_cocoa_quartz" != "0" ]; then CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ" From 9d7ad67c1d0577a091c09eb7e0ac2b1b7bc12d3a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 14:13:56 +0200 Subject: [PATCH 054/601] Codechange: [OSX] Allow compiling with SDK version pre 10.9. --- src/os/macosx/osx_stdafx.h | 4 ++++ src/os/macosx/string_osx.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/os/macosx/osx_stdafx.h b/src/os/macosx/osx_stdafx.h index 476362cccd..d90a19c5f7 100644 --- a/src/os/macosx/osx_stdafx.h +++ b/src/os/macosx/osx_stdafx.h @@ -18,6 +18,10 @@ #define HAVE_OSX_107_SDK #endif +#ifdef MAC_OS_X_VERSION_10_9 +#define HAVE_OSX_109_SDK +#endif + #ifdef MAC_OS_X_VERSION_10_11 #define HAVE_OSX_1011_SDK #endif diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 63be4d3ad9..ad4983e9aa 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -19,6 +19,35 @@ #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) + +/* CTRunDelegateCreate is supported since MacOS X 10.5, but was only included in the SDKs starting with the 10.9 SDK. */ +#ifndef HAVE_OSX_109_SDK +extern "C" { + typedef const struct __CTRunDelegate * CTRunDelegateRef; + + typedef void (*CTRunDelegateDeallocateCallback) (void* refCon); + typedef CGFloat (*CTRunDelegateGetAscentCallback) (void* refCon); + typedef CGFloat (*CTRunDelegateGetDescentCallback) (void* refCon); + typedef CGFloat (*CTRunDelegateGetWidthCallback) (void* refCon); + typedef struct { + CFIndex version; + CTRunDelegateDeallocateCallback dealloc; + CTRunDelegateGetAscentCallback getAscent; + CTRunDelegateGetDescentCallback getDescent; + CTRunDelegateGetWidthCallback getWidth; + } CTRunDelegateCallbacks; + + enum { + kCTRunDelegateVersion1 = 1, + kCTRunDelegateCurrentVersion = kCTRunDelegateVersion1 + }; + + extern const CFStringRef kCTRunDelegateAttributeName AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + + CTRunDelegateRef CTRunDelegateCreate(const CTRunDelegateCallbacks* callbacks, void* refCon) AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +} +#endif /* HAVE_OSX_109_SDK */ + /** Cached current locale. */ static CFAutoRelease _osx_locale; /** CoreText cache for font information, cleared when OTTD changes fonts. */ From a31cbbf67fa4137a349d1818efdd5cf81362f79b Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 14:21:54 +0200 Subject: [PATCH 055/601] Remove: [OSX] QuickDraw video subdriver used for OSX versions up to 10.4. Since the C++11 move, getting OpenTTD to compile and run for anything below 10.7 basically requires building a custom compiler and libc++. Also, the QuickDraw subdriver crashes on more modern OSX version. While this is fixable, keeping the driver around is probably pointless. --- config.lib | 62 +--- source.list | 1 - src/video/cocoa/cocoa_v.h | 4 - src/video/cocoa/cocoa_v.mm | 30 +- src/video/cocoa/wnd_quickdraw.mm | 561 ------------------------------- 5 files changed, 4 insertions(+), 654 deletions(-) delete mode 100644 src/video/cocoa/wnd_quickdraw.mm diff --git a/config.lib b/config.lib index 45c0d7f810..8a5a4b3f32 100644 --- a/config.lib +++ b/config.lib @@ -59,7 +59,6 @@ set_default() { enable_universal="0" enable_osx_g5="0" enable_cocoa_quartz="1" - enable_cocoa_quickdraw="1" with_osx_sysroot="1" with_application_bundle="1" with_menu_entry="1" @@ -136,7 +135,6 @@ set_default() { enable_universal enable_osx_g5 enable_cocoa_quartz - enable_cocoa_quickdraw with_osx_sysroot with_application_bundle with_allegro @@ -313,9 +311,6 @@ detect_params() { --disable-cocoa-quartz) enable_cocoa_quartz="0";; --enable-cocoa-quartz) enable_cocoa_quartz="2";; --enable-cocoa-quartz=*) enable_cocoa_quartz="$optarg";; - --disable-cocoa-quickdraw) enable_cocoa_quickdraw="0";; - --enable-cocoa-quickdraw) enable_cocoa_quickdraw="2";; - --enable-cocoa-quickdraw=*) enable_cocoa_quickdraw="$optarg";; --with-allegro) with_allegro="2";; --without-allegro) with_allegro="0";; @@ -1662,10 +1657,6 @@ make_cflags_and_ldflags() { if [ "$enable_cocoa_quartz" != "0" ]; then CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ" fi - - if [ "$enable_cocoa_quickdraw" != "0" ]; then - CFLAGS="$CFLAGS -DENABLE_COCOA_QUICKDRAW" - fi fi if [ "$with_zlib" != "0" ]; then @@ -2535,56 +2526,6 @@ detect_cocoa() { else log 1 "checking whether to enable the Quartz window subdriver... no" fi - - detect_quickdraw -} - -detect_quickdraw() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$enable_cocoa_quickdraw" = "0" ]; then - log 1 "checking Quickdraw window subdriver... disabled" - return 0 - fi - - # Assume QuickDraw is available when doing an universal build - if [ "$enable_universal" != "0" ]; then - log 1 "checking Quickdraw window subdriver... found" - return 0 - fi - - # 64 bits doesn't have quickdraw - if [ "$cpu_type" = "64" ]; then - enable_cocoa_quickdraw="0" - log 1 "checking Quickdraw window subdriver... disabled (64 bits)" - return 0 - fi - -cat > tmp.osx.mm << EOF -#include -#import -int main(int argc, char *argv[]) { SetEmptyRgn(NULL); return 0; } -EOF - execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS -mmacosx-version-min=10.3 tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - rm -f tmp.osx.mm tmp.osx - if [ "$ret" != "0" ]; then - log 1 "checking Quickdraw window subdriver... not found" - - # It was forced, so it should be found. - if [ "$enable_cocoa_quickdraw" != "1" ]; then - log 1 "configure: error: Quickdraw window driver could not be found" - exit 1 - fi - - enable_cocoa_quickdraw=0 - return 0 - fi - - enable_cocoa_quickdraw=1 - log 1 "checking Quickdraw window subdriver... found" } detect_library() { @@ -3385,7 +3326,7 @@ generate_src_osx() { CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig" LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig" fi - CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME -UENABLE_COCOA_QUICKDRAW" + CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME" LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`" fi @@ -3501,7 +3442,6 @@ showhelp() { echo " Default architectures are: i386 ppc" echo " --enable-osx-g5 enables optimizations for ppc970 (G5) (OSX ONLY)" echo " --disable-cocoa-quartz disable the quartz window mode driver for Cocoa (OSX ONLY)" - echo " --disable-cocoa-quickdraw disable the quickdraw window mode driver for Cocoa (OSX ONLY)" echo " --disable-unicode disable unicode support to build win9x" echo " version (Win32 ONLY)" echo " --enable-console compile as a console application instead of as a GUI application." diff --git a/source.list b/source.list index fd68c010e8..a4780f2ef4 100644 --- a/source.list +++ b/source.list @@ -1173,7 +1173,6 @@ sound/null_s.cpp video/cocoa/event.mm video/cocoa/fullscreen.mm video/cocoa/wnd_quartz.mm - video/cocoa/wnd_quickdraw.mm music/cocoa_m.cpp sound/cocoa_s.cpp os/macosx/splash.cpp diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 40646f887b..74cdc6946f 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -191,10 +191,6 @@ extern CocoaSubdriver *_cocoa_subdriver; CocoaSubdriver *QZ_CreateFullscreenSubdriver(int width, int height, int bpp); -#ifdef ENABLE_COCOA_QUICKDRAW -CocoaSubdriver *QZ_CreateWindowQuickdrawSubdriver(int width, int height, int bpp); -#endif - #ifdef ENABLE_COCOA_QUARTZ #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp); diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index f801d7c041..0bda21d25b 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -395,35 +395,11 @@ void QZ_GameSizeChanged() */ static CocoaSubdriver *QZ_CreateWindowSubdriver(int width, int height, int bpp) { -#if defined(ENABLE_COCOA_QUARTZ) || defined(ENABLE_COCOA_QUICKDRAW) - CocoaSubdriver *ret; -#endif - #if defined(ENABLE_COCOA_QUARTZ) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) - /* The reason for the version mismatch is due to the fact that the 10.4 binary needs to work on 10.5 as well. */ - if (MacOSVersionIsAtLeast(10, 5, 0)) { - ret = QZ_CreateWindowQuartzSubdriver(width, height, bpp); - if (ret != NULL) return ret; - } + return QZ_CreateWindowQuartzSubdriver(width, height, bpp); +#else + return nullptr; #endif - -#ifdef ENABLE_COCOA_QUICKDRAW - ret = QZ_CreateWindowQuickdrawSubdriver(width, height, bpp); - if (ret != NULL) return ret; -#endif - -#if defined(ENABLE_COCOA_QUARTZ) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) - /* - * If we get here we are running 10.4 or earlier and either openttd was compiled without the QuickDraw driver - * or it failed to load for some reason. Fall back to Quartz if possible even though that driver is slower. - */ - if (MacOSVersionIsAtLeast(10, 4, 0)) { - ret = QZ_CreateWindowQuartzSubdriver(width, height, bpp); - if (ret != NULL) return ret; - } -#endif - - return NULL; } /** diff --git a/src/video/cocoa/wnd_quickdraw.mm b/src/video/cocoa/wnd_quickdraw.mm deleted file mode 100644 index 75d1d416b0..0000000000 --- a/src/video/cocoa/wnd_quickdraw.mm +++ /dev/null @@ -1,561 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/****************************************************************************** - * Cocoa video driver * - * Known things left to do: * - * List available resolutions. * - ******************************************************************************/ - -#ifdef WITH_COCOA -#ifdef ENABLE_COCOA_QUICKDRAW - -#define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_3 -#include "../../stdafx.h" -#include "../../os/macosx/macos.h" - -#define Rect OTTDRect -#define Point OTTDPoint -#import -#undef Rect -#undef Point - -#include "../../debug.h" -#include "../../rev.h" -#include "../../core/geometry_type.hpp" -#include "cocoa_v.h" -#include "../../core/math_func.hpp" -#include "../../gfx_func.h" -#include "../../framerate_type.h" - -/** - * Important notice regarding all modifications!!!!!!! - * There are certain limitations because the file is objective C++. - * gdb has limitations. - * C++ and objective C code can't be joined in all cases (classes stuff). - * Read http://developer.apple.com/releasenotes/Cocoa/Objective-C++.html for more information. - */ - - -class WindowQuickdrawSubdriver; - - -class WindowQuickdrawSubdriver : public CocoaSubdriver { -private: - /** - * This function copies 32bpp pixels from the screen buffer in 16bpp windowed mode. - * - * @param left The x coord for the left edge of the box to blit. - * @param top The y coord for the top edge of the box to blit. - * @param right The x coord for the right edge of the box to blit. - * @param bottom The y coord for the bottom edge of the box to blit. - */ - void Blit32ToView32(int left, int top, int right, int bottom); - - /** - * This function copies 8bpp pixels from the screen buffer in 32bpp windowed mode. - * - * @param left The x coord for the left edge of the box to blit. - * @param top The y coord for the top edge of the box to blit. - * @param right The x coord for the right edge of the box to blit. - * @param bottom The y coord for the bottom edge of the box to blit. - */ - void BlitIndexedToView32(int left, int top, int right, int bottom); - - /** - * This function copies 8bpp pixels from the screen buffer in 16bpp windowed mode. - * - * @param left The x coord for the left edge of the box to blit. - * @param top The y coord for the top edge of the box to blit. - * @param right The x coord for the right edge of the box to blit. - * @param bottom The y coord for the bottom edge of the box to blit. - */ - void BlitIndexedToView16(int left, int top, int right, int bottom); - - inline void BlitToView(int left, int top, int right, int bottom); - void DrawResizeIcon(); - - virtual void GetDeviceInfo(); - virtual bool SetVideoMode(int width, int height, int bpp); - -public: - WindowQuickdrawSubdriver(); - virtual ~WindowQuickdrawSubdriver(); - - virtual void Draw(bool force_update); - virtual void MakeDirty(int left, int top, int width, int height); - virtual void UpdatePalette(uint first_color, uint num_colors); - - virtual uint ListModes(OTTD_Point *modes, uint max_modes); - - virtual bool ChangeResolution(int w, int h, int bpp); - - virtual bool IsFullscreen() { return false; } - - virtual int GetWidth() { return window_width; } - virtual int GetHeight() { return window_height; } - virtual void *GetPixelBuffer() { return pixel_buffer; } - - /* Convert local coordinate to window server (CoreGraphics) coordinate */ - virtual CGPoint PrivateLocalToCG(NSPoint *p); - - virtual NSPoint GetMouseLocation(NSEvent *event); - virtual bool MouseIsInsideView(NSPoint *pt); - - virtual bool IsActive() { return active; } - - void SetPortAlphaOpaque(); - bool WindowResized(); -}; - -static const int _resize_icon_width = 16; -static const int _resize_icon_height = 16; - -static bool _resize_icon[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, - 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, - 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, - 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0 -}; - - -void WindowQuickdrawSubdriver::GetDeviceInfo() -{ - /* Initialize the video settings; this data persists between mode switches */ - CFDictionaryRef cur_mode = CGDisplayCurrentMode(kCGDirectMainDisplay); - - /* Gather some information that is useful to know about the display */ - CFNumberGetValue((const __CFNumber*)CFDictionaryGetValue(cur_mode, kCGDisplayBitsPerPixel), - kCFNumberSInt32Type, &this->device_depth); - - CFNumberGetValue((const __CFNumber*)CFDictionaryGetValue(cur_mode, kCGDisplayWidth), - kCFNumberSInt32Type, &this->device_width); - - CFNumberGetValue((const __CFNumber*)CFDictionaryGetValue(cur_mode, kCGDisplayHeight), - kCFNumberSInt32Type, &this->device_height); -} - -bool WindowQuickdrawSubdriver::SetVideoMode(int width, int height, int bpp) -{ - this->setup = true; - this->GetDeviceInfo(); - - if (bpp > this->device_depth) { - DEBUG(driver, 0, "Cannot use a blitter with a higher screen depth than the display when running in windowed mode."); - this->setup = false; - return false; - } - - if (width > this->device_width) width = this->device_width; - if (height > this->device_height) height = this->device_height; - - NSRect contentRect = NSMakeRect(0, 0, width, height); - - /* Check if we should recreate the window */ - if (this->window == nil) { - OTTD_CocoaWindowDelegate *delegate; - - /* Set the window style */ - unsigned int style = NSTitledWindowMask; - style |= (NSMiniaturizableWindowMask | NSClosableWindowMask); - style |= NSResizableWindowMask; - - /* Manually create a window, avoids having a nib file resource */ - this->window = [ [ OTTD_CocoaWindow alloc ] initWithContentRect:contentRect - styleMask:style backing:NSBackingStoreBuffered defer:NO ]; - - if (this->window == nil) { - DEBUG(driver, 0, "Could not create the Cocoa window."); - this->setup = false; - return false; - } - - [ this->window setDriver:this ]; - - char caption[50]; - snprintf(caption, sizeof(caption), "OpenTTD %s", _openttd_revision); - NSString *nsscaption = [ [ NSString alloc ] initWithUTF8String:caption ]; - [ this->window setTitle:nsscaption ]; - [ this->window setMiniwindowTitle:nsscaption ]; - [ nsscaption release ]; - - [ this->window setContentMinSize:NSMakeSize(64.0f, 64.0f) ]; - - [ this->window setAcceptsMouseMovedEvents:YES ]; - [ this->window setViewsNeedDisplay:NO ]; - - delegate = [ [ OTTD_CocoaWindowDelegate alloc ] init ]; - [ delegate setDriver:this ]; - [ this->window setDelegate: [ delegate autorelease ] ]; - } else { - /* We already have a window, just change its size */ - [ this->window setContentSize:contentRect.size ]; - /* Ensure frame height - title bar height >= view height - * The height of title bar of the window is 22 pixels */ - contentRect.size.height = Clamp(height, 0, [ this->window frame ].size.height - 22); - height = contentRect.size.height; - [ this->cocoaview setFrameSize:contentRect.size ]; - } - - /* Update again */ - this->window_width = width; - this->window_height = height; - this->buffer_depth = bpp; - - [ this->window center ]; - - /* Only recreate the view if it doesn't already exist */ - if (this->cocoaview == nil) { - this->cocoaview = [ [ NSQuickDrawView alloc ] initWithFrame:contentRect ]; - if (this->cocoaview == nil) { - DEBUG(driver, 0, "Could not create the Quickdraw view."); - this->setup = false; - return false; - } - - [ this->cocoaview setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable ]; - [ [ this->window contentView ] addSubview:this->cocoaview ]; - [ this->cocoaview release ]; - [ this->window makeKeyAndOrderFront:nil ]; - } - - bool ret = this->WindowResized(); - this->UpdatePalette(0, 256); - - this->setup = false; - return ret; -} - -void WindowQuickdrawSubdriver::Blit32ToView32(int left, int top, int right, int bottom) -{ - const uint32 *src = (uint32*)this->pixel_buffer; - uint32 *dst = (uint32*)this->window_buffer; - uint width = this->window_width; - uint pitch = this->window_pitch / 4; - - dst += top * pitch + left; - src += top * width + left; - - for (int y = top; y < bottom; y++, dst+= pitch, src+= width) { - memcpy(dst, src, (right - left) * 4); - } -} - -void WindowQuickdrawSubdriver::BlitIndexedToView32(int left, int top, int right, int bottom) -{ - const uint32 *pal = this->palette; - const uint8 *src = (uint8*)this->pixel_buffer; - uint32 *dst = (uint32*)this->window_buffer; - uint width = this->window_width; - uint pitch = this->window_pitch / 4; - - for (int y = top; y < bottom; y++) { - for (int x = left; x < right; x++) { - dst[y * pitch + x] = pal[src[y * width + x]]; - } - } -} - -void WindowQuickdrawSubdriver::BlitIndexedToView16(int left, int top, int right, int bottom) -{ - const uint32 *pal = this->palette; - const uint8 *src = (uint8*)this->pixel_buffer; - uint16 *dst = (uint16*)this->window_buffer; - uint width = this->window_width; - uint pitch = this->window_pitch / 2; - - for (int y = top; y < bottom; y++) { - for (int x = left; x < right; x++) { - dst[y * pitch + x] = pal[src[y * width + x]]; - } - } -} - - -inline void WindowQuickdrawSubdriver::BlitToView(int left, int top, int right, int bottom) -{ - switch (this->device_depth) { - case 32: - switch (this->buffer_depth) { - case 32: - this->Blit32ToView32(left, top, right, bottom); - break; - case 8: - this->BlitIndexedToView32(left, top, right, bottom); - break; - } - break; - case 16: - this->BlitIndexedToView16(left, top, right, bottom); - break; - } -} - -void WindowQuickdrawSubdriver::DrawResizeIcon() -{ - int xoff = this->window_width - _resize_icon_width; - int yoff = this->window_height - _resize_icon_height; - - switch (this->device_depth) { - case 32: - for (int y = 0; y < _resize_icon_height; y++) { - uint32 *trg = (uint32*)this->window_buffer + (yoff + y) * this->window_pitch / 4 + xoff; - - for (int x = 0; x < _resize_icon_width; x++, trg++) { - if (_resize_icon[y * _resize_icon_width + x]) *trg = 0xff000000; - } - } - break; - case 16: - for (int y = 0; y < _resize_icon_height; y++) { - uint16 *trg = (uint16*)this->window_buffer + (yoff + y) * this->window_pitch / 2 + xoff; - - for (int x = 0; x < _resize_icon_width; x++, trg++) { - if (_resize_icon[y * _resize_icon_width + x]) *trg = 0x0000; - } - } - break; - } -} - - -WindowQuickdrawSubdriver::WindowQuickdrawSubdriver() -{ - this->window_width = 0; - this->window_height = 0; - this->buffer_depth = 0; - this->pixel_buffer = NULL; - this->active = false; - this->setup = false; - - this->window = nil; - this->cocoaview = nil; - - this->num_dirty_rects = MAX_DIRTY_RECTS; -} - -WindowQuickdrawSubdriver::~WindowQuickdrawSubdriver() -{ - /* Release window mode resources */ - if (this->window != nil) [ this->window close ]; - - free(this->pixel_buffer); -} - -void WindowQuickdrawSubdriver::Draw(bool force_update) -{ - PerformanceMeasurer framerate(PFE_VIDEO); - - /* Check if we need to do anything */ - if (this->num_dirty_rects == 0 || [ this->window isMiniaturized ]) return; - - if (this->num_dirty_rects >= MAX_DIRTY_RECTS) { - this->num_dirty_rects = 1; - this->dirty_rects[0].left = 0; - this->dirty_rects[0].top = 0; - this->dirty_rects[0].right = this->window_width; - this->dirty_rects[0].bottom = this->window_height; - } - - RgnHandle dirty = NewRgn(); - RgnHandle temp = NewRgn(); - - SetEmptyRgn(dirty); - - /* Build the region of dirty rectangles */ - for (int i = 0; i < this->num_dirty_rects; i++) { - this->BlitToView(this->dirty_rects[i].left, this->dirty_rects[i].top, - this->dirty_rects[i].right, this->dirty_rects[i].bottom); - - MacSetRectRgn(temp, this->dirty_rects[i].left, this->dirty_rects[i].top, - this->dirty_rects[i].right, this->dirty_rects[i].bottom); - MacUnionRgn(dirty, temp, dirty); - } - - this->DrawResizeIcon(); - - /* Flush the dirty region */ - QDFlushPortBuffer( (OpaqueGrafPtr*) [ this->cocoaview qdPort ], dirty); - DisposeRgn(dirty); - DisposeRgn(temp); - - this->num_dirty_rects = 0; -} - -void WindowQuickdrawSubdriver::MakeDirty(int left, int top, int width, int height) -{ - if (this->num_dirty_rects < MAX_DIRTY_RECTS) { - this->dirty_rects[this->num_dirty_rects].left = left; - this->dirty_rects[this->num_dirty_rects].top = top; - this->dirty_rects[this->num_dirty_rects].right = left + width; - this->dirty_rects[this->num_dirty_rects].bottom = top + height; - } - this->num_dirty_rects++; -} - -void WindowQuickdrawSubdriver::UpdatePalette(uint first_color, uint num_colors) -{ - if (this->buffer_depth != 8) return; - - switch (this->device_depth) { - case 32: - for (uint i = first_color; i < first_color + num_colors; i++) { - uint32 clr32 = 0xff000000; - clr32 |= (uint32)_cur_palette.palette[i].r << 16; - clr32 |= (uint32)_cur_palette.palette[i].g << 8; - clr32 |= (uint32)_cur_palette.palette[i].b; - this->palette[i] = clr32; - } - break; - case 16: - for (uint i = first_color; i < first_color + num_colors; i++) { - uint16 clr16 = 0x0000; - clr16 |= (uint16)((_cur_palette.palette[i].r >> 3) & 0x1f) << 10; - clr16 |= (uint16)((_cur_palette.palette[i].g >> 3) & 0x1f) << 5; - clr16 |= (uint16)((_cur_palette.palette[i].b >> 3) & 0x1f); - this->palette[i] = clr16; - } - break; - } - - this->num_dirty_rects = MAX_DIRTY_RECTS; -} - -uint WindowQuickdrawSubdriver::ListModes(OTTD_Point *modes, uint max_modes) -{ - return QZ_ListModes(modes, max_modes, kCGDirectMainDisplay, this->buffer_depth); -} - -bool WindowQuickdrawSubdriver::ChangeResolution(int w, int h, int bpp) -{ - int old_width = this->window_width; - int old_height = this->window_height; - int old_bpp = this->buffer_depth; - - if (this->SetVideoMode(w, h, bpp)) return true; - - if (old_width != 0 && old_height != 0) this->SetVideoMode(old_width, old_height, old_bpp); - - return false; -} - -/* Convert local coordinate to window server (CoreGraphics) coordinate */ -CGPoint WindowQuickdrawSubdriver::PrivateLocalToCG(NSPoint *p) -{ - *p = [ this->cocoaview convertPoint:*p toView: nil ]; - *p = [ this->window convertBaseToScreen:*p ]; - p->y = this->device_height - p->y; - - return CGPointMake(p->x, p->y); -} - -NSPoint WindowQuickdrawSubdriver::GetMouseLocation(NSEvent *event) -{ - NSPoint pt = [ event locationInWindow ]; - pt = [ this->cocoaview convertPoint:pt fromView:nil ]; - - return pt; -} - -bool WindowQuickdrawSubdriver::MouseIsInsideView(NSPoint *pt) -{ - return [ this->cocoaview mouse:*pt inRect:[ this->cocoaview bounds ] ]; -} - - -/* This function makes the *game region* of the window 100% opaque. - * The genie effect uses the alpha component. Otherwise, - * it doesn't seem to matter what value it has. - */ -void WindowQuickdrawSubdriver::SetPortAlphaOpaque() -{ - if (this->device_depth != 32) return; - - uint32 *pixels = (uint32*)this->window_buffer; - uint32 pitch = this->window_pitch / 4; - - for (int y = 0; y < this->window_height; y++) - for (int x = 0; x < this->window_width; x++) { - pixels[y * pitch + x] |= 0xFF000000; - } -} - -bool WindowQuickdrawSubdriver::WindowResized() -{ - if (this->window == nil || this->cocoaview == nil) return true; - - NSRect newframe = [ this->cocoaview frame ]; - CGrafPtr thePort = (OpaqueGrafPtr*) [ this->cocoaview qdPort ]; - - LockPortBits(thePort); - this->window_buffer = GetPixBaseAddr(GetPortPixMap(thePort)); - this->window_pitch = GetPixRowBytes(GetPortPixMap(thePort)); - UnlockPortBits(thePort); - - /* _cocoa_video_data.realpixels now points to the window's pixels - * We want it to point to the *view's* pixels - */ - int voff = [ this->window frame ].size.height - newframe.size.height - newframe.origin.y; - int hoff = [ this->cocoaview frame ].origin.x; - this->window_buffer = (uint8*)this->window_buffer + (voff * this->window_pitch) + hoff * (this->device_depth / 8); - - this->window_width = newframe.size.width; - this->window_height = newframe.size.height; - - free(this->pixel_buffer); - this->pixel_buffer = malloc(this->window_width * this->window_height * this->buffer_depth / 8); - if (this->pixel_buffer == NULL) { - DEBUG(driver, 0, "Failed to allocate pixel buffer"); - return false; - } - - QZ_GameSizeChanged(); - - /* Redraw screen */ - this->num_dirty_rects = MAX_DIRTY_RECTS; - - return true; -} - - -CocoaSubdriver *QZ_CreateWindowQuickdrawSubdriver(int width, int height, int bpp) -{ - WindowQuickdrawSubdriver *ret; - - if (MacOSVersionIsAtLeast(10, 5, 0)) { - DEBUG(driver, 0, "The cocoa quickdraw subdriver is not recommended for Mac OS X 10.5 or later."); - } - - if (bpp != 8 && bpp != 32) { - DEBUG(driver, 0, "The cocoa quickdraw subdriver only supports 8 and 32 bpp."); - return NULL; - } - - ret = new WindowQuickdrawSubdriver(); - - if (!ret->ChangeResolution(width, height, bpp)) { - delete ret; - return NULL; - } - - return ret; -} - -#endif /* ENABLE_COCOA_QUICKDRAW */ -#endif /* WITH_COCOA */ From 0e5be3887cd6d77a4f6ab1e8a1b23701de7f12e7 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 14:23:11 +0200 Subject: [PATCH 056/601] Remove: [OSX] Old fullscreen subdriver for pre 10.7 systems. Since the move to C++11, building for pre 10.7 is not possible with the native Apple tools. Also, due to bitrot, the file doesn't even compile anymore. While this could be fixed, it shows that this subdriver is basically never used anymore. --- config.lib | 2 +- source.list | 1 - src/video/cocoa/cocoa_v.h | 2 - src/video/cocoa/cocoa_v.mm | 55 +--- src/video/cocoa/fullscreen.mm | 523 ---------------------------------- 5 files changed, 8 insertions(+), 575 deletions(-) delete mode 100644 src/video/cocoa/fullscreen.mm diff --git a/config.lib b/config.lib index 8a5a4b3f32..5226d84afa 100644 --- a/config.lib +++ b/config.lib @@ -1652,7 +1652,7 @@ make_cflags_and_ldflags() { if [ "$with_cocoa" != "0" ]; then CFLAGS="$CFLAGS -DWITH_COCOA" - LIBS="$LIBS -F$osx_sdk_path/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox" + LIBS="$LIBS -F$osx_sdk_path/System/Library/Frameworks -framework Cocoa -framework AudioUnit -framework AudioToolbox" if [ "$enable_cocoa_quartz" != "0" ]; then CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ" diff --git a/source.list b/source.list index a4780f2ef4..0143bd9525 100644 --- a/source.list +++ b/source.list @@ -1171,7 +1171,6 @@ sound/null_s.cpp #if COCOA video/cocoa/cocoa_v.mm video/cocoa/event.mm - video/cocoa/fullscreen.mm video/cocoa/wnd_quartz.mm music/cocoa_m.cpp sound/cocoa_s.cpp diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 74cdc6946f..ee8c29c85d 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -189,8 +189,6 @@ public: extern CocoaSubdriver *_cocoa_subdriver; -CocoaSubdriver *QZ_CreateFullscreenSubdriver(int width, int height, int bpp); - #ifdef ENABLE_COCOA_QUARTZ #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp); diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 0bda21d25b..678fc75be5 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -414,37 +414,18 @@ static CocoaSubdriver *QZ_CreateWindowSubdriver(int width, int height, int bpp) */ static CocoaSubdriver *QZ_CreateSubdriver(int width, int height, int bpp, bool fullscreen, bool fallback) { - CocoaSubdriver *ret = NULL; - /* OSX 10.7 allows to toggle fullscreen mode differently */ - if (MacOSVersionIsAtLeast(10, 7, 0)) { - ret = QZ_CreateWindowSubdriver(width, height, bpp); - if (ret != NULL && fullscreen) ret->ToggleFullscreen(); - } -#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9) - else { - ret = fullscreen ? QZ_CreateFullscreenSubdriver(width, height, bpp) : QZ_CreateWindowSubdriver(width, height, bpp); - } -#endif /* (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9) */ + CocoaSubdriver *ret = QZ_CreateWindowSubdriver(width, height, bpp); + if (ret != nullptr && fullscreen) ret->ToggleFullscreen(); - if (ret != NULL) return ret; - if (!fallback) return NULL; + if (ret != nullptr) return ret; + if (!fallback) return nullptr; /* Try again in 640x480 windowed */ DEBUG(driver, 0, "Setting video mode failed, falling back to 640x480 windowed mode."); ret = QZ_CreateWindowSubdriver(640, 480, bpp); - if (ret != NULL) return ret; + if (ret != nullptr) return ret; -#if defined(_DEBUG) && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9) - /* This Fullscreen mode crashes on OSX 10.7 */ - if (!MacOSVersionIsAtLeast(10, 7, 0)) { - /* Try fullscreen too when in debug mode */ - DEBUG(driver, 0, "Setting video mode failed, falling back to 640x480 fullscreen mode."); - ret = QZ_CreateFullscreenSubdriver(640, 480, bpp); - if (ret != NULL) return ret; - } -#endif /* defined(_DEBUG) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9) */ - - return NULL; + return nullptr; } @@ -555,29 +536,7 @@ bool VideoDriver_Cocoa::ToggleFullscreen(bool full_screen) { assert(_cocoa_subdriver != NULL); - /* For 10.7 and later, we try to toggle using the quartz subdriver. */ - if (_cocoa_subdriver->ToggleFullscreen()) return true; - - bool oldfs = _cocoa_subdriver->IsFullscreen(); - if (full_screen != oldfs) { - int width = _cocoa_subdriver->GetWidth(); - int height = _cocoa_subdriver->GetHeight(); - int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth(); - - delete _cocoa_subdriver; - _cocoa_subdriver = NULL; - - _cocoa_subdriver = QZ_CreateSubdriver(width, height, bpp, full_screen, false); - if (_cocoa_subdriver == NULL) { - _cocoa_subdriver = QZ_CreateSubdriver(width, height, bpp, oldfs, true); - if (_cocoa_subdriver == NULL) error("Cocoa: Failed to create subdriver"); - } - } - - QZ_GameSizeChanged(); - QZ_UpdateVideoModes(); - - return _cocoa_subdriver->IsFullscreen() == full_screen; + return _cocoa_subdriver->ToggleFullscreen(); } /** diff --git a/src/video/cocoa/fullscreen.mm b/src/video/cocoa/fullscreen.mm deleted file mode 100644 index ae4353868d..0000000000 --- a/src/video/cocoa/fullscreen.mm +++ /dev/null @@ -1,523 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/****************************************************************************** - * Cocoa video driver * - * Known things left to do: * - * Scale© the old pixel buffer to the new one when switching resolution. * - ******************************************************************************/ - -#ifdef WITH_COCOA - -#include "../../stdafx.h" - -#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9) - -#define Rect OTTDRect -#define Point OTTDPoint -#import -#undef Rect -#undef Point - -#include "../../debug.h" -#include "../../core/geometry_type.hpp" -#include "../../core/sort_func.hpp" -#include "cocoa_v.h" -#include "../../gfx_func.h" -#include "../../thread.h" -#include "../../os/macosx/macos.h" - -/** - * Important notice regarding all modifications!!!!!!! - * There are certain limitations because the file is objective C++. - * gdb has limitations. - * C++ and objective C code can't be joined in all cases (classes stuff). - * Read http://developer.apple.com/releasenotes/Cocoa/Objective-C++.html for more information. - */ - - -/* From Menus.h (according to Xcode Developer Documentation) */ -extern "C" void ShowMenuBar(); -extern "C" void HideMenuBar(); - - -/* Structure for rez switch gamma fades - * We can hide the monitor flicker by setting the gamma tables to 0 - */ -#define QZ_GAMMA_TABLE_SIZE 256 - -struct OTTD_QuartzGammaTable { - CGGammaValue red[QZ_GAMMA_TABLE_SIZE]; - CGGammaValue green[QZ_GAMMA_TABLE_SIZE]; - CGGammaValue blue[QZ_GAMMA_TABLE_SIZE]; -}; - -/* Add methods to get at private members of NSScreen. - * Since there is a bug in Apple's screen switching code that does not update - * this variable when switching to fullscreen, we'll set it manually (but only - * for the main screen). - */ -@interface NSScreen (NSScreenAccess) - - (void) setFrame:(NSRect)frame; -@end - -@implementation NSScreen (NSScreenAccess) -- (void) setFrame:(NSRect)frame -{ -/* The 64 bits libraries don't seem to know about _frame, so this hack won't work. */ -#ifndef __LP64__ - _frame = frame; -#endif -} -@end - -class FullscreenSubdriver : public CocoaSubdriver { - CGDirectDisplayID display_id; ///< 0 == main display (only support single display) - CFDictionaryRef cur_mode; ///< current mode of the display - CFDictionaryRef save_mode; ///< original mode of the display - CGDirectPaletteRef palette; ///< palette of an 8-bit display - - - /* Gamma functions to try to hide the flash from a res switch - * Fade the display from normal to black - * Save gamma tables for fade back to normal - */ - uint32 FadeGammaOut(OTTD_QuartzGammaTable *table) - { - CGGammaValue redTable[QZ_GAMMA_TABLE_SIZE]; - CGGammaValue greenTable[QZ_GAMMA_TABLE_SIZE]; - CGGammaValue blueTable[QZ_GAMMA_TABLE_SIZE]; - - unsigned int actual; - if (CGGetDisplayTransferByTable(this->display_id, QZ_GAMMA_TABLE_SIZE, table->red, table->green, table->blue, &actual) != CGDisplayNoErr - || actual != QZ_GAMMA_TABLE_SIZE) { - return 1; - } - - memcpy(redTable, table->red, sizeof(redTable)); - memcpy(greenTable, table->green, sizeof(greenTable)); - memcpy(blueTable, table->blue, sizeof(greenTable)); - - for (float percent = 1.0; percent >= 0.0; percent -= 0.01) { - for (int j = 0; j < QZ_GAMMA_TABLE_SIZE; j++) { - redTable[j] = redTable[j] * percent; - greenTable[j] = greenTable[j] * percent; - blueTable[j] = blueTable[j] * percent; - } - - if (CGSetDisplayTransferByTable(this->display_id, QZ_GAMMA_TABLE_SIZE, redTable, greenTable, blueTable) != CGDisplayNoErr) { - CGDisplayRestoreColorSyncSettings(); - return 1; - } - - CSleep(10); - } - - return 0; - } - - /* Fade the display from black to normal - * Restore previously saved gamma values - */ - uint32 FadeGammaIn(const OTTD_QuartzGammaTable *table) - { - CGGammaValue redTable[QZ_GAMMA_TABLE_SIZE]; - CGGammaValue greenTable[QZ_GAMMA_TABLE_SIZE]; - CGGammaValue blueTable[QZ_GAMMA_TABLE_SIZE]; - - memset(redTable, 0, sizeof(redTable)); - memset(greenTable, 0, sizeof(greenTable)); - memset(blueTable, 0, sizeof(greenTable)); - - for (float percent = 0.0; percent <= 1.0; percent += 0.01) { - for (int j = 0; j < QZ_GAMMA_TABLE_SIZE; j++) { - redTable[j] = table->red[j] * percent; - greenTable[j] = table->green[j] * percent; - blueTable[j] = table->blue[j] * percent; - } - - if (CGSetDisplayTransferByTable(this->display_id, QZ_GAMMA_TABLE_SIZE, redTable, greenTable, blueTable) != CGDisplayNoErr) { - CGDisplayRestoreColorSyncSettings(); - return 1; - } - - CSleep(10); - } - - return 0; - } - - /** Wait for the VBL to occur (estimated since we don't have a hardware interrupt) */ - void WaitForVerticalBlank() - { - /* The VBL delay is based on Ian Ollmann's RezLib */ - - CFNumberRef refreshRateCFNumber = (const __CFNumber*)CFDictionaryGetValue(this->cur_mode, kCGDisplayRefreshRate); - if (refreshRateCFNumber == NULL) return; - - double refreshRate; - if (CFNumberGetValue(refreshRateCFNumber, kCFNumberDoubleType, &refreshRate) == 0) return; - - if (refreshRate == 0) return; - - double linesPerSecond = refreshRate * this->device_height; - double target = this->device_height; - - /* Figure out the first delay so we start off about right */ - double position = CGDisplayBeamPosition(this->display_id); - if (position > target) position = 0; - - double adjustment = (target - position) / linesPerSecond; - - CSleep((uint32)adjustment * 1000); - } - - - bool SetVideoMode(int w, int h, int bpp) - { - /* Define this variables at the top (against coding style) because - * otherwise GCC 4.2 barfs at the goto's jumping over variable initialization. */ - NSRect screen_rect; - int gamma_error; - NSPoint mouseLocation; - - /* Destroy any previous mode */ - if (this->pixel_buffer != NULL) { - free(this->pixel_buffer); - this->pixel_buffer = NULL; - } - - /* See if requested mode exists */ - boolean_t exact_match; - this->cur_mode = CGDisplayBestModeForParameters(this->display_id, bpp, w, h, &exact_match); - - /* If the mode wasn't an exact match, check if it has the right bpp, and update width and height */ - if (!exact_match) { - int act_bpp; - CFNumberRef number = (const __CFNumber*) CFDictionaryGetValue(this->cur_mode, kCGDisplayBitsPerPixel); - CFNumberGetValue(number, kCFNumberSInt32Type, &act_bpp); - if (act_bpp != bpp) { - DEBUG(driver, 0, "Failed to find display resolution"); - goto ERR_NO_MATCH; - } - - number = (const __CFNumber*)CFDictionaryGetValue(this->cur_mode, kCGDisplayWidth); - CFNumberGetValue(number, kCFNumberSInt32Type, &w); - - number = (const __CFNumber*)CFDictionaryGetValue(this->cur_mode, kCGDisplayHeight); - CFNumberGetValue(number, kCFNumberSInt32Type, &h); - } - - /* Capture the main screen */ - CGDisplayCapture(this->display_id); - - /* Store the mouse coordinates relative to the total screen */ - mouseLocation = [ NSEvent mouseLocation ]; - mouseLocation.x /= this->device_width; - mouseLocation.y /= this->device_height; - - /* Fade display to zero gamma */ - OTTD_QuartzGammaTable gamma_table; - gamma_error = this->FadeGammaOut(&gamma_table); - - /* Put up the blanking window (a window above all other windows) */ - if (CGDisplayCapture(this->display_id) != CGDisplayNoErr ) { - DEBUG(driver, 0, "Failed capturing display"); - goto ERR_NO_CAPTURE; - } - - /* Do the physical switch */ - if (CGDisplaySwitchToMode(this->display_id, this->cur_mode) != CGDisplayNoErr) { - DEBUG(driver, 0, "Failed switching display resolution"); - goto ERR_NO_SWITCH; - } - - /* Since CGDisplayBaseAddress and CGDisplayBytesPerRow are no longer available on 10.7, - * disable until a replacement can be found. */ - if (MacOSVersionIsAtLeast(10, 7, 0)) { - this->window_buffer = NULL; - this->window_pitch = 0; - } else { -#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7) - this->window_buffer = CGDisplayBaseAddress(this->display_id); - this->window_pitch = CGDisplayBytesPerRow(this->display_id); -#endif - } - - this->device_width = CGDisplayPixelsWide(this->display_id); - this->device_height = CGDisplayPixelsHigh(this->display_id); - this->device_depth = bpp; - - /* Setup double-buffer emulation */ - this->pixel_buffer = malloc(this->device_width * this->device_height * this->device_depth / 8); - if (this->pixel_buffer == NULL) { - DEBUG(driver, 0, "Failed to allocate memory for double buffering"); - goto ERR_DOUBLEBUF; - } - - if (this->device_depth == 8 && !CGDisplayCanSetPalette(this->display_id)) { - DEBUG(driver, 0, "Not an indexed display mode."); - goto ERR_NOT_INDEXED; - } - - /* If we don't hide menu bar, it will get events and interrupt the program */ - HideMenuBar(); - - /* Hide the OS cursor */ - CGDisplayHideCursor(this->display_id); - - /* Fade the display to original gamma */ - if (!gamma_error) FadeGammaIn(&gamma_table); - - /* There is a bug in Cocoa where NSScreen doesn't synchronize - * with CGDirectDisplay, so the main screen's frame is wrong. - * As a result, coordinate translation produces incorrect results. - * We can hack around this bug by setting the screen rect ourselves. - * This hack should be removed if/when the bug is fixed. - */ - screen_rect = NSMakeRect(0, 0, this->device_width, this->device_height); - [ [ NSScreen mainScreen ] setFrame:screen_rect ]; - - this->UpdatePalette(0, 256); - - /* Move the mouse cursor to approx. the same location */ - CGPoint display_mouseLocation; - display_mouseLocation.x = mouseLocation.x * this->device_width; - display_mouseLocation.y = this->device_height - (mouseLocation.y * this->device_height); - - _cursor.in_window = true; - - CGDisplayMoveCursorToPoint(this->display_id, display_mouseLocation); - - return true; - - /* Since the blanking window covers *all* windows (even force quit) correct recovery is crucial */ -ERR_NOT_INDEXED: - free(this->pixel_buffer); - this->pixel_buffer = NULL; -ERR_DOUBLEBUF: - CGDisplaySwitchToMode(this->display_id, this->save_mode); -ERR_NO_SWITCH: - CGReleaseAllDisplays(); -ERR_NO_CAPTURE: - if (!gamma_error) this->FadeGammaIn(&gamma_table); -ERR_NO_MATCH: - this->device_width = 0; - this->device_height = 0; - - return false; - } - - void RestoreVideoMode() - { - /* Release fullscreen resources */ - OTTD_QuartzGammaTable gamma_table; - int gamma_error = this->FadeGammaOut(&gamma_table); - - /* Restore original screen resolution/bpp */ - CGDisplaySwitchToMode(this->display_id, this->save_mode); - - CGReleaseAllDisplays(); - - /* Bring back the cursor */ - CGDisplayShowCursor(this->display_id); - - ShowMenuBar(); - - /* Reset the main screen's rectangle - * See comment in SetVideoMode for why we do this */ - NSRect screen_rect = NSMakeRect(0, 0, CGDisplayPixelsWide(this->display_id), CGDisplayPixelsHigh(this->display_id)); - [ [ NSScreen mainScreen ] setFrame:screen_rect ]; - - /* Destroy the pixel buffer */ - if (this->pixel_buffer != NULL) { - free(this->pixel_buffer); - this->pixel_buffer = NULL; - } - - if (!gamma_error) this->FadeGammaIn(&gamma_table); - - this->device_width = CGDisplayPixelsWide(this->display_id); - this->device_height = CGDisplayPixelsHigh(this->display_id); - } - -public: - FullscreenSubdriver() - { - /* Initialize the video settings; this data persists between mode switches */ - this->display_id = kCGDirectMainDisplay; - this->save_mode = CGDisplayCurrentMode(this->display_id); - - this->palette = CGPaletteCreateDefaultColorPalette(); - - this->device_width = CGDisplayPixelsWide(this->display_id); - this->device_height = CGDisplayPixelsHigh(this->display_id); - this->device_depth = 0; - this->pixel_buffer = NULL; - - this->num_dirty_rects = MAX_DIRTY_RECTS; - } - - virtual ~FullscreenSubdriver() - { - this->RestoreVideoMode(); - } - - virtual void Draw(bool force_update) - { - const uint8 *src = (uint8 *)this->pixel_buffer; - uint8 *dst = (uint8 *)this->window_buffer; - uint pitch = this->window_pitch; - uint width = this->device_width; - uint num_dirty = this->num_dirty_rects; - uint bytesperpixel = this->device_depth / 8; - - /* Check if we need to do anything */ - if (num_dirty == 0) return; - - if (num_dirty >= MAX_DIRTY_RECTS) { - num_dirty = 1; - this->dirty_rects[0].left = 0; - this->dirty_rects[0].top = 0; - this->dirty_rects[0].right = this->device_width; - this->dirty_rects[0].bottom = this->device_height; - } - - WaitForVerticalBlank(); - /* Build the region of dirty rectangles */ - for (uint i = 0; i < num_dirty; i++) { - uint y = this->dirty_rects[i].top; - uint left = this->dirty_rects[i].left; - uint length = this->dirty_rects[i].right - left; - uint bottom = this->dirty_rects[i].bottom; - - for (; y < bottom; y++) { - memcpy(dst + y * pitch + left * bytesperpixel, src + y * width * bytesperpixel + left * bytesperpixel, length * bytesperpixel); - } - } - - this->num_dirty_rects = 0; - } - - virtual void MakeDirty(int left, int top, int width, int height) - { - if (this->num_dirty_rects < MAX_DIRTY_RECTS) { - this->dirty_rects[this->num_dirty_rects].left = left; - this->dirty_rects[this->num_dirty_rects].top = top; - this->dirty_rects[this->num_dirty_rects].right = left + width; - this->dirty_rects[this->num_dirty_rects].bottom = top + height; - } - this->num_dirty_rects++; - } - - virtual void UpdatePalette(uint first_color, uint num_colors) - { - if (this->device_depth != 8) return; - - for (uint32_t index = first_color; index < first_color + num_colors; index++) { - /* Clamp colors between 0.0 and 1.0 */ - CGDeviceColor color; - color.red = _cur_palette.palette[index].r / 255.0; - color.blue = _cur_palette.palette[index].b / 255.0; - color.green = _cur_palette.palette[index].g / 255.0; - - CGPaletteSetColorAtIndex(this->palette, color, index); - } - - CGDisplaySetPalette(this->display_id, this->palette); - } - - virtual uint ListModes(OTTD_Point *modes, uint max_modes) - { - return QZ_ListModes(modes, max_modes, this->display_id, this->device_depth); - } - - virtual bool ChangeResolution(int w, int h, int bpp) - { - int old_width = this->device_width; - int old_height = this->device_height; - int old_bpp = this->device_depth; - - if (bpp != 8 && bpp != 32) error("Cocoa: This video driver only supports 8 and 32 bpp blitters."); - - if (SetVideoMode(w, h, bpp)) return true; - if (old_width != 0 && old_height != 0) SetVideoMode(old_width, old_height, old_bpp); - - return false; - } - - virtual bool IsFullscreen() - { - return true; - } - - virtual int GetWidth() - { - return this->device_width; - } - - virtual int GetHeight() - { - return this->device_height; - } - - virtual void *GetPixelBuffer() - { - return this->pixel_buffer; - } - - /* - * Convert local coordinate to window server (CoreGraphics) coordinate. - * In fullscreen mode this just means copying the coords. - */ - virtual CGPoint PrivateLocalToCG(NSPoint *p) - { - return CGPointMake(p->x, p->y); - } - - virtual NSPoint GetMouseLocation(NSEvent *event) - { - NSPoint pt = [ NSEvent mouseLocation ]; - pt.y = this->device_height - pt.y; - - return pt; - } - - virtual bool MouseIsInsideView(NSPoint *pt) - { - return pt->x >= 0 && pt->y >= 0 && pt->x < this->device_width && pt->y < this->device_height; - } - - virtual bool IsActive() - { - return true; - } -}; - -CocoaSubdriver *QZ_CreateFullscreenSubdriver(int width, int height, int bpp) -{ - /* OSX 10.7 doesn't support this way of the fullscreen driver. If we end up here - * OpenTTD was compiled without SDK 10.7 available and - and thus we don't support - * fullscreen mode in OSX 10.7 or higher, as necessary elements for this way have - * been removed from the API. - */ - if (MacOSVersionIsAtLeast(10, 7, 0)) { - return NULL; - } - - FullscreenSubdriver *ret = new FullscreenSubdriver(); - - if (!ret->ChangeResolution(width, height, bpp)) { - delete ret; - return NULL; - } - - return ret; -} - -#endif /* (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9) */ -#endif /* WITH_COCOA */ From 9dd8b3d430cc4d5f385b97e03e02fbc9865d069c Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 23:47:01 +0200 Subject: [PATCH 057/601] Remove: [OSX] Stuff that is pre-10.7 from the Cocoa/Quartz video driver. --- src/blitter/factory.hpp | 17 +--- src/video/cocoa/cocoa_v.h | 18 +--- src/video/cocoa/cocoa_v.mm | 167 +++++++--------------------------- src/video/cocoa/event.mm | 23 +---- src/video/cocoa/wnd_quartz.mm | 58 +----------- 5 files changed, 41 insertions(+), 242 deletions(-) diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp index e97fe53de7..30a70570be 100644 --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -16,9 +16,6 @@ #include "../core/string_compare_type.hpp" #include -#if defined(WITH_COCOA) -bool QZ_CanDisplay8bpp(); -#endif /* defined(WITH_COCOA) */ /** * The base factory, keeping track of all blitters. @@ -113,19 +110,11 @@ public: { #if defined(DEDICATED) const char *default_blitter = "null"; +#elif defined(WITH_COCOA) + const char *default_blitter = "32bpp-anim"; #else const char *default_blitter = "8bpp-optimized"; - -#if defined(WITH_COCOA) - /* Some people reported lack of fullscreen support in 8 bpp mode. - * While we prefer 8 bpp since it's faster, we will still have to test for support. */ - if (!QZ_CanDisplay8bpp()) { - /* The main display can't go to 8 bpp fullscreen mode. - * We will have to switch to 32 bpp by default. */ - default_blitter = "32bpp-anim"; - } -#endif /* defined(WITH_COCOA) */ -#endif /* defined(DEDICATED) */ +#endif if (GetBlitters().size() == 0) return nullptr; const char *bname = (StrEmpty(name)) ? default_blitter : name; diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index ee8c29c85d..7286c685b8 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -190,10 +190,8 @@ public: extern CocoaSubdriver *_cocoa_subdriver; #ifdef ENABLE_COCOA_QUARTZ -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp); #endif -#endif void QZ_GameSizeChanged(); @@ -223,16 +221,7 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i @end /** Subclass of NSView to fix Quartz rendering and mouse awareness */ -@interface OTTD_CocoaView : NSView -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 -# if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -# else - -# endif /* MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 */ -#else - -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 */ +@interface OTTD_CocoaView : NSView { CocoaSubdriver *driver; NSTrackingRectTag trackingtag; @@ -252,10 +241,7 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i @end /** Delegate for our NSWindow to send ask for quit on close */ -@interface OTTD_CocoaWindowDelegate : NSObject -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 - -#endif +@interface OTTD_CocoaWindowDelegate : NSObject { CocoaSubdriver *driver; } diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 678fc75be5..13a9cc9c47 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -45,10 +45,7 @@ */ -@interface OTTDMain : NSObject -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 - -#endif +@interface OTTDMain : NSObject @end @@ -159,7 +156,9 @@ static void setApplicationMenu() /* Tell the application object that this is now the application menu. * This interesting Objective-C construct is used because not all SDK * versions define this method publicly. */ - [ NSApp performSelector:@selector(setAppleMenu:) withObject:appleMenu ]; + if ([ NSApp respondsToSelector:@selector(setAppleMenu:) ]) { + [ NSApp performSelector:@selector(setAppleMenu:) withObject:appleMenu ]; + } /* Finally give up our references to the objects */ [ appleMenu release ]; @@ -204,13 +203,9 @@ static void setupApplication() /* Ensure the application object is initialised */ [ NSApplication sharedApplication ]; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 /* Tell the dock about us */ - if (MacOSVersionIsAtLeast(10, 3, 0)) { - OSStatus returnCode = TransformProcessType(&psn, kProcessTransformToForegroundApplication); - if (returnCode != 0) DEBUG(driver, 0, "Could not change to foreground application. Error %d", (int)returnCode); - } -#endif + OSStatus returnCode = TransformProcessType(&psn, kProcessTransformToForegroundApplication); + if (returnCode != 0) DEBUG(driver, 0, "Could not change to foreground application. Error %d", (int)returnCode); /* Disable the system-wide tab feature as we only have one window. */ if ([ NSWindow respondsToSelector:@selector(setAllowsAutomaticWindowTabbing:) ]) { @@ -243,57 +238,27 @@ static bool ModeSorter(const OTTD_Point &p1, const OTTD_Point &p2) static void QZ_GetDisplayModeInfo(CFArrayRef modes, CFIndex i, int &bpp, uint16 &width, uint16 &height) { - bpp = 0; - width = 0; - height = 0; + CGDisplayModeRef mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - if (MacOSVersionIsAtLeast(10, 6, 0)) { - CGDisplayModeRef mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i); - - width = (uint16)CGDisplayModeGetWidth(mode); - height = (uint16)CGDisplayModeGetHeight(mode); + width = (uint16)CGDisplayModeGetWidth(mode); + height = (uint16)CGDisplayModeGetHeight(mode); #if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11) - /* Extract bit depth from mode string. */ - CFAutoRelease pixEnc(CGDisplayModeCopyPixelEncoding(mode)); - if (CFStringCompare(pixEnc.get(), CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 32; - if (CFStringCompare(pixEnc.get(), CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 16; - if (CFStringCompare(pixEnc.get(), CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 8; + /* Extract bit depth from mode string. */ + CFAutoRelease pixEnc(CGDisplayModeCopyPixelEncoding(mode)); + if (CFStringCompare(pixEnc.get(), CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 32; + if (CFStringCompare(pixEnc.get(), CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 16; + if (CFStringCompare(pixEnc.get(), CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) bpp = 8; #else - /* CGDisplayModeCopyPixelEncoding is deprecated on OSX 10.11+, but there are no 8 bpp modes anyway... */ - bpp = 32; + /* CGDisplayModeCopyPixelEncoding is deprecated on OSX 10.11+, but there are no 8 bpp modes anyway... */ + bpp = 32; #endif - } else -#endif - { - int intvalue; - - CFDictionaryRef onemode = (const __CFDictionary*)CFArrayGetValueAtIndex(modes, i); - CFNumberRef number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayBitsPerPixel); - CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue); - bpp = intvalue; - - number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayWidth); - CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue); - width = (uint16)intvalue; - - number = (const __CFNumber*)CFDictionaryGetValue(onemode, kCGDisplayHeight); - CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue); - height = (uint16)intvalue; - } } uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_id, int device_depth) { -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - CFArrayRef mode_list = MacOSVersionIsAtLeast(10, 6, 0) ? CGDisplayCopyAllDisplayModes(display_id, NULL) : CGDisplayAvailableModes(display_id); -#elif (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - CFArrayRef mode_list = CGDisplayCopyAllDisplayModes(display_id, NULL); -#else - CFArrayRef mode_list = CGDisplayAvailableModes(display_id); -#endif - CFIndex num_modes = CFArrayGetCount(mode_list); + CFAutoRelease mode_list(CGDisplayCopyAllDisplayModes(display_id, nullptr)); + CFIndex num_modes = CFArrayGetCount(mode_list.get()); /* Build list of modes with the requested bpp */ uint count = 0; @@ -301,7 +266,7 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i int bpp; uint16 width, height; - QZ_GetDisplayModeInfo(mode_list, i, bpp, width, height); + QZ_GetDisplayModeInfo(mode_list.get(), i, bpp, width, height); if (bpp != device_depth) continue; @@ -325,29 +290,9 @@ uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_i /* Sort list smallest to largest */ std::sort(modes, modes + count, ModeSorter); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - if (MacOSVersionIsAtLeast(10, 6, 0)) CFRelease(mode_list); -#endif - return count; } -/** Small function to test if the main display can display 8 bpp in fullscreen */ -bool QZ_CanDisplay8bpp() -{ - /* 8bpp modes are deprecated starting in 10.5. CoreGraphics will return them - * as available in the display list, but many features (e.g. palette animation) - * will be broken. */ - if (MacOSVersionIsAtLeast(10, 5, 0)) return false; - - OTTD_Point p; - - /* We want to know if 8 bpp is possible in fullscreen and not anything about - * resolutions. Because of this we want to fill a list of 1 resolution of 8 bpp - * on display 0 (main) and return if we found one. */ - return QZ_ListModes(&p, 1, 0, 8); -} - /** * Update the video modus. * @@ -395,7 +340,7 @@ void QZ_GameSizeChanged() */ static CocoaSubdriver *QZ_CreateWindowSubdriver(int width, int height, int bpp) { -#if defined(ENABLE_COCOA_QUARTZ) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) +#if defined(ENABLE_COCOA_QUARTZ) return QZ_CreateWindowQuartzSubdriver(width, height, bpp); #else return nullptr; @@ -453,7 +398,7 @@ void VideoDriver_Cocoa::Stop() */ const char *VideoDriver_Cocoa::Start(const char * const *parm) { - if (!MacOSVersionIsAtLeast(10, 3, 0)) return "The Cocoa video driver requires Mac OS X 10.3 or later."; + if (!MacOSVersionIsAtLeast(10, 6, 0)) return "The Cocoa video driver requires Mac OS X 10.6 or later."; if (_cocoa_video_started) return "Already started"; _cocoa_video_started = true; @@ -554,16 +499,7 @@ bool VideoDriver_Cocoa::AfterBlitterChange() */ void VideoDriver_Cocoa::EditBoxLostFocus() { - if (_cocoa_subdriver != NULL) { - if ([ _cocoa_subdriver->cocoaview respondsToSelector:@selector(inputContext) ] && [ [ _cocoa_subdriver->cocoaview performSelector:@selector(inputContext) ] respondsToSelector:@selector(discardMarkedText) ]) { - [ [ _cocoa_subdriver->cocoaview performSelector:@selector(inputContext) ] performSelector:@selector(discardMarkedText) ]; - } -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - else { - [ [ NSInputManager currentInputManager ] markedTextAbandoned:_cocoa_subdriver->cocoaview ]; - } -#endif - } + if (_cocoa_subdriver != NULL) [ [ _cocoa_subdriver->cocoaview inputContext ] discardMarkedText ]; /* Clear any marked string from the current edit box. */ HandleTextInput(NULL, true); } @@ -589,22 +525,13 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel return; } -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3) - if (MacOSVersionIsAtLeast(10, 3, 0)) { - NSAlert *alert = [ [ NSAlert alloc ] init ]; - [ alert setAlertStyle: NSCriticalAlertStyle ]; - [ alert setMessageText:[ NSString stringWithUTF8String:title ] ]; - [ alert setInformativeText:[ NSString stringWithUTF8String:message ] ]; - [ alert addButtonWithTitle: [ NSString stringWithUTF8String:buttonLabel ] ]; - [ alert runModal ]; - [ alert release ]; - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3) - NSRunAlertPanel([ NSString stringWithUTF8String:title ], [ NSString stringWithUTF8String:message ], [ NSString stringWithUTF8String:buttonLabel ], nil, nil); -#endif - } + NSAlert *alert = [ [ NSAlert alloc ] init ]; + [ alert setAlertStyle: NSCriticalAlertStyle ]; + [ alert setMessageText:[ NSString stringWithUTF8String:title ] ]; + [ alert setInformativeText:[ NSString stringWithUTF8String:message ] ]; + [ alert addButtonWithTitle: [ NSString stringWithUTF8String:buttonLabel ] ]; + [ alert runModal ]; + [ alert release ]; if (!wasstarted && VideoDriver::GetInstance() != NULL) VideoDriver::GetInstance()->Stop(); @@ -1030,17 +957,7 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count) { if (!EditBoxInGlobalFocus()) return NSNotFound; - NSPoint view_pt = NSZeroPoint; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7) - if ([ [ self window ] respondsToSelector:@selector(convertRectFromScreen:) ]) { - view_pt = [ self convertRect:[ [ self window ] convertRectFromScreen:NSMakeRect(thePoint.x, thePoint.y, 0, 0) ] fromView:nil ].origin; - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7) - view_pt = [ self convertPoint:[ [ self window ] convertScreenToBase:thePoint ] fromView:nil ]; -#endif - } + NSPoint view_pt = [ self convertRect:[ [ self window ] convertRectFromScreen:NSMakeRect(thePoint.x, thePoint.y, 0, 0) ] fromView:nil ].origin; Point pt = { (int)view_pt.x, (int)[ self frame ].size.height - (int)view_pt.y }; @@ -1063,19 +980,7 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count) Rect r = _focused_window->GetTextBoundingRect(start, end); NSRect view_rect = NSMakeRect(_focused_window->left + r.left, [ self frame ].size.height - _focused_window->top - r.bottom, r.right - r.left, r.bottom - r.top); -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - if ([ [ self window ] respondsToSelector:@selector(convertRectToScreen:) ]) { - return [ [ self window ] convertRectToScreen:[ self convertRect:view_rect toView:nil ] ]; - } -#endif - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 - NSRect window_rect = [ self convertRect:view_rect toView:nil ]; - NSPoint origin = [ [ self window ] convertBaseToScreen:window_rect.origin ]; - return NSMakeRect(origin.x, origin.y, window_rect.size.width, window_rect.size.height); -#else - return NSMakeRect(0, 0, 0, 0);; -#endif + return [ [ self window ] convertRectToScreen:[ self convertRect:view_rect toView:nil ] ]; } /** Get the bounding rect for the given range. */ @@ -1090,16 +995,6 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count) return [ NSArray array ]; } -/** Identifier for this text input instance. */ -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 -- (long)conversationIdentifier -#else -- (NSInteger)conversationIdentifier -#endif -{ - return 0; -} - /** Delete single character left of the cursor. */ - (void)deleteBackward:(id)sender { diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm index f45c3e971f..cb3c753aca 100644 --- a/src/video/cocoa/event.mm +++ b/src/video/cocoa/event.mm @@ -59,28 +59,12 @@ enum RightMouseButtonEmulationState { static unsigned int _current_mods; static bool _tab_is_down; static bool _emulating_right_button; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) static float _current_magnification; -#endif #ifdef _DEBUG static uint32 _tEvent; #endif -/* Support for touch gestures is only available starting with the - * 10.6 SDK, even if it says that support starts in fact with 10.5.2. - * Replicate the needed stuff for older SDKs. */ -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 && MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6) -static const NSUInteger NSEventTypeMagnify = 30; -static const NSUInteger NSEventTypeEndGesture = 20; - -@interface NSEvent () -/* This message is valid for events of type NSEventTypeMagnify, on 10.5.2 or later */ -- (CGFloat)magnification WEAK_IMPORT_ATTRIBUTE; -@end -#endif - - static uint32 GetTick() { struct timeval tim; @@ -579,16 +563,13 @@ static bool QZ_PollEvent() CGFloat deltaY; /* Use precise scrolling-specific deltas if they're supported. */ -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7) if ([event respondsToSelector:@selector(hasPreciseScrollingDeltas)]) { /* No precise deltas indicates a scroll wheel is being used, so we don't want 2D scrolling. */ if (![ event hasPreciseScrollingDeltas ]) break; deltaX = [ event scrollingDeltaX ] * 0.5f; deltaY = [ event scrollingDeltaY ] * 0.5f; - } else -#endif - { + } else { deltaX = [ event deltaX ] * 5; deltaY = [ event deltaY ] * 5; } @@ -598,7 +579,6 @@ static bool QZ_PollEvent() break; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) case NSEventTypeMagnify: /* Pinch open or close gesture. */ _current_magnification += [ event magnification ] * 5.0f; @@ -619,7 +599,6 @@ static bool QZ_PollEvent() /* Gesture ended. */ _current_magnification = 0.0f; break; -#endif case NSCursorUpdate: case NSMouseEntered: diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index c73dd32e7d..8549100d90 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -17,8 +17,6 @@ #include "../../stdafx.h" #include "../../os/macosx/macos.h" -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 - #define Rect OTTDRect #define Point OTTDPoint #import @@ -194,21 +192,6 @@ void WindowQuartzSubdriver::GetDeviceInfo() /* Initialize the video settings; this data persists between mode switches * and gather some information that is useful to know about the display */ -# if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 - /* This way is deprecated as of OSX 10.6 but continues to work.Thus use it - * always, unless allowed to skip compatibility with 10.5 and earlier */ - CFDictionaryRef cur_mode = CGDisplayCurrentMode(kCGDirectMainDisplay); - - CFNumberGetValue( - (const __CFNumber*)CFDictionaryGetValue(cur_mode, kCGDisplayWidth), - kCFNumberSInt32Type, &this->device_width - ); - - CFNumberGetValue( - (const __CFNumber*)CFDictionaryGetValue(cur_mode, kCGDisplayHeight), - kCFNumberSInt32Type, &this->device_height - ); -# else /* Use the new API when compiling for OSX 10.6 or later */ CGDisplayModeRef cur_mode = CGDisplayCopyDisplayMode(kCGDirectMainDisplay); if (cur_mode == NULL) { return; } @@ -217,7 +200,6 @@ void WindowQuartzSubdriver::GetDeviceInfo() this->device_height = CGDisplayModeGetHeight(cur_mode); CGDisplayModeRelease(cur_mode); -# endif } /** Switch to full screen mode on OSX 10.7 @@ -265,18 +247,11 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) return false; } -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 /* Add built in full-screen support when available (OS X 10.7 and higher) * This code actually compiles for 10.5 and later, but only makes sense in conjunction * with the quartz fullscreen support as found only in 10.7 and later */ if ([this->window respondsToSelector:@selector(toggleFullScreen:)]) { -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 - /* Constants needed to build on pre-10.7 SDKs. Source: NSWindow documentation. */ - const int NSWindowCollectionBehaviorFullScreenPrimary = 1 << 7; - const int NSWindowFullScreenButton = 7; -#endif - NSWindowCollectionBehavior behavior = [ this->window collectionBehavior ]; behavior |= NSWindowCollectionBehaviorFullScreenPrimary; [ this->window setCollectionBehavior:behavior ]; @@ -287,7 +262,6 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) [ this->window setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary ]; } -#endif [ this->window setDriver:this ]; @@ -303,10 +277,6 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) [ this->window setAcceptsMouseMovedEvents:YES ]; [ this->window setViewsNeedDisplay:NO ]; -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10 - if ([ this->window respondsToSelector:@selector(useOptimizedDrawing:) ]) [ this->window useOptimizedDrawing:YES ]; -#endif - delegate = [ [ OTTD_CocoaWindowDelegate alloc ] init ]; [ delegate setDriver:this ]; [ this->window setDelegate:[ delegate autorelease ] ]; @@ -494,17 +464,8 @@ CGPoint WindowQuartzSubdriver::PrivateLocalToCG(NSPoint *p) p->y = this->window_height - p->y; *p = [ this->cocoaview convertPoint:*p toView:nil ]; + *p = [ this->window convertRectToScreen:NSMakeRect(p->x, p->y, 0, 0) ].origin; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - if ([ this->window respondsToSelector:@selector(convertRectToScreen:) ]) { - *p = [ this->window convertRectToScreen:NSMakeRect(p->x, p->y, 0, 0) ].origin; - } else -#endif - { -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 - *p = [ this->window convertBaseToScreen:*p ]; -#endif - } p->y = this->device_height - p->y; CGPoint cgp; @@ -519,17 +480,7 @@ NSPoint WindowQuartzSubdriver::GetMouseLocation(NSEvent *event) NSPoint pt; if ( [ event window ] == nil) { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - if ([ [ this->cocoaview window ] respondsToSelector:@selector(convertRectFromScreen:) ]) { - pt = [ this->cocoaview convertPoint:[ [ this->cocoaview window ] convertRectFromScreen:NSMakeRect([ event locationInWindow ].x, [ event locationInWindow ].y, 0, 0) ].origin fromView:nil ]; - } - else -#endif - { -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 - pt = [ this->cocoaview convertPoint:[ [ this->cocoaview window ] convertScreenToBase:[ event locationInWindow ] ] fromView:nil ]; -#endif - } + pt = [ this->cocoaview convertPoint:[ [ this->cocoaview window ] convertRectFromScreen:NSMakeRect([ event locationInWindow ].x, [ event locationInWindow ].y, 0, 0) ].origin fromView:nil ]; } else { pt = [ event locationInWindow ]; } @@ -609,8 +560,8 @@ bool WindowQuartzSubdriver::WindowResized() CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp) { - if (!MacOSVersionIsAtLeast(10, 4, 0)) { - DEBUG(driver, 0, "The cocoa quartz subdriver requires Mac OS X 10.4 or later."); + if (!MacOSVersionIsAtLeast(10, 7, 0)) { + DEBUG(driver, 0, "The cocoa quartz subdriver requires Mac OS X 10.7 or later."); return NULL; } @@ -630,6 +581,5 @@ CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp) } -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 */ #endif /* ENABLE_COCOA_QUARTZ */ #endif /* WITH_COCOA */ From b17ea3de361a14c9adaabbd576c15cce0cfe5809 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 23:48:32 +0200 Subject: [PATCH 058/601] Remove: [OSX] Support for the pre-10.5 audio/music APIs. --- src/music/cocoa_m.cpp | 53 ++++--------------------------- src/sound/cocoa_s.cpp | 73 ++++++++++--------------------------------- 2 files changed, 23 insertions(+), 103 deletions(-) diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp index f9b8969fdf..9fec5ba15b 100644 --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -58,34 +58,10 @@ static void DoSetVolume() AUGraphGetIndNode(graph, i, &node); AudioUnit unit; - OSType comp_type = 0; + AudioComponentDescription desc; + AUGraphNodeInfo(graph, node, &desc, &unit); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - /* The 10.6 SDK has changed the function prototype of - * AUGraphNodeInfo. This is a binary compatible change, - * but we need to get the type declaration right or - * risk compilation errors. The header AudioComponent.h - * was introduced in 10.6 so use it to decide which - * type definition to use. */ -#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK) - AudioComponentDescription desc; -#else - ComponentDescription desc; -#endif - AUGraphNodeInfo(graph, node, &desc, &unit); - comp_type = desc.componentType; - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - ComponentDescription desc; - AUGraphGetNodeInfo(graph, node, &desc, nullptr, nullptr, &unit); - comp_type = desc.componentType; -#endif - } - - if (comp_type == kAudioUnitType_Output) { + if (desc.componentType == kAudioUnitType_Output) { output_unit = unit; break; } @@ -161,26 +137,9 @@ void MusicDriver_Cocoa::PlaySong(const MusicSongInfo &song) const char *os_file = OTTD2FS(filename.c_str()); CFAutoRelease url(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8*)os_file, strlen(os_file), false)); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - if (MusicSequenceFileLoad(_sequence, url.get(), kMusicSequenceFile_AnyType, 0) != noErr) { - DEBUG(driver, 0, "cocoa_m: Failed to load MIDI file"); - return; - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - FSRef ref_file; - if (!CFURLGetFSRef(url.get(), &ref_file)) { - DEBUG(driver, 0, "cocoa_m: Failed to make FSRef"); - return; - } - if (MusicSequenceLoadSMFWithFlags(_sequence, &ref_file, 0) != noErr) { - DEBUG(driver, 0, "cocoa_m: Failed to load MIDI file old style"); - return; - } -#endif + if (MusicSequenceFileLoad(_sequence, url.get(), kMusicSequenceFile_AnyType, 0) != noErr) { + DEBUG(driver, 0, "cocoa_m: Failed to load MIDI file"); + return; } /* Construct audio graph */ diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp index 10fae12a60..cb1bc59e80 100644 --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -68,49 +68,22 @@ const char *SoundDriver_Cocoa::Start(const char * const *parm) MxInitialize((uint)requestedDesc.mSampleRate); -#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK) - if (MacOSVersionIsAtLeast(10, 6, 0)) { - /* Locate the default output audio unit */ - AudioComponentDescription desc; - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_HALOutput; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; + /* Locate the default output audio unit */ + AudioComponentDescription desc; + desc.componentType = kAudioUnitType_Output; + desc.componentSubType = kAudioUnitSubType_HALOutput; + desc.componentManufacturer = kAudioUnitManufacturer_Apple; + desc.componentFlags = 0; + desc.componentFlagsMask = 0; - AudioComponent comp = AudioComponentFindNext (nullptr, &desc); - if (comp == nullptr) { - return "cocoa_s: Failed to start CoreAudio: AudioComponentFindNext returned nullptr"; - } + AudioComponent comp = AudioComponentFindNext (nullptr, &desc); + if (comp == nullptr) { + return "cocoa_s: Failed to start CoreAudio: AudioComponentFindNext returned nullptr"; + } - /* Open & initialize the default output audio unit */ - if (AudioComponentInstanceNew(comp, &_outputAudioUnit) != noErr) { - return "cocoa_s: Failed to start CoreAudio: AudioComponentInstanceNew"; - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - /* Locate the default output audio unit */ - ComponentDescription desc; - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_HALOutput; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; - - Component comp = FindNextComponent (nullptr, &desc); - if (comp == nullptr) { - return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned nullptr"; - } - - /* Open & initialize the default output audio unit */ - if (OpenAComponent(comp, &_outputAudioUnit) != noErr) { - return "cocoa_s: Failed to start CoreAudio: OpenAComponent"; - } -#else - return "cocoa_s: Not supported on this OS X version"; -#endif + /* Open & initialize the default output audio unit */ + if (AudioComponentInstanceNew(comp, &_outputAudioUnit) != noErr) { + return "cocoa_s: Failed to start CoreAudio: AudioComponentInstanceNew"; } if (AudioUnitInitialize(_outputAudioUnit) != noErr) { @@ -157,21 +130,9 @@ void SoundDriver_Cocoa::Stop() return; } -#if defined(__AUDIOCOMPONENT_H__) || defined(HAVE_OSX_107_SDK) - if (MacOSVersionIsAtLeast(10, 6, 0)) { - if (AudioComponentInstanceDispose(_outputAudioUnit) != noErr) { - DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: AudioComponentInstanceDispose failed"); - return; - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - if (CloseComponent(_outputAudioUnit) != noErr) { - DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: CloseComponent failed"); - return; - } -#endif + if (AudioComponentInstanceDispose(_outputAudioUnit) != noErr) { + DEBUG(driver, 0, "cocoa_s: Core_CloseAudio: AudioComponentInstanceDispose failed"); + return; } } From c21a298a8ae13caa975367229855dc29622ddcf5 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 23:50:57 +0200 Subject: [PATCH 059/601] Remove: [OSX] Support for the pre 10.6 ATS font selection. --- src/fontdetection.cpp | 218 ++++++++++++++---------------------------- 1 file changed, 72 insertions(+), 146 deletions(-) diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp index d147415487..9cfc9f5540 100644 --- a/src/fontdetection.cpp +++ b/src/fontdetection.cpp @@ -394,51 +394,19 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) OSStatus os_err = -1; CFAutoRelease name(CFStringCreateWithCString(kCFAllocatorDefault, font_name, kCFStringEncodingUTF8)); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - if (MacOSVersionIsAtLeast(10, 6, 0)) { - /* Simply creating the font using CTFontCreateWithNameAndSize will *always* return - * something, no matter the name. As such, we can't use it to check for existence. - * We instead query the list of all font descriptors that match the given name which - * does not do this stupid name fallback. */ - CFAutoRelease name_desc(CTFontDescriptorCreateWithNameAndSize(name.get(), 0.0)); - CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontNameAttribute, 1, &kCFTypeSetCallBacks)); - CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(name_desc.get(), mandatory_attribs.get())); + /* Simply creating the font using CTFontCreateWithNameAndSize will *always* return + * something, no matter the name. As such, we can't use it to check for existence. + * We instead query the list of all font descriptors that match the given name which + * does not do this stupid name fallback. */ + CFAutoRelease name_desc(CTFontDescriptorCreateWithNameAndSize(name.get(), 0.0)); + CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontNameAttribute, 1, &kCFTypeSetCallBacks)); + CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(name_desc.get(), mandatory_attribs.get())); - /* Loop over all matches until we can get a path for one of them. */ - for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()) && os_err != noErr; i++) { - CFAutoRelease font(CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i), 0.0, nullptr)); - CFAutoRelease fontURL((CFURLRef)CTFontCopyAttribute(font.get(), kCTFontURLAttribute)); - if (CFURLGetFileSystemRepresentation(fontURL.get(), true, file_path, lengthof(file_path))) os_err = noErr; - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - ATSFontRef font = ATSFontFindFromName(name.get(), kATSOptionFlagsDefault); - if (font == kInvalidFont) return err; - - /* Get a file system reference for the font. */ - FSRef ref; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - os_err = ATSFontGetFileReference(font, &ref); - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) && !defined(__LP64__) - /* This type was introduced with the 10.5 SDK. */ -#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) -#define ATSFSSpec FSSpec -#endif - FSSpec spec; - os_err = ATSFontGetFileSpecification(font, (ATSFSSpec *)&spec); - if (os_err == noErr) os_err = FSpMakeFSRef(&spec, &ref); -#endif - } - - /* Get unix path for file. */ - if (os_err == noErr) os_err = FSRefMakePath(&ref, file_path, sizeof(file_path)); -#endif + /* Loop over all matches until we can get a path for one of them. */ + for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()) && os_err != noErr; i++) { + CFAutoRelease font(CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i), 0.0, nullptr)); + CFAutoRelease fontURL((CFURLRef)CTFontCopyAttribute(font.get(), kCTFontURLAttribute)); + if (CFURLGetFileSystemRepresentation(fontURL.get(), true, file_path, lengthof(file_path))) os_err = noErr; } if (os_err == noErr) { @@ -451,111 +419,69 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, MissingGlyphSearcher *callback) { + /* Determine fallback font using CoreText. This uses the language isocode + * to find a suitable font. CoreText is available from 10.5 onwards. */ + char lang[16]; + if (strcmp(language_isocode, "zh_TW") == 0) { + /* Traditional Chinese */ + strecpy(lang, "zh-Hant", lastof(lang)); + } else if (strcmp(language_isocode, "zh_CN") == 0) { + /* Simplified Chinese */ + strecpy(lang, "zh-Hans", lastof(lang)); + } else { + /* Just copy the first part of the isocode. */ + strecpy(lang, language_isocode, lastof(lang)); + char *sep = strchr(lang, '_'); + if (sep != nullptr) *sep = '\0'; + } + + /* Create a font descriptor matching the wanted language and latin (english) glyphs. + * Can't use CFAutoRelease here for everything due to the way the dictionary has to be created. */ + CFStringRef lang_codes[2]; + lang_codes[0] = CFStringCreateWithCString(kCFAllocatorDefault, lang, kCFStringEncodingUTF8); + lang_codes[1] = CFSTR("en"); + CFArrayRef lang_arr = CFArrayCreate(kCFAllocatorDefault, (const void **)lang_codes, lengthof(lang_codes), &kCFTypeArrayCallBacks); + CFAutoRelease lang_attribs(CFDictionaryCreate(kCFAllocatorDefault, (const void**)&kCTFontLanguagesAttribute, (const void **)&lang_arr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); + CFAutoRelease lang_desc(CTFontDescriptorCreateWithAttributes(lang_attribs.get())); + CFRelease(lang_arr); + CFRelease(lang_codes[0]); + + /* Get array of all font descriptors for the wanted language. */ + CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontLanguagesAttribute, 1, &kCFTypeSetCallBacks)); + CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(lang_desc.get(), mandatory_attribs.get())); + bool result = false; + for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()); i++) { + CTFontDescriptorRef font = (CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - /* Determine fallback font using CoreText. This uses the language isocode - * to find a suitable font. CoreText is available from 10.5 onwards. */ - char lang[16]; - if (strcmp(language_isocode, "zh_TW") == 0) { - /* Traditional Chinese */ - strecpy(lang, "zh-Hant", lastof(lang)); - } else if (strcmp(language_isocode, "zh_CN") == 0) { - /* Simplified Chinese */ - strecpy(lang, "zh-Hans", lastof(lang)); - } else { - /* Just copy the first part of the isocode. */ - strecpy(lang, language_isocode, lastof(lang)); - char *sep = strchr(lang, '_'); - if (sep != nullptr) *sep = '\0'; + /* Get font traits. */ + CFAutoRelease traits((CFDictionaryRef)CTFontDescriptorCopyAttribute(font, kCTFontTraitsAttribute)); + CTFontSymbolicTraits symbolic_traits; + CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait), kCFNumberIntType, &symbolic_traits); + + /* Skip symbol fonts and vertical fonts. */ + if ((symbolic_traits & kCTFontClassMaskTrait) == (CTFontStylisticClass)kCTFontSymbolicClass || (symbolic_traits & kCTFontVerticalTrait)) continue; + /* Skip bold fonts (especially Arial Bold, which looks worse than regular Arial). */ + if (symbolic_traits & kCTFontBoldTrait) continue; + /* Select monospaced fonts if asked for. */ + if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != callback->Monospace()) continue; + + /* Get font name. */ + char name[128]; + CFAutoRelease font_name((CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontDisplayNameAttribute)); + CFStringGetCString(font_name.get(), name, lengthof(name), kCFStringEncodingUTF8); + + /* There are some special fonts starting with an '.' and the last + * resort font that aren't usable. Skip them. */ + if (name[0] == '.' || strncmp(name, "LastResort", 10) == 0) continue; + + /* Save result. */ + callback->SetFontNames(settings, name); + if (!callback->FindMissingGlyphs(nullptr)) { + DEBUG(freetype, 2, "CT-Font for %s: %s", language_isocode, name); + result = true; + break; } - - /* Create a font descriptor matching the wanted language and latin (english) glyphs. - * Can't use CFAutoRelease here for everything due to the way the dictionary has to be created. */ - CFStringRef lang_codes[2]; - lang_codes[0] = CFStringCreateWithCString(kCFAllocatorDefault, lang, kCFStringEncodingUTF8); - lang_codes[1] = CFSTR("en"); - CFArrayRef lang_arr = CFArrayCreate(kCFAllocatorDefault, (const void **)lang_codes, lengthof(lang_codes), &kCFTypeArrayCallBacks); - CFAutoRelease lang_attribs(CFDictionaryCreate(kCFAllocatorDefault, (const void**)&kCTFontLanguagesAttribute, (const void **)&lang_arr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - CFAutoRelease lang_desc(CTFontDescriptorCreateWithAttributes(lang_attribs.get())); - CFRelease(lang_arr); - CFRelease(lang_codes[0]); - - /* Get array of all font descriptors for the wanted language. */ - CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontLanguagesAttribute, 1, &kCFTypeSetCallBacks)); - CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(lang_desc.get(), mandatory_attribs.get())); - - for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()); i++) { - CTFontDescriptorRef font = (CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i); - - /* Get font traits. */ - CFAutoRelease traits((CFDictionaryRef)CTFontDescriptorCopyAttribute(font, kCTFontTraitsAttribute)); - CTFontSymbolicTraits symbolic_traits; - CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait), kCFNumberIntType, &symbolic_traits); - - /* Skip symbol fonts and vertical fonts. */ - if ((symbolic_traits & kCTFontClassMaskTrait) == (CTFontStylisticClass)kCTFontSymbolicClass || (symbolic_traits & kCTFontVerticalTrait)) continue; - /* Skip bold fonts (especially Arial Bold, which looks worse than regular Arial). */ - if (symbolic_traits & kCTFontBoldTrait) continue; - /* Select monospaced fonts if asked for. */ - if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != callback->Monospace()) continue; - - /* Get font name. */ - char name[128]; - CFAutoRelease font_name((CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontDisplayNameAttribute)); - CFStringGetCString(font_name.get(), name, lengthof(name), kCFStringEncodingUTF8); - - /* There are some special fonts starting with an '.' and the last - * resort font that aren't usable. Skip them. */ - if (name[0] == '.' || strncmp(name, "LastResort", 10) == 0) continue; - - /* Save result. */ - callback->SetFontNames(settings, name); - if (!callback->FindMissingGlyphs(nullptr)) { - DEBUG(freetype, 2, "CT-Font for %s: %s", language_isocode, name); - result = true; - break; - } - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - /* Create a font iterator and iterate over all fonts that - * are available to the application. */ - ATSFontIterator itr; - ATSFontRef font; - ATSFontIteratorCreate(kATSFontContextLocal, nullptr, nullptr, kATSOptionFlagsDefaultScope, &itr); - while (!result && ATSFontIteratorNext(itr, &font) == noErr) { - /* Get font name. */ - char name[128]; - CFStringRef font_name; - ATSFontGetName(font, kATSOptionFlagsDefault, &font_name); - CFStringGetCString(font_name, name, lengthof(name), kCFStringEncodingUTF8); - - bool monospace = IsMonospaceFont(font_name); - CFRelease(font_name); - - /* Select monospaced fonts if asked for. */ - if (monospace != callback->Monospace()) continue; - - /* We only want the base font and not bold or italic variants. */ - if (strstr(name, "Italic") != nullptr || strstr(name, "Bold")) continue; - - /* Skip some inappropriate or ugly looking fonts that have better alternatives. */ - if (name[0] == '.' || strncmp(name, "Apple Symbols", 13) == 0 || strncmp(name, "LastResort", 10) == 0) continue; - - /* Save result. */ - callback->SetFontNames(settings, name); - if (!callback->FindMissingGlyphs(nullptr)) { - DEBUG(freetype, 2, "ATS-Font for %s: %s", language_isocode, name); - result = true; - break; - } - } - ATSFontIteratorRelease(&itr); -#endif } if (!result) { From e9294ce4e30409fa84755fb7a77fb2770d433e62 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 10 Apr 2020 23:53:07 +0200 Subject: [PATCH 060/601] Cleanup: [OSX] Mop up some remaining stuff catering to compiling with very old SDK versions. --- src/os/macosx/crashlog_osx.cpp | 6 ++++-- src/os/macosx/macos.mm | 21 ++++----------------- src/os/macosx/string_osx.cpp | 22 ---------------------- 3 files changed, 8 insertions(+), 41 deletions(-) diff --git a/src/os/macosx/crashlog_osx.cpp b/src/os/macosx/crashlog_osx.cpp index 17686d9e1a..a1470b6d63 100644 --- a/src/os/macosx/crashlog_osx.cpp +++ b/src/os/macosx/crashlog_osx.cpp @@ -63,10 +63,12 @@ class CrashLogOSX : public CrashLog { " Name: Mac OS X\n" " Release: %d.%d.%d\n" " Machine: %s\n" - " Min Ver: %d\n", + " Min Ver: %d\n" + " Max Ver: %d\n", ver_maj, ver_min, ver_bug, arch != nullptr ? arch->description : "unknown", - MAC_OS_X_VERSION_MIN_REQUIRED + MAC_OS_X_VERSION_MIN_REQUIRED, + MAC_OS_X_VERSION_MAX_ALLOWED ); } diff --git a/src/os/macosx/macos.mm b/src/os/macosx/macos.mm index 33d2ad2192..19e1d4b768 100644 --- a/src/os/macosx/macos.mm +++ b/src/os/macosx/macos.mm @@ -161,19 +161,8 @@ const char *GetCurrentLocale(const char *) NSString *preferredLang = [ languages objectAtIndex:0 ]; /* preferredLang is either 2 or 5 characters long ("xx" or "xx_YY"). */ - /* Since Apple introduced encoding to CString in OSX 10.4 we have to make a few conditions - * to get the right code for the used version of OSX. */ -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) - if (MacOSVersionIsAtLeast(10, 4, 0)) { - [ preferredLang getCString:retbuf maxLength:32 encoding:NSASCIIStringEncoding ]; - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4) - /* maxLength does not include the \0 char in contrast to the call above. */ - [ preferredLang getCString:retbuf maxLength:31 ]; -#endif - } + [ preferredLang getCString:retbuf maxLength:32 encoding:NSASCIIStringEncoding ]; + return retbuf; } @@ -213,7 +202,7 @@ bool IsMonospaceFont(CFStringRef name) { NSFont *font = [ NSFont fontWithName:(__bridge NSString *)name size:0.0f ]; - return font != NULL ? [ font isFixedPitch ] : false; + return font != nil ? [ font isFixedPitch ] : false; } /** @@ -222,14 +211,12 @@ bool IsMonospaceFont(CFStringRef name) */ void MacOSSetThreadName(const char *name) { -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) if (MacOSVersionIsAtLeast(10, 6, 0)) { pthread_setname_np(name); } -#endif NSThread *cur = [ NSThread currentThread ]; - if (cur != NULL && [ cur respondsToSelector:@selector(setName:) ]) { + if (cur != nil && [ cur respondsToSelector:@selector(setName:) ]) { [ cur performSelector:@selector(setName:) withObject:[ NSString stringWithUTF8String:name ] ]; } } diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index ad4983e9aa..47c7f0a462 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -18,8 +18,6 @@ #include -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - /* CTRunDelegateCreate is supported since MacOS X 10.5, but was only included in the SDKs starting with the 10.9 SDK. */ #ifndef HAVE_OSX_109_SDK extern "C" { @@ -435,23 +433,3 @@ int MacOSStringCompare(const char *s1, const char *s2) return new OSXStringIterator(); } - -#else -void MacOSResetScriptCache(FontSize size) {} -void MacOSSetCurrentLocaleName(const char *iso_code) {} - -int MacOSStringCompare(const char *s1, const char *s2) -{ - return 0; -} - -/* static */ StringIterator *OSXStringIterator::Create() -{ - return nullptr; -} - -/* static */ ParagraphLayouter *CoreTextParagraphLayoutFactory::GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &fontMapping) -{ - return nullptr; -} -#endif /* (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) */ From 4bfa3ff619d4f75cd0a15432b4db69a06e32672a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 12 Apr 2020 17:43:08 +0200 Subject: [PATCH 061/601] Remove: [OSX] Old QuickTime music driver. --- config.lib | 9 +- source.list | 6 - src/music/qtmidi.cpp | 344 ------------------------------------------- src/music/qtmidi.h | 37 ----- 4 files changed, 1 insertion(+), 395 deletions(-) delete mode 100644 src/music/qtmidi.cpp delete mode 100644 src/music/qtmidi.h diff --git a/config.lib b/config.lib index 5226d84afa..6b7ee8de7a 100644 --- a/config.lib +++ b/config.lib @@ -1592,12 +1592,6 @@ make_cflags_and_ldflags() { # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings. CFLAGS="$CFLAGS -isystem/opt/local/include" - if [ "$enable_dedicated" = "0" ] && ([ "$cpu_type" = "32" ] || [ "$enable_universal" != "0" ]); then - LIBS="$LIBS -framework QuickTime" - else - CFLAGS="$CFLAGS -DNO_QUICKTIME" - fi - if [ "$enable_universal" = "0" ]; then # Universal builds set this elsewhere CFLAGS="$OSX_SYSROOT $CFLAGS" @@ -3326,8 +3320,7 @@ generate_src_osx() { CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig" LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig" fi - CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME" - LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`" + CFLAGS="$CFLAGS -D_SQ64" fi case $type in diff --git a/source.list b/source.list index 0143bd9525..ce3c50729a 100644 --- a/source.list +++ b/source.list @@ -415,7 +415,6 @@ zoom_type.h music/extmidi.h music/fluidsynth.h music/os2_m.h - music/qtmidi.h os/macosx/macos.h os/macosx/osx_stdafx.h os/macosx/splash.h @@ -1163,11 +1162,6 @@ sound/null_s.cpp # OSX Files os/macosx/macos.mm - #if DEDICATED - #else - music/qtmidi.cpp - #end - #if COCOA video/cocoa/cocoa_v.mm video/cocoa/event.mm diff --git a/src/music/qtmidi.cpp b/src/music/qtmidi.cpp deleted file mode 100644 index eea1e30842..0000000000 --- a/src/music/qtmidi.cpp +++ /dev/null @@ -1,344 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** - * @file qtmidi.cpp - * @brief MIDI music player for MacOS X using QuickTime. - * - * This music player should work in all MacOS X releases starting from 10.0, - * as QuickTime is an integral part of the system since the old days of the - * Motorola 68k-based Macintoshes. The only extra dependency apart from - * QuickTime itself is Carbon, which is included since 10.0 as well. - * - * QuickTime gets fooled with the MIDI files from Transport Tycoon Deluxe - * because of the @c .gm suffix. To force QuickTime to load the MIDI files - * without the need of dealing with the individual QuickTime components - * needed to play music (data source, MIDI parser, note allocators, - * synthesizers and the like) some Carbon functions are used to set the file - * type as seen by QuickTime, using @c FSpSetFInfo() (which modifies the - * file's resource fork). - */ - - -#ifndef NO_QUICKTIME - -#include "../stdafx.h" -#include "qtmidi.h" -#include "midifile.hpp" -#include "../debug.h" -#include "../base_media_base.h" - -#define Rect OTTD_Rect -#define Point OTTD_Point -#define WindowClass OTTD_WindowClass -#include -#undef Rect -#undef Point -#undef WindowClass - -#include "../safeguards.h" - -static FMusicDriver_QtMidi iFMusicDriver_QtMidi; - - -static const uint MIDI_TYPE = 'Midi'; ///< OSType code for MIDI songs. - - -/** - * Sets the @c OSType of a given file to @c 'Midi', but only if it's not - * already set. - * - * @param *ref A @c FSSpec structure referencing a file. - */ -static void SetMIDITypeIfNeeded(const FSRef *ref) -{ - FSCatalogInfo catalogInfo; - - assert(ref); - - if (noErr != FSGetCatalogInfo(ref, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo, &catalogInfo, nullptr, nullptr, nullptr)) return; - if (!(catalogInfo.nodeFlags & kFSNodeIsDirectoryMask)) { - FileInfo * const info = (FileInfo *) catalogInfo.finderInfo; - if (info->fileType != MIDI_TYPE && !(info->finderFlags & kIsAlias)) { - OSErr e; - info->fileType = MIDI_TYPE; - e = FSSetCatalogInfo(ref, kFSCatInfoFinderInfo, &catalogInfo); - if (e == noErr) { - DEBUG(driver, 3, "qtmidi: changed filetype to 'Midi'"); - } else { - DEBUG(driver, 0, "qtmidi: changing filetype to 'Midi' failed - error %d", e); - } - } - } -} - - -/** - * Loads a MIDI file and returns it as a QuickTime Movie structure. - * - * @param *path String with the path of an existing MIDI file. - * @param *moov Pointer to a @c Movie where the result will be stored. - * @return Whether the file was loaded and the @c Movie successfully created. - */ -static bool LoadMovieForMIDIFile(const char *path, Movie *moov) -{ - int fd; - int ret; - char magic[4]; - FSRef fsref; - FSSpec fsspec; - short refnum = 0; - short resid = 0; - - assert(path != nullptr); - assert(moov != nullptr); - - DEBUG(driver, 2, "qtmidi: start loading '%s'...", path); - - /* - * XXX Manual check for MIDI header ('MThd'), as I don't know how to make - * QuickTime load MIDI files without a .mid suffix without knowing it's - * a MIDI file and setting the OSType of the file to the 'Midi' value. - * Perhaps ugly, but it seems that it does the Right Thing(tm). - */ - fd = open(path, O_RDONLY, 0); - if (fd == -1) return false; - ret = read(fd, magic, 4); - close(fd); - if (ret < 4) return false; - - DEBUG(driver, 3, "qtmidi: header is '%.4s'", magic); - if (magic[0] != 'M' || magic[1] != 'T' || magic[2] != 'h' || magic[3] != 'd') { - return false; - } - - if (noErr != FSPathMakeRef((const UInt8 *) path, &fsref, nullptr)) return false; - SetMIDITypeIfNeeded(&fsref); - - if (noErr != FSGetCatalogInfo(&fsref, kFSCatInfoNone, nullptr, nullptr, &fsspec, nullptr)) return false; - if (OpenMovieFile(&fsspec, &refnum, fsRdPerm) != noErr) return false; - DEBUG(driver, 3, "qtmidi: '%s' successfully opened", path); - - if (noErr != NewMovieFromFile(moov, refnum, &resid, nullptr, - newMovieActive | newMovieDontAskUnresolvedDataRefs, nullptr)) { - CloseMovieFile(refnum); - return false; - } - DEBUG(driver, 3, "qtmidi: movie container created"); - - CloseMovieFile(refnum); - return true; -} - - -/** - * Flag which has the @c true value when QuickTime is available and - * initialized. - */ -static bool _quicktime_started = false; - - -/** - * Initialize QuickTime if needed. This function sets the - * #_quicktime_started flag to @c true if QuickTime is present in the system - * and it was initialized properly. - */ -static void InitQuickTimeIfNeeded() -{ - OSStatus dummy; - - if (_quicktime_started) return; - - DEBUG(driver, 2, "qtmidi: initializing Quicktime"); - /* Be polite: check whether QuickTime is available and initialize it. */ - _quicktime_started = - (noErr == Gestalt(gestaltQuickTime, &dummy)) && - (noErr == EnterMovies()); - if (!_quicktime_started) DEBUG(driver, 0, "qtmidi: Quicktime initialization failed!"); -} - - -/** Possible states of the QuickTime music driver. */ -enum QTStates { - QT_STATE_IDLE, ///< No file loaded. - QT_STATE_PLAY, ///< File loaded, playing. - QT_STATE_STOP, ///< File loaded, stopped. -}; - - -static Movie _quicktime_movie; ///< Current QuickTime @c Movie. -static byte _quicktime_volume = 127; ///< Current volume. -static int _quicktime_state = QT_STATE_IDLE; ///< Current player state. - - -/** - * Maps OpenTTD volume to QuickTime notion of volume. - */ -#define VOLUME ((short)((0x00FF & _quicktime_volume) << 1)) - - -/** - * Initialized the MIDI player, including QuickTime initialization. - * - * @todo Give better error messages by inspecting error codes returned by - * @c Gestalt() and @c EnterMovies(). Needs changes in - * #InitQuickTimeIfNeeded. - */ -const char *MusicDriver_QtMidi::Start(const char * const *parm) -{ - InitQuickTimeIfNeeded(); - return (_quicktime_started) ? nullptr : "can't initialize QuickTime"; -} - - -/** - * Checks whether the player is active. - * - * This function is called at regular intervals from OpenTTD's main loop, so - * we call @c MoviesTask() from here to let QuickTime do its work. - */ -bool MusicDriver_QtMidi::IsSongPlaying() -{ - if (!_quicktime_started) return true; - - switch (_quicktime_state) { - case QT_STATE_IDLE: - case QT_STATE_STOP: - /* Do nothing. */ - break; - - case QT_STATE_PLAY: - MoviesTask(_quicktime_movie, 0); - /* Check whether movie ended. */ - if (IsMovieDone(_quicktime_movie) || - (GetMovieTime(_quicktime_movie, nullptr) >= - GetMovieDuration(_quicktime_movie))) { - _quicktime_state = QT_STATE_STOP; - } - } - - return _quicktime_state == QT_STATE_PLAY; -} - - -/** - * Stops the MIDI player. - * - * Stops playing and frees any used resources before returning. As it - * deinitilizes QuickTime, the #_quicktime_started flag is set to @c false. - */ -void MusicDriver_QtMidi::Stop() -{ - if (!_quicktime_started) return; - - DEBUG(driver, 2, "qtmidi: stopping driver..."); - switch (_quicktime_state) { - case QT_STATE_IDLE: - DEBUG(driver, 3, "qtmidi: stopping not needed, already idle"); - /* Do nothing. */ - break; - - case QT_STATE_PLAY: - StopSong(); - FALLTHROUGH; - - case QT_STATE_STOP: - DisposeMovie(_quicktime_movie); - } - - ExitMovies(); - _quicktime_started = false; -} - - -/** - * Starts playing a new song. - * - * @param filename Path to a MIDI file. - */ -void MusicDriver_QtMidi::PlaySong(const MusicSongInfo &song) -{ - if (!_quicktime_started) return; - - std::string filename = MidiFile::GetSMFFile(song); - if (filename.empty()) return; - - DEBUG(driver, 2, "qtmidi: trying to play '%s'", filename.c_str()); - switch (_quicktime_state) { - case QT_STATE_PLAY: - StopSong(); - DEBUG(driver, 3, "qtmidi: previous tune stopped"); - FALLTHROUGH; - - case QT_STATE_STOP: - DisposeMovie(_quicktime_movie); - DEBUG(driver, 3, "qtmidi: previous tune disposed"); - _quicktime_state = QT_STATE_IDLE; - FALLTHROUGH; - - case QT_STATE_IDLE: - LoadMovieForMIDIFile(filename.c_str(), &_quicktime_movie); - SetMovieVolume(_quicktime_movie, VOLUME); - StartMovie(_quicktime_movie); - _quicktime_state = QT_STATE_PLAY; - } - DEBUG(driver, 3, "qtmidi: playing '%s'", filename.c_str()); -} - - -/** - * Stops playing the current song, if the player is active. - */ -void MusicDriver_QtMidi::StopSong() -{ - if (!_quicktime_started) return; - - switch (_quicktime_state) { - case QT_STATE_IDLE: - FALLTHROUGH; - - case QT_STATE_STOP: - DEBUG(driver, 3, "qtmidi: stop requested, but already idle"); - /* Do nothing. */ - break; - - case QT_STATE_PLAY: - StopMovie(_quicktime_movie); - _quicktime_state = QT_STATE_STOP; - DEBUG(driver, 3, "qtmidi: player stopped"); - } -} - - -/** - * Changes the playing volume of the MIDI player. - * - * As QuickTime controls volume in a per-movie basis, the desired volume is - * stored in #_quicktime_volume, and the volume is set here using the - * #VOLUME macro, @b and when loading new song in #PlaySong. - * - * @param vol The desired volume, range of the value is @c 0-127 - */ -void MusicDriver_QtMidi::SetVolume(byte vol) -{ - if (!_quicktime_started) return; - - _quicktime_volume = vol; - - DEBUG(driver, 2, "qtmidi: set volume to %u (%hi)", vol, VOLUME); - switch (_quicktime_state) { - case QT_STATE_IDLE: - /* Do nothing. */ - break; - - case QT_STATE_PLAY: - case QT_STATE_STOP: - SetMovieVolume(_quicktime_movie, VOLUME); - } -} - -#endif /* NO_QUICKTIME */ diff --git a/src/music/qtmidi.h b/src/music/qtmidi.h deleted file mode 100644 index d6ed5304a0..0000000000 --- a/src/music/qtmidi.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file qtmidi.h Base of music playback via the QuickTime driver. */ - -#ifndef MUSIC_MACOSX_QUICKTIME_H -#define MUSIC_MACOSX_QUICKTIME_H - -#include "music_driver.hpp" - -class MusicDriver_QtMidi : public MusicDriver { -public: - const char *Start(const char * const *param) override; - - void Stop() override; - - void PlaySong(const MusicSongInfo &song) override; - - void StopSong() override; - - bool IsSongPlaying() override; - - void SetVolume(byte vol) override; - const char *GetName() const override { return "qt"; } -}; - -class FMusicDriver_QtMidi : public DriverFactoryBase { -public: - FMusicDriver_QtMidi() : DriverFactoryBase(Driver::DT_MUSIC, 5, "qt", "QuickTime MIDI Driver") {} - Driver *CreateInstance() const override { return new MusicDriver_QtMidi(); } -}; - -#endif /* MUSIC_MACOSX_QUICKTIME_H */ From 0b8100b46f436fbb1c0b71ce4297c10d29f83dcf Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 16 Apr 2020 19:45:38 +0200 Subject: [PATCH 062/601] Update: Translations from eints tamil: 16 changes by aswn --- src/lang/tamil.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index bbc5ebeb14..16c11972ae 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -235,6 +235,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Select f STR_BUTTON_SORT_BY :{BLACK}Sort by STR_BUTTON_LOCATION :{BLACK}Location STR_BUTTON_RENAME :{BLACK}Rename +STR_TOOLTIP_CATCHMENT :{BLACK}தழுவு பகுதி காட்சியை நிலைமாற்று STR_TOOLTIP_CLOSE_WINDOW :{BLACK}சாளரத்தை மூடு STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}சாளர தலைப்பு - சாளரத்தை நகர்த்த இழுக்கவும் @@ -817,6 +818,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} பிழையான கட்டளையைக் கொண்டுள்ளது STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} இரட்டடிப்பு கட்டளைகளைக் கொண்டுள்ளது STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} பிழையான நிலையத்தினை கட்டளைகளில் கொண்டுள்ளது +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} அதன் ஆர்டர்களில் ஓடுபாதை மிகக் குறுகியதாக இருக்கும் விமான நிலையத்தைக் கொண்டுள்ளது STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} பழையதாகிறது STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} பழையதாகிறது @@ -1359,6 +1361,7 @@ STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :சரக்க STR_CONFIG_SETTING_NEWS_SUBSIDIES :மானியங்கள்: {STRING} STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :மானியம் தொடர்பான நிகழ்வுகள் பற்றி செய்தித்தாளினைக் காட்டவும் STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :பொதுவான விவரம்: {STRING} +STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :பிரத்தியேக உரிமைகள் வாங்குதல் அல்லது சாலை புனரமைப்புக்கு நிதியளித்தல் போன்ற பொதுவான நிகழ்வுகளைப் பற்றி செய்தித்தாளைக் காண்பி STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :நிறுத்து STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :தொகுப்பு @@ -1394,6 +1397,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :நகரங் STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :நகரங்கள் சாலைச் சந்திப்புகளை கட்ட அனுமதி: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :இந்த அமைப்பு நகராட்சிகள் இருப்புப்பாதை சந்திக் கடவுகளைக் கட்ட அனுமதிக்கும் STR_CONFIG_SETTING_NOISE_LEVEL :விமான நிலையங்களுக்கு நகராட்சியால் நிர்ணயிக்கப்பட்ட இரைச்சல் அளவினை அனுமதிக்கவும்: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :இந்த அமைப்பு முடக்கப்பட்டுள்ளதால், ஒவ்வொரு ஊரிலும் இரண்டு விமான நிலையங்கள் இருக்கலாம். இந்த அமைப்பு இயக்கப்பட்டவுடன், ஒரு நகரத்தின் விமான நிலையங்களின் எண்ணிக்கை நகரத்தின் சத்தத்தை ஏற்றுக்கொள்வதன் மூலம் வரையறுக்கப்படுகிறது, இது மக்கள் தொகை மற்றும் விமான நிலைய அளவு மற்றும் தூரத்தைப் பொறுத்தது STR_CONFIG_SETTING_TOWN_FOUNDING :ஆட்டத்தில் நகரங்களை நிறுவ அனுமதி: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :இந்த அமைப்பு விளியாடுபவர்கள் ஆட்டத்தில் புதிய நகரங்களை நிறுவ அனுமதிக்கும் STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :இயலாது @@ -1541,6 +1545,7 @@ STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}பத STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}புதிய ஆட்டத்தினைத் தொடங்கு, உயர்படத்தினை நிலப்பரப்பிற்கு பயன்படுத்தி STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}புதிய பல்வீரர் ஆட்டத்தினைத் தொடங்கவும் +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}'வெப்பமண்டல' நிலப்பரப்புப் பாணியைத் தேர்ந்தெடுக்கவும் STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}'உபதுருவ' நிலப்பரப்புப் பாணியைத் தேர்ந்தெடுக்கவும் STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}'மிதவெப்பமண்டல' நிலப்பரப்புப் பாணியைத் தேர்ந்தெடுக்கவும் STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}'பொம்மைநில' நிலப்பரப்புப் பாணியைத் தேர்ந்தெடுக்கவும் @@ -2019,11 +2024,13 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... க STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}பதிவிறக்கம் செய்யப்பட்ட கோப்பினை விரிவாக்க முடியவில்லை STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}அசைவூட்டங்கள் இல்லை +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD க்கு கிராபிக்ஸ் செயல்பட வேண்டும், ஆனால் எதுவும் கண்டுபிடிக்கப்படவில்லை. இந்த கிராபிக்ஸ் பதிவிறக்கம் செய்து நிறுவ OpenTTD ஐ அனுமதிக்கிறீர்களா? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}ஆம், அசையூட்டங்களை பதிவிறக்கம் செய் STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}இல்லை, OpenTTD-ஐ விட்டு வெளியேறு # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}ஒளி அமைப்புகள் +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}வீடுகளுக்கான வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl + கிளிக் பூட்ட செய்க # Linkgraph legend window STR_LINKGRAPH_LEGEND_ALL :{BLACK}அனைத்தும் @@ -2132,6 +2139,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}ட் STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}சாலை கட்டுமானம் செய்யவும்/நீக்கவும் STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}ட்ராம்வே கட்டுமானம் செய்யவும்/நீக்கவும் +STR_ROAD_NAME_ROAD :சாலை # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}சாலை வாகன பணிமனை திசையமைப்பு @@ -2619,6 +2627,7 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} இ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF கோப்பு மொழிபெயர்க்க வடிமைக்கப்பட்டது STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :அளவிற்கு அதிகமான NewGRF கள் ஏற்றப்பட்டுள்ளன STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :எதிர்பார்க்கப்படாத ஸ்பிரைட்டு(ஸ்பிரைட்டு {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :பல அதிரடி 8 உள்ளீடுகளைக் கொண்டுள்ளது (ஸ்பிரிட் {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :கேட்கப்பட்ட GRF கள் கிடைக்கவில்லை (ஸ்பிரைட்டு {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}, {STRING}ஆல் செயலிழக்க செய்யப்பட்டது @@ -2830,6 +2839,8 @@ STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_S STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} எங்கும் நிற்காமல் STR_STATION_VIEW_GROUP_S_V_D :மூலம்-வழியாக-சேருமிடம் +STR_STATION_VIEW_GROUP_S_D_V :மூல-சேருமிடம்-வழியாக +STR_STATION_VIEW_GROUP_D_V_S :மூல-வழியாக-இலக்கு ############ range for rating starts STR_CARGO_RATING_APPALLING :மட்டம் @@ -2842,6 +2853,7 @@ STR_CARGO_RATING_EXCELLENT :சிறப் STR_CARGO_RATING_OUTSTANDING :மிகச்சிறப்பு ############ range for rating ends +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}நிலைய இருப்பிடத்தின் மையக் காட்சி. Ctrl + Click நிலைய இருப்பிடத்தில் புதிய காட்சிப்பலகையைத் திறக்கிறது STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}நிலையத்தின் பெயரை மாற்று STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}இந்த நிலையத்தினை அட்டவணையில் வைத்துள்ள அனைத்து இரயில்களையும் காட்டு @@ -3093,6 +3105,7 @@ STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}வி STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}மறை STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}காட்சி +STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}காட்சி STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}கப்பல் வகையினை காட்டு/மறை @@ -3208,6 +3221,7 @@ STR_REPLACE_VEHICLES_STOP :{BLACK}வா STR_REPLACE_ENGINES :பொறிகள் STR_REPLACE_WAGONS :வாகனங்கள் +STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}இடது தேர்ந்தெடுக்கப்பட்ட இயந்திரம் ஏதேனும் இருந்தால் மாற்றப்படும் எந்த இயந்திரத்தைக் காட்டுகிறது STR_REPLACE_RAIL_VEHICLES :இரயில் வாகனங்கள் STR_REPLACE_ELRAIL_VEHICLES :மின்சார இரயில் வாகனங்கள் STR_REPLACE_MONORAIL_VEHICLES :மோனோ இரயில் வாகனங்கள் @@ -3587,6 +3601,7 @@ STR_AI_DEBUG_SETTINGS :{BLACK}அம STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}வரிவடிவத்தின் அமைப்புகளை மாற்று STR_AI_DEBUG_RELOAD :{BLACK}AI-ஐ மறுபடியும் ஏற்று STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}AI இனை நிறுத்தவும், வரிவடிவத்தினை திருப்பி ஏற்றவும், மேலும் AI இனை மீண்டும் தொடங்கவும் +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}AI பதிவு செய்தி இடைவெளி சரத்துடன் பொருந்தும்போது உடைப்பதை இயக்கவும் / முடக்கவும் STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}உடைத்து ஆம்: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}உடைத்து ஆம் STR_AI_DEBUG_MATCH_CASE :{BLACK}case இனை சரிபடுத்தவும் @@ -3637,6 +3652,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}கு STR_AI_LIST_CANCEL :{BLACK}இரத்து செய் STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}வரிவடிவத்தினை மாற்றாதே +STR_SCREENSHOT_SCREENSHOT :{BLACK}சாதாரண திரைப்பிடிப்பு # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} குணாதிசயங்கள் From 93a7ff6709ca37f834e8b55208654b3d3b791a8e Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 16 Apr 2020 19:32:20 +0100 Subject: [PATCH 063/601] Fix: [Script] ScriptMarine::AreWaterTilesConnected failed for aqueducts (#8074) --- src/script/api/script_marine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script/api/script_marine.cpp b/src/script/api/script_marine.cpp index c175adf066..c63add8faa 100644 --- a/src/script/api/script_marine.cpp +++ b/src/script/api/script_marine.cpp @@ -62,11 +62,11 @@ DiagDirection to_other_tile = ::DiagdirBetweenTiles(t2, t1); /* Determine the reachable tracks from the shared edge */ - TrackBits gtts1 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t1, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile); + TrackBits gtts1 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t1, TRANSPORT_WATER, 0, ReverseDiagDir(to_other_tile))) & ::DiagdirReachesTracks(to_other_tile); if (gtts1 == TRACK_BIT_NONE) return false; to_other_tile = ReverseDiagDir(to_other_tile); - TrackBits gtts2 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t2, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile); + TrackBits gtts2 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t2, TRANSPORT_WATER, 0, ReverseDiagDir(to_other_tile))) & ::DiagdirReachesTracks(to_other_tile); return gtts2 != TRACK_BIT_NONE; } From e45bccb83347bd0b36ae0915b6874e440f1c9164 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 17 Apr 2020 19:45:39 +0200 Subject: [PATCH 064/601] Update: Translations from eints welsh: 4 changes by kazzie --- src/lang/welsh.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 84a203f842..660067c0cc 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1333,6 +1333,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Lliw y tirwedd STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Gwyrdd STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Gwyrdd tywyll STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fioled +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Ymddygiad tra'n sgrolio'r map STR_CONFIG_SETTING_SMOOTH_SCROLLING :Sgrolio prif ffenestr llyfn: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Rheoli syt y mae'r prif olygfa'n sgrolio at leoliad penodol pan yn clicio ar y map bychan neu yn rhoi gorchymyn i sgrolio at wrthrych penodol STR_CONFIG_SETTING_MEASURE_TOOLTIP :Dangos cymorth mesur wrth ddefnyddio'r offer adeiladu amrywiol: {STRING} @@ -2681,14 +2682,17 @@ STR_ABOUT_VERSION :{BLACK}fersiwn STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Y tîm OpenTTD # Framerate display window +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nifer y ticiau gêm a efelychir bob eiliad. STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nifer o fframiau fideo a lunir bob eiliad. STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pa mor gyflym mae'r gêm yn rhedeg, o gymharu a'r cyflymder i'w ddisgwyl ar gyfradd efelychu arferol. +STR_FRAMERATE_AVERAGE :{WHITE}Cymedr STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frâm yr eiliad ############ Leave those lines in this order!! STR_FRAMERATE_GL_ECONOMY :{BLACK} Trin cargo: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_VIDEO :Allbwn fideo +STR_FRAMETIME_CAPTION_SOUND :Cymysgu sain ############ End of leave-in-this-order From 1f1345de098294a4744981d0043512569a35102a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sat, 25 Apr 2020 22:41:19 +0200 Subject: [PATCH 065/601] Codechange: [Script] Improve copying a list into another empty list. --- src/script/api/script_list.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp index 2fb2a8d6b9..4d8b39ea14 100644 --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -557,10 +557,17 @@ void ScriptList::AddList(ScriptList *list) { if (list == this) return; - ScriptListMap *list_items = &list->items; - for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) { - this->AddItem((*iter).first); - this->SetValue((*iter).first, (*iter).second); + if (this->IsEmpty()) { + /* If this is empty, we can just take the items of the other list as is. */ + this->items = list->items; + this->buckets = list->buckets; + this->modifications++; + } else { + ScriptListMap *list_items = &list->items; + for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) { + this->AddItem((*iter).first); + this->SetValue((*iter).first, (*iter).second); + } } } From fb5fc0d80aacae9ddf85aca3e2f399d977faebe3 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 3 May 2020 18:45:58 +0200 Subject: [PATCH 066/601] Fix: OpenGFX download link did no longer work. (#8105) --- azure-pipelines/templates/ci-opengfx.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/templates/ci-opengfx.yml b/azure-pipelines/templates/ci-opengfx.yml index 098f0d2a69..cdee9feca8 100644 --- a/azure-pipelines/templates/ci-opengfx.yml +++ b/azure-pipelines/templates/ci-opengfx.yml @@ -2,7 +2,7 @@ steps: - bash: | set -ex cd bin/baseset - curl -L https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip > opengfx-0.5.2-all.zip - unzip opengfx-0.5.2-all.zip - rm -f opengfx-0.5.2-all.zip + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip > opengfx-all.zip + unzip opengfx-all.zip + rm -f opengfx-all.zip displayName: 'Install OpenGFX' From 68244393f1b590fd7f108854b197cbd16fa94686 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 3 May 2020 22:04:16 +0200 Subject: [PATCH 067/601] Codechange: Unify the tests whether build+refit is in simulation-test or real-run. --- src/vehicle_cmd.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 5ba31945fc..a5eb2087b3 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -145,7 +145,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } if (value.Succeeded()) { - if (refitting || (flags & DC_EXEC)) { + if (subflags & DC_EXEC) { v->unitnumber = unit_num; v->value = value.GetCost(); } @@ -166,7 +166,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } } - if (refitting || (flags & DC_EXEC)) { + if (subflags & DC_EXEC) { GroupStatistics::CountEngine(v, 1); GroupStatistics::UpdateAutoreplace(_current_company); @@ -178,7 +178,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* If we are not in DC_EXEC undo everything */ - if (refitting && (flags & DC_EXEC) == 0) { + if (flags != subflags) { DoCommand(0, v->index, 0, DC_EXEC, GetCmdSellVeh(v)); } } From 0f9dc88834fd6b44a62b1f3395e71653008f69e9 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 3 May 2020 22:05:13 +0200 Subject: [PATCH 068/601] Fix: When build+refit an engine, do not refit any free wagons that may get attached. --- src/vehicle_cmd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index a5eb2087b3..7383e1d4a8 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -151,7 +151,8 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } if (refitting) { - value.AddCost(CmdRefitVehicle(tile, flags, v->index, cargo, nullptr)); + /* Refit only one vehicle. If we purchased an engine, it may have gained free wagons. */ + value.AddCost(CmdRefitVehicle(tile, flags, v->index, cargo | (1 << 16), nullptr)); } else { /* Fill in non-refitted capacities */ _returned_refit_capacity = e->GetDisplayDefaultCapacity(&_returned_mail_refit_capacity); From 9f2e23d8bac33effe68c911335e8a1d6ff6211fb Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 3 May 2020 22:06:56 +0200 Subject: [PATCH 069/601] Fix #8093: Build+Refit changed game-state in command test run, and thus caused desyncs. Use DC_AUTOREPLACE for actions that shall be reversibe, in this case: - Do not rearrange free wagons in test-run. - Do not discard OrderBackups. The latter was not triggered by actual auto-replace, since it does not set a 'user'. --- src/vehicle_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 7383e1d4a8..2f0a49ca27 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -128,7 +128,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* If we are refitting we need to temporarily purchase the vehicle to be able to * test it. */ DoCommandFlag subflags = flags; - if (refitting) subflags |= DC_EXEC; + if (refitting && !(flags & DC_EXEC)) subflags |= DC_EXEC | DC_AUTOREPLACE; /* Vehicle construction needs random bits, so we have to save the random * seeds to prevent desyncs. */ @@ -173,7 +173,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (v->IsPrimaryVehicle()) { GroupStatistics::CountVehicle(v, 1); - OrderBackup::Restore(v, p2); + if (!(subflags & DC_AUTOREPLACE)) OrderBackup::Restore(v, p2); } } From fde28ec0b0b85451bfa80345d2b45e92ddba1655 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 3 May 2020 17:35:43 +0200 Subject: [PATCH 070/601] Update: Clarify some contribution guidelines Point out that translations should be fixed via the web translator. Clerify that "changed NewGRFs" means after the game was started, not that any game using NewGRFs is invalid for bug reports. --- CONTRIBUTING.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 40aad630c8..c532957e21 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,6 +25,8 @@ We reserve the right to delete comments which violate this rule. * Please **do not** open issues or pull requests regarding add-on content in NewGRF, GameScripts, AIs, etc. These are created by third-parties. Please try [irc](https://wiki.openttd.org/IRC_channel) or the [forums](https://www.tt-forums.net/) to discuss these. +* Please use [the web translator](https://translator.openttd.org/) to submit corrections and improvements to translations of the game. + ## Bug reports @@ -33,16 +35,16 @@ Good bug reports are extremely helpful, so thanks! Guidelines for bug reports: -0. Please don't report issues with games where you changed NewGRFs. +0. Please don't report issues with games where you changed NewGRFs mid-game. (This can be verified with the `gamelog` console command in-game.) -1. Please don't report issues with modified versions of OpenTTD (patchpacks and similar). +1. Please don't report issues with modified versions of OpenTTD (patchpacks, unofficial ports, and similar). -2. **Use the GitHub issue search** --- check if the issue has already been +2. **Use the GitHub issue search** — check if the issue has already been reported. -3. **Check if the issue has been fixed** --- try to reproduce it using the latest `nightly` build of OpenTTD, available from https://www.openttd.org +3. **Check if the issue has been fixed** — try to reproduce it using the latest `nightly` build of OpenTTD, available from https://www.openttd.org -4. **Isolate the problem** --- ideally create reproduceable steps with an attached savegame and screenshots. Try to use few or no NewGRFs, AIs etc if possible. +4. **Isolate the problem** — ideally create reproducible steps with an attached savegame and screenshots. Try to use few or no NewGRFs, AIs etc if possible. A good bug report shouldn't leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. From aa91c0666e1cc199d55a9b2454f32f625ad1fb13 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 4 May 2020 19:45:38 +0200 Subject: [PATCH 071/601] 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 c298cbfc2b..dcac6b35a2 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1412,7 +1412,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :짧은 (2012.01 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :국제표준규격 (2012-01-01) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :게임 시작 시 자동으로 일시 정지: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :이 설정을 켜면, 새로운 게임을 시작할 때 지도를 더욱 자세히 살펴볼 수 있도록 게임을 자동으로 일시정지합니다. +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :이 설정을 켜면, 새로운 게임을 시작할 때 지도를 더욱 자세히 살펴볼 수 있도록 게임을 자동으로 일시 정지합니다. STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :일시 정지 상태에서 가능한 행동: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :게임이 일시 정지된 동안에 할 수 있는 행동을 선택합니다. STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :아무 것도 못 함 From c01803cd42b06c9e0716b86079d825dbb06036ad Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Mon, 4 May 2020 18:41:16 +0100 Subject: [PATCH 072/601] Fix #8108: possible crash on loading TTD savegames with phantom oil rigs --- src/saveload/afterload.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 63e4b37e64..432e35dd28 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -929,19 +929,19 @@ bool AfterLoadGame() break; case STATION_OILRIG: { + /* The internal encoding of oil rigs was changed twice. + * It was 3 (till 2.2) and later 5 (till 5.1). + * DeleteOilRig asserts on the correct type, and + * setting it unconditionally does not hurt. + */ + Station::GetByTile(t)->airport.type = AT_OILRIG; + /* Very old savegames sometimes have phantom oil rigs, i.e. * an oil rig which got shut down, but not completely removed from * the map */ TileIndex t1 = TILE_ADDXY(t, 0, 1); - if (IsTileType(t1, MP_INDUSTRY) && - GetIndustryGfx(t1) == GFX_OILRIG_1) { - /* The internal encoding of oil rigs was changed twice. - * It was 3 (till 2.2) and later 5 (till 5.1). - * Setting it unconditionally does not hurt. - */ - Station::GetByTile(t)->airport.type = AT_OILRIG; - } else { + if (!IsTileType(t1, MP_INDUSTRY) || GetIndustryGfx(t1) != GFX_OILRIG_1) { DeleteOilRig(t); } break; From 8edbb42fe82308bdb6cddb2f5f8e584e939f53f6 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Mon, 4 May 2020 20:12:38 +0100 Subject: [PATCH 073/601] Fix c01a2e2: crash on loading old savegames with invalid animated tile information --- src/saveload/afterload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 432e35dd28..32dd7c7476 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2203,7 +2203,7 @@ bool AfterLoadGame() } if (remove) { - DeleteAnimatedTile(*tile); + tile = _animated_tiles.erase(tile); } else { tile++; } From 19dc31e0b3fdcf7f8b29b18747870cecacde85df Mon Sep 17 00:00:00 2001 From: Yexo Date: Mon, 4 May 2020 22:54:36 +0200 Subject: [PATCH 074/601] Fix #8108: always update tile_hash after updating v->tile --- src/saveload/afterload.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 32dd7c7476..9fbccf65eb 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1253,6 +1253,7 @@ bool AfterLoadGame() } } else if (v->z_pos > GetSlopePixelZ(v->x_pos, v->y_pos)) { v->tile = GetNorthernBridgeEnd(v->tile); + v->UpdatePosition(); } else { continue; } From e1c85e67a71493aa65e54717f847d21d66593e23 Mon Sep 17 00:00:00 2001 From: duck Date: Tue, 5 May 2020 20:05:40 +0000 Subject: [PATCH 075/601] Fix #8102: Update Windows installer strings to reference newer Windows version (#8114) * Fix #8102: Update Windows installer strings to reference versions newer than 7 * Fix 2c53390: Version strings incorrectly capitalised --- os/windows/installer/install.nsi | 4 ++-- os/windows/installer/version_win32.txt | 2 +- os/windows/installer/version_win64.txt | 2 +- os/windows/installer/version_win9x.txt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index b6837c559e..7b93992286 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -599,12 +599,12 @@ Function CheckWindowsVersion StrCmp $R0 "win9x" 0 WinNT ClearErrors StrCmp ${APPARCH} "win9x" Done 0 - MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the Windows XP SP3, Vista and 7 version on Windows 95, 98, ME, 2000 and XP without SP3. This is will not work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort + MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the Windows XP SP3 and newer version on Windows 95, 98, ME, 2000, or XP without SP3. This will not work - please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort GoTo Done WinNT: ClearErrors StrCmp ${APPARCH} "win9x" 0 Done - MessageBox MB_YESNO|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98, 2000 and XP without SP3 version on Windows XP SP3, Vista or 7. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort + MessageBox MB_YESNO|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98, 2000 and XP without SP3 version on Windows XP SP3 or newer. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort Abort: Quit Done: diff --git a/os/windows/installer/version_win32.txt b/os/windows/installer/version_win32.txt index a0aeef5ee4..0ac06d0d19 100644 --- a/os/windows/installer/version_win32.txt +++ b/os/windows/installer/version_win32.txt @@ -1,5 +1,5 @@ !define APPBITS 32 ; Define number of bits for the architecture -!define EXTRA_VERSION "XP SP3, Vista and 7" +!define EXTRA_VERSION "XP SP3 and newer" !define APPARCH "win32" ; Define the application architecture !define BINARY_DIR "${PATH_ROOT}objs\win32\Release" InstallDir "$PROGRAMFILES32\OpenTTD\" diff --git a/os/windows/installer/version_win64.txt b/os/windows/installer/version_win64.txt index 492a75894f..15ef51096b 100644 --- a/os/windows/installer/version_win64.txt +++ b/os/windows/installer/version_win64.txt @@ -1,5 +1,5 @@ !define APPBITS 64 ; Define number of bits for the architecture -!define EXTRA_VERSION "XP, Vista and 7" +!define EXTRA_VERSION "XP and newer" !define APPARCH "win64" ; Define the application architecture !define BINARY_DIR "${PATH_ROOT}objs\x64\Release" InstallDir "$PROGRAMFILES64\OpenTTD\" diff --git a/os/windows/installer/version_win9x.txt b/os/windows/installer/version_win9x.txt index 21dbf6200a..603778d73c 100644 --- a/os/windows/installer/version_win9x.txt +++ b/os/windows/installer/version_win9x.txt @@ -1,5 +1,5 @@ !define APPBITS 32 ; Define number of bits for the architecture -!define EXTRA_VERSION "95, 98, ME, 2000 and XP without SP3" +!define EXTRA_VERSION "95, 98, ME, 2000 and XP SP2 or older" !define APPARCH "win9x" ; Define the application architecture !define BINARY_DIR "${PATH_ROOT}objs\release" InstallDir "$PROGRAMFILES32\OpenTTD\" From e0d20a44d248d646a5379a8074f1aaff38bc6b09 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 5 May 2020 18:36:27 +0200 Subject: [PATCH 076/601] Codechange: Use a dynamic copyright year --- Makefile.src.in | 5 +++-- findversion.sh | 4 +++- projects/determineversion.vbs | 18 ++++++++++++------ src/lang/english.txt | 2 +- src/misc_gui.cpp | 4 +++- src/os/windows/ottdres.rc.in | 2 +- src/rev.cpp.in | 5 +++++ src/rev.h | 1 + src/script/api/game/game_window.hpp.sq | 1 + src/script/api/script_window.hpp | 1 + src/widgets/misc_widget.h | 1 + 11 files changed, 32 insertions(+), 12 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index ef2d2bb503..6b0fb94020 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -91,6 +91,7 @@ ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ') ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ') ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ') +YEAR := $(shell echo "$(VERSIONS)" | cut -f 7 -d' ') # Make sure we have something in VERSION and ISODATE ifeq ($(VERSION),) @@ -272,10 +273,10 @@ endif # Revision files $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/rev.cpp + $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc + $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/os/windows/ottdres.rc FORCE: diff --git a/findversion.sh b/findversion.sh index ce1390ab53..28fcc121f7 100755 --- a/findversion.sh +++ b/findversion.sh @@ -67,6 +67,7 @@ if [ -d "$ROOT_DIR/.git" ] || [ -f "$ROOT_DIR/.git" ]; then HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` SHORTHASH=`echo ${HASH} | cut -c1-10` ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'` + YEAR=`echo ${ISODATE} | cut -c1-4` BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`" TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`" @@ -103,10 +104,11 @@ else SHORTHASH="" BRANCH="" ISODATE="" + YEAR="" TAG="" VERSION="" ISTAG="0" ISSTABLETAG="0" fi -echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG" +echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG $YEAR" diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index a85a085f29..b70bcdf67c 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -19,7 +19,7 @@ Sub FindReplaceInFile(filename, to_find, replacement) file.Close End Sub -Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, filename) +Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, year, filename) FSO.CopyFile filename & ".in", filename FindReplaceInFile filename, "!!MODIFIED!!", modified FindReplaceInFile filename, "!!ISODATE!!", isodate @@ -28,10 +28,11 @@ Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag FindReplaceInFile filename, "!!GITHASH!!", githash FindReplaceInFile filename, "!!ISTAG!!", istag FindReplaceInFile filename, "!!ISSTABLETAG!!", isstabletag + FindReplaceInFile filename, "!!YEAR!!", year End Sub Sub UpdateFiles(version) - Dim modified, isodate, cur_date, githash, istag, isstabletag + Dim modified, isodate, cur_date, githash, istag, isstabletag, year cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) If InStr(version, Chr(9)) Then @@ -41,26 +42,29 @@ Sub UpdateFiles(version) githash = Mid(modified, InStr(modified, Chr(9)) + 1) istag = Mid(githash, InStr(githash, Chr(9)) + 1) isstabletag = Mid(istag, InStr(istag, Chr(9)) + 1) + year = Mid(isstabletag, InStr(isstabletag, Chr(9)) + 1) ' Remove tails from fields version = Mid(version, 1, InStr(version, Chr(9)) - 1) isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1) istag = Mid(istag, 1, InStr(istag, Chr(9)) - 1) + isstabletag = Mid(isstabletag, 1, InStr(isstabletag, Chr(9)) - 1) Else isodate = 0 modified = 1 githash = "" istag = 0 isstabletag = 0 + year = "" End If - UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/rev.cpp" - UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/os/windows/ottdres.rc" + UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, year, "../src/rev.cpp" + UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, year, "../src/os/windows/ottdres.rc" End Sub Function DetermineVersion() - Dim WshShell, branch, tag, modified, isodate, oExec, line, hash, shorthash + Dim WshShell, branch, tag, modified, isodate, oExec, line, hash, shorthash, year Set WshShell = CreateObject("WScript.Shell") On Error Resume Next @@ -70,6 +74,7 @@ Function DetermineVersion() branch = "" isodate = "" tag = "" + year = "" ' Set the environment to english WshShell.Environment("PROCESS")("LANG") = "en" @@ -108,6 +113,7 @@ Function DetermineVersion() if Err.Number = 0 Then isodate = Mid(oExec.StdOut.ReadLine(), 1, 10) isodate = Replace(isodate, "-", "") + year = Mid(isodate, 1, 4) End If ' Err.Number = 0 ' Check branch @@ -171,7 +177,7 @@ Function DetermineVersion() isstabletag = 0 End If - DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag + DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag & Chr(9) & year End If End Function diff --git a/src/lang/english.txt b/src/lang/english.txt index 2a4ab1c280..93eaef5901 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2736,7 +2736,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{RAW_STRING} The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 950e402309..ff2fc3a23c 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -25,6 +25,7 @@ #include "newgrf_debug.h" #include "zoom_func.h" #include "guitimer_func.h" +#include "rev.h" #include "widgets/misc_widget.h" @@ -399,7 +400,7 @@ static const NWidgetPart _nested_about_widgets[] = { NWidget(WWT_EMPTY, INVALID_COLOUR, WID_A_SCROLLING_TEXT), EndContainer(), NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE), SetDataTip(STR_BLACK_RAW_STRING, STR_NULL), - NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_ABOUT_COPYRIGHT_OPENTTD, STR_NULL), + NWidget(WWT_LABEL, COLOUR_GREY, WID_A_COPYRIGHT), SetDataTip(STR_ABOUT_COPYRIGHT_OPENTTD, STR_NULL), EndContainer(), }; @@ -495,6 +496,7 @@ struct AboutWindow : public Window { void SetStringParameters(int widget) const override { if (widget == WID_A_WEBSITE) SetDParamStr(0, "Website: http://www.openttd.org"); + if (widget == WID_A_COPYRIGHT) SetDParamStr(0, _openttd_revision_year); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index af27de4bdf..8116de9035 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -98,7 +98,7 @@ BEGIN VALUE "FileDescription", "OpenTTD\0" VALUE "FileVersion", "!!VERSION!!\0" VALUE "InternalName", "openttd\0" - VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2019. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-!!YEAR!!. All Rights Reserved.\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "openttd.exe\0" VALUE "PrivateBuild", "\0" diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 48b29f349d..3f5b126dc1 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -50,6 +50,11 @@ const char _openttd_build_date[] = __DATE__ " " __TIME__; */ const char _openttd_revision_hash[] = "!!GITHASH!!"; +/** + * The year of this version. + */ +const char _openttd_revision_year[] = "!!YEAR!!"; + /** * Let us know if current build was modified. This detection * works even in the case when revision string is overridden by diff --git a/src/rev.h b/src/rev.h index f1e669aa56..7689383710 100644 --- a/src/rev.h +++ b/src/rev.h @@ -13,6 +13,7 @@ extern const char _openttd_revision[]; extern const char _openttd_build_date[]; extern const char _openttd_revision_hash[]; +extern const char _openttd_revision_year[]; extern const byte _openttd_revision_modified; extern const byte _openttd_revision_tagged; extern const uint32 _openttd_newgrf_version; diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 609030676a..0d5ab2bc0c 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -639,6 +639,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BACKGROUND, "WID_TT_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_A_SCROLLING_TEXT, "WID_A_SCROLLING_TEXT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_A_WEBSITE, "WID_A_WEBSITE"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_A_COPYRIGHT, "WID_A_COPYRIGHT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_CAPTION, "WID_QS_CAPTION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_TEXT, "WID_QS_TEXT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_WARNING, "WID_QS_WARNING"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 69d6b81f9b..39a64034b9 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1605,6 +1605,7 @@ public: enum AboutWidgets { WID_A_SCROLLING_TEXT = ::WID_A_SCROLLING_TEXT, ///< The actually scrolling text. WID_A_WEBSITE = ::WID_A_WEBSITE, ///< URL of OpenTTD website. + WID_A_COPYRIGHT = ::WID_A_COPYRIGHT, ///< Copyright string }; /** Widgets of the #QueryStringWindow class. */ diff --git a/src/widgets/misc_widget.h b/src/widgets/misc_widget.h index bc0c07030b..0fdfc8c605 100644 --- a/src/widgets/misc_widget.h +++ b/src/widgets/misc_widget.h @@ -24,6 +24,7 @@ enum ToolTipsWidgets { enum AboutWidgets { WID_A_SCROLLING_TEXT, ///< The actually scrolling text. WID_A_WEBSITE, ///< URL of OpenTTD website. + WID_A_COPYRIGHT, ///< Copyright string }; /** Widgets of the #QueryStringWindow class. */ From f0747c8c51df49bf0163e6b999d893c2b523e1c7 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 5 May 2020 18:50:43 +0200 Subject: [PATCH 077/601] Update: Lang files --- src/lang/afrikaans.txt | 2 +- src/lang/arabic_egypt.txt | 2 +- src/lang/basque.txt | 2 +- src/lang/belarusian.txt | 2 +- src/lang/brazilian_portuguese.txt | 2 +- src/lang/bulgarian.txt | 2 +- src/lang/catalan.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 2 +- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/esperanto.txt | 2 +- src/lang/estonian.txt | 2 +- src/lang/faroese.txt | 2 +- src/lang/finnish.txt | 2 +- src/lang/french.txt | 2 +- src/lang/gaelic.txt | 2 +- src/lang/galician.txt | 2 +- src/lang/german.txt | 2 +- src/lang/greek.txt | 2 +- src/lang/hebrew.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/icelandic.txt | 2 +- src/lang/indonesian.txt | 2 +- src/lang/irish.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/japanese.txt | 2 +- src/lang/korean.txt | 2 +- src/lang/latvian.txt | 2 +- src/lang/lithuanian.txt | 2 +- src/lang/luxembourgish.txt | 2 +- src/lang/malay.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/norwegian_nynorsk.txt | 2 +- src/lang/polish.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/romanian.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/serbian.txt | 2 +- src/lang/simplified_chinese.txt | 2 +- src/lang/slovak.txt | 2 +- src/lang/slovenian.txt | 2 +- src/lang/spanish.txt | 2 +- src/lang/spanish_MX.txt | 2 +- src/lang/swedish.txt | 2 +- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 2 +- src/lang/traditional_chinese.txt | 2 +- src/lang/turkish.txt | 2 +- src/lang/ukrainian.txt | 2 +- src/lang/unfinished/frisian.txt | 2 +- src/lang/unfinished/ido.txt | 2 +- src/lang/unfinished/macedonian.txt | 2 +- src/lang/unfinished/persian.txt | 2 +- src/lang/vietnamese.txt | 2 +- src/lang/welsh.txt | 2 +- 58 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index bcf3e0efe6..4fbca76b54 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2728,7 +2728,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Maatskappy-besi STR_ABOUT_OPENTTD :{WHITE}Oor OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oorspronklike kopiereg {COPYRIGHT} 1995 Chris Sawyer, Alle regte voorbehou STR_ABOUT_VERSION :{BLACK}OpenTTD uitgawe {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Die OpenTTD span +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Die OpenTTD span # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Raamkoers diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 6fa5fcbd16..819b3488ac 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2306,7 +2306,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الاصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة STR_ABOUT_VERSION :{BLACK}النسخة المفتوحة رقم {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2019 فريق النسخة المفتوحة +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-{STRING} فريق النسخة المفتوحة # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 351a252638..f1d50f7839 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2583,7 +2583,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Konpainia jabe STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ri buruz STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD bertsioa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} koadroak/s diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 3fc0d42ab6..cd5379e630 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3018,7 +3018,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Зямля на STR_ABOUT_OPENTTD :{WHITE}Аб OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Арыґінальныя аўтарскія правы {COPYRIGHT} 1995 Chris Sawyer. Усе правы абароненыя. STR_ABOUT_VERSION :{BLACK}OpenTTD вэрсія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2019 Каманда распрацоўнікаў OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–{STRING} Каманда распрацоўнікаў OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index bdd3e7b75e..adbf2a4cdf 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2689,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :O terreno é pr STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipe do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} A equipe do OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Taxa de quadros diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 32c8b13402..8c8c24f9c0 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2636,7 +2636,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земя, пр STR_ABOUT_OPENTTD :{WHITE}Относно OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторски права {COPYRIGHT} 1995 Крис Сойер (Chris Sawyer), Всички права са запазени STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Скорост на кадрите diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 622283e04b..0f30221559 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2718,7 +2718,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :terreny propiet STR_ABOUT_OPENTTD :{WHITE}Quant a l'OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer. Tots els drets reservats. STR_ABOUT_VERSION :{BLACK}Versió {REV} de l'OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 L'equip de l'OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} L'equip de l'OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 32acb9f92c..7f20426f48 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2832,7 +2832,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemlja u posjed STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD tim # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Broj sličica diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 4386ae1016..fd7bb561e1 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2826,7 +2826,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Půda vlastněn STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Původní copyright: {COPYRIGHT} 1995 Chris Sawyer, všechna práva vyhrazena STR_ABOUT_VERSION :{BLACK}OpenTTD verze {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Tým OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Tým OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Počet snímků za sekundu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 748a90defd..f501b89c45 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2736,7 +2736,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land ejet af se STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheder reserveret STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD teamet # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Spilhastighed diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index b993a76a6c..4dfbb65476 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2736,7 +2736,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedr STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele auteursrecht {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden STR_ABOUT_VERSION :{BLACK}OpenTTD-versie {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Het OpenTTD-team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Het OpenTTD-team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Framesnelheid diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 55f2259289..ac8b4605a5 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2645,7 +2645,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index f61b66b11c..d35b02b246 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2733,7 +2733,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 323af7f6cb..ba7a07f802 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2251,7 +2251,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanie poseda STR_ABOUT_OPENTTD :{WHITE}Pri OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Origina kopirajto {COPYRIGHT} 1995 Chris Sawyer, Ĉiuj rajtoj rezervitaj STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 La teamo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} La teamo de OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 64ea5dbc6d..d96fd0fc0c 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2744,7 +2744,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ettevõtte maa STR_ABOUT_OPENTTD :{WHITE}OpenTTD lisainfo STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Algne autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud STR_ABOUT_VERSION :{BLACK}OpenTTD osa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD meeskond +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD meeskond # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kaadrisagedus diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 1eead24e4f..b6bf7ab2d5 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2412,7 +2412,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ogn hjá fyrit STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upprunalig upphavsrættindi {COPYRIGHT} 1995 Chris Sawyer, Øll rættindi umbiðin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáva {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD toymi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD toymi # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index f4ae3ba4a9..52cabab66a 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2734,7 +2734,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Yhtiön omistam STR_ABOUT_OPENTTD :{WHITE}Tietoja OpenTTD:stä STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Alkuperäiset oikeudet {COPYRIGHT} 1995 Chris Sawyer, kaikki oikeudet pidätetään STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus diff --git a/src/lang/french.txt b/src/lang/french.txt index 8ac3641948..811fdeac8c 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2737,7 +2737,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrain apparte STR_ABOUT_OPENTTD :{WHITE}À propos de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Tous droits réservés STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 L'équipe OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} L'équipe OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fréquence d'images diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index c5b84d9a7e..8e9b6be1e6 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2922,7 +2922,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tìr a' chompan STR_ABOUT_OPENTTD :{WHITE}Mu dheidhinn OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Còir-lethbhreac tùsail {COPYRIGHT} 1995 Chris Sawyer, a h-uile còir glèidhte STR_ABOUT_VERSION :{BLACK}OpenTTD tionndadh {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An sgioba OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} An sgioba OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Reat fhrèamaichean diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 17939c8513..9f1b0cf3d4 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2728,7 +2728,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreo propieda STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright orixinal {COPYRIGHT} 1995 Chris Sawyer, Tódolos dereitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 O equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} O equipo de OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/lang/german.txt b/src/lang/german.txt index 0b1f8a2897..6e8debe354 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2705,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firmeneigenes G STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Transport Tycoon-Urheberrecht {COPYRIGHT} 1995 Chris Sawyer, alle Rechte vorbehalten STR_ABOUT_VERSION :{BLACK}OpenTTD-Version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-Team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD-Team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Bildwiederholrate diff --git a/src/lang/greek.txt b/src/lang/greek.txt index a32ee99001..a2971e0f8f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2814,7 +2814,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτη STR_ABOUT_OPENTTD :{WHITE}Σχετικά με το OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Αρχικά Πνευματικά Δικαιώματα {COPYRIGHT} 1995 Chris Sawyer, Όλα τα δικαιώματα διατηρούνται STR_ABOUT_VERSION :{BLACK}OpenTTD έκδοση {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Η ομάδα του OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Η ομάδα του OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Ρυθμός καρέ γραφικών diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 2092f91bef..a944e7d5e6 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2697,7 +2697,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :שטח בבעל STR_ABOUT_OPENTTD :{WHITE}OpenTTD אודות STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}כל הזכויות שמורות , {COPYRIGHT}1995 כריס סויר - זכויות יוצרים מקוריות STR_ABOUT_VERSION :{BLACK}{REV} גירסה , OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}קצב ריענון diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 124deed6e9..89f79ff21a 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2800,7 +2800,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Vállalat álta STR_ABOUT_OPENTTD :{WHITE}Az OpenTTD-ről STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Eredeti copyright {COPYRIGHT} 1995 Chris Sawyer, Minden jog fenntartva STR_ABOUT_VERSION :{BLACK}OpenTTD {REV} verzió -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Az OpenTTD csapat +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} Az OpenTTD csapat # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}FPS ablak diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index e3683ac89e..7415e01f1e 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2519,7 +2519,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land í eigu fy STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upphaflegur höfundarréttur {COPYRIGHT} 1995 Chris Sawyer, Öll réttindi áskilin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáfa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD hópurinn +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD hópurinn # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 45d98ef355..b189ce98f4 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah milik Per STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hak Cipta asli {COPYRIGHT} 1995 Chris Sawyer, Hak Cipta dilindungi STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Tim OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Tim OpenTTD # Framerate display window STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) diff --git a/src/lang/irish.txt b/src/lang/irish.txt index b1a58ed5b4..d5371f8b83 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2670,7 +2670,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Talamh faoi úi STR_ABOUT_OPENTTD :{WHITE}Maidir le OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Cóipcheart bunaidh {COPYRIGHT} 1995 Chris Sawyer, Gach ceart ar cosaint STR_ABOUT_VERSION :{BLACK}OpenTTD leagan {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An fhoireann OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} An fhoireann OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 84b6646f6c..2556c68304 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2766,7 +2766,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno possedu STR_ABOUT_OPENTTD :{WHITE}Informazioni su OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright originale {COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati STR_ABOUT_VERSION :{BLACK}OpenTTD versione {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Il team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Il team OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 9f9fb99ff7..c27cf4cf02 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2671,7 +2671,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :社有地 STR_ABOUT_OPENTTD :{WHITE}OpenTTDについて STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}オリジナル版権{COPYRIGHT} 1995 Chris Sawyer All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD バージョン {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/korean.txt b/src/lang/korean.txt index dcac6b35a2..8bbf5bae48 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2737,7 +2737,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :회사 소유 STR_ABOUT_OPENTTD :{WHITE}OpenTTD에 대해서 STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD 버전 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 개발팀 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD 개발팀 # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}프레임레이트 diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 4750b893dc..d09161db85 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2616,7 +2616,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Uzņēmumam pie STR_ABOUT_OPENTTD :{WHITE}Par OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oriģināla autortiesības {COPYRIGHT} 1995 Kriss Sojers. Visas tiesības paturētas STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD darba grupa +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD darba grupa # Framerate display window STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 6c8ebaa3fd..2d2f9f148d 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2889,7 +2889,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanijos žem STR_ABOUT_OPENTTD :{WHITE}Apie OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pradinės versijos teisės priklauso {COPYRIGHT} 1995 Chris Sawyer, Visos teisės saugomos STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD komanda +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD komanda # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index cf50956910..0d23f442eb 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2736,7 +2736,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land am Firmenb STR_ABOUT_OPENTTD :{WHITE}Iwwert OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original Copyright {COPYRIGHT} 1995 Chris Sawyer, All Rechter virbehalen STR_ABOUT_VERSION :{BLACK}OpenTTD Versioun {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 D'OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} D'OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Biller pro Sekonn diff --git a/src/lang/malay.txt b/src/lang/malay.txt index efb02ab21c..d6707443f0 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2417,7 +2417,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah dimiliki STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hakcipta Asal {COPYRIGHT} 1995 Chris Sawyer, Hakcipta terpelihara STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8ac253e114..27f6bb6264 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2729,7 +2729,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firma-eid lando STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opprinnelig opphavsbeskyttet {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD-teamet # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Bildehastighet diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 6eba894d4e..59e6381676 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2593,7 +2593,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Feltet eigast a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opphaveleg opphavsbeskytta av {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheiter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV}. Oversett til nynorsk av Thor Morten Skogrand med fleire. -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD-teamet # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 48e9dd73b9..463f21b0d0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3116,7 +3116,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren w posiada STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prawa Autorskie {COPYRIGHT} 1995 Chris Sawyer, Wszelkie prawa zastrzeżone STR_ABOUT_VERSION :{BLACK}OpenTTD wersja {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Zespół OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} Zespół OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ef6912f21a..d6666eaca2 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2723,7 +2723,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno proprie STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipa do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} A equipa do OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotograma diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index ba2372b032..b3c04eaaf0 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2652,7 +2652,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren în propr STR_ABOUT_OPENTTD :{WHITE}Despre OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Toate drepturile rezervate STR_ABOUT_VERSION :{BLACK}OpenTTD versiunea {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Echipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Echipa OpenTTD # Framerate display window STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr de evenimente de joc simulate per secundă. diff --git a/src/lang/russian.txt b/src/lang/russian.txt index e0815a435f..4f98e7adee 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2916,7 +2916,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земля в STR_ABOUT_OPENTTD :{WHITE}Об OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинальные авторские права {COPYRIGHT} 1995 Chris Sawyer. Все права защищены. STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Команда разработчиков OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Команда разработчиков OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Скорость игры diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index ef96f78dd2..7567da7370 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2879,7 +2879,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemljište u po STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originalni kopirajt {COPYRIGHT} 1995 Chris Sawyer, Sva prava zadržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD tim # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 2fece1d86e..ac0764838e 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2736,7 +2736,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司属地 STR_ABOUT_OPENTTD :{WHITE}关于 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留一切权力。 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 团队 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD 团队 # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}帧率 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index af28e0b597..519849a808 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2738,7 +2738,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pôvodný copyright: {COPYRIGHT} 1995 Chris Sawyer, všetky práva vyhradené STR_ABOUT_VERSION :{BLACK}OpenTTD verzia {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} team OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index adf01885c7..508455dd8d 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2826,7 +2826,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ozemlje v lasti STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prvotne avtorske pravice {COPYRIGHT} 1995 Chris Sawyer, vse pravice pridržane STR_ABOUT_VERSION :{BLACK}OpenTTD različica {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 ekipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} ekipa OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index fb931e04fa..0a2a34b880 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2726,7 +2726,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright Original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 El equipo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} El equipo OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 11f97a3dfc..db8e547514 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2737,7 +2737,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019, el equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING}, el equipo de OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}FPS diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e06709f1bf..64bd3679a4 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2725,7 +2725,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Mark som ägs a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Ursprunglig upphovsrätt {COPYRIGHT} 1995 Chris Sawyer, Alla rättigheter hävdas STR_ABOUT_VERSION :{BLACK}OpenTTD-version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD-teamet # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Bildfrekvens diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 16c11972ae..9b27d0cfd1 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2411,7 +2411,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :நிறுவ STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ஐ பற்றி STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}அசல் உரிமைகள் {COPYRIGHT} 1995 கிறிஸ் சாயர், எல்லா உரிமைகளும் பதிவுசெய்யப்பட்டது STR_ABOUT_VERSION :{BLACK}OpenTTD பதிப்பு {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD குழுமம் +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD குழுமம் # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}பிரேம் வீதம் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index f4889f0779..46ecfa5675 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2618,7 +2618,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :บริษั STR_ABOUT_OPENTTD :{WHITE}เกี่ยวกับ OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}ลิขสิทธิ์เดิม {COPYRIGHT} ค.ศ.1995 ของ Chris Sawyer, สงวนลิขสิทธิ์ STR_ABOUT_VERSION :{BLACK}OpenTTD รุ่นที่ {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2019 ของ The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-{STRING} ของ The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 38dc262c7b..3aa84cc35a 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2671,7 +2671,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司所有土 STR_ABOUT_OPENTTD :{WHITE}關於 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原著作權為 {COPYRIGHT} 1995 Chris Sawyer,保留所有權利 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 開發小組 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD 開發小組 # Framerate display window STR_FRAMERATE_DATA_POINTS :{BLACK}數據基於 {COMMA} 個採樣 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 17ccff6c32..8b9d0da971 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2700,7 +2700,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Satın alınmı STR_ABOUT_OPENTTD :{WHITE}OpenTTD Hakkında STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Telif hakkı {COPYRIGHT} 1995 Chris Sawyer, Her hakkı saklıdır STR_ABOUT_VERSION :{BLACK}OpenTTD sürüm {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD ekibi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD ekibi # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kare oranı diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 6ef8e7f71f..855995759d 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2858,7 +2858,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ця ділян STR_ABOUT_OPENTTD :{WHITE}Про OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторське право {COPYRIGHT} 1995 Кріс Сойєр, Всі права захищені STR_ABOUT_VERSION :{BLACK}OpenTTD версія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 команда OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} команда OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Швидкість гри diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 3af7f6a751..c0f836cd6e 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -2458,7 +2458,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Lân fan bedriu STR_ABOUT_OPENTTD :{WHITE}Oer OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Orizjineel copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD-ferzje {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 It OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} It OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index e709ba47c9..b48ddf424b 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -777,7 +777,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Stabeyo di komp # About OpenTTD window STR_ABOUT_VERSION :{BLACK}OpenTTD versiono {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 La kruo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} La kruo OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 4a623223f4..50decfc5dc 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1194,7 +1194,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Компани STR_ABOUT_OPENTTD :{WHITE}За OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинален copyright {COPYRIGHT} 1995 Chris Sawyer, Сите права се задржани STR_ABOUT_VERSION :{BLACK}OpenTTD верзија {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD тимот +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD тимот # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 907bd0935c..b27230b3b2 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2374,7 +2374,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :زمین خری STR_ABOUT_OPENTTD :{WHITE}OpenTTD در باره ی STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD ویرایش {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 7d036eaeb8..33d14a64d5 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2727,7 +2727,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Đất công ty STR_ABOUT_OPENTTD :{WHITE}Về OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Nguyên tác bản quyền {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD phiên bản {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Nhóm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Nhóm OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Tốc độ khung hình diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 660067c0cc..fcf9dbac47 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2679,7 +2679,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tir cwmni STR_ABOUT_OPENTTD :{WHITE}Gwybodaeth am OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hawlfraint Wreiddiol {COPYRIGHT} 1995 Chris Sawyer, Holl cedwir pob hawl STR_ABOUT_VERSION :{BLACK}fersiwn OpenTTD {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Y tîm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} Y tîm OpenTTD # Framerate display window STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nifer y ticiau gêm a efelychir bob eiliad. From 364f6806c8e73555e7091f57d39b9118871bf76c Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 6 May 2020 19:45:39 +0200 Subject: [PATCH 078/601] Update: Translations from eints --- src/lang/latin.txt | 1 - src/lang/unfinished/urdu.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 687cf345ae..629e3d90df 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2906,7 +2906,6 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terra societati STR_ABOUT_OPENTTD :{WHITE}De OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Privilegium impressorium originale {COPYRIGHT} MCMXCV Chris Sawyer, Omnia proprietatis iura reservantur STR_ABOUT_VERSION :{BLACK}OpenTTD editio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} MMII-MMXIX Manus OpenTTD # Framerate display window STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 30d80d58a1..618b643ebf 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -2115,7 +2115,6 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{G=f}{BLACK}ک # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}اوپن ٹی ٹی ڈی کے متعلق -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} ٢٠٠٢ - ٢٠١٦ OpenTTD ٹیم # Framerate display window ############ Leave those lines in this order!! From 64278fd5983c80757615d67c76922e700246fc1b Mon Sep 17 00:00:00 2001 From: Yexo Date: Mon, 4 May 2020 23:58:56 +0200 Subject: [PATCH 079/601] Fix: reset roadtype/streetcartype info for non-road bridges --- src/saveload/afterload.cpp | 8 ++++++++ src/saveload/saveload.h | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 9fbccf65eb..0f1d4c4500 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3119,6 +3119,14 @@ bool AfterLoadGame() } } + if (IsSavegameVersionUntil(SLV_ENDING_YEAR)) { + for (TileIndex t = 0; t < map_size; t++) { + if (IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) != TRANSPORT_ROAD) { + SetRoadTypes(t, INVALID_ROADTYPE, INVALID_ROADTYPE); + } + } + } + /* Update station docking tiles. */ AfterLoadScanDockingTiles(); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index eeb0c58f27..5065e568ba 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -769,6 +769,19 @@ static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0 return _sl_version < major || (minor > 0 && _sl_version == major && _sl_minor_version < minor); } +/** + * Checks whether the savegame is below or at \a major. This should be used to repair data from existing + * savegames which is no longer corrupted in new savegames, but for which otherwise no savegame + * bump is required. + * @param major Major number of the version to check against. + * @return Savegame version is at most the specified version. + */ +static inline bool IsSavegameVersionUntil(SaveLoadVersion major) +{ + extern SaveLoadVersion _sl_version; + return _sl_version <= major; +} + /** * Checks if some version from/to combination falls within the range of the * active savegame version. From bc8333723ccf0ea5e889a6bc412c89ea623138bc Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 6 May 2020 22:44:47 +0200 Subject: [PATCH 080/601] Fix #8021: limit savegame range for docking tiles fixing --- src/saveload/afterload.cpp | 11 ++++++++--- src/saveload/saveload_internal.h | 1 - src/saveload/station_sl.cpp | 11 ----------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 0f1d4c4500..b81d446e41 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3120,6 +3120,14 @@ bool AfterLoadGame() } if (IsSavegameVersionUntil(SLV_ENDING_YEAR)) { + /* Update station docking tiles. Was only needed for pre-SLV_MULTITLE_DOCKS + * savegames, but a bug in docking tiles touched all savegames between + * SLV_MULTITILE_DOCKS and SLV_ENDING_YEAR. */ + for (Station *st : Station::Iterate()) { + if (st->ship_station.tile != INVALID_TILE) UpdateStationDockingTiles(st); + } + + /* Reset roadtype/streetcartype info for non-road bridges. */ for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) != TRANSPORT_ROAD) { SetRoadTypes(t, INVALID_ROADTYPE, INVALID_ROADTYPE); @@ -3127,9 +3135,6 @@ bool AfterLoadGame() } } - /* Update station docking tiles. */ - AfterLoadScanDockingTiles(); - /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */ Station::RecomputeCatchmentForAll(); diff --git a/src/saveload/saveload_internal.h b/src/saveload/saveload_internal.h index 69dfb5dbf9..8a3f433c22 100644 --- a/src/saveload/saveload_internal.h +++ b/src/saveload/saveload_internal.h @@ -29,7 +29,6 @@ void AfterLoadVehicles(bool part_of_load); void FixupTrainLengths(); void AfterLoadStations(); void AfterLoadRoadStops(); -void AfterLoadScanDockingTiles(); void ResetLabelMaps(); void AfterLoadLabelMaps(); void AfterLoadStoryBook(); diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index b0e91b4e75..1d3612ae31 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -141,17 +141,6 @@ void AfterLoadRoadStops() } } -/** - * (Re)scan for station docking tiles after loading a savegame. - */ -void AfterLoadScanDockingTiles() -{ - /* Scan for docking tiles */ - for (Station *st : Station::Iterate()) { - if (st->ship_station.tile != INVALID_TILE) UpdateStationDockingTiles(st); - } -} - static const SaveLoad _roadstop_desc[] = { SLE_VAR(RoadStop, xy, SLE_UINT32), SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45), From 86e9326b7f9a0f74e5e8b271289685a1d5deeaf2 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 7 May 2020 01:14:22 +0200 Subject: [PATCH 081/601] Add: docking tiles cache check (#8120) --- src/openttd.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/openttd.cpp b/src/openttd.cpp index ffd30cf7b8..9bd3bf7d07 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1317,6 +1317,23 @@ static void CheckCaches() st->goods[c].cargo.InvalidateCache(); assert(memcmp(&st->goods[c].cargo, buff, sizeof(StationCargoList)) == 0); } + + /* Check docking tiles */ + TileArea ta; + std::map docking_tiles; + TILE_AREA_LOOP(tile, st->docking_station) { + ta.Add(tile); + docking_tiles[tile] = IsDockingTile(tile); + } + UpdateStationDockingTiles(st); + if (ta.tile != st->docking_station.tile || ta.w != st->docking_station.w || ta.h != st->docking_station.h) { + DEBUG(desync, 2, "station docking mismatch: station %i, company %i", st->index, (int)st->owner); + } + TILE_AREA_LOOP(tile, ta) { + if (docking_tiles[tile] != IsDockingTile(tile)) { + DEBUG(desync, 2, "docking tile mismatch: tile %i", (int)tile); + } + } } } From 82573a5e73da49e90c334001dfd4dd259dec7b15 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 7 May 2020 02:00:53 +0200 Subject: [PATCH 082/601] Fix #8117: Memory leak in admin port (#8122) --- src/network/core/tcp_admin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/network/core/tcp_admin.cpp b/src/network/core/tcp_admin.cpp index fdeb3d829b..98227e0199 100644 --- a/src/network/core/tcp_admin.cpp +++ b/src/network/core/tcp_admin.cpp @@ -115,6 +115,7 @@ NetworkRecvStatus NetworkAdminSocketHandler::ReceivePackets() Packet *p; while ((p = this->ReceivePacket()) != nullptr) { NetworkRecvStatus res = this->HandlePacket(p); + delete p; if (res != NETWORK_RECV_STATUS_OKAY) return res; } From 170f3f9b2be8fd5ea65e1e189a5e52f5c4dd836e Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 7 May 2020 19:45:39 +0200 Subject: [PATCH 083/601] Update: Translations from eints latvian: 38 changes by Tranzistors --- src/lang/latvian.txt | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index d09161db85..cb1779d750 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -189,6 +189,8 @@ STR_COLOUR_ORANGE :Oranža STR_COLOUR_BROWN :Brūna STR_COLOUR_GREY :Pelēka STR_COLOUR_WHITE :Balta +STR_COLOUR_RANDOM :Nejaušs +STR_COLOUR_DEFAULT :Noklusējuma # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}jūdzes stundā @@ -335,6 +337,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Pietuvin STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Attālināt skatu STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Būvēt sliežu ceļu STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Būvēt ceļus +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Būvēt tramvajus STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Būvēt kuģu piestātnes STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Būvēt lidostas STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Atvērt ainavas rīkjoslu, lai paceltu/nolaistu zemes līmeni, stādītu kokus utt. @@ -397,6 +400,7 @@ STR_FILE_MENU_EXIT :Iziet # map menu STR_MAP_MENU_MAP_OF_WORLD :Pasaules karte STR_MAP_MENU_EXTRA_VIEW_PORT :Papildu skatvieta +STR_MAP_MENU_LINGRAPH_LEGEND :Kravu plūsmas apzīmējumi STR_MAP_MENU_SIGN_LIST :Zīmju saraksts ############ range for town menu starts @@ -914,6 +918,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Dienvidāfrikas STR_GAME_OPTIONS_CURRENCY_CUSTOM :Cita... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijas lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Irānas riāli (IRR) +STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autotransporta līdzekļi @@ -977,6 +982,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normāls STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasīt lietošanai pamata grafikas kopu @@ -1108,6 +1114,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spēles iestat STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spēles iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo spēli) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Uzņēmuma iestatījumi (tiek iekļauti saglabājumos, ietekmē tikai jaunās spēles) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Uzņēmuma iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo uzņēmumu) +STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategorija {BLACK}uz {WHITE}{STRING} {BLACK}un {SILVER}Tips {BLACK}uz {WHITE}Visi iestatījumu veidi STR_CONFIG_SETTINGS_NONE :{WHITE}-Nav- STR_CONFIG_SETTING_OFF :izslēgts @@ -1137,6 +1144,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Būvēšanas iz STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Iestatīt būvēšanas un pirkumu izmaksas STR_CONFIG_SETTING_RECESSIONS :Lejupslīde: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING :Neatļaut vilcienu apgriešanos stacijās: {STRING} +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ja ieslēgts, stacijās vilcieni negriezīsies pretējā virzienā, pat ja braucot tādā veidā tie atrastu īsāku ceļu un nākamo pieturu; izņēmums ir gala stacijas STR_CONFIG_SETTING_DISASTERS :Katastrofas: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL :Pilsētu domju attieksme pret platības pārstrukturēšanu: {STRING} @@ -1274,6 +1282,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGen STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimālais attālums no kartes malas naftas pārstrādes rūpnīcām: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftas pārstrādes rūpnīcas ir būvējamas tikai kartes malu tuvumā, salu kartēm tas ir pie krasta STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Noteikt, kādā augstumā sākas subarktiskā ainava. Sniegs arī ietekmē industriju rašanos un apdzīvoto vietu pieaugšanas prasības STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Apvidus nelīdzenums: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Ļoti gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Gluda @@ -1302,6 +1311,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Apvidus krāsa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :zaļa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši zaļa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta +STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_LMB :Pārvietot karti ar kreiso peles pogu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plūdena skatvietas ritināšana: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP :Rādīt mērījumu rīkjoslu, izmantojot dažādus būvniecības rīkus: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Rāda lauciņu attālumus un augstuma starpības, ar vilkšanu veicot būvniecības darbības @@ -1320,6 +1331,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_OFF :izslēgts STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Peles ritenīša ātrums: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Vadīt peles ritenīša ritināšanas jutīgumu STR_CONFIG_SETTING_OSK_ACTIVATION :Ekrāntastatūra: {STRING} +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Izvēlieties metodi, kas atvērs ekrnāna tastatūru, lai teksta lauciņos varētu ievadīt tekstu, izmantojot rādītājierīces. Tas ir domāts ierīcēm, kurām nav tastatūras. STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :atspējota STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :dubultklikšķis STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :viens klikšķis (kad fokusēta) @@ -1408,6 +1420,7 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Atspējot dator STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Šā iestatījuma ieslēgšana padara neiespējamu kuģu būvēšanu datoram STR_CONFIG_SETTING_AI_PROFILE :Noklusējuma iestatījumu profils: {STRING} +STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Izvēlieties, kuru iestatījumu profilu izmantot nejaušam MI, vai sākotnējās vērtības, kad pievieno jaunu MI vai spēles skriptu STR_CONFIG_SETTING_AI_PROFILE_EASY :viegls STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :vidējs STR_CONFIG_SETTING_AI_PROFILE_HARD :smags @@ -1472,6 +1485,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :pilns STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Krāsaini avīžu raksti parādās: {STRING} gadā STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gads kad sāk drukāt krāsainas avīzes. Pirms šā gada tās ir melnbaltas STR_CONFIG_SETTING_STARTING_YEAR :Sākuma gads: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ja ieslēgts, ražošanas izmaiņas notiek biežāk un ar mazākiem soļiem. Šim iestatījumam parasti nav ietekmes, ja ražotņu veidi ir ieviesti ar NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Atļaut akciju pirkšanu no citiem uzņēmumiem: {STRING} @@ -1556,11 +1570,13 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :neviena STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Lielpilsētu sākuma lieluma reizinātājs: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Lielpilsētu vidējais lielums attiecībā pret parastām pilsētām spēles sākumā +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Atjaunināt sadales grafu ik pa {STRING}{NBSP}dien{P 0:2 ai ām ām} STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"nesimetriski" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE :Attāluma ietekme uz pieprasījumu: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma mērvienības: {STRING} @@ -1737,6 +1753,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mainīt STR_CHEAT_SETUP_PROD :{LTBLUE}Ieslēgt ražojumu vērtības maiņu: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - krāsu shēma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rādīt vispārējo identitates krāsu shēmas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rādīt vilcienu identitātes krāsu shēmas @@ -2294,7 +2311,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Ceļa si STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Vienvirziena ceļa signālierīce (elektriska){}Ceļa signāls ļauj iebraukt signāla blokā vairāk kā vienam vilcienam vienlaicīgi, ja vien vilciens var rezervēt drošu apstāšanās punktu. Vienvirziena ceļa signālierīcēm nevar pabraukt garām no aizmugures STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signālierīču pārveidotājs{}Kad ieslēgts, klikšķis uz jau esošas signālierīces pārveidos to uz norādīto signāla tipu un variantu. Ctrl+klikšķis pārslēgs pašreizējo variantu. Shift+klikšķis rāda pārveidošanas tāmes vērtību STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Vilkt signālu biežumu -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Samazināt signālierīču biežumu +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Samazināt signālierīču attālumu STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Palielināt signālierīču biežumu # Bridge selection window @@ -2619,11 +2636,18 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} OpenTTD darba grupa # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Kadru biežums +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Cik ātri spēle šobrīd iet salīdzinot ar standarta ātrumu. +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kadrs/i +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kadri/s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMESCRIPT :{BLACK} Spēles skripts: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_DRAWING :Grafiku attēlošana +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Pasaules skatvietas attēlošanu STR_FRAMETIME_CAPTION_VIDEO :{WHITE}video izeja ############ End of leave-in-this-order @@ -2656,6 +2680,7 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Ievadīt # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Pasaules radīšana STR_MAPGEN_MAPSIZE :{BLACK}Kartes izmēri: +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Izvēlieties kartes izmēru, izteikts lauciņos. Pieejamo lauciņu skaits var būt nedaudz mazāks STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Pilsētu daudzums: STR_MAPGEN_DATE :{BLACK}Datums: @@ -2849,6 +2874,7 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Jūs gr STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Nevar pievienot failu: vienādi GRF ID STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Atbilstošs fails nav atrasts (ielādēts saderīgs GRF) +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Nevar pievienot datni: sasniegts NewGRF datņu limits STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Saderīgs GRF(s) ielādēts pazudušajiem failiem STR_NEWGRF_DISABLED_WARNING :{WHITE}Trūkstošie GRF faili tikuši atspējoti @@ -2865,6 +2891,7 @@ STR_NEWGRF_LIST_MISSING :{RED}Trūkst fa STR_NEWGRF_BROKEN :{WHITE}NewGRF uzvedība '{0:STRING}' visticamāk izraisīs desinhronizācijas vai avārijas STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Tas mainīja '{1:ENGINE}' vilcējvagona stāvokli ārpus depo STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Tas mainīja transportlīdzekļa '{1:ENGINE}' garumu, kad tas neatradās depo +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Tas mainīja transportlīdzekļa ietilpību '{1:ENGINE}', kad neatrodas depo vai netiek pielāgots STR_BROKEN_VEHICLE_LENGTH :{WHITE}Vilciens '{VEHICLE}', kas pieder '{COMPANY}' ir ar nepareizu garumu. Iespējams, vainīga problēma ar NewGRF. Spēle var desinhronizēties vai avarēt STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' sniedz nepareizu informāciju @@ -3214,7 +3241,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} gaida{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Mainīt ražošanu (dalāmais ar 8, līdz pat 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mainīt ražošanas līmeni (procentos, līdz 800%) @@ -3272,6 +3301,7 @@ STR_GROUP_RENAME_TOOLTIP :{BLACK}Pārdēv STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikšķināt, lai pasargātu šo grupu no vispārējās automātiskās aizstāšanas STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Grupas dzēšana +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Vai tiešām vēlaties dzēst šo grupu un tās atvases (ja ir)? STR_GROUP_ADD_SHARED_VEHICLE :Pievienot kopīgos transportlīdzekļus STR_GROUP_REMOVE_ALL_VEHICLES :Novākt visus transportlīdzekļus @@ -3279,6 +3309,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Novākt visus t STR_GROUP_RENAME_CAPTION :{BLACK}Pārdēvēt grupu STR_GROUP_PROFIT_THIS_YEAR :Ienākumi šajā gadā: +STR_GROUP_PROFIT_LAST_YEAR :Peļņa pērn: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Jauni dzelzceļa transportlīdzekļi @@ -3311,6 +3342,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ietilpī STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motorvagoni: {GOLD}+{POWER}zs{BLACK} Svars: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Pielāgojams uz: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Visi kravu veidi +STR_PURCHASE_INFO_NONE :Nav STR_PURCHASE_INFO_ALL_BUT :visu, izņemot {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maksimālais vilces spēks: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Apgabas: {GOLD}{COMMA} lauciņi @@ -3325,6 +3357,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Pirkt au STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Pirkt kuģi STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Pirkt lidaparātu +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK} Pirkt un pielāgot transporta līdzekli STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto vilciena vagonu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto transportlīdzekli. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu @@ -3488,6 +3521,7 @@ STR_REPLACE_ELRAIL_VEHICLES :Elektrificētā STR_REPLACE_MONORAIL_VEHICLES :Viensliedes transportlīdzekļi STR_REPLACE_MAGLEV_VEHICLES :Magleva transportlīdzekļi +STR_REPLACE_ROAD_VEHICLES :Autotransporta līdzekļi STR_REPLACE_REMOVE_WAGON :{BLACK}Vagona noņemšana: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automātiskā aizvietošana saglabās esošo vilciena garumu noņemot vagonus (sākot no priekšgala), ja mainot lokomotīvi tas kļūtu garāks @@ -3817,6 +3851,7 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Braukšana (nav STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Braukt ar ne vairāk kā {2:VELOCITY} (nav sarakstā) STR_TIMETABLE_TRAVEL_FOR :Braukt līdz {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Braukt uz {STRING} ar ne vairāk kā {VELOCITY} +STR_TIMETABLE_STAY_FOR_ESTIMATED :(stāvēt {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR :un palikt līdz {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :un braukt līdz {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}dien{P a as u} @@ -3931,6 +3966,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Izvēlē STR_AI_LIST_CANCEL :{BLACK}Atcelt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemainīt skriptu +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Pilnībā pietuvināts ekrānuzņēmums # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametri @@ -4105,6 +4141,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mež STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... var būvēt tikai sniegotajos apgabalos STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... var būvēt tikai bezsniega apgabalos +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Mainīt kartes ģenerēšanas parametrus, lai iegūtu labāku karti # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Šeit nevar būvēt dzelzceļa staciju... From 2c84549db02b9d13f88ce0c46dab651ea6d8bc08 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Fri, 8 May 2020 21:35:52 +0200 Subject: [PATCH 084/601] Fix: Two issues in MIDI file writer Variable-length values would write threshold values with a byte too many. System Exclusive messages would cause write to fail since the end byte was treated as part of next message. --- src/music/midifile.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 197be14a14..67cc7b192c 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -886,21 +886,21 @@ void MidiFile::MoveFrom(MidiFile &other) static void WriteVariableLen(FILE *f, uint32 value) { - if (value < 0x7F) { + if (value <= 0x7F) { byte tb = value; fwrite(&tb, 1, 1, f); - } else if (value < 0x3FFF) { + } else if (value <= 0x3FFF) { byte tb[2]; tb[1] = value & 0x7F; value >>= 7; tb[0] = (value & 0x7F) | 0x80; value >>= 7; fwrite(tb, 1, sizeof(tb), f); - } else if (value < 0x1FFFFF) { + } else if (value <= 0x1FFFFF) { byte tb[3]; tb[2] = value & 0x7F; value >>= 7; tb[1] = (value & 0x7F) | 0x80; value >>= 7; tb[0] = (value & 0x7F) | 0x80; value >>= 7; fwrite(tb, 1, sizeof(tb), f); - } else if (value < 0x0FFFFFFF) { + } else if (value <= 0x0FFFFFFF) { byte tb[4]; tb[3] = value & 0x7F; value >>= 7; tb[2] = (value & 0x7F) | 0x80; value >>= 7; @@ -1013,7 +1013,7 @@ bool MidiFile::WriteSMF(const char *filename) ptrdiff_t sysexlen = sysexend - dp; WriteVariableLen(f, sysexlen); fwrite(dp, 1, sysexend - dp, f); - dp = sysexend; + dp = sysexend + 1; continue; } From 61e1a4510058192ea9266554ad7a8e1e495a71d4 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 9 May 2020 19:45:37 +0200 Subject: [PATCH 085/601] Update: Translations from eints latvian: 8 changes by Tranzistors spanish (mexican): 1 change by Absay --- src/lang/latvian.txt | 9 ++++++++- src/lang/spanish_MX.txt | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index cb1779d750..592f98759c 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -983,6 +983,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normāls +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs izmērs STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasīt lietošanai pamata grafikas kopu @@ -1574,6 +1575,7 @@ STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Atjaunināt sad STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"nesimetriski" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE :Attāluma ietekme uz pieprasījumu: {STRING} @@ -2646,6 +2648,7 @@ STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMA STR_FRAMERATE_GAMESCRIPT :{BLACK} Spēles skripts: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Pasaules tikšķi STR_FRAMETIME_CAPTION_DRAWING :Grafiku attēlošana STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Pasaules skatvietas attēlošanu STR_FRAMETIME_CAPTION_VIDEO :{WHITE}video izeja @@ -3065,6 +3068,7 @@ STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Neviena STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_LONG} STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO_SHORT} no {STATION}) +STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} rezervēts iekraušanai) STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Pieņem STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Rādīt pieņemamo kravu sarakstu @@ -3241,6 +3245,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Pieprasa: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} gaida{STRING} @@ -3267,7 +3272,7 @@ STR_VEHICLE_LIST_AVAILABLE_SHIPS :Pieejamie kuģi STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Pieejamie lidaparāti STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Apskatīties visus dzinējus projektējumus, kas pieejami šim transportlīdzekļu veidam. -STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Labot sarakstu +STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Pārvaldīt sarakstu STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Sūtīt norādījumus visiem transportlīdzekļiem, kas ir šajā sarakstā STR_VEHICLE_LIST_REPLACE_VEHICLES :Nomainīt transportlīdzekļus STR_VEHICLE_LIST_SEND_FOR_SERVICING :Sūtīt uz apkopi @@ -3475,6 +3480,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Ziņojum STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Mēs tikko esam izstrādājuši jaunu transportlīdzekli - {STRING}. Vai esat ieinteresēts iegūt izņēmuma tiesības izmantot šo transportlīdzekli uz vienu gadu, lai mēs redzētu tā iespējas pirms padaram pieejamu visiem? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :dzelzceļa lokomotīve +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :elektrificēta dzelzceļa lokomotīve STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :viensliedes lokomotīve STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magleva lokomotīve @@ -3967,6 +3973,7 @@ STR_AI_LIST_CANCEL :{BLACK}Atcelt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemainīt skriptu STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Pilnībā pietuvināts ekrānuzņēmums +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Visas kartes ekrānuzņēmums # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametri diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index db8e547514..5b9fd602ee 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3980,7 +3980,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ir al depósito STR_ORDER_GO_TO_NEAREST_HANGAR :Ir al hangar más cercano STR_ORDER_CONDITIONAL :Salto de orden condicional STR_ORDER_SHARE :Compartir órdenes -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden marcada o añadirla al final de la lista. Ctrl+Clic sobre una estación para establecer la orden a 'Cargar máx. cualquier carga', sobre un punto guía para 'Sin paradas' y sobre un depósito para 'Mantenimiento' (esta última desactivará el mantenimiento automático). Ctrl+Clic sobre otro vehículo para hacer que ambos compartan siempre las mismas órdenes. Clic sobre un vehículo para copiar sus órdenes (sin compartirlas). +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden marcada o añadirla al final de la lista. Ctrl+Clic en una estación para establecer la orden a 'Cargar máx. cualquier carga', en un punto de ruta para 'Sin paradas' y en un depósito para 'Mantenimiento' (desactiva el mantenimiento automático). Ctrl+Clic en otro vehículo para que ambos compartan las mismas órdenes. Clic en un vehículo para copiar sus órdenes (sin compartirlas). STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Ver todos los vehículos que comparten el mismo itinerario From a95fbd59a3356d31e91a8bf24a79c71964868b66 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sat, 9 May 2020 21:27:06 +0100 Subject: [PATCH 086/601] Fix #8119, f538179: Update docking tile area when placing a diagonal rail next to a dock end (#8124) --- src/rail_cmd.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 7de00327eb..527e02cb8c 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -568,7 +568,6 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u default: { /* Will there be flat water on the lower halftile? */ bool water_ground = IsTileType(tile, MP_WATER) && IsSlopeWithOneCornerRaised(tileh); - bool docking = IsPossibleDockingTile(tile) && IsDockingTile(tile); CommandCost ret = CheckRailSlope(tileh, trackbit, TRACK_BIT_NONE, tile); if (ret.Failed()) return ret; @@ -587,7 +586,7 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u MakeRailNormal(tile, _current_company, trackbit, railtype); if (water_ground) { SetRailGroundType(tile, RAIL_GROUND_WATER); - SetDockingTile(tile, docking); + if (IsPossibleDockingTile(tile)) CheckForDockingTile(tile); } Company::Get(_current_company)->infrastructure.rail[railtype]++; DirtyCompanyInfrastructureWindows(_current_company); From 3ba34a72aabf9f34fa3ae71ca6605989918b813e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 10 May 2020 19:45:39 +0200 Subject: [PATCH 087/601] Update: Translations from eints latvian: 80 changes by Tranzistors spanish (mexican): 10 changes by Absay --- src/lang/latvian.txt | 83 +++++++++++++++++++++++++++++++++++++++-- src/lang/spanish_MX.txt | 20 +++++----- 2 files changed, 90 insertions(+), 13 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 592f98759c..53a565619d 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -671,6 +671,7 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Celiņu rādītājs STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programma - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Notīrīt +STR_PLAYLIST_CHANGE_SET :{BLACK}Mainīt kopu STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Dzēst pašreizējo programmu (tikai Pielāgoto 1 vai Pielāgoto 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to pievienotu pašreizējai programmai (tikai Pielāgotā 1 vai Pielāgotā 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to izdzēstu no pašreizējās programmas (tikai Pielāgotā1 un Pielāgotā2) @@ -806,6 +807,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(vadītājs) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} pabalstīja jaunas pilsētas - {TOWN} dibināšanu! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Ir uzbūvēta jauna pilsēta “{TOWN}”! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Tiek būvēta jauna {STRING} netālu no {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Jauns {STRING} tiek stādīts netālu no {TOWN}! @@ -837,6 +839,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} ir nederīgs maršruts STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} ir divi vienādi maršruti STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} rīkojumā ir nederīga stacija +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} ir norīkojums uz lidostu, kurai ir pārāk īss skrejceļš STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} pamazām noveco STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} ir kļuvis ļoti vecs @@ -853,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}Tagad ir pieejams jauns {STRING}! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Atvērt grupas logu, fokusēts uz transportlīdzekļu grupu 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} @@ -1135,12 +1139,15 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :centrā STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :pa labi STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimālais sākotnējais aizdevums: {STRING} +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais aizdevuma daudzums, ko uzņēmums var izsniegt (neskaitot inflāciju) STR_CONFIG_SETTING_INTEREST_RATE :Procentu likme: {STRING} +STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Aizdevumu procentu likme; ja ieslēgts, ietekmē arī inflāciju STR_CONFIG_SETTING_RUNNING_COSTS :Kārtējās izmaksas: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Būvēšanas ātrums: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :MI (mākslīgā intelekta) būvniecības darbību daudzuma ierobežošana STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Transportlīdzekļu bojāšanās: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsīdiju reizinātājs: {STRING} +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Iestatīt, cik daudz maksāt par subsidētajiem savienojumiem STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Būvēšanas izmaksas: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Iestatīt būvēšanas un pirkumu izmaksas STR_CONFIG_SETTING_RECESSIONS :Lejupslīde: {STRING} @@ -1148,6 +1155,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Neatļaut vilci STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ja ieslēgts, stacijās vilcieni negriezīsies pretējā virzienā, pat ja braucot tādā veidā tie atrastu īsāku ceļu un nākamo pieturu; izņēmums ir gala stacijas STR_CONFIG_SETTING_DISASTERS :Katastrofas: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL :Pilsētu domju attieksme pret platības pārstrukturēšanu: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Izvēlieties, cik lielā mērā trokšņi un vides bojājumi ietekmē uzņēmuma reitingu un turpmākās būvniecības darbības viņu teritorijā STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maksimālais kartes augstums: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Uzstādīt maksimālo atļauto kalnu augstumu kartē @@ -1239,7 +1247,9 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Atļaut caurbra STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Ļauj būvēt caurbraucamas pieturvietas uz citiem uzņēmumiem piederošiem ceļiem STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Šo iestatījumu nav iespējams mainīt, kad tur ir transportlīdzekļi STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktūras uzturēšana: {STRING} +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kad ieslēgts, infrastruktūras uzturēšana nav bezmaksas. Izmaksas pieaug proporcionāli tīkla izmēram, tādā veidā tas ietekmē lielākus uzņēmumus vairāk kā mazus. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Sākotnējā uzņēmuma krāsa: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lidostas darbosies mūžīgi: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ieslēdzot šo iestatījumu, katrs lidostas veids pēc tā ieviešanas vienmēr ir pieejams @@ -1289,7 +1299,10 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Ļoti gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Nelīdzena STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Ļoti nelīdzena +STR_CONFIG_SETTING_VARIETY :Dažādības sadalījums: {STRING} +STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Tikai TerraGenesis) Nosaka, vai karte satur gan kalnus, gan līdzenumus. Tā kā šis padara karti tikai plakanāku, citus iestatījumus vajadzētu pārslēgt uz kalnainumu STR_CONFIG_SETTING_TREE_PLACER :Koku izvietošanas algoritms: {STRING} +STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Izvēlieties koku izplatību uz kartes: 'Sākotnējais' iestāda kokus vienmērīgi, 'Uzlabotais' tos stāda grupās STR_CONFIG_SETTING_TREE_PLACER_NONE :Nav STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Sākotnējais STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Uzlabotais @@ -1313,6 +1326,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :zaļa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši zaļa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_LMB :Pārvietot karti ar kreiso peles pogu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plūdena skatvietas ritināšana: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP :Rādīt mērījumu rīkjoslu, izmantojot dažādus būvniecības rīkus: {STRING} @@ -1344,6 +1358,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komanda+klikš STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klikšķis STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Izslēgta +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Labais klikšķis logā aizver logu. Izslēdz paskaidres parādīšanu ar labo klikšķi! STR_CONFIG_SETTING_AUTOSAVE :Automātiskā saglabāšana: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Izvēlēties spēles automātiskās saglabāšanas starplaikus @@ -1429,6 +1444,7 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :smags STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Atļaut MI vairākspēlētāju spēlēs: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Atļaut MI (mākslīgā intelekta) nespēlētāju tēliem (datora vadītiem) piedalīties vairākspēlētāju spēlēs STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#darbību kodi, pirms skripti tiek apstādināti: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksimālais skaitļošanas soļu skaits, ko skripts var aizņemt vienā gājienā STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING} @@ -1491,6 +1507,7 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmē STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ja ieslēgts, ražošanas izmaiņas notiek biežāk un ar mazākiem soļiem. Šim iestatījumam parasti nav ietekmes, ja ražotņu veidi ir ieviesti ar NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Atļaut akciju pirkšanu no citiem uzņēmumiem: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, ir atļauts pirkt un pārdodot uzņēmumu akcijas. Akcijas būs pieejamas tikai atbilstošu vecumu sasniegušiem uzņēmumiem +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenti no kopējās peļņas, ko maksā tranzītstacijās: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Velkot izvietot signālierīces uz katra: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Iestatīt attālumus, kādos līdz nākamajam šķērslim (signālierīcei, dzelzceļa mezglam) uz ceļa tiks būvētas signālierīces, ja tās tiek vilktas @@ -1500,6 +1517,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Signālierīču STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automātiski būvēt semaforus pirms: {STRING} gada STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Izvēlēties gadu, kad ceļiem sāks izmantot elektriskās signālierīces. Pirms šā gada tiks izmantotas neelektriskās signālierīces (kam ir tieši tāda pati funkcija, bet ar atšķirīgu izskatu) STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Ieslēgt signālierīču grafisko lietotāja saskarni: {STRING} +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Rādīt logu, lai izvēlētos būvējamo signālu tipu, nevis tikai bezloga signālu rotāciju ar Ctrl+klikšķis uz uzbūvētiem signāliem STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Noklusējuma signālu veids: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Izmantotais noklusējuma signālu veids STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :bloķēšanas signāli @@ -1528,6 +1546,8 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Šā iestatīju STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :aizliegta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :atļauta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :atļauta, ar brīvi izvēlētu izkārtojumu +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cik daudz kravas rada pilsētu mājas, attiecībā pret kopējo pilsētas iedzīvotāju skaitu.{}Kvadrātisks pieaugums: divas reizes lielāka pilsēta rada četras reizes vairāk pasažieru.{}Lineārs pieaugums: divas reizes lielāka pilsēta rada divas reizes vairāk pasažieru. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Koku izvietojums spēlē: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Vadīt nejaušu koku parādīšanos spēles laikā. Tas var ietekmēt no kokaudzēšanas atkarīgas ražotnes, piemēram kokzāģētavas @@ -1572,13 +1592,17 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Lielpilsētu s STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Lielpilsētu vidējais lielums attiecībā pret parastām pilsētām spēles sākumā STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Atjaunināt sadales grafu ik pa {STRING}{NBSP}dien{P 0:2 ai ām ām} +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Laiks starp secīgām saišu grafa pārrēķināšanām. Katra pārrēķināšana izskaitļo plānos vienai grafa komponentei. Tas nozīmē, ka šim iestatījumam vērtība X nenozīmē, ka viss grafs tiks atjaunināts ir pēc X dienām. Tikai dažas komponentes tiks pārrēķinātas. Jo mazāka iestatītā vērtība, jo vairāk laika CPU pavadīs rēķinot. Jo lielāka iestatītā vērtība, jo ilgāk nevarēs sākties kravu izplatīšana jaunos maršrutos. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simetriska" nozīmē, ka apmēram vienāds daudzums pasta tiks nosūtīts virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs pasta daudzums var tikt nosūtīts katrā no virzieniem. "manuāli" nozīmē, ka pastam netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"nesimetriski" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asimetriska" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE :Attāluma ietekme uz pieprasījumu: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ja iestatīsiet šo vērtību lielāku kā 0, attālums starp kravas izcelsmes staciju A un iespējamo galastaciju B ietekmēs sūtāmās kravas apjomu. Jo tālāk no stacijas A ir stacija B, jo mazāk kravas tiks nosūtīts. Jo augstāka vērtība, jo mazāk kravas tiks nosūtīts uz tālo staciju un vairāk kravu uz tuvo staciju. +STR_CONFIG_SETTING_DEMAND_SIZE :Atpakaļceļa kravas daudzums simetriskajā režīmā: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma mērvienības: {STRING} @@ -1675,6 +1699,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignorē pamata skaņas kopu '{STRING}': nav atrasta STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignorē pamata mūzikas kopu '{STRING}': nav atrasta STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Nepietiek atmiņas +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Neizdevās piešķirt {BYTES} spraitu kešam. Spraitu kešs tika samazināts uz {BYTES}. Tas samazinās OpenTTD veiktspēju. Lai samazinātu prasības pret atmiņu, varat mēģināt izslēgt 32bpp grafiku un/vai tuvināšanas līmeņus # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2137,6 +2162,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ie STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Jūs iedevāt {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serveris beidza sesiju STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serveris pārstartējas...{}Lūdzu uzgaidiet... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} tika izmests. Iemesls: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Satura lejupielāde @@ -2154,6 +2180,7 @@ STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Noņemt STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Meklēt ārējās vietnēs STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Meklēt OpenTTD pakalpojumos nepieejamu saturu ar OpenTTD nesaistītās vietnēs STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Jūs aizejat no OpenTTD! +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Lietošanas noteikumi no ārpuses lejupielādētam saturam var būt dažāi.{}Jums būs jāskatās ārējās saites ārējā satura instalēšanai uz OpenTTD.{}Vai vēlaties turpināt? STR_CONTENT_FILTER_TITLE :{BLACK}Atzīmju/nosaukumu filtrs: STR_CONTENT_OPEN_URL :{BLACK}Apmeklēt tīmekļa vietni STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Apmeklēt tīmekļa vietni, lai tiktu pie šī satura @@ -2353,6 +2380,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Būvēt STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Pārslēgties starp ceļa būvēšanas/nojaukšanas režīmiem STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Pārslēgt būvēt/novākt tramvaju būvei +STR_ROAD_NAME_TRAM :Tramvaja ceļš # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Autotransporta depo virziens @@ -2537,6 +2565,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lidostas STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Pieņem kravu: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Ceļu tips: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Sliežu ātruma ierobežojums: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ceļa ātruma ierobežojums: {LTBLUE}{VELOCITY} @@ -2642,16 +2671,36 @@ STR_FRAMERATE_CAPTION :{WHITE}Kadru bi STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Cik ātri spēle šobrīd iet salīdzinot ar standarta ātrumu. +STR_FRAMERATE_CURRENT :{WHITE}Pašreizējais +STR_FRAMERATE_MEMORYUSE :{WHITE}Atmiņa +STR_FRAMERATE_DATA_POINTS :{BLACK}Dati ir balstīti uz {COMMA} mērījumiem +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kadrs/i STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kadri/s +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{BLACK} Kravu iekraušana un izkraušana: +STR_FRAMERATE_GL_TRAINS :{BLACK} Vilcienu tikšķi: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Pasaules tikšķi: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Saišu grafika aizture: +STR_FRAMERATE_VIDEO :{BLACK}Video izvade: +STR_FRAMERATE_SOUND :{BLACK}Skaņas miksēšana: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/MI kopā: STR_FRAMERATE_GAMESCRIPT :{BLACK} Spēles skripts: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Spēles cikls +STR_FRAMETIME_CAPTION_GL_ECONOMY : Kravu iekraušana un izkraušana +STR_FRAMETIME_CAPTION_GL_TRAINS :Vilcienu tikšķi +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ceļu transportlīdzekļu tikšķi STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Pasaules tikšķi STR_FRAMETIME_CAPTION_DRAWING :Grafiku attēlošana STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Pasaules skatvietas attēlošanu STR_FRAMETIME_CAPTION_VIDEO :{WHITE}video izeja +STR_FRAMETIME_CAPTION_SOUND :Skaņas miksēšana +STR_FRAMETIME_CAPTION_GAMESCRIPT :Spēles skripts +STR_FRAMETIME_CAPTION_AI :MI {NUM} {STRING} ############ End of leave-in-this-order @@ -2870,6 +2919,7 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lasīt aiz psei STR_NEWGRF_ERROR_GRM_FAILED :Pieprasītie GRF resursi nav pieejami (gariņš {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ar {2:STRING} tika atspējots STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Nederīgs/nezināms gariņa izkārtojuma formāts (gariņš {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Pārāk daudz elementu īpašību sarakstā (spraits {3:NUM}, īpašība {4:HEX}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Uzmanību! @@ -3220,9 +3270,10 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}Mēs mek # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} infrastruktūra -STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Sliežu gabali: +STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Sliežu posmi: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signālierīces -STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Ceļa gabali: +STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Ceļu posmi: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Tramvaja posmi: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Ūdens lauciņi: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanāli STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stacijas: @@ -3235,7 +3286,10 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Ražotne STR_INDUSTRY_DIRECTORY_NONE :{G=m}{ORANGE}- Neviens - STR_INDUSTRY_DIRECTORY_NONE.kas :{ORANGE}- Neviena - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ražotņu nosaukumi - klikšķināt uz nosaukuma, lai centrētu skatu uz ražotni. Ctrl+klikšķis atvērs jaunu skatvietu pie ražotnes +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Saražotā krava: {SILVER}{STRING} # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3247,6 +3301,7 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Pieprasa: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} gaida{STRING} @@ -3298,6 +3353,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupēti auto STR_GROUP_DEFAULT_SHIPS :Negrupēti kuģi STR_GROUP_DEFAULT_AIRCRAFTS :Negrupēti lidaparāti +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupas - klikšķināt uz grupas, lai iegūtu tās transportlīdzekļu sarakstu STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikšķināt, lai izveidotu grupu @@ -3315,6 +3371,7 @@ STR_GROUP_RENAME_CAPTION :{BLACK}Pārdēv STR_GROUP_PROFIT_THIS_YEAR :Ienākumi šajā gadā: STR_GROUP_PROFIT_LAST_YEAR :Peļņa pērn: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Jauni dzelzceļa transportlīdzekļi @@ -3341,6 +3398,7 @@ STR_PURCHASE_INFO_REFITTABLE :(pielāgojams) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Projektēts: {GOLD}{NUM}{BLACK} Kalpošanas laiks: {GOLD}{COMMA} gad{P s i u} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Maksimālā uzticamība: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cena: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Izmaksas: {GOLD}{CURRENCY_LONG}{BLACK} (Pielāgošanas izmaksas: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Svars: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Ātrums: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ietilpība: {GOLD}{CARGO_LONG}, {CARGO_LONG} @@ -3363,6 +3421,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Pirkt ku STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Pirkt lidaparātu STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK} Pirkt un pielāgot transporta līdzekli +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Pirkt un pielāgot kuģi STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto vilciena vagonu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto transportlīdzekli. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu @@ -3492,6 +3551,7 @@ STR_ENGINE_PREVIEW_SHIP :kuģis STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {CURRENCY_LONG} Svars: {WEIGHT_SHORT}{}Ātrums: {VELOCITY} Jauda: {POWER}{}Kārtējās izmaksas: {CURRENCY_LONG} gadā{}Ietilpība: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cena: {CURRENCY_LONG} Svars: {WEIGHT_SHORT}{}Ātrums: {VELOCITY} Jauda: {POWER} Maks. spēks: {6:FORCE}{}Kārtējās izmaksas: {4:CURRENCY_LONG} gadā{}Ietilpība: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Ietilpība: {CARGO_LONG}{}Kārtējās izmaksas: {CURRENCY_LONG} gadā +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING}{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Nomainīt {STRING} - {STRING} @@ -3519,6 +3579,8 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Nospiest STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Parslēgties starp lokomotīves un vagona aizstāšanas logiem STR_REPLACE_ENGINES :Lokomotīves STR_REPLACE_WAGONS :Vagoni +STR_REPLACE_ALL_RAILTYPE :Visi dzelzceļa transporta līdzekļi +STR_REPLACE_ALL_ROADTYPE :Visi ceļu transportlīdzekļi STR_REPLACE_HELP_RAILTYPE :{BLACK}Izvēlēties sliežu veidu, kuram vēlaties nomainīt lokomotīves STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Parāda kura lokomotīve no kreisajā pusē atlasītajām tiek nomainīta, ja vien kāda ir @@ -3528,6 +3590,7 @@ STR_REPLACE_MONORAIL_VEHICLES :Viensliedes tra STR_REPLACE_MAGLEV_VEHICLES :Magleva transportlīdzekļi STR_REPLACE_ROAD_VEHICLES :Autotransporta līdzekļi +STR_REPLACE_TRAM_VEHICLES :Tramvaji STR_REPLACE_REMOVE_WAGON :{BLACK}Vagona noņemšana: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automātiskā aizvietošana saglabās esošo vilciena garumu noņemot vagonus (sākot no priekšgala), ja mainot lokomotīvi tas kļūtu garāks @@ -3857,6 +3920,7 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Braukšana (nav STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Braukt ar ne vairāk kā {2:VELOCITY} (nav sarakstā) STR_TIMETABLE_TRAVEL_FOR :Braukt līdz {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Braukt uz {STRING} ar ne vairāk kā {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Ceļot (priekš {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR_ESTIMATED :(stāvēt {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR :un palikt līdz {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :un braukt līdz {STRING} @@ -3972,8 +4036,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Izvēlē STR_AI_LIST_CANCEL :{BLACK}Atcelt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemainīt skriptu +STR_SCREENSHOT_CAPTION :{WHITE}Uzņemt ekrānuzņēmumu +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normāls ekrānuzņēmums STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Pilnībā pietuvināts ekrānuzņēmums +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Noklusējuma tuvinājuma ekrānuzņēmums STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Visas kartes ekrānuzņēmums +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Augstumkartes ekrānuzņēmums +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minikartes ekrānuzņēmums # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametri @@ -4013,6 +4082,7 @@ STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GRE STR_INCOME_FLOAT_INCOME :{GREEN}Ienākumi: {CURRENCY_LONG} STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Pārskaita: {CURRENCY_LONG} STR_FEEDER :{YELLOW}Pārskaita: {CURRENCY_LONG} +STR_FEEDER_INCOME :{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {GREEN}Ienākumi: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Plānotās izmaksas: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānotie ienākumi: {CURRENCY_LONG} @@ -4148,6 +4218,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mež STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... var būvēt tikai sniegotajos apgabalos STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... var būvēt tikai bezsniega apgabalos +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Neatradās piemērotas vietas '{STRING}' tipa industrijām STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Mainīt kartes ģenerēšanas parametrus, lai iegūtu labāku karti # Station construction related errors @@ -4261,6 +4332,10 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Šeit ne STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Šeit nevar nojaukt tramvaju sliežu ceļu... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... tur nav ceļa STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tur nav tramvaju sliežu ceļa +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Šeit nevar mainīt ceļa veidu... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nav piemērota ceļa +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nav piemērotu tramvaju +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nesavietojami tramvaji # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Šeit nevar būvēt kanālus... @@ -4419,8 +4494,10 @@ STR_DESKTOP_SHORTCUT_COMMENT :Uz 'Transport T STR_BASEGRAPHICS_DOS_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS izdevuma grafika. STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS (vācu) izdevuma grafika. STR_BASEGRAPHICS_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma grafika. +STR_BASESOUNDS_WIN_DESCRIPTION :Oriģinālās Transport Tycoon Deluxe Windows laidiena skaņas. STR_BASESOUNDS_NONE_DESCRIPTION :Skaņu kopa bez skaņas. STR_BASEMUSIC_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika. +STR_BASEMUSIC_DOS_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS laidiena mūzika. STR_BASEMUSIC_NONE_DESCRIPTION :Mūzikas kopa bez mūzikas ##id 0x2000 diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 5b9fd602ee..996cabe089 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2342,7 +2342,7 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Provee: STR_JOIN_STATION_CAPTION :{WHITE}Ampliar estación STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Construir aparte -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir puntos guías +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir puntos de ruta STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir aparte # Rail construction toolbar @@ -2696,7 +2696,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Estación de ca STR_LAI_STATION_DESCRIPTION_BUS_STATION :Parada de autobús STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Muelle STR_LAI_STATION_DESCRIPTION_BUOY :Boya -STR_LAI_STATION_DESCRIPTION_WAYPOINT :Punto guía +STR_LAI_STATION_DESCRIPTION_WAYPOINT :Punto de ruta STR_LAI_WATER_DESCRIPTION_WATER :Agua STR_LAI_WATER_DESCRIPTION_CANAL :Canal @@ -3299,7 +3299,7 @@ STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambiar STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar la vista en la ubicación de la boya. Ctrl+Clic abre una ventana de vista en dicha ubicación STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Cambiar nombre de boya -STR_EDIT_WAYPOINT_NAME :{WHITE}Cambiar nombre de punto guía +STR_EDIT_WAYPOINT_NAME :{WHITE}Cambiar nombre de punto de ruta # Finances window STR_FINANCES_CAPTION :{WHITE}Finanzas de {COMPANY} {BLACK}{COMPANY_NUM} @@ -4412,15 +4412,15 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Primero STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Primero se debe demoler el aeropuerto # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Se amplía más de un punto guía existente +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Se amplía más de un punto de ruta existente STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Demasiado cerca de otro punto guía -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}No se puede construir el punto guía aquí... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}No se puede construir el punto de ruta aquí... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}No se puede colocar la boya aquí... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No se puede cambiar nombre del punto guía... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No se puede cambiar nombre del punto de ruta... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}No se puede quitar el punto guía de aquí... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Primero se debe retirar el punto guía +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}No se puede quitar el punto de ruta de aquí... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Primero se debe retirar el punto de ruta STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... una boya obstaculiza STR_ERROR_BUOY_IS_IN_USE :{WHITE}... ¡boya en uso por otra empresa! @@ -5042,8 +5042,8 @@ STR_FORMAT_BUOY_NAME_SERIAL :Boya {TOWN} #{C STR_FORMAT_COMPANY_NUM :(Empresa {COMMA}) STR_FORMAT_GROUP_NAME :Grupo {COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING}, {0:TOWN} -STR_FORMAT_WAYPOINT_NAME :Punto guía, {TOWN} -STR_FORMAT_WAYPOINT_NAME_SERIAL :Punto guía #{1:COMMA}, {0:TOWN} +STR_FORMAT_WAYPOINT_NAME :Punto de ruta, {TOWN} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Punto de ruta #{1:COMMA}, {0:TOWN} STR_FORMAT_DEPOT_NAME_TRAIN :Depósito de trenes, {TOWN} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Depósito de trenes #{1:COMMA}, {0:TOWN} From 0ed00ae1113f71b6bb34a67c013e96e69929e023 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 10 May 2020 16:04:04 +0200 Subject: [PATCH 088/601] Fix: Stop any gamelog action when recovering from SlError() --- src/gamelog.cpp | 5 +++++ src/gamelog.h | 1 + src/saveload/saveload.cpp | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/gamelog.cpp b/src/gamelog.cpp index b325dc7fd3..156dfe6287 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -87,6 +87,11 @@ void GamelogStopAction() if (print) GamelogPrintDebug(5); } +void GamelogStopAnyAction() +{ + if (_gamelog_action_type != GLAT_NONE) GamelogStopAction(); +} + /** * Frees the memory allocated by a gamelog */ diff --git a/src/gamelog.h b/src/gamelog.h index 0f21fe0f1b..e7951c50c7 100644 --- a/src/gamelog.h +++ b/src/gamelog.h @@ -27,6 +27,7 @@ enum GamelogActionType { void GamelogStartAction(GamelogActionType at); void GamelogStopAction(); +void GamelogStopAnyAction(); void GamelogFree(struct LoggedAction *gamelog_action, uint gamelog_actions); void GamelogReset(); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index aeaa7a5edd..f9eebed46a 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -341,6 +341,10 @@ void NORETURN SlError(StringID string, const char *extra_msg) * when we access them during cleaning the pool dereferences of * those indices will be made with segmentation faults as result. */ if (_sl.action == SLA_LOAD || _sl.action == SLA_PTRS) SlNullPointers(); + + /* Logging could be active. */ + GamelogStopAnyAction(); + throw std::exception(); } From 5aa6351042fb1caa787ad3305d56b6712169d330 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 10 May 2020 19:40:51 +0200 Subject: [PATCH 089/601] Fix #8132: Corrupted savegame crashing OpenTTD on load --- src/saveload/afterload.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index b81d446e41..14d5e5434f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -898,6 +898,9 @@ bool AfterLoadGame() case MP_STATION: { BaseStation *bst = BaseStation::GetByTile(t); + /* Sanity check */ + if (bst->owner != GetTileOwner(t)) SlErrorCorrupt("Wrong owner for station tile"); + /* Set up station spread */ bst->rect.BeforeAddTile(t, StationRect::ADD_FORCE); From d6a995fc2ebce51615439a5f55131f02987b5c6e Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 9 May 2020 13:11:38 +0100 Subject: [PATCH 090/601] Add: [AzurePipelines] Ubuntu Focal (20.04) 64bit build for releases --- azure-pipelines/templates/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index b0852c1c20..b9a5597269 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -119,6 +119,8 @@ jobs: Tag: 'linux-ubuntu-bionic-i386-gcc' linux-ubuntu-bionic-amd64-gcc: Tag: 'linux-ubuntu-bionic-amd64-gcc' + linux-ubuntu-focal-amd64-gcc: + Tag: 'linux-ubuntu-focal-amd64-gcc' linux-debian-stretch-i386-gcc: Tag: 'linux-debian-stretch-i386-gcc' linux-debian-stretch-amd64-gcc: From 39092ee13b44573d1b8111a5d2ee1d46990f239f Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 9 May 2020 23:41:01 +0200 Subject: [PATCH 091/601] Fix #8119: Update docking area when clearing a shore rail tile --- src/rail_cmd.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 527e02cb8c..162fe97799 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1850,7 +1850,11 @@ static CommandCost ClearTile_Track(TileIndex tile, DoCommandFlag flags) if (ret.Failed()) return ret; /* The track was removed, and left a coast tile. Now also clear the water. */ - if (flags & DC_EXEC) DoClearSquare(tile); + if (flags & DC_EXEC) { + bool remove = IsDockingTile(tile); + DoClearSquare(tile); + if (remove) RemoveDockingTile(tile); + } cost.AddCost(_price[PR_CLEAR_WATER]); } From 48d2eb703c670129e0a3040e9e5321e96f2e5e04 Mon Sep 17 00:00:00 2001 From: Ilayaraja Date: Mon, 11 May 2020 19:01:03 +0530 Subject: [PATCH 092/601] Add: INR currency (#8136) Co-authored-by: ilayarja97 --- src/currency.cpp | 1 + src/currency.h | 1 + src/lang/english.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/src/currency.cpp b/src/currency.cpp index b6d6821055..b68584f015 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -65,6 +65,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 40, "", CF_NOEURO, "NTD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NTD }, ///< new taiwan dollar { 8, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_CNY }, ///< chinese renminbi { 10, "", CF_NOEURO, "HKD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_HKD }, ///< hong kong dollar + { 90, "", CF_NOEURO, "\xE2\x82\xB9", "", 0, STR_GAME_OPTIONS_CURRENCY_INR }, ///< Indian Rupee }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index 58c385a8b4..c4c3db0249 100644 --- a/src/currency.h +++ b/src/currency.h @@ -61,6 +61,7 @@ enum Currencies { CURRENCY_NTD, ///< New Taiwan Dollar CURRENCY_CNY, ///< Chinese Renminbi CURRENCY_HKD, ///< Hong Kong Dollar + CURRENCY_INR, ///< Indian Rupee CURRENCY_END, ///< always the last item }; diff --git a/src/lang/english.txt b/src/lang/english.txt index 93eaef5901..e478dc6e1c 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -935,6 +935,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexican Peso (M STR_GAME_OPTIONS_CURRENCY_NTD :New Taiwan Dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles From 48c61c1da16f7cfc944d14ac66a3d5ae49f3a8f9 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 11 May 2020 19:45:38 +0200 Subject: [PATCH 093/601] Update: Translations from eints latvian: 54 changes by Tranzistors spanish (mexican): 4 changes by Absay --- src/lang/latvian.txt | 54 +++++++++++++++++++++++++++++++++++++++++ src/lang/spanish_MX.txt | 7 +++--- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 53a565619d..967c1e8b18 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -237,6 +237,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Izvēlē STR_BUTTON_SORT_BY :{BLACK}Kārtot pēc STR_BUTTON_LOCATION :{BLACK}Atrašanās vieta STR_BUTTON_RENAME :{BLACK}Pārdēvēt +STR_BUTTON_CATCHMENT :{BLACK}Pārklājums STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Aizvērt logu STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Loga virsraksts - vilkt to, lai pārvietotu logu @@ -673,6 +674,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Notīrīt STR_PLAYLIST_CHANGE_SET :{BLACK}Mainīt kopu STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Dzēst pašreizējo programmu (tikai Pielāgoto 1 vai Pielāgoto 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mainīt mūzikas atlasi uz citu instalēto kopu STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to pievienotu pašreizējai programmai (tikai Pielāgotā 1 vai Pielāgotā 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to izdzēstu no pašreizējās programmas (tikai Pielāgotā1 un Pielāgotā2) @@ -923,6 +925,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Cita... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijas lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Irānas riāli (IRR) STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso (MXN) +STR_GAME_OPTIONS_CURRENCY_CNY :Ķīnas juaņa (CNY) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autotransporta līdzekļi @@ -1290,6 +1293,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR :Zemes radītāj STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Sākotnējais STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGenesis) Ainavas kalnainība +STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blīvums: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimālais attālums no kartes malas naftas pārstrādes rūpnīcām: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftas pārstrādes rūpnīcas ir būvējamas tikai kartes malu tuvumā, salu kartēm tas ir pie krasta STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} @@ -1301,6 +1305,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Nelīdzena STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Ļoti nelīdzena STR_CONFIG_SETTING_VARIETY :Dažādības sadalījums: {STRING} STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Tikai TerraGenesis) Nosaka, vai karte satur gan kalnus, gan līdzenumus. Tā kā šis padara karti tikai plakanāku, citus iestatījumus vajadzētu pārslēgt uz kalnainumu +STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Izvēlieties, cik daudz upju ģenerēt STR_CONFIG_SETTING_TREE_PLACER :Koku izvietošanas algoritms: {STRING} STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Izvēlieties koku izplatību uz kartes: 'Sākotnējais' iestāda kokus vienmērīgi, 'Uzlabotais' tos stāda grupās STR_CONFIG_SETTING_TREE_PLACER_NONE :Nav @@ -1326,6 +1331,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :zaļa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši zaļa STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Uzvedība, kad ritina karti STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_LMB :Pārvietot karti ar kreiso peles pogu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plūdena skatvietas ritināšana: {STRING} @@ -1386,6 +1392,7 @@ STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Kustības sarak STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Kustības sarakstos rādīt pienākšanu un atiešanu: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Kustības sarakstos rādīt paredzamos pienākšanas un atiešanas laikus STR_CONFIG_SETTING_QUICKGOTO :Transportlīdzekļu rīkojumu ātrā veidošana: {STRING} +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Iepriekš izvēlēties kursoru “doties uz”, kad atver rīkojumu logu STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Noklusējuma sliežu veids (pēc jaunas spēles/spēles ielādes): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Izvēlētais sliežu veids sākot vai ielādējot spēli. 'Pirmās pieejamās' ir vecākā veida, 'pēdējās pieejamās' ir jaunākā veida, un 'visbiežāk lietotās' ir pašlaik visvairāk lietoto sliežu ceļu izvēlnes STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :pirmās pieejamās @@ -1445,6 +1452,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Atļaut MI vair STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Atļaut MI (mākslīgā intelekta) nespēlētāju tēliem (datora vadītiem) piedalīties vairākspēlētāju spēlēs STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#darbību kodi, pirms skripti tiek apstādināti: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksimālais skaitļošanas soļu skaits, ko skripts var aizņemt vienā gājienā +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maksimālā atmiņas izmantošana vienam skriptam: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING} @@ -1502,6 +1510,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :pilns STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Krāsaini avīžu raksti parādās: {STRING} gadā STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gads kad sāk drukāt krāsainas avīzes. Pirms šā gada tās ir melnbaltas STR_CONFIG_SETTING_STARTING_YEAR :Sākuma gads: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ja ieslēgts, ražošanas izmaiņas notiek biežāk un ar mazākiem soļiem. Šim iestatījumam parasti nav ietekmes, ja ražotņu veidi ir ieviesti ar NewGRF @@ -1547,6 +1556,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :aizliegta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :atļauta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :atļauta, ar brīvi izvēlētu izkārtojumu STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cik daudz kravas rada pilsētu mājas, attiecībā pret kopējo pilsētas iedzīvotāju skaitu.{}Kvadrātisks pieaugums: divas reizes lielāka pilsēta rada četras reizes vairāk pasažieru.{}Lineārs pieaugums: divas reizes lielāka pilsēta rada divas reizes vairāk pasažieru. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadrātisks (sākotnējais) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Koku izvietojums spēlē: {STRING} @@ -1597,6 +1607,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simetriska" nozīmē, ka apmēram vienāds daudzums pasta tiks nosūtīts virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs pasta daudzums var tikt nosūtīts katrā no virzieniem. "manuāli" nozīmē, ka pastam netiks veikta automātiska izplatīšana. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Izplatīšanas režīms APSARGĀJAMAI preču klasei: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asimetriska" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} @@ -1604,6 +1615,7 @@ STR_CONFIG_SETTING_DEMAND_DISTANCE :Attāluma ietek STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ja iestatīsiet šo vērtību lielāku kā 0, attālums starp kravas izcelsmes staciju A un iespējamo galastaciju B ietekmēs sūtāmās kravas apjomu. Jo tālāk no stacijas A ir stacija B, jo mazāk kravas tiks nosūtīts. Jo augstāka vērtība, jo mazāk kravas tiks nosūtīts uz tālo staciju un vairāk kravu uz tuvo staciju. STR_CONFIG_SETTING_DEMAND_SIZE :Atpakaļceļa kravas daudzums simetriskajā režīmā: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp divām stacijām ir vairāki ceļi. Kravu sadale vispirms piesātinās īsāko maršrutu, pēc tam izmantos nākamo īsāko maršrutu līdz tas būs piesātināts, un tā tālāk. Piesātinājumu nosaka novērtējot ietilpību un plānoto izmantojumu. Kad visi ceļi ir piesātināti un vēl ir palicis pieprasījumus, tas pārslogos visus ceļus, dodot priekšroku ceļiem ar lielāko ietilpību. Algoritms visbiežāk nepareizi novērtēs ietilpību. Šis iestatījums jums atļaus norādīt, līdz cik procentiem īsākais ceļš ir jāpiesātina pirmajā piegājienā pirms izvēlēties garāku ceļu. Iestatiet to uz mazāk kā 100%, lai izvairītos no pārpildītām stacijām, ja kapacitāte ir pārvērtēta. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma mērvienības: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vai lietotāja saskarnē rāda ātrumu, rādīt norādītajās mērvienībās @@ -1739,6 +1751,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Pārbaud STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Rādīt MI un spēles skriptu iestatījumus STR_INTRO_TOOLTIP_QUIT :{BLACK}Iziet no 'OpenTTD' +STR_INTRO_BASESET :{BLACK}Pašlaik izvēlētajai bāzes grafikas kopai trūkst {NUM} sprait{P s i u}. Lūdzu, pārbaudiet, vai bāzes kopai ir atjauninājumi. STR_INTRO_TRANSLATION :{BLACK}Šim tulkojumam trūkst {NUM} virk{P ne nes ņu}. Lūdzu palīdziet OpenTTD veidot labāku piesakoties par tulkotāju. Informācijai skatīt readme.txt. # Quit window @@ -2039,6 +2052,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Atvienot STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris ir aizsargāts. Ievadiet paroli STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Uzņēmums ir aizsargāts. Ievadiet paroli +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientu saraksts # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spēlētāju saraksts @@ -2103,6 +2117,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nepareiz STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveris ir pilns STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Šajā serverī jums ir aizliegums STR_NETWORK_ERROR_KICKED :{WHITE}Jūs esat izmests no šīs spēles +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Iemesls: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Uz šī servera blēdības nav atļautas STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Jūs sūtījāt uz serveri pārak daudz rīkojumu STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Jūs pārāk ilgi neievadījāt paroli @@ -2380,6 +2395,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Būvēt STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Pārslēgties starp ceļa būvēšanas/nojaukšanas režīmiem STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Pārslēgt būvēt/novākt tramvaju būvei +STR_ROAD_NAME_ROAD :Ceļš STR_ROAD_NAME_TRAM :Tramvaja ceļš # Road depot construction window @@ -2568,6 +2584,7 @@ STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STR STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Ceļu tips: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Sliežu ātruma ierobežojums: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ceļa ātruma ierobežojums: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tramvaja ātruma ierobežojums: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Akmeņi @@ -2668,37 +2685,50 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kadru biežums +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulācijas ātrums: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafikas kadru ātrums: {STRING} STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Cik ātri spēle šobrīd iet salīdzinot ar standarta ātrumu. STR_FRAMERATE_CURRENT :{WHITE}Pašreizējais +STR_FRAMERATE_AVERAGE :{WHITE}Vidējais STR_FRAMERATE_MEMORYUSE :{WHITE}Atmiņa STR_FRAMERATE_DATA_POINTS :{BLACK}Dati ir balstīti uz {COMMA} mērījumiem +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kadrs/i STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kadri/s STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} m ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Spēles cikls kopā: STR_FRAMERATE_GL_ECONOMY :{BLACK} Kravu iekraušana un izkraušana: STR_FRAMERATE_GL_TRAINS :{BLACK} Vilcienu tikšķi: +STR_FRAMERATE_GL_SHIPS :{BLACK} Kuģu tikšķi: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Pasaules tikšķi: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Saišu grafika aizture: STR_FRAMERATE_VIDEO :{BLACK}Video izvade: STR_FRAMERATE_SOUND :{BLACK}Skaņas miksēšana: STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/MI kopā: STR_FRAMERATE_GAMESCRIPT :{BLACK} Spēles skripts: +STR_FRAMERATE_AI :{BLACK} MI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Spēles cikls STR_FRAMETIME_CAPTION_GL_ECONOMY : Kravu iekraušana un izkraušana STR_FRAMETIME_CAPTION_GL_TRAINS :Vilcienu tikšķi STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ceļu transportlīdzekļu tikšķi +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Lidaparātu tikšķi STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Pasaules tikšķi +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Saišu grafa aizture STR_FRAMETIME_CAPTION_DRAWING :Grafiku attēlošana STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Pasaules skatvietas attēlošanu STR_FRAMETIME_CAPTION_VIDEO :{WHITE}video izeja STR_FRAMETIME_CAPTION_SOUND :Skaņas miksēšana +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/MI skripti kopā STR_FRAMETIME_CAPTION_GAMESCRIPT :Spēles skripts STR_FRAMETIME_CAPTION_AI :MI {NUM} {STRING} ############ End of leave-in-this-order @@ -2726,6 +2756,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spēles STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nav pieejamas informācijas STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Vai tiešām vēlaties pārrakstīt esošās datnes? STR_SAVELOAD_OSKTITLE :{BLACK}Ievadīt saglabātās spēles nosaukumu @@ -2825,6 +2856,7 @@ STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Pārviet STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Uz leju STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Pārvietot atlasīto NewGRF failu saraksta apakšā STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Atjaunināt +STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Atjaunināt NewGRF datnes, kurām esat uzinstalējuši jaunākas versijas STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Instalēto NewGRF failu saraksts. STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Iestatīt parametrus @@ -2842,6 +2874,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versija: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Zemākā savietojamā versija: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palete: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Noklusējuma (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informācija nav pieejama @@ -2851,6 +2884,8 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Nav saviet # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Iepriekšiestatījuma saglabāšana +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Saraksts ar pieejamajiem priekšiestatījumiem, izvēlieties vienu, kuru kopēt uz zemāk esošo nosaukumu +STR_SAVE_PRESET_TITLE :{BLACK}Ievadiet priekšiestatījuma nosaukumu STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Pašlaik izvēlētā iepriekšiestatījuma nosaukums saglabāšanai STR_SAVE_PRESET_CANCEL :{BLACK}Atcelt STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Nemainīt iepriekšiestatījumu @@ -2887,6 +2922,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Iepriek STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Iet pie iepriekšējā parastā gariņa, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Atlasītā gariņa attēlojums. To attēlojot, izkārtojums netiek ievērots STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības +STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X nobīde: {NUM}, Y nobīde: {NUM} (absolūta) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Paņemt gariņu STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Paņemt gariņu no jebkuras vietas ekrānā @@ -2920,6 +2956,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Pieprasītie GR STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ar {2:STRING} tika atspējots STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Nederīgs/nezināms gariņa izkārtojuma formāts (gariņš {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Pārāk daudz elementu īpašību sarakstā (spraits {3:NUM}, īpašība {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Nederīgs industrijas ražošanas izsaukums (spraits) {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Uzmanību! @@ -2985,6 +3022,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Pilsēta STR_TOWN_DIRECTORY_NONE :{G=m}{ORANGE}- Neviens - STR_TOWN_DIRECTORY_NONE.kas :{ORANGE}- Neviena - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Pilsēta){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Pilsētu nosaukumi - klikšķināt uz nosaukuma, lai centrētu skatu uz to. Ctrl+klikšķis atvērs jaunu skatu lauku uz pilsētu STR_TOWN_POPULATION :{BLACK}Pasaules iedzīvotāju skaits: {COMMA} @@ -2992,6 +3030,7 @@ STR_TOWN_POPULATION :{BLACK}Pasaules STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (lielpilsēta) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Iedzīvotāji: {ORANGE}{COMMA}{BLACK} Mājas: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} iepriekšējā mēnesī: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Krava nepieciešama pilsētas attīstībai: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} nepieciešams STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} nepieciešams ziemā @@ -3044,6 +3083,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Piekuku # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} mērķi STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globālie mērķi +STR_GOALS_SPECTATOR :Globālie mērķi STR_GOALS_GLOBAL_TITLE :{BLACK}Globālie mērķi: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nav - @@ -3289,7 +3329,9 @@ STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ražotņu nosaukumi - klikšķināt uz nosaukuma, lai centrētu skatu uz ražotni. Ctrl+klikšķis atvērs jaunu skatvietu pie ražotnes +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Pieņemamā krava: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Saražotā krava: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nav # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3380,9 +3422,11 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Jauni vienslied STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Jauni magleva vilcieni STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Jauni autotransporta līdzekļi +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Jauni tramvaji ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Jauni vilcieni +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Jauni autotransportlīdzekļi STR_BUY_VEHICLE_SHIP_CAPTION :Jauni kuģi STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Jauns lidaparāts ############ range for vehicle availability ends @@ -3409,6 +3453,7 @@ STR_PURCHASE_INFO_NONE :Nav STR_PURCHASE_INFO_ALL_BUT :visu, izņemot {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maksimālais vilces spēks: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Apgabas: {GOLD}{COMMA} lauciņi +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Lidaparāta veids: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Vilciena vagonu atlasīšanas saraksts - klikšķināt uz transportlīdzekļa, lai iegūtu informāciju STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Autotransporta atlasīšanas saraksts - klikšķināt uz transportlīdzekļa, lai iegūtu informāciju @@ -3422,12 +3467,14 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Pirkt li STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK} Pirkt un pielāgot transporta līdzekli STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Pirkt un pielāgot kuģi +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Pirkt un pielāgot lidaparātu STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto vilciena vagonu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto transportlīdzekli. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto kuģi. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt izvēlēto lidaparātu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto ceļa transportlīdzekli. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pārdēvēt STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Pārdēvēt @@ -3552,6 +3599,7 @@ STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {C STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cena: {CURRENCY_LONG} Svars: {WEIGHT_SHORT}{}Ātrums: {VELOCITY} Jauda: {POWER} Maks. spēks: {6:FORCE}{}Kārtējās izmaksas: {4:CURRENCY_LONG} gadā{}Ietilpība: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Ietilpība: {CARGO_LONG}{}Kārtējās izmaksas: {CURRENCY_LONG} gadā STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING}{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING} Attālums: {COMMA} lauciņi{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Nomainīt {STRING} - {STRING} @@ -3809,6 +3857,7 @@ STR_ORDER_CONDITIONAL_AGE :Vecums (gadi) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Nepieciešama apkope STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Vienmēr STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Atlikušais kalpošanas laiks (gadi) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimālā uzticamība STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Kā salīdzināt transportlīdzekļa datus ar norādītajām vērtībām STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :ir vienāds ar @@ -3922,6 +3971,7 @@ STR_TIMETABLE_TRAVEL_FOR :Braukt līdz {S STR_TIMETABLE_TRAVEL_FOR_SPEED :Braukt uz {STRING} ar ne vairāk kā {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Ceļot (priekš {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR_ESTIMATED :(stāvēt {STRING}, nav sarakstā) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(ceļot uz {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR :un palikt līdz {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :un braukt līdz {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}dien{P a as u} @@ -3937,6 +3987,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Šis sar STR_TIMETABLE_STATUS_START_AT :{BLACK}Šis saraksts sāksies {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}Sākuma datums +STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Izvēlieties šī kustības saraksta sākuma datumu. Ctrl+klikšķis iestata šī saraksta sākuma datumu un vienmērīgi izplata to starp visiem transporta līdzekļiem, kuri seko šim rīkojumam, ja kustības saraksts ir pilnībā aizpildīts STR_TIMETABLE_CHANGE_TIME :{BLACK}Mainīt laiku STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mainīt iezīmētajam maršrutam nepieciešamo laiku @@ -4083,6 +4134,7 @@ STR_INCOME_FLOAT_INCOME :{GREEN}Ienākum STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Pārskaita: {CURRENCY_LONG} STR_FEEDER :{YELLOW}Pārskaita: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {GREEN}Ienākumi: {CURRENCY_LONG} +STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {RED}Izmaksas: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Plānotās izmaksas: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānotie ienākumi: {CURRENCY_LONG} @@ -4313,6 +4365,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nav piem STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Vispirms ir jānoņem dzelzceļa sliedes STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Ceļs ir bloķēts vai vienvirziena STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Vienlīmeņa krustojumi šīm sliedēm nav atļauti +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Vienlīmeņa krustojumi nav atļauti šādam ceļu veidam STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Šeit nevar būvēt signālierīces... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Šeit nevar būvēt dzelzceļa posmu... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Šeit nevar nojaukt dzelzceļa posmu... @@ -4498,6 +4551,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Oriģinālās T STR_BASESOUNDS_NONE_DESCRIPTION :Skaņu kopa bez skaņas. STR_BASEMUSIC_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika. STR_BASEMUSIC_DOS_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS laidiena mūzika. +STR_BASEMUSIC_TTO_DESCRIPTION :Oriģinālā Transport Tycoon (Original/World Editor) DOS laidiena mūzika. STR_BASEMUSIC_NONE_DESCRIPTION :Mūzikas kopa bez mūzikas ##id 0x2000 diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 996cabe089..cee481c71c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -873,7 +873,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} acepta ahora {STRING} y {STRING} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subsidio vencida:{}{}{STRING} de {STRING} a {STRING} ya no está subsidiado -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidio retirado:{}{}El servicio de {STRING} desde {STRING} a {STRING} ya no está subsidiado +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidio retirado:{}{}El servicio de {STRING} de {STRING} hacia {STRING} ya no está subsidiado STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Se ofrece subsidio.{}{}¡El primer servicio de {STRING} desde {STRING} a {STRING} tendrá subsidio durante un año por parte del ayuntamiento local! STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}¡Subsidio otorgado a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} generará un 50% extra por un año! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}¡Subsidio otorgado a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} generará tasa doble durante un año! @@ -936,6 +936,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano ( STR_GAME_OPTIONS_CURRENCY_NTD :Nuevo dólar taiwanés (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Yuan chino (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Dólar honkonés (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rupia india (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera @@ -1249,7 +1250,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas las vista STR_CONFIG_SETTING_BRIBE :Permitir sobornos al ayuntamiento: {STRING} STR_CONFIG_SETTING_BRIBE_HELPTEXT :Las empresas pueden tratar de sobornar a los ayuntamientos. Si el soborno es descubierto por un inspector, la empresa no podrá realizar actividades en la localidad durante seis meses STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir adquirir los derechos de transporte exclusivos: {STRING} -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa adquiere los derechos de transporte exclusivos en un pueblo, las estaciones de la competencia (de pasajeros o carga) no recibirán nada que entregar durante un año +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa adquiere los derechos de transporte exclusivos en un pueblo, las estaciones de la competencia, de pasajeros o carga, no recibirán nada todo un año STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir la construcción de nuevos edificios: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Las empresas aportan dinero a los ayuntamientos para que construyan nuevas casas y edificios STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir el pago de la reconstrucción de las carreteras locales: {STRING} @@ -4345,7 +4346,7 @@ STR_ERROR_TOO_MANY_TOWNS :{WHITE}... dema STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ya no hay espacio en el mapa STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}El pueblo no construirá carreteras. La función de construcción de carreteras puede activarse en Configuración->Ambiente->Pueblos STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obras de carretera en progreso -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No se puede eliminar este pueblo...{}Quedan estaciones o depósitos relacionados con él, o una propiedad suya no puede ser retirada +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No se puede eliminar este pueblo...{}Aún tiene estaciones o depósitos vinculados, o una casilla en su jurisdicción no se puede quitar STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no hay ningún lugar apto para una estatua en el centro de este pueblo # Industry related errors From d15c7dbdeb14f90988caeab7fa58b44876c806e2 Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 12 May 2020 01:19:52 +0200 Subject: [PATCH 094/601] Add: stations_near and industries_near cache check (#8139) --- src/openttd.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/openttd.cpp b/src/openttd.cpp index 9bd3bf7d07..7d9bd09a61 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -64,6 +64,7 @@ #include "viewport_func.h" #include "viewport_sprite_sorter.h" #include "framerate_type.h" +#include "industry.h" #include "linkgraph/linkgraphschedule.h" @@ -1310,6 +1311,13 @@ static void CheckCaches() assert(memcmp(&v->cargo, buff, sizeof(VehicleCargoList)) == 0); } + /* Backup stations_near */ + std::vector old_town_stations_near; + for (Town *t : Town::Iterate()) old_town_stations_near.push_back(t->stations_near); + + std::vector old_industry_stations_near; + for (Industry *ind : Industry::Iterate()) old_industry_stations_near.push_back(ind->stations_near); + for (Station *st : Station::Iterate()) { for (CargoID c = 0; c < NUM_CARGO; c++) { byte buff[sizeof(StationCargoList)]; @@ -1334,6 +1342,29 @@ static void CheckCaches() DEBUG(desync, 2, "docking tile mismatch: tile %i", (int)tile); } } + + /* Check industries_near */ + IndustryList industries_near = st->industries_near; + st->RecomputeCatchment(); + if (st->industries_near != industries_near) { + DEBUG(desync, 2, "station industries near mismatch: station %i", st->index); + } + } + + /* Check stations_near */ + i = 0; + for (Town *t : Town::Iterate()) { + if (t->stations_near != old_town_stations_near[i]) { + DEBUG(desync, 2, "town stations near mismatch: town %i", t->index); + } + i++; + } + i = 0; + for (Industry *ind : Industry::Iterate()) { + if (ind->stations_near != old_industry_stations_near[i]) { + DEBUG(desync, 2, "industry stations near mismatch: industry %i", ind->index); + } + i++; } } From cca613e3b885d94b54bf9bcb3f2bd7ee85381fac Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 12 May 2020 15:22:58 +0200 Subject: [PATCH 095/601] Fix #8142, 5aa6351: Buoy owner and tile owner can be different (#8143) --- src/saveload/afterload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 14d5e5434f..fa95303f69 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -899,7 +899,7 @@ bool AfterLoadGame() BaseStation *bst = BaseStation::GetByTile(t); /* Sanity check */ - if (bst->owner != GetTileOwner(t)) SlErrorCorrupt("Wrong owner for station tile"); + if (!IsBuoy(t) && bst->owner != GetTileOwner(t)) SlErrorCorrupt("Wrong owner for station tile"); /* Set up station spread */ bst->rect.BeforeAddTile(t, StationRect::ADD_FORCE); From 6dcc99edab3b0ab072675ecdeffd638b644913bc Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 12 May 2020 19:45:38 +0200 Subject: [PATCH 096/601] Update: Translations from eints latvian: 45 changes by Tranzistors spanish (mexican): 9 changes by Absay --- src/lang/latvian.txt | 46 ++++++++++++++++++++++++++++++++++++++++- src/lang/spanish_MX.txt | 18 ++++++++-------- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 967c1e8b18..7998346592 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -238,6 +238,7 @@ STR_BUTTON_SORT_BY :{BLACK}Kārtot STR_BUTTON_LOCATION :{BLACK}Atrašanās vieta STR_BUTTON_RENAME :{BLACK}Pārdēvēt STR_BUTTON_CATCHMENT :{BLACK}Pārklājums +STR_TOOLTIP_CATCHMENT :{BLACK}Pārslēgt pārklājuma laukuma rādīšanu STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Aizvērt logu STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Loga virsraksts - vilkt to, lai pārvietotu logu @@ -265,6 +266,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ieslēdz STR_BUTTON_DEFAULT :{BLACK}Noklusējums STR_BUTTON_CANCEL :{BLACK}Atcelt STR_BUTTON_OK :{BLACK}Labi +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Brīdinājums: servera administrators var izlasīt jebkuru tekstu, kas šeit tiek ievadīts. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -713,6 +715,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Rādīt STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Rādīt zemes īpašniekus uz kartes STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klikšķināt uz rūpnīcas veida, lai pārslēgtu tā atainošanu. Ctrl+klikšķis atslēdz visas rūpnīcas, izņemot izvēlēto veidu. Atkārtots Ctrl+klikšķis uz tā ieslēgs visus rūpnīcu veidus STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klikšķināt uz uzņēmuma, lai pārslēgtu tā īpašumu attēlošanu. Ctrl+klikšķis atslēdz visus uzņēmumus, izņemot izvēlēto. Atkārtots Ctrl+klikšķis uz tā ieslēgs visus uzņēmumus +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Spiediet uz kravas, lai pārslēgtu tā īpašību rādīšanu. Ctrl+klikšķis izslēdz visas kravas, izņemot izvēlēto. Atkārtots Ctrl+klikšķis uz tā ieslēgs visas kravas STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Ceļi STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Dzelzsceļi @@ -925,6 +928,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Cita... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijas lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Irānas riāli (IRR) STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Jaunais Taivānas dolārs (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Ķīnas juaņa (CNY) ############ end of currency region @@ -988,9 +992,11 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Parasts STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Fonta izmērs STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normāls STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs izmērs +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs izmērs STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasīt lietošanai pamata grafikas kopu @@ -1287,24 +1293,30 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Rādīt pilsēt STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Rāda pilsētu iedzīvotāju daudzumu pie to apzīmējumiem uz kartes STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Diagrammu līniju platums: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Diagrammu līniju platums. Šauras līnijas ir precīzāk nolasāmas, platākas vieglāk saskatīt un atšķirt to krāsas +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Rādīt jauno NewGRF paplašinājumu nosaukumus uzbūvēto transportlīdzekļu logā: {STRING} STR_CONFIG_SETTING_LANDSCAPE :Ainava: {STRING} +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Ainavas nosaka pamata spēles scenārijus ar dažādām kravām un pilsētu izaugsmes nosacījumiem. NewGRF un spēles skripti dod smalkākas kontroles iespējas STR_CONFIG_SETTING_LAND_GENERATOR :Zemes radītājs: {STRING} +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Sākotnējais ģenerators ir atkarīgs no bāzes grafikas kopas, un veido fiksētas ainavas formas. TerraGenesis ir uz Perlina trokšņa balstīts ģenerators ar smalkākiem vadības iestatījumiem. STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Sākotnējais STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGenesis) Ainavas kalnainība STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blīvums: {STRING} +STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Iestatiet, cik industrijas jāģenerē un kāds līmenis jāuztur spēles laikā STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimālais attālums no kartes malas naftas pārstrādes rūpnīcām: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftas pārstrādes rūpnīcas ir būvējamas tikai kartes malu tuvumā, salu kartēm tas ir pie krasta STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Noteikt, kādā augstumā sākas subarktiskā ainava. Sniegs arī ietekmē industriju rašanos un apdzīvoto vietu pieaugšanas prasības STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Apvidus nelīdzenums: {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Tikai TerraGenesis) Izvēlieties pauguru biežumu — gludās ainavās ir mazāk pauguru, bet tie ir plaši izvērsti. Nelīdzenā ainavā ir daudz pauguru, kas var izskatīties vienveidīgi. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Ļoti gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Gluda STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Nelīdzena STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Ļoti nelīdzena STR_CONFIG_SETTING_VARIETY :Dažādības sadalījums: {STRING} STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Tikai TerraGenesis) Nosaka, vai karte satur gan kalnus, gan līdzenumus. Tā kā šis padara karti tikai plakanāku, citus iestatījumus vajadzētu pārslēgt uz kalnainumu +STR_CONFIG_SETTING_RIVER_AMOUNT :Upju daudzums: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Izvēlieties, cik daudz upju ģenerēt STR_CONFIG_SETTING_TREE_PLACER :Koku izvietošanas algoritms: {STRING} STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Izvēlieties koku izplatību uz kartes: 'Sākotnējais' iestāda kokus vienmērīgi, 'Uzlabotais' tos stāda grupās @@ -1453,6 +1465,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Atļaut MI (mā STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#darbību kodi, pirms skripti tiek apstādināti: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksimālais skaitļošanas soļu skaits, ko skripts var aizņemt vienā gājienā STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maksimālā atmiņas izmantošana vienam skriptam: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Cik daudz atmiņas drīkst patērēt pirms tas tiek ar varu pārtraukts. Iespējams, šis limits ir jāpalielina uz lielākām kartēm. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING} @@ -1517,6 +1531,7 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ja ieslēgts, r STR_CONFIG_SETTING_ALLOW_SHARES :Atļaut akciju pirkšanu no citiem uzņēmumiem: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, ir atļauts pirkt un pārdodot uzņēmumu akcijas. Akcijas būs pieejamas tikai atbilstošu vecumu sasniegušiem uzņēmumiem STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Iestatīt minimālo uzņēmuma vecums, lai citi varētu pirkt un pārdod to akcijas. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenti no kopējās peļņas, ko maksā tranzītstacijās: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Velkot izvietot signālierīces uz katra: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Iestatīt attālumus, kādos līdz nākamajam šķērslim (signālierīcei, dzelzceļa mezglam) uz ceļa tiks būvētas signālierīces, ja tās tiek vilktas @@ -1606,8 +1621,12 @@ STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Laiks starp sec STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska +STR_CONFIG_SETTING_DISTRIBUTION_PAX :Pasažieru izplatīšanas režīms: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simetriska" nozīmē, ka apmēram vienāds daudzums pasažieri vēlēsies doties virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs pasažieru daudzums var vēlēties nokļūt katrā no virzieniem. "manuāli" nozīmē, ka pasažieriem netiks veikta automātiska izplatīšana. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Pasta izplatīšanas režīms: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simetriska" nozīmē, ka apmēram vienāds daudzums pasta tiks nosūtīts virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs pasta daudzums var tikt nosūtīts katrā no virzieniem. "manuāli" nozīmē, ka pastam netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Izplatīšanas režīms APSARGĀJAMAI preču klasei: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :APSARGĀJAMĀ kravas klase satur vērtslietas mērenajā joslā, dimantus subtropu joslā un zeltu subarktiskajā joslā. NewGRF paplašinājumi var to mainīt. "simetriska" nozīmē, ka apmēram vienāds daudzums kravas tiks nosūtīts virzienā no stacijas A uz B, cik no B uz A. "asimetriska" nozīmē, ka patvaļīgs kravas daudzums var tikt nosūtīts katrā no virzieniem. "manuāli" nozīmē, ka pastam netiks veikta automātiska izplatīšana. Šo vērtību vēlams iestatīt kā asimetrisku vai manuālu, kad spēlē subarktiskajā joslā, jo bankas nesūta zeltu atpakaļ uz zelta raktuvēm. Mērenajā un subtropu joslā var izvēlēties simetrisku, jo bankas sūtīs vērtslietas atpakaļ uz izcelsmes banku, kad saņems vērtslietu pievedumu. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asimetriska" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} @@ -2394,6 +2413,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Būvēt STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Būvēt tramvaju tuneli. Shift pārslēdz būvēšanu/izmaksu tāmes rādīšanu STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Pārslēgties starp ceļa būvēšanas/nojaukšanas režīmiem STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Pārslēgt būvēt/novākt tramvaju būvei +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Pārveidot/uzlabot tramvaju veidu. Shift pārslēdz būvēšanu/izmaksu novērtējumu rādīšanu STR_ROAD_NAME_ROAD :Ceļš STR_ROAD_NAME_TRAM :Tramvaja ceļš @@ -2696,9 +2716,11 @@ STR_FRAMERATE_AVERAGE :{WHITE}Vidējai STR_FRAMERATE_MEMORYUSE :{WHITE}Atmiņa STR_FRAMERATE_DATA_POINTS :{BLACK}Dati ir balstīti uz {COMMA} mērījumiem 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} kadrs/i STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kadri/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kadri/s STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms @@ -2707,9 +2729,12 @@ STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COM STR_FRAMERATE_GAMELOOP :{BLACK}Spēles cikls kopā: STR_FRAMERATE_GL_ECONOMY :{BLACK} Kravu iekraušana un izkraušana: STR_FRAMERATE_GL_TRAINS :{BLACK} Vilcienu tikšķi: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Autotransporta tikšķi: STR_FRAMERATE_GL_SHIPS :{BLACK} Kuģu tikšķi: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Lidaparātu tikšķi: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Pasaules tikšķi: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Saišu grafika aizture: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Pasaules skatvietas: STR_FRAMERATE_VIDEO :{BLACK}Video izvade: STR_FRAMERATE_SOUND :{BLACK}Skaņas miksēšana: STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/MI kopā: @@ -2720,7 +2745,7 @@ STR_FRAMERATE_AI :{BLACK} MI {N STR_FRAMETIME_CAPTION_GAMELOOP :Spēles cikls STR_FRAMETIME_CAPTION_GL_ECONOMY : Kravu iekraušana un izkraušana STR_FRAMETIME_CAPTION_GL_TRAINS :Vilcienu tikšķi -STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ceļu transportlīdzekļu tikšķi +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Autotransporta tikšķi STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Lidaparātu tikšķi STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Pasaules tikšķi STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Saišu grafa aizture @@ -2756,6 +2781,8 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spēles STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nav pieejamas informācijas STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtra virkne: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Pārrakstīt datni STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Vai tiešām vēlaties pārrakstīt esošās datnes? STR_SAVELOAD_OSKTITLE :{BLACK}Ievadīt saglabātās spēles nosaukumu @@ -2874,8 +2901,10 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versija: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Zemākā savietojamā versija: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palete: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Noklusējuma (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Noklusējuma (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nav STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informācija nav pieejama STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Nevar atrast saskanīgu failu @@ -2922,6 +2951,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Iepriek STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Iet pie iepriekšējā parastā gariņa, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Atlasītā gariņa attēlojums. To attēlojot, izkārtojums netiek ievērots STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības +STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Atiestatīt relatīvi STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X nobīde: {NUM}, Y nobīde: {NUM} (absolūta) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Paņemt gariņu STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Paņemt gariņu no jebkuras vietas ekrānā @@ -3055,6 +3085,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Pārdēvēt pil # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} pašvaldība +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Transporta uzņēmumu vērtējumi: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Pieejamās darbības: @@ -3327,10 +3358,12 @@ STR_INDUSTRY_DIRECTORY_NONE :{G=m}{ORANGE}- STR_INDUSTRY_DIRECTORY_NONE.kas :{ORANGE}- Neviena - 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_LIST_CAPTION :{BLACK}Ražotņu nosaukumi - klikšķināt uz nosaukuma, lai centrētu skatu uz ražotni. Ctrl+klikšķis atvērs jaunu skatvietu pie ražotnes STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Pieņemamā krava: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Saražotā krava: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Visi kravu veidi STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nav # Industry view @@ -3345,6 +3378,7 @@ STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Pieprasa STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} gaida{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Mainīt ražošanu (dalāmais ar 8, līdz pat 2040) @@ -3401,6 +3435,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupas - STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikšķināt, lai izveidotu grupu STR_GROUP_DELETE_TOOLTIP :{BLACK}Dzēst izvēlēto grupu STR_GROUP_RENAME_TOOLTIP :{BLACK}Pārdēvēt izvēlēto grupu +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Mainīt izvēlētās grupas krāsu STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikšķināt, lai pasargātu šo grupu no vispārējās automātiskās aizstāšanas STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Grupas dzēšana @@ -3466,6 +3501,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Pirkt ku STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Pirkt lidaparātu STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK} Pirkt un pielāgot transporta līdzekli +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Pirkt un pielāgot transportlīdzekli STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Pirkt un pielāgot kuģi STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Pirkt un pielāgot lidaparātu @@ -3474,7 +3510,9 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt at STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto kuģi. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt izvēlēto lidaparātu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto vilcienu. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto ceļa transportlīdzekli. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto lidaparātu. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pārdēvēt STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Pārdēvēt @@ -3591,6 +3629,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :viensliedes lok STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magleva lokomotīve STR_ENGINE_PREVIEW_ROAD_VEHICLE :autotransporta līdzeklis +STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramvajs STR_ENGINE_PREVIEW_AIRCRAFT :lidaparāts STR_ENGINE_PREVIEW_SHIP :kuģis @@ -3599,6 +3638,7 @@ STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {C STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cena: {CURRENCY_LONG} Svars: {WEIGHT_SHORT}{}Ātrums: {VELOCITY} Jauda: {POWER} Maks. spēks: {6:FORCE}{}Kārtējās izmaksas: {4:CURRENCY_LONG} gadā{}Ietilpība: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Ietilpība: {CARGO_LONG}{}Kārtējās izmaksas: {CURRENCY_LONG} gadā STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING}{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING} Attālums: {COMMA} lauciņi{}Ietilpība: {CARGO_LONG}, {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING} Attālums: {COMMA} lauciņi{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā # Autoreplace window @@ -3970,6 +4010,7 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Braukt ar ne va STR_TIMETABLE_TRAVEL_FOR :Braukt līdz {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Braukt uz {STRING} ar ne vairāk kā {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Ceļot (priekš {STRING}, nav sarakstā) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Ceļot (ilgums {STRING}, nav sarakstā) ne ātrāk kā {VELOCITY} STR_TIMETABLE_STAY_FOR_ESTIMATED :(stāvēt {STRING}, nav sarakstā) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(ceļot uz {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR :un palikt līdz {STRING} @@ -4133,6 +4174,7 @@ STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GRE STR_INCOME_FLOAT_INCOME :{GREEN}Ienākumi: {CURRENCY_LONG} STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Pārskaita: {CURRENCY_LONG} STR_FEEDER :{YELLOW}Pārskaita: {CURRENCY_LONG} +STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {GREEN}Ienākumi: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {GREEN}Ienākumi: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {RED}Izmaksas: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Plānotās izmaksas: {CURRENCY_LONG} @@ -4388,6 +4430,7 @@ STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tur STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Šeit nevar mainīt ceļa veidu... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nav piemērota ceļa STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nav piemērotu tramvaju +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... nesavietojams ceļš STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nesavietojami tramvaji # Waterway construction errors @@ -4547,6 +4590,7 @@ STR_DESKTOP_SHORTCUT_COMMENT :Uz 'Transport T STR_BASEGRAPHICS_DOS_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS izdevuma grafika. STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe DOS (vācu) izdevuma grafika. STR_BASEGRAPHICS_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma grafika. +STR_BASESOUNDS_DOS_DESCRIPTION :Oriģinālās Transport Tycoon Deluxe DOS laidiena skaņas. STR_BASESOUNDS_WIN_DESCRIPTION :Oriģinālās Transport Tycoon Deluxe Windows laidiena skaņas. STR_BASESOUNDS_NONE_DESCRIPTION :Skaņu kopa bez skaņas. STR_BASEMUSIC_WIN_DESCRIPTION :Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika. diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index cee481c71c..85e7cfdcb4 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1112,7 +1112,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar palabras: 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_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sin explicación disponible) 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) @@ -1248,7 +1248,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Vista principal STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Vista principal STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas las vistas STR_CONFIG_SETTING_BRIBE :Permitir sobornos al ayuntamiento: {STRING} -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Las empresas pueden tratar de sobornar a los ayuntamientos. Si el soborno es descubierto por un inspector, la empresa no podrá realizar actividades en la localidad durante seis meses +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Las empresas pueden intentar sobornar a los ayuntamientos, pero si un inspector lo descubre la empresa no podrá realizar actividades en el pueblo seis meses STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir adquirir los derechos de transporte exclusivos: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa adquiere los derechos de transporte exclusivos en un pueblo, las estaciones de la competencia, de pasajeros o carga, no recibirán nada todo un año STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir la construcción de nuevos edificios: {STRING} @@ -1304,8 +1304,8 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duración de me STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duración de los mensajes de error mostrados en los avisos en rojo. Algunos mensajes de error (críticos) no se cierran automáticamente, solo de forma manual STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Mostrar información de herramientas: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Al posar el ratón sobre un elemento de la interfaz, el tiempo de retraso requerido para mostrar información de ayuda o sugerencias. También se puede establecer el valor en 0 para mostrar estos mensajes con el botón derecho del ratón. -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Posar el ratón durante {COMMA} milisegundo{P 0 "" s} +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo de retraso para mostrar información de ayuda al posar el ratón en un elemento de la interfaz. Si el valor es 0 los mensajes se muestran con el botón derecho del ratón. +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Posar el ratón {COMMA} milisegundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botón derecho STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostrar población de pueblos: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Mostrar en el mapa la población de los pueblos junto a sus nombres @@ -1555,7 +1555,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Año en el que 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_SMOOTH_ECONOMY_HELPTEXT :Al activarse, habrá cambios en la producción industrial continuamente y en menor escala. Normalmente esta opción no afecta los NewGRF de industrias STR_CONFIG_SETTING_ALLOW_SHARES :Permitir comprar acciones de otras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Al activarse, se pueden comprar y vender acciones de otras empresas. Las acciones de una empresa solamente estarán disponibles cuando la empresa cumpla una edad determinada STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edad mínima de la empresa para intercambiar acciones: {STRING} @@ -1590,11 +1590,11 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :Rejilla de 2×2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :Rejilla de 3×3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatorio STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Permitir que los pueblos construyan carreteras: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Los pueblos podrán construir carreteras para expandirse. Si se deshabilita, los ayuntamientos no podrán construir ninguna carretera +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Los pueblos podrán construir carreteras para expandirse. Al desactivarse, los ayuntamientos no podrán construir carreteras STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Permitir a los pueblos construir pasos a nivel: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Los pueblos podrán construir pasos a nivel STR_CONFIG_SETTING_NOISE_LEVEL :Permitir a los pueblos controlar el nivel de ruido de los aeropuertos: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Al desactivarse, puede haber solo dos aeropuertos por pueblo. Al activarse, el número de aeropuertos en el pueblo depende del nivel de aceptación de ruido en la misma, el cual depende de la población, del tamaño de los aeropuertos y de la distancia entre ellos +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Al desactivarse, puede haber solo dos aeropuertos por pueblo. Al activarse, el número de aeropuertos por pueblo depende de su nivel de ruido permitido, que a su vez depende de la población, el tamaño de los aeropuertos y la distancia STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar pueblos: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Los jugadores podrán crear nuevos pueblos durante la partida STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Prohibido @@ -2291,7 +2291,7 @@ STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Descarga STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Solicitando archivos... STR_CONTENT_DOWNLOAD_FILE :{WHITE}Descargando {STRING} ({NUM} de {NUM}) STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Descarga finalizada -STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} descargados ({NUM} %) +STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} descargados ({NUM}%) # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}No es posible conectarse al servidor de contenidos... @@ -3398,7 +3398,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrias STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ninguna - -STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA} % transportado){BLACK} +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportado){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} From 2d5869fc79a1f1f347ab31665148c806d54afcd9 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Tue, 12 May 2020 17:34:16 +0200 Subject: [PATCH 097/601] Fix: sdl2-config would always be detected as present The presence of sdl2-config is used go determine whether to look for sdl2 first, or just sdl1. However, when sdl2-config is *not* present, `which` returns an empty string. Due to lack of quoting, this produces `[ -x ]`, rather than `[ -x "" ]` and it turns out the former actually has a succesful exit status for some reason. This was not a problem when just running configure, because it would then just fail to detect sdl2 and fall back to sdl1. However, when passing `--with-sdl` (without specifying a version), this would only attempt to detect sdl2, even when sdl2-config was not present, but sdl1 is. Adding quotes makes the check work as intended. --- config.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.lib b/config.lib index 6b7ee8de7a..304b86e485 100644 --- a/config.lib +++ b/config.lib @@ -2434,7 +2434,7 @@ detect_sdl() { detect_pkg_config "2" "sdl2" "sdl2_config" "2.0" else sdl2_config="" - if [ -x `which sdl2-config` ]; then + if [ -x "`which sdl2-config`" ]; then detect_pkg_config "$with_sdl" "sdl2" "sdl2_config" "2.0" fi if [ -z "$sdl2_config" ]; then From 7bd52970a1e83cb88069e73e26479eb71bd17726 Mon Sep 17 00:00:00 2001 From: dP Date: Tue, 12 May 2020 01:36:28 +0300 Subject: [PATCH 098/601] Codechange: Refactor FindStationsAroundTiles to avoid code duplication --- src/industry_cmd.cpp | 18 +++---------- src/station.cpp | 9 +++---- src/station_base.h | 36 +++++++++++++++++++++++++ src/station_cmd.cpp | 63 ++++++++------------------------------------ src/station_func.h | 2 -- src/station_gui.cpp | 2 +- src/town_cmd.cpp | 6 ++++- 7 files changed, 61 insertions(+), 75 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index dfc43500f9..39fc0d6f18 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1697,20 +1697,10 @@ static void PopulateStationsNearby(Industry *ind) return; } - /* Get our list of nearby stations. */ - FindStationsAroundTiles(ind->location, &ind->stations_near, false); - - /* Test if industry can accept cargo */ - uint cargo_index; - for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { - if (ind->accepts_cargo[cargo_index] != CT_INVALID) break; - } - if (cargo_index >= lengthof(ind->accepts_cargo)) return; - - /* Cargo is accepted, add industry to nearby stations nearby industry list. */ - for (Station *st : ind->stations_near) { - st->industries_near.insert(ind); - } + ForAllStationsAroundTiles(ind->location, [ind](Station *st) { + ind->stations_near.insert(st); + st->AddIndustryToDeliver(ind); + }); } /** diff --git a/src/station.cpp b/src/station.cpp index 61c53bc562..ec332e0bb2 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -359,12 +359,11 @@ Rect Station::GetCatchmentRect() const /** * Add nearby industry to station's industries_near list if it accepts cargo. * @param ind Industry - * @param st Station */ -static void AddIndustryToDeliver(Industry *ind, Station *st) +void Station::AddIndustryToDeliver(Industry *ind) { /* Don't check further if this industry is already in the list */ - if (st->industries_near.find(ind) != st->industries_near.end()) return; + if (this->industries_near.find(ind) != this->industries_near.end()) return; /* Include only industries that can accept cargo */ uint cargo_index; @@ -373,7 +372,7 @@ static void AddIndustryToDeliver(Industry *ind, Station *st) } if (cargo_index >= lengthof(ind->accepts_cargo)) return; - st->industries_near.insert(ind); + this->industries_near.insert(ind); } /** @@ -464,7 +463,7 @@ void Station::RecomputeCatchment() i->stations_near.insert(this); /* Add if we can deliver to this industry as well */ - AddIndustryToDeliver(i, this); + this->AddIndustryToDeliver(i); } } } diff --git a/src/station_base.h b/src/station_base.h index 0c33a58edb..3be7d4437d 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -503,6 +503,7 @@ public: uint GetCatchmentRadius() const; Rect GetCatchmentRect() const; bool CatchmentCoversTown(TownID t) const; + void AddIndustryToDeliver(Industry *ind); void RemoveFromAllNearbyLists(); inline bool TileIsInCatchment(TileIndex tile) const @@ -557,4 +558,39 @@ public: void RebuildStationKdtree(); +/** + * Call a function on all stations that have any part of the requested area within their catchment. + * @param area The tile area to check + */ +template +void ForAllStationsAroundTiles(const TileArea &ta, Func func) +{ + /* Not using, or don't have a nearby stations list, so we need to scan. */ + std::set seen_stations; + + /* Scan an area around the building covering the maximum possible station + * to find the possible nearby stations. */ + uint max_c = _settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED; + TileArea ta_ext = TileArea(ta).Expand(max_c); + TILE_AREA_LOOP(tile, ta_ext) { + if (IsTileType(tile, MP_STATION)) seen_stations.insert(GetStationIndex(tile)); + } + + for (StationID stationid : seen_stations) { + Station *st = Station::GetIfValid(stationid); + if (st == nullptr) continue; /* Waypoint */ + + /* Check if station is attached to an industry */ + if (!_settings_game.station.serve_neutral_industries && st->industry != nullptr) continue; + + /* Test if the tile is within the station's catchment */ + TILE_AREA_LOOP(tile, ta) { + if (st->TileIsInCatchment(tile)) { + func(st); + break; + } + } + } +} + #endif /* STATION_BASE_H */ diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index b883838841..7bf2c43dfa 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -36,6 +36,7 @@ #include "animated_tile_func.h" #include "elrail_func.h" #include "station_base.h" +#include "station_func.h" #include "station_kdtree.h" #include "roadstop_base.h" #include "newgrf_railtype.h" @@ -3965,57 +3966,6 @@ static void AddNearbyStationsByCatchment(TileIndex tile, StationList *stations, } } -/** - * Find all stations around a rectangular producer (industry, house, headquarter, ...) - * - * @param location The location/area of the producer - * @param[out] stations The list to store the stations in - * @param use_nearby Use nearby station list of industry/town associated with location.tile - */ -void FindStationsAroundTiles(const TileArea &location, StationList * const stations, bool use_nearby) -{ - if (use_nearby) { - /* Industries and towns maintain a list of nearby stations */ - if (IsTileType(location.tile, MP_INDUSTRY)) { - /* Industry nearby stations are already filtered by catchment. */ - *stations = Industry::GetByTile(location.tile)->stations_near; - return; - } else if (IsTileType(location.tile, MP_HOUSE)) { - /* Town nearby stations need to be filtered per tile. */ - assert(location.w == 1 && location.h == 1); - AddNearbyStationsByCatchment(location.tile, stations, Town::GetByTile(location.tile)->stations_near); - return; - } - } - - /* Not using, or don't have a nearby stations list, so we need to scan. */ - std::set seen_stations; - - /* Scan an area around the building covering the maximum possible station - * to find the possible nearby stations. */ - uint max_c = _settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED; - TileArea ta = TileArea(location).Expand(max_c); - TILE_AREA_LOOP(tile, ta) { - if (IsTileType(tile, MP_STATION)) seen_stations.insert(GetStationIndex(tile)); - } - - for (StationID stationid : seen_stations) { - Station *st = Station::GetIfValid(stationid); - if (st == nullptr) continue; /* Waypoint */ - - /* Check if station is attached to an industry */ - if (!_settings_game.station.serve_neutral_industries && st->industry != nullptr) continue; - - /* Test if the tile is within the station's catchment */ - TILE_AREA_LOOP(tile, location) { - if (st->TileIsInCatchment(tile)) { - stations->insert(st); - break; - } - } - } -} - /** * Run a tile loop to find stations around a tile, on demand. Cache the result for further requests * @return pointer to a StationList containing all stations found @@ -4023,12 +3973,21 @@ void FindStationsAroundTiles(const TileArea &location, StationList * const stati const StationList *StationFinder::GetStations() { if (this->tile != INVALID_TILE) { - FindStationsAroundTiles(*this, &this->stations); + if (IsTileType(this->tile, MP_HOUSE)) { + /* Town nearby stations need to be filtered per tile. */ + assert(this->w == 1 && this->h == 1); + AddNearbyStationsByCatchment(this->tile, &this->stations, Town::GetByTile(this->tile)->stations_near); + } else { + ForAllStationsAroundTiles(*this, [this](Station *st) { + this->stations.insert(st); + }); + } this->tile = INVALID_TILE; } return &this->stations; } + static bool CanMoveGoodsToStation(const Station *st, CargoID type) { /* Is the station reserved exclusively for somebody else? */ diff --git a/src/station_func.h b/src/station_func.h index f9959089ee..dc89428410 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -22,8 +22,6 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius); -void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby = true); - void ShowStationViewWindow(StationID station); void UpdateAllStationVirtCoords(); void ClearAllStationCachedNames(); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 764d34748c..ef2873f228 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -102,7 +102,7 @@ static void FindStationsAroundSelection() Station *adjacent = nullptr; - /* Direct loop instead of FindStationsAroundTiles as we are not interested in catchment area */ + /* Direct loop instead of ForAllStationsAroundTiles as we are not interested in catchment area */ TILE_AREA_LOOP(tile, ta) { if (IsTileType(tile, MP_STATION) && GetTileOwner(tile) == _local_company) { Station *st = Station::GetByTile(tile); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 0a582eee7f..44c396cbaf 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2249,7 +2249,11 @@ static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, Hou if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), town, counter, stage, ++type, random_bits); if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits); - if (!_generating_world) FindStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), &town->stations_near, false); + if (!_generating_world) { + ForAllStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [town](Station *st) { + town->stations_near.insert(st); + }); + } } From f2a9a1e2a5282d91760783bd04df3603badd2ba9 Mon Sep 17 00:00:00 2001 From: dP Date: Tue, 12 May 2020 02:21:14 +0300 Subject: [PATCH 099/601] Fix #8137: New clients can't join (desync) after funding an industry --- src/industry_cmd.cpp | 4 +++- src/station_base.h | 8 +++++--- src/station_cmd.cpp | 3 ++- src/town_cmd.cpp | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 39fc0d6f18..35def46098 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1697,9 +1697,11 @@ static void PopulateStationsNearby(Industry *ind) return; } - ForAllStationsAroundTiles(ind->location, [ind](Station *st) { + ForAllStationsAroundTiles(ind->location, [ind](Station *st, TileIndex tile) { + if (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) != ind->index) return false; ind->stations_near.insert(st); st->AddIndustryToDeliver(ind); + return true; }); } diff --git a/src/station_base.h b/src/station_base.h index 3be7d4437d..75b1c1112f 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -560,7 +560,10 @@ void RebuildStationKdtree(); /** * Call a function on all stations that have any part of the requested area within their catchment. - * @param area The tile area to check + * @tparam Func The type of funcion to call + * @param area The TileArea to check + * @param func The function to call, must take two parameters: Station* and TileIndex and return true + * if coverage of that tile is acceptable for a given station or false if search should continue */ template void ForAllStationsAroundTiles(const TileArea &ta, Func func) @@ -586,8 +589,7 @@ void ForAllStationsAroundTiles(const TileArea &ta, Func func) /* Test if the tile is within the station's catchment */ TILE_AREA_LOOP(tile, ta) { if (st->TileIsInCatchment(tile)) { - func(st); - break; + if (func(st, tile)) break; } } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 7bf2c43dfa..6cfd94bb2f 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3978,8 +3978,9 @@ const StationList *StationFinder::GetStations() assert(this->w == 1 && this->h == 1); AddNearbyStationsByCatchment(this->tile, &this->stations, Town::GetByTile(this->tile)->stations_near); } else { - ForAllStationsAroundTiles(*this, [this](Station *st) { + ForAllStationsAroundTiles(*this, [this](Station *st, TileIndex tile) { this->stations.insert(st); + return true; }); } this->tile = INVALID_TILE; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 44c396cbaf..507cccd565 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2250,8 +2250,9 @@ static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, Hou if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits); if (!_generating_world) { - ForAllStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [town](Station *st) { + ForAllStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [town](Station *st, TileIndex tile) { town->stations_near.insert(st); + return true; }); } } From 83cd040c61cf6ce966e78cc496c058d42977b387 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 13 May 2020 19:45:39 +0200 Subject: [PATCH 100/601] Update: Translations from eints latvian: 21 changes by Tranzistors korean: 5 changes by telk5093 --- src/lang/korean.txt | 9 +++++---- src/lang/latvian.txt | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 8bbf5bae48..077deaec7c 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -936,6 +936,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :멕시코 페 STR_GAME_OPTIONS_CURRENCY_NTD :신 타이완 달러 (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :중국 위안 (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :홍콩 달러 (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :인도 루피 (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식 @@ -4222,16 +4223,16 @@ STR_PERCENT_NONE_SMALL :{TINY_FONT}{WHI STR_PERCENT_NONE :{WHITE}{NUM}% # Income 'floats' -STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED}가격: {CURRENCY_LONG} -STR_INCOME_FLOAT_COST :{RED}가격: {CURRENCY_LONG} +STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED}지출: {CURRENCY_LONG} +STR_INCOME_FLOAT_COST :{RED}지출: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}수익: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}수익: {CURRENCY_LONG} STR_FEEDER_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG} STR_FEEDER :{YELLOW}환승: {CURRENCY_LONG} STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {GREEN}수익: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {GREEN}수익: {CURRENCY_LONG} -STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}가격: {CURRENCY_LONG} -STR_FEEDER_COST :{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}가격: {CURRENCY_LONG} +STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}지출: {CURRENCY_LONG} +STR_FEEDER_COST :{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}지출: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}예상 가격: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}예상 수익: {CURRENCY_LONG} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 7998346592..1365129599 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -469,6 +469,7 @@ STR_TOOLBAR_SOUND_MUSIC :Skaņa/mūzika ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Pēdējais ziņojums/avīzes raksts STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Ziņojumu vēsture +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Dzēst visus ziņojumus ############ range ends here ############ range for about menu starts @@ -670,6 +671,7 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Ieslēgt STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Rādīt mūzikas celiņu atlases logu # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Mūzikas programma - “{STRING}” STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Celiņu rādītājs STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programma - '{STRING}' @@ -927,9 +929,11 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Dienvidāfrikas STR_GAME_OPTIONS_CURRENCY_CUSTOM :Cita... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijas lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Irānas riāli (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Jaunais Krievijas rublis (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :Jaunais Taivānas dolārs (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Ķīnas juaņa (CNY) +STR_GAME_OPTIONS_CURRENCY_INR :Indijas rūpija (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autotransporta līdzekļi @@ -1128,6 +1132,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spēles iestat STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spēles iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo spēli) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Uzņēmuma iestatījumi (tiek iekļauti saglabājumos, ietekmē tikai jaunās spēles) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Uzņēmuma iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo uzņēmumu) +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategoriju {BLACK}uz {WHITE}{STRING} STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategorija {BLACK}uz {WHITE}{STRING} {BLACK}un {SILVER}Tips {BLACK}uz {WHITE}Visi iestatījumu veidi STR_CONFIG_SETTINGS_NONE :{WHITE}-Nav- @@ -1259,6 +1264,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktūra STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kad ieslēgts, infrastruktūras uzturēšana nav bezmaksas. Izmaksas pieaug proporcionāli tīkla izmēram, tādā veidā tas ietekmē lielākus uzņēmumus vairāk kā mazus. STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Sākotnējā uzņēmuma krāsa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Izvēlieties uzņēmuma sākotnējo krāsu STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lidostas darbosies mūžīgi: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ieslēdzot šo iestatījumu, katrs lidostas veids pēc tā ieviešanas vienmēr ir pieejams @@ -1294,6 +1300,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Rāda pilsētu STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Diagrammu līniju platums: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Diagrammu līniju platums. Šauras līnijas ir precīzāk nolasāmas, platākas vieglāk saskatīt un atšķirt to krāsas STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Rādīt jauno NewGRF paplašinājumu nosaukumus uzbūvēto transportlīdzekļu logā: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Uzbūvēto transportlīdzekļu loga pievienot rindu, kurā būtu redzams, no kura NewGRF nāk izvēlētais transportlīdzeklis. STR_CONFIG_SETTING_LANDSCAPE :Ainava: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Ainavas nosaka pamata spēles scenārijus ar dažādām kravām un pilsētu izaugsmes nosacījumiem. NewGRF un spēles skripti dod smalkākas kontroles iespējas @@ -1344,6 +1351,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši za STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Uzvedība, kad ritina karti +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pārvietot skatvietu ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_LMB :Pārvietot karti ar kreiso peles pogu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plūdena skatvietas ritināšana: {STRING} @@ -1524,6 +1532,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :pilns STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Krāsaini avīžu raksti parādās: {STRING} gadā STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gads kad sāk drukāt krāsainas avīzes. Pirms šā gada tās ir melnbaltas STR_CONFIG_SETTING_STARTING_YEAR :Sākuma gads: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas beigu gads: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} @@ -1533,6 +1542,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Iestatīt minimālo uzņēmuma vecums, lai citi varētu pirkt un pārdod to akcijas. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenti no kopējās peļņas, ko maksā tranzītstacijās: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procenti no ienākumiem, kas tiek doti starpposmiem padeves sistēmās, kas dod lielāku kontroli pār ienākumiem STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Velkot izvietot signālierīces uz katra: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Iestatīt attālumus, kādos līdz nākamajam šķērslim (signālierīcei, dzelzceļa mezglam) uz ceļa tiks būvētas signālierīces, ja tās tiek vilktas STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} lauciņ{P 0 a a a} @@ -1548,6 +1558,7 @@ STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :bloķēšanas s STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :ceļa signāli STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :vienvirziena ceļa signāli STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Braukt garām signālu veidiem: {STRING} +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Izvēlieties, caur kuriem signālu veidiem iet cauri, kad uz uzbūvētas signālierīces tiek veikts Ctrl+klikšķis ar signālu rīku STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :tikai bloķēšanas signāliem STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :tikai ceļa signāliem STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :visiem @@ -1570,6 +1581,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Šā iestatīju STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :aizliegta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :atļauta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :atļauta, ar brīvi izvēlētu izkārtojumu +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Pilsētas kravu radīšana: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cik daudz kravas rada pilsētu mājas, attiecībā pret kopējo pilsētas iedzīvotāju skaitu.{}Kvadrātisks pieaugums: divas reizes lielāka pilsēta rada četras reizes vairāk pasažieru.{}Lineārs pieaugums: divas reizes lielāka pilsēta rada divas reizes vairāk pasažieru. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadrātisks (sākotnējais) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs @@ -1618,6 +1630,8 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Lielpilsētu vi STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Atjaunināt sadales grafu ik pa {STRING}{NBSP}dien{P 0:2 ai ām ām} STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Laiks starp secīgām saišu grafa pārrēķināšanām. Katra pārrēķināšana izskaitļo plānos vienai grafa komponentei. Tas nozīmē, ka šim iestatījumam vērtība X nenozīmē, ka viss grafs tiks atjaunināts ir pēc X dienām. Tikai dažas komponentes tiks pārrēķinātas. Jo mazāka iestatītā vērtība, jo vairāk laika CPU pavadīs rēķinot. Jo lielāka iestatītā vērtība, jo ilgāk nevarēs sākties kravu izplatīšana jaunos maršrutos. +STR_CONFIG_SETTING_LINKGRAPH_TIME :Dot {STRING}{NBSP}dien{P 0:2 u as u} izplatīšanas grafa pārrēķināšanai +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Laiks, ko aizņem katra saišu grafa komponenšu pārrēķināšana. Kad sākas pārrēķināšana, tiek izveidots pavediens, kuram ir atļauts darboties norādīto dienu skaitu. Jo īsāku skaitli šeit ievadīsiet, jo lielāka iespēja, ka pavediens nebūs laicīgi paveicis savu darbu. Tādā gadījumā spēle apstāsies (“iebremzēs”) līdz darbs būs pabeigts. Jo lielāku skaitli šeit iestatīsiet, jo ilgāk aizņems izplatīšanas atjaunināšana, kad tiks mainīti maršruti. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska @@ -1908,6 +1922,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mainīt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Vairākspēlētāju spēle STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Izsludināt +STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nē STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jā STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spēlētāja vārds: @@ -2289,6 +2304,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Kravas p STR_LINKGRAPH_LEGEND_ALL :{BLACK}Visi STR_LINKGRAPH_LEGEND_NONE :{BLACK}Neviens STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Izvēlēties attēlojamos uzņēmumus +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}nelietots @@ -2601,6 +2617,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lidostas STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Pieņem kravu: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Sliežu veids: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Ceļu tips: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Sliežu ātruma ierobežojums: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ceļa ātruma ierobežojums: {LTBLUE}{VELOCITY} @@ -2723,6 +2740,7 @@ STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMA STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kadri/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} m ############ Leave those lines in this order!! @@ -3360,6 +3378,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUST 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} un vēl {NUM}... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ražotņu nosaukumi - klikšķināt uz nosaukuma, lai centrētu skatu uz ražotni. Ctrl+klikšķis atvērs jaunu skatvietu pie ražotnes STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Pieņemamā krava: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Saražotā krava: {SILVER}{STRING} @@ -3480,6 +3499,7 @@ STR_PURCHASE_INFO_COST :{BLACK}Cena: {G STR_PURCHASE_INFO_COST_REFIT :{BLACK}Izmaksas: {GOLD}{CURRENCY_LONG}{BLACK} (Pielāgošanas izmaksas: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Svars: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Ātrums: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} (Pielāgošanas maksa: {GOLD}{CURRENCY_LONG}{BLACK}) Ātrums: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ietilpība: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motorvagoni: {GOLD}+{POWER}zs{BLACK} Svars: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Pielāgojams uz: {GOLD}{STRING} @@ -3512,6 +3532,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt iz STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto vilcienu. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto ceļa transportlīdzekli. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto kuģi. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto lidaparātu. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pārdēvēt From 9b8d5ea0747bd950eb2d7bd0a075ffa4e0b41577 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 14 May 2020 19:45:40 +0200 Subject: [PATCH 101/601] Update: Translations from eints spanish (mexican): 16 changes by Absay russian: 3 changes by Lone_Wolf --- src/lang/russian.txt | 5 +++-- src/lang/spanish_MX.txt | 32 ++++++++++++++++---------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 4f98e7adee..3d0a3bfed9 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1062,7 +1062,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Нидерла STR_GAME_OPTIONS_CURRENCY_NOK :Норвежская крона (NOK) STR_GAME_OPTIONS_CURRENCY_PLN :Польский злотый (PLN) STR_GAME_OPTIONS_CURRENCY_RON :Румынский лей (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Российский рубль (RUR) +STR_GAME_OPTIONS_CURRENCY_RUR :Российский рубль (старый) (RUR) STR_GAME_OPTIONS_CURRENCY_SIT :Словенский толар (SIT) STR_GAME_OPTIONS_CURRENCY_SEK :Шведская крона (SEK) STR_GAME_OPTIONS_CURRENCY_TRY :Турецкая лира (TRY) @@ -1075,11 +1075,12 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Южноафр STR_GAME_OPTIONS_CURRENCY_CUSTOM :Своя... STR_GAME_OPTIONS_CURRENCY_GEL :Грузинский лари (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Иранский риал (IRR) -STR_GAME_OPTIONS_CURRENCY_RUB :Российский новый рубль (RUR) +STR_GAME_OPTIONS_CURRENCY_RUB :Российский рубль (RUR) STR_GAME_OPTIONS_CURRENCY_MXN :Мексиканский песо (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :Новый тайваньский доллар (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Китайский юань (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Гонконгский доллар (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Индийская рупия (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Движение автомобилей diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 85e7cfdcb4..afba9ee60d 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1163,7 +1163,7 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantida STR_CONFIG_SETTING_INTEREST_RATE :Porcentaje de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Porcentaje de interés de los préstamos; controla también la inflación, en caso de estar activada STR_CONFIG_SETTING_RUNNING_COSTS :Costos de operación: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Nivel de los costos de mantenimiento y operación de vehículos e infraestructura +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Nivel de costos de mantenimiento y operación de vehículos e infraestructura STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Velocidad de construcción: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Restringir la velocidad de las acciones de construcción de jugadores no humanos STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Averías de vehículos: {STRING} @@ -1173,9 +1173,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Establecer cuá STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costos de construcción: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Nivel de costos de construcción y adquisición STR_CONFIG_SETTING_RECESSIONS :Recesiones: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Si se activa, habrá recesiones cada cierto año. Durante una recesión, toda la producción decaerá considerablemente (se restablecerá al final de la recesión) -STR_CONFIG_SETTING_TRAIN_REVERSING :Prohibir a los trenes que cambien de dirección en las estaciones: {STRING} -STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Si se activa, los trenes no podrán girar al lado opuesto en estaciones intermedias, ni siquiera si al girar hay una ruta más corta a su próximo destino +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Al activarse, habrá recesiones cada cierto año en las que toda la producción decaerá considerablemente, restableciéndose al final de cada recesión +STR_CONFIG_SETTING_TRAIN_REVERSING :Prohibir a los trenes que den reversa en estaciones: {STRING} +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Al activarse, los trenes no podrán dar reversa en estaciones intermedias, aun si detrás hay una ruta más corta a su próximo destino STR_CONFIG_SETTING_DISASTERS :Desastres: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Desastres que ocasionalmente pueden bloquear o destruir vehículos o infraestructura STR_CONFIG_SETTING_CITY_APPROVAL :Actitud de los ayuntamientos ante restructuraciones hechas en sus zonas: {STRING} @@ -1189,7 +1189,7 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Modificar el te STR_CONFIG_SETTING_CATCHMENT :Permitir cambiar el tamaño del área de recolección a una forma más real: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Las áreas de recolección se adecúan a diferentes tamaños, según los tipos de estaciones y aeropuertos STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Las estaciones privadas pueden dar servicio a industrias con estaciones neutrales: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Si se activa, las industrias con estaciones integradas (ej. plataformas petrolíferas) podrán aceptar cargamento de estaciones privadas construidas cerca. Si se desactiva, tales industrias solo recibirán cargamento en sus propias estaciones. No aceptarán cargamento de estaciones de compañías, y la estación integrada no brindará servicio a nada más que su industria +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Al activarse, las industrias con estaciones integradas (ej. plataformas petrolíferas) podrán aceptar carga de estaciones aledañas. Al desactivarse, tales industrias solo recibirán cargam en sus propias estaciones y no aceptarán carga de otras estaciones, y la estación integrada no brindará servicio a nada más que su industria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir quitar mayor cantidad de carreteras, puentes y túneles de los pueblos: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Hacer más fácil eliminar infraestructura y edificios que sean propiedad de los pueblos STR_CONFIG_SETTING_TRAIN_LENGTH :Longitud máxima de trenes: {STRING} @@ -1242,7 +1242,7 @@ STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :principio STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :centro STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :fondo STR_CONFIG_SETTING_AUTOSCROLL :Recorrer vista cuando se mueva el cursor a los bordes: {STRING} -STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Si se activa esta opción, las vistas se recorrerán cuando el ratón esté cerca de los bordes de la ventana +STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Al activarse, las vistas se desplazarán cuando el ratón se acarque a los bordes de la ventana STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Desactivado STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Vista principal, solo en pantalla completa STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Vista principal @@ -1273,7 +1273,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permitir la con STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Construir paradas de autobuses intermedias en carreteras que sean propiedad de otras empresas STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No se puede cambiar esta opción si ya existen vehículos STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Mantenimiento de infraestructura: {STRING} -STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cuando se activa, la infraestructura tiene costo de mantenimiento, el cual aumenta en relación con el tamaño de la red de transporte. Esto afecta en mayor medida a las empresas grandes que a las pequeñas +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Al activarse, la infraestructura tiene costo de mantenimiento que aumenta según el tamaño de la red de transporte, de modo que las empresas grandes se afectan más que las pequeñas STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Color inicial de la empresa: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Elegir el color inicial de la empresa @@ -1284,7 +1284,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Los tipos de ae STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avisar si un vehículo se ha perdido: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Mostrar mensajes indicando aquellos vehículos que no puedan encontrar una ruta a su destino STR_CONFIG_SETTING_ORDER_REVIEW :Analizar órdenes de vehículos: {STRING} -STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Cuando se activa, las órdenes de los vehículos se analizan regularmente y los problemas que se encuentren se informan en una noticia +STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Al activarse, se analizan regularmente las órdenes de los vehículos y los problemas obvios que se detecten se informan en una noticia STR_CONFIG_SETTING_ORDER_REVIEW_OFF :No STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Sí, excepto los vehículos detenidos STR_CONFIG_SETTING_ORDER_REVIEW_ON :Todos los vehículos @@ -1294,8 +1294,8 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehículos siem STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Todos los modelos de vehículos estarán disponibles para siempre tras haber sido introducidos STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovar automáticamente vehículos que se hagan viejos: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Los vehículos próximos al final de su vida útil serán renovados automáticamente, siempre y cuando se cumplan las condiciones de renovación -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automáticamente el vehículo a {STRING} de su edad máxima -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Edad relativa en la que un vehículo es considerado para renovarse +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automáticamente el vehículo cumpla {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Edad relativa en que un vehículo se considera para renovación STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} mes{P 0 "" es} antes STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} mes{P 0 "" es} después STR_CONFIG_SETTING_AUTORENEW_MONEY :Costo mínimo requerido para renovación automática: {STRING} @@ -1370,7 +1370,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Recorrer mapa c STR_CONFIG_SETTING_SCROLLMODE_RMB :Recorrer mapa con clic derecho STR_CONFIG_SETTING_SCROLLMODE_LMB :Recorrer mapa con clic izquierdo STR_CONFIG_SETTING_SMOOTH_SCROLLING :Desplazamiento de vista suavizado: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Forma en la que la vista principal se mueve a una ubicación específica al hacer clic en el minimapa o tras una orden de moverse a un objeto determinado del mapa. Si se activa, la vista se mueve de forma suave. Si se desactiva, la vista se mueve instantáneamente al sitio indicado +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Forma en que la vista principal cambia a una ubicación desde el minimapa o tras una orden de ver un objeto determinado del mapa. Al activarse, la vista se mueve suavemente, y al desactivarse, la vista se mueve instantáneamente al sitio indicado STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar información de medidas al usar las herramientas de construcción: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Mostrar distancias en número de casillas y las diferencias de altura cuando se realicen labores de construcción STR_CONFIG_SETTING_LIVERIES :Mostrar cromáticas por tipo de vehículo: {STRING} @@ -1413,7 +1413,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :corto (31-12-20 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Poner el juego en pausa al comenzar una partida: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Si se activa, el juego se detendrá automáticamente al comenzar nuevas partidas para permitir revisar el mapa +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Al activarse, el juego se detendrá automáticamente al comenzar nuevas partidas para permitir revisar el mapa STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Al pausar el juego, permitir: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Qué acciones se pueden realizar mientras el juego está en pausa. STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Ninguna acción @@ -1460,7 +1460,7 @@ STR_CONFIG_SETTING_SOUND_AMBIENT :Ambiente: {STRI STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Reproducir sonidos ambientales de terreno, industrias y pueblos STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Deshabilitar construcción de infraestructura cuando no haya vehículos apropiados disponibles: {STRING} -STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Cuando se activa, solamente se puede construir infraestructura si hay vehículos apropiados disponibles, previniendo un gasto innecesario de tiempo y dinero +STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Al activarse, hay infraestructura disponible solo si hay vehículos adecuados, evitando gastos de tiempo y dinero en infraestructura inservible STR_CONFIG_SETTING_MAX_TRAINS :Número máximo de trenes por empresa: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Número máximo de trenes que una empresa puede tener STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Número máximo de vehículos de carretera por empresa: {STRING} @@ -1510,7 +1510,7 @@ STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, l STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad para vagones: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Al activarse, se tienen en cuenta los límites de velocidad de los vagones para decidir la máxima velocidad de un tren STR_CONFIG_SETTING_DISABLE_ELRAILS :Desactivar ferrocarriles eléctricos: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Si se activa, no es necesario electrificar las vías férreas para hacer que los trenes eléctricos puedan recorrerlas +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Al activarse, no es necesario electrificar las vías para que los trenes eléctricos las usen STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Llegada del primer vehículo a una estación del jugador: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Mostrar noticia cuando el primer vehículo llegue a una estación del jugador @@ -1566,11 +1566,11 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Al arrastrar, c STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Distancia de separación entre señales hasta topar con algún obstáculo (otra señal, un desvío, etc.) al instalarlas mediante arrastre con el ratón STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} casilla{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Al arrastrar, mantener distancia fija entre señales: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Forma en que se instalan las señales cuando se usa Ctrl+Arrastrar. Si se desactiva, se instalan señales a la entrada de túneles y puentes para evitar tramos largas de vías férreas sin señales. Si se activa, se colocan señales cada cierto número de casillas, haciendo que el alineamiento de señales en vías paralelas sea más sencillo +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Forma en que se instalan señales con Ctrl+Arrastrar. Al desactivarse, se colocan señales cerca de túneles y puentes para evitar tramos largos de vías sin señales. Al activarse, se colocan señales cada tanto de casillas, con lo que alinear señales en vías paralelas es más fácil STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Señales mecánicas por defecto antes de: {STRING} 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_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar una ventana para elegir qué tipo de señales instalar en lugar de solo ir rotando los tipos mediante Ctrl+Clic y sin ventana 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 por defecto STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de tramo From edc7ee2cda58a3712a658cd2f41cd3fbd312ae46 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 15 May 2020 19:45:40 +0200 Subject: [PATCH 102/601] Update: Translations from eints indonesian: 1 change by fanioz dutch: 1 change by JanWillem latvian: 39 changes by Tranzistors spanish (mexican): 1 change by Absay --- src/lang/dutch.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/latvian.txt | 40 +++++++++++++++++++++++++++++++++++++++- src/lang/spanish_MX.txt | 2 +- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 4dfbb65476..5fa1fb4628 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -935,6 +935,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexicaanse peso STR_GAME_OPTIONS_CURRENCY_NTD :Nieuwe Taiwanse dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indiase rupee (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index b189ce98f4..3096e17f8c 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3606,6 +3606,7 @@ STR_REPLACE_WAGONS :Gerbong STR_REPLACE_ALL_RAILTYPE :Semua kereta STR_REPLACE_HELP_RAILTYPE :{BLACK}Pilih jenis kereta yang anda inginkan untuk diganti +STR_REPLACE_HELP_ROADTYPE :{BLACK}Pilih jenis jalan yang anda inginkan untuk diganti STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Menampilkan kendaraan terpilih di sisi kiri yang akan diganti, jika ada STR_REPLACE_RAIL_VEHICLES :Kereta STR_REPLACE_ELRAIL_VEHICLES :Kereta Listrik diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 1365129599..9b54987050 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -244,6 +244,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Aizvērt STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Loga virsraksts - vilkt to, lai pārvietotu logu STR_TOOLTIP_SHADE :{BLACK}Aizēnot logu - rādīt tikai virsrakstu STR_TOOLTIP_DEBUG :{BLACK}Rādīt NewGRF atkļūdošanas informāciju +STR_TOOLTIP_DEFSIZE :{BLACK}Mainīt loga izmēru uz tā noklusējuma izmēru. Ctrl+klikšķis, lai saglabātu esošo izmēru kā noklusējuma STR_TOOLTIP_STICKY :{BLACK}Atzīmēt šo logu kā neaizveramu ar "Aizvērt visus logus" taustiņu. Ctrl+klikšķis, lai saglabātu stāvokli kā noklusējumu STR_TOOLTIP_RESIZE :{BLACK}Klikšķināt un vilkt, lai mainītu šī loga lielumu STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Pārslēgties starp lielu/mazu loga izmēru @@ -361,6 +362,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Ainavas STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Pilsētu radīšana STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Ražotņu radīšana STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Ceļu būvēšana +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramvaju sliežu ceļu būvniecība STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Stādīt kokus. Shift pārslēdz būvēšanu/izmaksu tāmes rādīšanu STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Novietot zīmi STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Novietot objektu. Shift pārslēdz būvēšanu/izmaksu tāmes rādīšanu @@ -651,6 +653,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Mūzika nav pieejama STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Celiņš STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Nosaukums @@ -933,6 +936,7 @@ STR_GAME_OPTIONS_CURRENCY_RUB :Jaunais Krievij STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :Jaunais Taivānas dolārs (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Ķīnas juaņa (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Honkongas dolārs (HKD) STR_GAME_OPTIONS_CURRENCY_INR :Indijas rūpija (INR) ############ end of currency region @@ -1016,6 +1020,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Atlasīt STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} bojāt{P s i u} fail{P s i u} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Papildinformācija par pamata mūzikas kopu +STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Neizdevās saņemt sarakstu ar atbalstītajām izšķirtspējām STR_ERROR_FULLSCREEN_FAILED :{WHITE}Pilnekrāna spēles iestatīšana neizdevās # Custom currency window @@ -1133,6 +1138,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spēles iestat STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Uzņēmuma iestatījumi (tiek iekļauti saglabājumos, ietekmē tikai jaunās spēles) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Uzņēmuma iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo uzņēmumu) STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategoriju {BLACK}uz {WHITE}{STRING} +STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Veidu {BLACK}uz {WHITE}Visi iestatījumu veidi STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategorija {BLACK}uz {WHITE}{STRING} {BLACK}un {SILVER}Tips {BLACK}uz {WHITE}Visi iestatījumu veidi STR_CONFIG_SETTINGS_NONE :{WHITE}-Nav- @@ -1157,9 +1163,11 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais ai STR_CONFIG_SETTING_INTEREST_RATE :Procentu likme: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Aizdevumu procentu likme; ja ieslēgts, ietekmē arī inflāciju STR_CONFIG_SETTING_RUNNING_COSTS :Kārtējās izmaksas: {STRING} +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Iestaties uzturēšanas un ekspluatācijas izmaksu līmeni transportlīdzekļiem un infrastruktūrai STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Būvēšanas ātrums: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :MI (mākslīgā intelekta) būvniecības darbību daudzuma ierobežošana STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Transportlīdzekļu bojāšanās: {STRING} +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Nosaka, cik bieži var salūzt nepietiekami apkalpoti transportlīdzekļi STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsīdiju reizinātājs: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Iestatīt, cik daudz maksāt par subsidētajiem savienojumiem STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Būvēšanas izmaksas: {STRING} @@ -1178,6 +1186,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Atļaut ainavas STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Atļauj ainavas veidošanu zem ekām un ceļiem bez to nojaukšanas STR_CONFIG_SETTING_CATCHMENT :Atļaut realistiskākas, palielinātas apkalpojamās platības: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Atšķirīga lieluma apkalpojamās platības dažādu veidu stacijām un lidostām +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Uzņēmumu stacijas var apkalpot industrijas, kurām ir pievienotas neitrālas stacijas: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ja ieslēgts, industrijas ar pievienotām stacijām (piemēram, naftas ieguves platformas) var apkalpot arī netālu esošās uzņēmumumam piederošās stacijas. Ja izslēgts, šīs industrijas var apkalpot tikai to pašu stacijas. Tuvumā esošās uzņēmumu stacijas nevarēs tās apkalpot, un pievienotās stacijas neapkalpos preču veidus, kas nav atbilstošas attiecīgajai industrijai. STR_CONFIG_SETTING_EXTRADYNAMITE :Atļaut pilsētai piederošo ceļu, tiltu un tuneļu nojaukšanu: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Padara vieglāku pilsētai piederošas infrastruktūras un ēku nojaukšanu STR_CONFIG_SETTING_TRAIN_LENGTH :Maksimālais vilcienu garums: {STRING} @@ -1308,6 +1318,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR :Zemes radītāj STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Sākotnējais ģenerators ir atkarīgs no bāzes grafikas kopas, un veido fiksētas ainavas formas. TerraGenesis ir uz Perlina trokšņa balstīts ģenerators ar smalkākiem vadības iestatījumiem. STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Sākotnējais STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis +STR_CONFIG_SETTING_TERRAIN_TYPE :Reljefa veids: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGenesis) Ainavas kalnainība STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blīvums: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Iestatiet, cik industrijas jāģenerē un kāds līmenis jāuztur spēles laikā @@ -1353,8 +1364,10 @@ STR_CONFIG_SETTING_SCROLLMODE :Skatvietas riti STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Uzvedība, kad ritina karti STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pārvietot skatvietu ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta +STR_CONFIG_SETTING_SCROLLMODE_RMB :Pārvietot karti ar labo peles pogu STR_CONFIG_SETTING_SCROLLMODE_LMB :Pārvietot karti ar kreiso peles pogu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plūdena skatvietas ritināšana: {STRING} +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Noteikt, kā galvenais skats ritina uz norādīto pozīciju, kad klikšķina uz mazās kartes vai kad dod komandu ritināt uz noteiktu kartes objektu. Ja ieslēgs, skatvieta ritinās gludi. Ja izslēgts, skats pārlec uz izvēlēto punktu. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Rādīt mērījumu rīkjoslu, izmantojot dažādus būvniecības rīkus: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Rāda lauciņu attālumus un augstuma starpības, ar vilkšanu veicot būvniecības darbības STR_CONFIG_SETTING_LIVERIES :Rādīt uzņēmuma identitātes krāsas: {STRING} @@ -1477,6 +1490,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Cik daudz atmi STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Apkopju starplaiki procentos: {STRING} +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Izvēlieties, vai transportlīdzekļu apkopi veikt pēc fiksēta laika kopš iepriekšējās apkopes vai, kad uzticamība nokrīt zem kāda noteiktas daļas no maksimālās uzticamības STR_CONFIG_SETTING_SERVINT_TRAINS :Vilcienu apkopju noklusējuma starplaiks: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Izvēlēties jaunajiem sliežu transportlīdzekļiem apkopju noklusējuma starplaiku, ja tiem tas nav noteikts STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dien{P 0 a as u}/% @@ -1644,10 +1658,12 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :APSARGĀJAMĀ k STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Izplatīšanas modelis citām kravu klasēm: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asimetriska" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Jo lielāku vērtību iestatīsiet, jo vairāk CPU laika aizies saišu grafa aprēķināšanai. Ja tas aizņem pārāk daudz laika, jūs varētu pamanīt spēles iebremzēšanos. Ja iestatīsiet pārāk mazu, izplatīšana būs neprecīza un jūs varētu pamanīt, ka krava tiek nosūtīta uz negaidītām vietām. STR_CONFIG_SETTING_DEMAND_DISTANCE :Attāluma ietekme uz pieprasījumu: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ja iestatīsiet šo vērtību lielāku kā 0, attālums starp kravas izcelsmes staciju A un iespējamo galastaciju B ietekmēs sūtāmās kravas apjomu. Jo tālāk no stacijas A ir stacija B, jo mazāk kravas tiks nosūtīts. Jo augstāka vērtība, jo mazāk kravas tiks nosūtīts uz tālo staciju un vairāk kravu uz tuvo staciju. STR_CONFIG_SETTING_DEMAND_SIZE :Atpakaļceļa kravas daudzums simetriskajā režīmā: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Īso ceļu piesātinājums pirms sākt izmantot augstas ietilpības ceļus: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp divām stacijām ir vairāki ceļi. Kravu sadale vispirms piesātinās īsāko maršrutu, pēc tam izmantos nākamo īsāko maršrutu līdz tas būs piesātināts, un tā tālāk. Piesātinājumu nosaka novērtējot ietilpību un plānoto izmantojumu. Kad visi ceļi ir piesātināti un vēl ir palicis pieprasījumus, tas pārslogos visus ceļus, dodot priekšroku ceļiem ar lielāko ietilpību. Algoritms visbiežāk nepareizi novērtēs ietilpību. Šis iestatījums jums atļaus norādīt, līdz cik procentiem īsākais ceļš ir jāpiesātina pirmajā piegājienā pirms izvēlēties garāku ceļu. Iestatiet to uz mazāk kā 100%, lai izvairītos no pārpildītām stacijām, ja kapacitāte ir pārvērtēta. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma mērvienības: {STRING} @@ -2429,6 +2445,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Būvēt STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Būvēt tramvaju tuneli. Shift pārslēdz būvēšanu/izmaksu tāmes rādīšanu STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Pārslēgties starp ceļa būvēšanas/nojaukšanas režīmiem STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Pārslēgt būvēt/novākt tramvaju būvei +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Pārveidot/uzlabot ceļa veidu. Shift pārslēdz būvēšanu/izmaksu novērtējumu rādīšanu STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Pārveidot/uzlabot tramvaju veidu. Shift pārslēdz būvēšanu/izmaksu novērtējumu rādīšanu STR_ROAD_NAME_ROAD :Ceļš @@ -2619,6 +2636,7 @@ STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Pieņem STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Sliežu veids: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Ceļu tips: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tramvaja veids: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Sliežu ātruma ierobežojums: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ceļa ātruma ierobežojums: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tramvaja ātruma ierobežojums: {LTBLUE}{VELOCITY} @@ -2726,6 +2744,7 @@ STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulācijas ātrums: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafikas kadru ātrums: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Sekundē renderēto video kadru skaits. STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Cik ātri spēle šobrīd iet salīdzinot ar standarta ātrumu. STR_FRAMERATE_CURRENT :{WHITE}Pašreizējais @@ -2752,6 +2771,7 @@ STR_FRAMERATE_GL_SHIPS :{BLACK} Kuģu STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Lidaparātu tikšķi: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Pasaules tikšķi: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Saišu grafika aizture: +STR_FRAMERATE_DRAWING :{BLACK}Grafikas renderēšana: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Pasaules skatvietas: STR_FRAMERATE_VIDEO :{BLACK}Video izvade: STR_FRAMERATE_SOUND :{BLACK}Skaņas miksēšana: @@ -2921,6 +2941,8 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palete: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Noklusējuma (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Noklusējuma (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Mantotais (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Mantotais (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nav @@ -2970,7 +2992,9 @@ STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Iet pie STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Atlasītā gariņa attēlojums. To attēlojot, izkārtojums netiek ievērots STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Atiestatīt relatīvi +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Pāriestatīt paršreizējo relatīvo nobīdi STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X nobīde: {NUM}, Y nobīde: {NUM} (absolūta) +STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X nobīde: {NUM}, Y nobīde: {NUM} (relatīvi) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Paņemt gariņu STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Paņemt gariņu no jebkuras vietas ekrānā @@ -3036,6 +3060,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}'{1:ENGINE}' kravas pielāgošanas informācija pēc izbūves atšķiras no pārdošanas sarakstā norādītās. Tas var liegt automātiskai atjaunošanai/aizvietošanai pareizi pielāgot kravas STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' izraisīja bezgalīgu ražošanas izsaukumu ciklu STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Izsaukums {1:HEX} atgrieza nezināmu vai nederīgu rezultātu {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}“{1:STRING}” atgrieza nederīgu kravas veidu ražošanas atgriezeniskajā funkcijā punktā {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3104,6 +3129,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Pārdēvēt pil # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} pašvaldība STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Rādīt zonu pašvaldības robežās STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Transporta uzņēmumu vērtējumi: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Pieejamās darbības: @@ -3183,6 +3209,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikšķ # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Stāstu grāmata STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globālā stāstu grāmata +STR_STORY_BOOK_SPECTATOR :Globālā stāstu grāmata STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM} lapa STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Pārlēkt uz specifisku lapu spiežot to zemāk esošajā sarakstā. @@ -3374,6 +3401,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Ražotnes STR_INDUSTRY_DIRECTORY_NONE :{G=m}{ORANGE}- Neviens - STR_INDUSTRY_DIRECTORY_NONE.kas :{ORANGE}- Neviena - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} (pārvadāti {COMMA}%){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} @@ -3388,7 +3416,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nav # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Iepriekšējā mēnesī saražots: -STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (aizvests {COMMA}%) +STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (pārvadāti {COMMA}%) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz ražotni. Ctrl+klikšķis atvērs skatu uz ražotni jaunā skatlaukā STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! @@ -3397,6 +3425,7 @@ STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Pieprasa STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Pieprasa: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} gaida{STRING} @@ -3467,6 +3496,7 @@ STR_GROUP_RENAME_CAPTION :{BLACK}Pārdēv STR_GROUP_PROFIT_THIS_YEAR :Ienākumi šajā gadā: STR_GROUP_PROFIT_LAST_YEAR :Peļņa pērn: +STR_GROUP_OCCUPANCY :Pašreizējais lietojums: STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window @@ -3486,6 +3516,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Jauns lidaparā ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Svars: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} (Pielāgošanas izmaksas: {GOLD}{CURRENCY_LONG}{BLACK}) Svars: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Ātrums: {GOLD}{VELOCITY}{BLACK} Jauda: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Ātrums: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Ātrums okeānā: {GOLD}{VELOCITY} @@ -3658,6 +3689,7 @@ STR_ENGINE_PREVIEW_SHIP :kuģis STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {CURRENCY_LONG} Svars: {WEIGHT_SHORT}{}Ātrums: {VELOCITY} Jauda: {POWER}{}Kārtējās izmaksas: {CURRENCY_LONG} gadā{}Ietilpība: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cena: {CURRENCY_LONG} Svars: {WEIGHT_SHORT}{}Ātrums: {VELOCITY} Jauda: {POWER} Maks. spēks: {6:FORCE}{}Kārtējās izmaksas: {4:CURRENCY_LONG} gadā{}Ietilpība: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Ietilpība: {CARGO_LONG}{}Kārtējās izmaksas: {CURRENCY_LONG} gadā +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING}{}Ietilpība: {CARGO_LONG}, {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG} gadā STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING}{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING} Attālums: {COMMA} lauciņi{}Ietilpība: {CARGO_LONG}, {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Maks. ātrums: {VELOCITY}{}Lidaparāta veids: {STRING} Attālums: {COMMA} lauciņi{}Ietilpība: {CARGO_LONG}{}Izmaksas: {CURRENCY_LONG}/gadā @@ -3670,7 +3702,9 @@ STR_REPLACE_VEHICLE_SHIP :Kuģis STR_REPLACE_VEHICLE_AIRCRAFT :Lidaparāts STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}Lietošanā esošie transportlīdzekļi +STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}Kolonna ar jums piederošajiem transportlīdzekļiem STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES :{YELLOW}Pieejamie transportlīdzekļi +STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Kolonna ar transportlīdzekļiem, kurus var aizvietot STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Izvēlēties lokomotīves veidu, kuru vēlaties mainīt STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Izvēlēties jaunu lokomotīves veidu, kuru vēlaties lietot kreisajā pusē atlasītās lokomotīves vietā @@ -3692,6 +3726,7 @@ STR_REPLACE_ALL_RAILTYPE :Visi dzelzceļa STR_REPLACE_ALL_ROADTYPE :Visi ceļu transportlīdzekļi STR_REPLACE_HELP_RAILTYPE :{BLACK}Izvēlēties sliežu veidu, kuram vēlaties nomainīt lokomotīves +STR_REPLACE_HELP_ROADTYPE :{BLACK}Izvēlēties ceļu veidu, kuram vēlaties nomainīt dzinējus STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Parāda kura lokomotīve no kreisajā pusē atlasītajām tiek nomainīta, ja vien kāda ir STR_REPLACE_RAIL_VEHICLES :Sliežu transportlīdzekļi STR_REPLACE_ELRAIL_VEHICLES :Elektrificētā dzelzceļa transportlīdzekļi @@ -3785,6 +3820,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} gad{P s STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} gad{P s i u} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Maks. ātrums: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. ātrums: {LTBLUE}{VELOCITY} {BLACK}Lidaparāta veids: {LTBLUE}{STRING} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Svars: {LTBLUE}{WEIGHT_SHORT} {BLACK}Jauda: {LTBLUE}{POWER}{BLACK} Maks. ātrums: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Svars: {LTBLUE}{WEIGHT_SHORT} {BLACK}Jauda: {LTBLUE}{POWER}{BLACK} Maks. ātrums: {LTBLUE}{VELOCITY} {BLACK}Maks. spēks: {LTBLUE}{FORCE} @@ -4198,6 +4234,7 @@ STR_FEEDER :{YELLOW}Pārska STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {GREEN}Ienākumi: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {GREEN}Ienākumi: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {RED}Izmaksas: {CURRENCY_LONG} +STR_FEEDER_COST :{YELLOW}Pārkraušana: {CURRENCY_LONG}{WHITE} / {RED}Izmaksas: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Plānotās izmaksas: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānotie ienākumi: {CURRENCY_LONG} @@ -4505,6 +4542,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nevar iz STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Nevar izdzēst šo grupu... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Nevar pārdēvēt grupu... STR_ERROR_GROUP_CAN_T_SET_PARENT :nevar iestatīt vecāku grupu... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... grupu hierarhijās cikli nav atļauti STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nevar noņemt no šīs grupas visus transportlīdzekļus... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nevar pievienot transportlīdzekļus šai grupai... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nevar pievienot koplietojamos transportlīdzekļus šai grupai... diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index afba9ee60d..35cb121a65 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1189,7 +1189,7 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Modificar el te STR_CONFIG_SETTING_CATCHMENT :Permitir cambiar el tamaño del área de recolección a una forma más real: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Las áreas de recolección se adecúan a diferentes tamaños, según los tipos de estaciones y aeropuertos STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Las estaciones privadas pueden dar servicio a industrias con estaciones neutrales: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Al activarse, las industrias con estaciones integradas (ej. plataformas petrolíferas) podrán aceptar carga de estaciones aledañas. Al desactivarse, tales industrias solo recibirán cargam en sus propias estaciones y no aceptarán carga de otras estaciones, y la estación integrada no brindará servicio a nada más que su industria +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Al activarse, las industrias con estaciones integradas (ej. plataformas petrolíferas) podrán aceptar carga de estaciones aledañas. Al desactivarse, tales industrias solo recibirán carga en sus propias estaciones y no aceptarán de otras estaciones, ni la estación integrada brindará servicio a nada más que su industria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir quitar mayor cantidad de carreteras, puentes y túneles de los pueblos: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Hacer más fácil eliminar infraestructura y edificios que sean propiedad de los pueblos STR_CONFIG_SETTING_TRAIN_LENGTH :Longitud máxima de trenes: {STRING} From 70ccd34fa02f74612279aafefacbed5f75af7c28 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 16 May 2020 19:45:38 +0200 Subject: [PATCH 103/601] Update: Translations from eints latvian: 13 changes by Tranzistors --- src/lang/latvian.txt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 9b54987050..2914ff0b15 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1001,6 +1001,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Fonta izmērs +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Izvēlieties saskarnes fonta izmēru STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normāls STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs izmērs @@ -1173,9 +1174,11 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Iestatīt, cik STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Būvēšanas izmaksas: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Iestatīt būvēšanas un pirkumu izmaksas STR_CONFIG_SETTING_RECESSIONS :Lejupslīde: {STRING} +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ja ieslēgts, ik pa laikam var gadīties recesijas. To laikā visa ražošana būtiski samazinās (tā atgriežas sākotnējā līmenī pēc recesijas beigām). STR_CONFIG_SETTING_TRAIN_REVERSING :Neatļaut vilcienu apgriešanos stacijās: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ja ieslēgts, stacijās vilcieni negriezīsies pretējā virzienā, pat ja braucot tādā veidā tie atrastu īsāku ceļu un nākamo pieturu; izņēmums ir gala stacijas STR_CONFIG_SETTING_DISASTERS :Katastrofas: {STRING} +STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Pārslēgt katastrofas, kas laiku pa laikam var bloķēt vai iznīcināt transportlīdzekļus un infrastruktūru STR_CONFIG_SETTING_CITY_APPROVAL :Pilsētu domju attieksme pret platības pārstrukturēšanu: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Izvēlieties, cik lielā mērā trokšņi un vides bojājumi ietekmē uzņēmuma reitingu un turpmākās būvniecības darbības viņu teritorijā @@ -1342,6 +1345,7 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Nav STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Sākotnējais STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Uzlabotais STR_CONFIG_SETTING_ROAD_SIDE :Autotransporta līdzekļi: {STRING} +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Izvēlieties braukšanas pusi STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Augstumu kartes pagriešana: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Pret pulksteņa rādītāja virzienu STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Pulksteņa rādītāja virzienā @@ -1397,6 +1401,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komanda+klikš STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klikšķis STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Izslēgta +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Aizvērt logu ar labo klikšķi: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Labais klikšķis logā aizver logu. Izslēdz paskaidres parādīšanu ar labo klikšķi! STR_CONFIG_SETTING_AUTOSAVE :Automātiskā saglabāšana: {STRING} @@ -1547,6 +1552,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Krāsaini avī STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gads kad sāk drukāt krāsainas avīzes. Pirms šā gada tās ir melnbaltas STR_CONFIG_SETTING_STARTING_YEAR :Sākuma gads: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas beigu gads: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Spēles beigas gads (tiek izmantots rezultāta noteikšanai). Šī gada beigās uzņēmuma rezultāti tiek ierakstīti un uz ekrāna tiek parādīti labākie rezultāti, bet spēlētāji var turpināt spēlēt arī pēc šī datuma.{}Ja tas ir norādīts pirms spēles sākuma datuma, labākie rezultāti nekad netiek parādīti. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} @@ -2407,7 +2413,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Vienvirz STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signālierīču pārveidotājs{}Kad ieslēgts, klikšķis uz jau esošas signālierīces pārveidos to uz norādīto signāla tipu un variantu. Ctrl+klikšķis pārslēgs pašreizējo variantu. Shift+klikšķis rāda pārveidošanas tāmes vērtību STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Vilkt signālu biežumu STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Samazināt signālierīču attālumu -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Palielināt signālierīču biežumu +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Palielināt signālierīču atstatumu # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Izvēlēties dzelzceļa tiltu @@ -2666,9 +2672,9 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Dzelzceļš sli STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Dzelzceļš sliedes ar kombinētajām un pirmssignālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Dzelzceļš sliedes ar ceļu un pirmssignālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Dzelzceļš sliedes ar vienvirziena ceļu un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Dzelzceļš sliedes ar izejas un kombinētajām signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Dzelzceļš sliedes ar izejas un ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Dzelzceļš sliedes ar izejas un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Dzelzceļa sliedes ar izejas un kombinētajām signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Dzelzceļa sliedes ar izejas un ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Dzelzceļa sliedes ar izejas un vienvirziena ceļa signālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Dzelzceļš sliedes ar kombinētajām un ceļa signālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Dzelzceļš sliedes ar kombinētajām un vienvirziena ceļa signālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Dzelzceļš sliedes ar ceļa un vienvirziena ceļa signālierīcēm @@ -2784,6 +2790,7 @@ STR_FRAMETIME_CAPTION_GAMELOOP :Spēles cikls STR_FRAMETIME_CAPTION_GL_ECONOMY : Kravu iekraušana un izkraušana STR_FRAMETIME_CAPTION_GL_TRAINS :Vilcienu tikšķi STR_FRAMETIME_CAPTION_GL_ROADVEHS :Autotransporta tikšķi +STR_FRAMETIME_CAPTION_GL_SHIPS :Kuģu tikšķi STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Lidaparātu tikšķi STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Pasaules tikšķi STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Saišu grafa aizture @@ -3821,6 +3828,7 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ga STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Maks. ātrums: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. ātrums: {LTBLUE}{VELOCITY} {BLACK}Lidaparāta veids: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Maks. ātrums: {LTBLUE}{VELOCITY} {BLACK}Lidaparāta veids: {LTBLUE}{STRING} {BLACK}Attālums: {LTBLUE}{COMMA} lauciņi STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Svars: {LTBLUE}{WEIGHT_SHORT} {BLACK}Jauda: {LTBLUE}{POWER}{BLACK} Maks. ātrums: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Svars: {LTBLUE}{WEIGHT_SHORT} {BLACK}Jauda: {LTBLUE}{POWER}{BLACK} Maks. ātrums: {LTBLUE}{VELOCITY} {BLACK}Maks. spēks: {LTBLUE}{FORCE} @@ -4486,6 +4494,7 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Šeit ne STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... tur nav ceļa STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tur nav tramvaju sliežu ceļa STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Šeit nevar mainīt ceļa veidu... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Šeit nevar pārveidot tramvaja veidu... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nav piemērota ceļa STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nav piemērotu tramvaju STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... nesavietojams ceļš From e31def197f3e15bf5b3c31c6f9ad53b3d1232e2d Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 17 May 2020 19:11:53 +0200 Subject: [PATCH 104/601] Fix: properly support utf-8 in baseset translation vbscript (#8154) --- media/baseset/translations.vbs | 39 ++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs index fffb577482..8632ef0697 100644 --- a/media/baseset/translations.vbs +++ b/media/baseset/translations.vbs @@ -63,10 +63,13 @@ Sub Lookup(ini_key, str_id, outfile) For Each file In folder.Files If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then Dim f - Set f = FSO.OpenTextFile(file.Path) + Set f = CreateObject("ADODB.Stream") + f.Charset = "utf-8" + f.Open + f.LoadFromFile(file.Path) - Do Until f.atEndOfStream - line = f.ReadLine() + Do Until f.EOS + line = f.ReadText(-2) If InStr(1, line, "##isocode ") = 1 Then p = Split(line) @@ -80,8 +83,9 @@ Sub Lookup(ini_key, str_id, outfile) End If i = i + 1 End If - Loop + + f.Close End If Next @@ -89,7 +93,7 @@ Sub Lookup(ini_key, str_id, outfile) ISort output For Each line In output - outfile.Write line & vbCrLf + outfile.WriteText line, 1 Next End Sub @@ -100,7 +104,9 @@ Dim infile Set infile = FSO.OpenTextFile(inputfile) Dim outfile -Set outfile = FSO.CreateTextFile(outputfile, True) +Set outfile = CreateObject("ADODB.Stream") +outfile.Charset = "utf-8" +outfile.Open Do Until infile.atEndOfStream @@ -109,15 +115,30 @@ Do Until infile.atEndOfStream If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then p = Split(line, "=") If Trim(p(1)) = "" Then - outfile.Write("ORIG_EXTRA.GRF = " & GetExtraGrfHash() & vbCrLf) + outfile.WriteText "ORIG_EXTRA.GRF = " & GetExtraGrfHash(), 1 Else - outfile.Write(line & vbCrLf) + outfile.WriteText line, 1 End If ElseIf InStr(1, line, "!! ") = 1 Then p = Split(line) Lookup p(1), p(2), outfile Else - outfile.Write(line & vbCrLf) + outfile.WriteText line, 1 End If Loop + +' UTF-8 Text ADO Stream includes BOM, so we need to remove it +Dim outfile_noBOM +Set outfile_noBOM = CreateObject("ADODB.Stream") +outfile_noBOM.Type = 1 +outfile_noBOM.Open + +' Copy Text stream to Binary stream, skiping the BOM +outfile.Position = 3 +outfile.CopyTo outfile_noBOM +outfile.Close + +' Write the Binary stream +outfile_noBOM.SaveToFile outputfile, 2 +outfile_noBOM.Close From d11bae58a0e00b8362d087e8aa54a867c668a986 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 17 May 2020 19:45:39 +0200 Subject: [PATCH 105/601] Update: Translations from eints spanish (mexican): 7 changes by Absay --- src/lang/spanish_MX.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 35cb121a65..fcce72e0b2 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -225,9 +225,9 @@ STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}Filtrar palabras: -STR_LIST_FILTER_OSKTITLE :{BLACK}Indicar una palabra a filtrar -STR_LIST_FILTER_TOOLTIP :{BLACK}Indicar una palabra clave para filtrar la lista +STR_LIST_FILTER_TITLE :{BLACK}Filtrar texto: +STR_LIST_FILTER_OSKTITLE :{BLACK}Indicar texto a filtrar +STR_LIST_FILTER_TOOLTIP :{BLACK}Indicar un texto clave para filtrar la lista STR_TOOLTIP_GROUP_ORDER :{BLACK}Elegir orden de grupo STR_TOOLTIP_SORT_ORDER :{BLACK}Elegir orden descendiente o ascendiente @@ -1109,7 +1109,7 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}No se en # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configuración -STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar palabras: +STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar texto: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplegar todo STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plegar todo STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sin explicación disponible) @@ -2249,7 +2249,7 @@ STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Buscar e STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Buscar contenido no disponible en el servicio de contenido del juego en sitios web externos no asociados con OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}¡Estás saliendo de OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Los términos y condiciones para descargar contenido de sitios web externos varían.{}Será necesario referirse a tales sitios para saber cómo instalar el contenido en OpenTTD.{}¿Continuar? -STR_CONTENT_FILTER_TITLE :{BLACK}Etiqueta o palabras claves +STR_CONTENT_FILTER_TITLE :{BLACK}Etiqueta o nombre: STR_CONTENT_OPEN_URL :{BLACK}Visitar sitio web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar el sitio web de este contenido STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Descargar @@ -2822,7 +2822,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalles STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hay información disponible STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} -STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrar palabras: +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrar texto: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobrescribir archivo STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}¿Estás seguro de sobrescribir el archivo? @@ -2906,7 +2906,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informac STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Archivos NewGRF activos STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Archivos NewGRF inactivos STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Seleccionar perfil: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtrar palabras: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtrar texto: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Cargar perfil STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Guardar STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Guardar lista actual como nuevo perfil From 93d1d8773fab6eda973b19631a0473b11bba35e3 Mon Sep 17 00:00:00 2001 From: dP Date: Fri, 15 May 2020 23:18:03 +0300 Subject: [PATCH 106/601] Fix: Desync after house replacement --- src/town_cmd.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 507cccd565..1d550fb028 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -454,13 +454,22 @@ uint32 GetWorldPopulation() /** * Remove stations from nearby station list if a town is no longer in the catchment area of each. + * To improve performance only checks stations that cover the provided house area (doesn't need to contain an actual house). * @param t Town to work on + * @param tile Location of house area (north part) + * @param flags BuildingFlags containing the size of house area */ -static void RemoveNearbyStations(Town *t) +static void RemoveNearbyStations(Town *t, TileIndex tile, BuildingFlags flags) { for (StationList::iterator it = t->stations_near.begin(); it != t->stations_near.end(); /* incremented inside loop */) { const Station *st = *it; - if (!st->CatchmentCoversTown(t->index)) { + + bool covers_area = st->TileIsInCatchment(tile); + if (flags & BUILDING_2_TILES_Y) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(0, 1)); + if (flags & BUILDING_2_TILES_X) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(1, 0)); + if (flags & BUILDING_HAS_4_TILES) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(1, 1)); + + if (covers_area && !st->CatchmentCoversTown(t->index)) { it = t->stations_near.erase(it); } else { ++it; @@ -621,11 +630,7 @@ static void TileLoop_Town(TileIndex tile) ClearTownHouse(t, tile); /* Rebuild with another house? */ - if (GB(r, 24, 8) < 12 || !BuildTownHouse(t, tile)) - { - /* House wasn't replaced, so remove it */ - if (!_generating_world) RemoveNearbyStations(t); - } + if (GB(r, 24, 8) >= 12) BuildTownHouse(t, tile); } cur_company.Restore(); @@ -654,7 +659,6 @@ static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlag flags) ChangeTownRating(t, -rating, RATING_HOUSE_MINIMUM, flags); if (flags & DC_EXEC) { ClearTownHouse(t, tile); - RemoveNearbyStations(t); } return cost; @@ -2666,11 +2670,12 @@ void ClearTownHouse(Town *t, TileIndex tile) } /* Do the actual clearing of tiles */ - uint eflags = hs->building_flags; DoClearTownHouseHelper(tile, t, house); - if (eflags & BUILDING_2_TILES_Y) DoClearTownHouseHelper(tile + TileDiffXY(0, 1), t, ++house); - if (eflags & BUILDING_2_TILES_X) DoClearTownHouseHelper(tile + TileDiffXY(1, 0), t, ++house); - if (eflags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1), t, ++house); + if (hs->building_flags & BUILDING_2_TILES_Y) DoClearTownHouseHelper(tile + TileDiffXY(0, 1), t, ++house); + if (hs->building_flags & BUILDING_2_TILES_X) DoClearTownHouseHelper(tile + TileDiffXY(1, 0), t, ++house); + if (hs->building_flags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1), t, ++house); + + RemoveNearbyStations(t, tile, hs->building_flags); UpdateTownRadius(t); From b8a896d52cdb9e2423b5fd745cc3d72d1ce7e09d Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 18 May 2020 19:45:41 +0200 Subject: [PATCH 107/601] Update: Translations from eints latvian: 35 changes by Tranzistors --- src/lang/latvian.txt | 70 ++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 2914ff0b15..dc546adf67 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -887,10 +887,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Skatvieta {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopēt uz skatvietu +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mainīt skatvietu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopēt galvenā skata atrašanās vietu uz šo skatvietu -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Kopēt no skatvietas -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Ielīmēt šīs skatvietas atrašanās vietu uz galveno skatu +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mainīt galveno skatu +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopēt šīs skatvietas atrašanās vietu uz galveno skatu # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spēles opcijas @@ -1207,8 +1207,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Slīpu lauciņu STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Nogāžu stāvums autotransporta līdzekļiem: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Slīpu lauciņu nogāžu stāvums autotransporta līdzekļiem. Augstākas vērtības apgrūtina uzbraukšanu uzkalnā -STR_CONFIG_SETTING_FORBID_90_DEG :Aizliegt vilcieniem un kuģiem veikt 90 grādu pagriezienus: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 grādu pagriezieni rodas, ja horizontālam sliežu ceļa posmam tieši seko vertikāls sliežu ceļa posms uz blakus esošā lauciņa. Tādējādi vilciens, šķērsojot lauciņu malas, veic 90 grādu pagriezienu, nevis parasto 45 grādu kā citām sliežu ceļu kombinācijām. Tas attiecas arī uz kuģu pagrieziena lenķiem +STR_CONFIG_SETTING_FORBID_90_DEG :Aizliegt vilcieniem veikt 90° pagriezienus: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 grādu pagriezieni rodas, ja horizontālam sliežu ceļa posmam tieši seko vertikāls sliežu ceļa posms uz blakus esošā lauciņa. Tādējādi vilciens, šķērsojot lauciņu malas, veic 90 grādu pagriezienu, nevis parasto 45 grādu kā citām sliežu ceļu kombinācijām. Tas attiecas arī uz kuģu pagrieziena leņķiem. Tas arī attiecas uz kuģu pagriešanās rādiusu. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Atļaut savienot stacijas, kas neatrodas tieši blakus: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Atļaut pievienot staciju daļas, tām nesaskaroties ar jau esošajām. Novietojot jaunās daļas, ir nepieciešams nospiest Ctrl+klikšķis STR_CONFIG_SETTING_INFLATION :Inflācija: {STRING} @@ -1264,8 +1264,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Lidmašīnu āt STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Iestatīt lidmašīnu nosacīto ātrumu salīdzinājumā ar citu veidu transportlīdzekļiem, lai samazinātu lidaparātu ienākumus STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Lidmašīnu avāriju daudzums: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Iestatīt lidaparātu avāriju notikšanas iespējamību -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :neviena +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Iestatīt nejaušu lidaparātu avāriju iespējamību.{}* Lielām lidmašīnām vienmēr ir risks avarēt, kad piezemējas mazās lidostās +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nav* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :samazināts STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :parasts STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Atļaut caurbraucamas pieturvietas uz pilsētai piederošiem ceļiem: {STRING} @@ -1325,8 +1325,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Reljefa veids: STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGenesis) Ainavas kalnainība STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriju blīvums: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Iestatiet, cik industrijas jāģenerē un kāds līmenis jāuztur spēles laikā -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimālais attālums no kartes malas naftas pārstrādes rūpnīcām: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftas pārstrādes rūpnīcas ir būvējamas tikai kartes malu tuvumā, salu kartēm tas ir pie krasta +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Naftas industriju maksimālais attālums no kartes malas: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limits, cik tālu no kartes malām drīkst taisīt naftas pārstrādes rūpnīcas un un naftas ieguves platformas. Uz salu kartēm tas nodrošina, ka šīs konstrukcijas tiek būvētas piekrastēs. Uz kartēm, kas ir lielākas par 256 lauciņiem šī vērtība tiek palielināta. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Noteikt, kādā augstumā sākas subarktiskā ainava. Sniegs arī ietekmē industriju rašanos un apdzīvoto vietu pieaugšanas prasības STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Apvidus nelīdzenums: {STRING} @@ -1825,8 +1825,8 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Pamest spēli -STR_ABANDON_GAME_QUERY :{YELLOW}Vai jūs tiešām vēlaties pamest šo spēli? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vai esat pārliecināts, ka vēlaties pamest šo scenāriju? +STR_ABANDON_GAME_QUERY :{YELLOW}Vai tiešām vēlaties pamest šo spēli? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vai tiešām vēlaties pamest šo scenāriju? # Cheat window STR_CHEATS :{WHITE}Blēdības @@ -2157,7 +2157,7 @@ STR_NETWORK_CHAT_ALL :[Visiem] {STRIN STR_NETWORK_CHAT_OSKTITLE :{BLACK}Ievadīt tekstu tīkla tērzēšanai # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Neviena tīkla iekārta nav atrasta vai kompilēta bez ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nav atrasta neviena tīkla ierīce STR_NETWORK_ERROR_NOSERVER :{WHITE}Nevar atrast nevienu tīkla spēli STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Serveris neatbild uz pieprasījumu STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Nevar pieslēgties sakarā ar NewGRF neatbilstību @@ -2411,7 +2411,7 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinē STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Ceļa signāls (luksofors){}Ceļa signāls ļauj vairāk kā vienam vilcienam iebraukt signāla blokā vienlaicīgi, ja vien vilciens var rezervēt drošu apstāšanās punktu. Parastiem ceļa signāliem var pabraukt garām no aizmugures STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Vienvirziena ceļa signālierīce (elektriska){}Ceļa signāls ļauj iebraukt signāla blokā vairāk kā vienam vilcienam vienlaicīgi, ja vien vilciens var rezervēt drošu apstāšanās punktu. Vienvirziena ceļa signālierīcēm nevar pabraukt garām no aizmugures STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signālierīču pārveidotājs{}Kad ieslēgts, klikšķis uz jau esošas signālierīces pārveidos to uz norādīto signāla tipu un variantu. Ctrl+klikšķis pārslēgs pašreizējo variantu. Shift+klikšķis rāda pārveidošanas tāmes vērtību -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Vilkt signālu biežumu +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Vilkto signālu attālums STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Samazināt signālierīču attālumu STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Palielināt signālierīču atstatumu @@ -2656,29 +2656,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Lauki STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Apsnigusi zeme STR_LAI_CLEAR_DESCRIPTION_DESERT :Tuksnesis -STR_LAI_RAIL_DESCRIPTION_TRACK :Dzelzceļš sliedes -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Dzelzceļš ceļš ar bloķēšanas signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Dzelzceļš sliedes ar pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Dzelzceļš sliedes ar izejas signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Dzelzceļš sliedes ar kombinētajām signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Dzelzceļš sliedes ar ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Dzelzceļš sliedes ar vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Dzelzceļš sliedes ar bloka un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Dzelzceļš sliedes ar bloka un izejas signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Dzelzceļš sliedes ar bloka un kombinētajām signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Dzelzceļš sliedes ar bloka un ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Dzelzceļš sliedes ar bloka un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Dzelzceļš sliedes ar izejas un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Dzelzceļš sliedes ar kombinētajām un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Dzelzceļš sliedes ar ceļu un pirmssignālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Dzelzceļš sliedes ar vienvirziena ceļu un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK :Dzelzceļa sliedes +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Dzelzceļa sliedes ar bloku signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Dzelzceļa sliedes ar pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Dzelzceļa sliedes ar izejas signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Dzelzceļa sliedes ar kombinētajām signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Dzelzceļa sliedes ar ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Dzelzceļa sliedes ar vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Dzelzceļa sliedes ar bloku un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Dzelzceļa sliedes ar bloku un izejas signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Dzelzceļa sliedes ar bloku un kombinētajām signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Dzelzceļa sliedes ar bloku un ceļu signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Dzelzceļa sliedes ar bloka un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Dzelzceļa sliedes ar izejas un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Dzelzceļa sliedes ar kombinētajām un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Dzelzceļa sliedes ar ceļu un pirmssignālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Dzelzceļa sliedes ar vienvirziena un pirmssignālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Dzelzceļa sliedes ar izejas un kombinētajām signālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Dzelzceļa sliedes ar izejas un ceļa signālierīcēm STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Dzelzceļa sliedes ar izejas un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Dzelzceļš sliedes ar kombinētajām un ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Dzelzceļš sliedes ar kombinētajām un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Dzelzceļš sliedes ar ceļa un vienvirziena ceļa signālierīcēm -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Dzelzceļš vilcienu depo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Dzelzceļa sliedes ar kombinētajām un ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Dzelzceļa sliedes ar kombinētajām un vienvirziena ceļa signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Dzelzceļa sliedes ar ceļu un vienvirziena ceļu signālierīcēm +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Dzelzceļa vilcienu depo STR_LAI_ROAD_DESCRIPTION_ROAD :Ceļš STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Ceļš ar ielu apgaismojumu @@ -2751,7 +2751,7 @@ STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulāc STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Spēles tikšķu skaits, ko simulēt vienā sekundē. STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafikas kadru ātrums: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Sekundē renderēto video kadru skaits. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Pašreizējās spēles ātruma pakāpe: {DECIMAL}× STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Cik ātri spēle šobrīd iet salīdzinot ar standarta ātrumu. STR_FRAMERATE_CURRENT :{WHITE}Pašreizējais STR_FRAMERATE_AVERAGE :{WHITE}Vidējais @@ -2997,7 +2997,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Iet pie STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Iepriekšējais gariņš STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Iet pie iepriekšējā parastā gariņa, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Atlasītā gariņa attēlojums. To attēlojot, izkārtojums netiek ievērots -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības. Ctrl+klikšķis, lai vienā piegājienā pārvietotu gariņu par astoņām vienībām STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Atiestatīt relatīvi STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Pāriestatīt paršreizējo relatīvo nobīdi STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X nobīde: {NUM}, Y nobīde: {NUM} (absolūta) From f6223f8ac266f75fdc55f2d9daf0f8574235844a Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 19 May 2020 17:42:29 +0200 Subject: [PATCH 108/601] Fix #8161, e31def197: Lang files may have LF EOL (#8163) --- media/baseset/translations.vbs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs index 8632ef0697..c167886930 100644 --- a/media/baseset/translations.vbs +++ b/media/baseset/translations.vbs @@ -65,11 +65,12 @@ Sub Lookup(ini_key, str_id, outfile) Dim f Set f = CreateObject("ADODB.Stream") f.Charset = "utf-8" + f.LineSeparator = 10 ' Assume lines end with \n even for \r\n files f.Open f.LoadFromFile(file.Path) Do Until f.EOS - line = f.ReadText(-2) + line = Replace(f.ReadText(-2), Chr(13), "") ' Read a line and remove any \r If InStr(1, line, "##isocode ") = 1 Then p = Split(line) From 587d8e716b83050dab52da831afb9286589880ae Mon Sep 17 00:00:00 2001 From: Yexo Date: Tue, 19 May 2020 20:01:09 +0200 Subject: [PATCH 109/601] Fix #8155: Roadtype speed limit in toolbar dropdown in scenario editor was doubled --- src/road_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 45ab0f6f8b..4c6e9df869 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1359,7 +1359,7 @@ DropDownList GetScenRoadTypeDropDownList(RoadTramTypes rtts) DropDownListIconItem *item = new DropDownListIconItem(rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt)); item->SetDimension(d); item->SetParam(0, rti->strings.menu_text); - item->SetParam(1, rti->max_speed); + item->SetParam(1, rti->max_speed / 2); list.emplace_back(item); } From 6a8b02609fc0abcd547f3a6af21cd8dd09763cb3 Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 19 May 2020 22:21:11 +0200 Subject: [PATCH 110/601] Fix e3511ec: [AzurePipeline] Don't loop infinitely on errors (#8165) --- azure-pipelines/manifest.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines/manifest.sh b/azure-pipelines/manifest.sh index 730a09283f..2703b37e56 100755 --- a/azure-pipelines/manifest.sh +++ b/azure-pipelines/manifest.sh @@ -65,6 +65,7 @@ output_files() { if [ ! -e ${FOLDER}/${filename}.md5sum ] || [ ! -e ${FOLDER}/${filename}.sha1sum ] || [ ! -e ${FOLDER}/${filename}.sha256sum ]; then echo "ERROR: missing checksum file for ${filename}" 1>&2 error="y" + shift continue fi From 82572754ddf188b9a97dc2dc6902e9859f37c5a1 Mon Sep 17 00:00:00 2001 From: dP Date: Mon, 18 May 2020 18:50:12 +0300 Subject: [PATCH 111/601] Fix: Trees disappear completely after a few years when they're not allowed to spread --- src/tree_cmd.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 012904fdce..cdc9869207 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -632,6 +632,13 @@ static void TileLoopTreesAlps(TileIndex tile) MarkTileDirtyByTile(tile); } +static bool CanPlantExtraTrees(TileIndex tile) +{ + return ((_settings_game.game_creation.landscape == LT_TROPIC && GetTropicZone(tile) == TROPICZONE_RAINFOREST) ? + _settings_game.construction.extra_tree_placement != ETP_NONE : + _settings_game.construction.extra_tree_placement == ETP_ALL); +} + static void TileLoop_Trees(TileIndex tile) { if (GetTreeGround(tile) == TREE_GROUND_SHORE) { @@ -682,12 +689,7 @@ static void TileLoop_Trees(TileIndex tile) FALLTHROUGH; case 2: { // add a neighbouring tree - /* Don't plant extra trees if that's not allowed. */ - if ((_settings_game.game_creation.landscape == LT_TROPIC && GetTropicZone(tile) == TROPICZONE_RAINFOREST) ? - _settings_game.construction.extra_tree_placement == ETP_NONE : - _settings_game.construction.extra_tree_placement != ETP_ALL) { - break; - } + if (!CanPlantExtraTrees(tile)) break; TreeType treetype = GetTreeType(tile); @@ -715,6 +717,9 @@ static void TileLoop_Trees(TileIndex tile) /* more than one tree, delete it */ AddTreeCount(tile, -1); SetTreeGrowth(tile, 3); + } else if (!CanPlantExtraTrees(tile)) { + /* if trees can't spread just plant a new one to prevent deforestation */ + SetTreeGrowth(tile, 0); } else { /* just one tree, change type into MP_CLEAR */ switch (GetTreeGround(tile)) { From 7309bdec48c70499301eb579991c2db6f7ef1d99 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 20 May 2020 19:45:39 +0200 Subject: [PATCH 112/601] Update: Translations from eints latvian: 9 changes by Tranzistors --- src/lang/latvian.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index dc546adf67..821f065efe 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1253,7 +1253,7 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :Lauj uzņēmumi STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Atļaut pirkt pārvadājumu izņēmuma tiesības: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ja uzņēmums pērk pārvadājumu izņēmuma tiesības pilsētā, pretinieku stacijas (pasažieru un kravas) veselu gadu nesaņems nekādu kravu STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Atļaut ēku finansēšanu: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Atļauj uzņēmumiem dot naudu pilsētām jaunu ēku finansēšanai +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Atļauj uzņēmumiem dot naudu apdzīvotām vietām jaunu ēku finansēšanai STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Atļaut finansēt vietējo ceļu atjaunošanu: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Atļaut uzņēmumiem dot pilsētām naudu ceļu rekonstrukcijai, lai kaitētu ceļu pakalpojumiem pilsētās STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Atļaut pārsūtīt naudu citiem uzņēmumiem: {STRING} @@ -1641,12 +1641,12 @@ STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :mazs STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :vidējs STR_CONFIG_SETTING_TOWN_GROWTH_FAST :liels STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :ļoti liels -STR_CONFIG_SETTING_LARGER_TOWNS :Pilsētu daļa kas kļūs par lielpilsētām: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Pilsētu daudzums kas kļūs par lielpilsētām, tādēļ tās sākumā ir lielākas un attīstās ātrāk +STR_CONFIG_SETTING_LARGER_TOWNS :Apdzīvotu vietu proporcija, kas kļūs par pilsētām: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Apdzīvotu vietu daudzums kas kļūs par pilsētām; tādēļ apdzīvota vieta, kas sākumā ir lielāka, augs straujāk STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 pret {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :neviena -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Lielpilsētu sākuma lieluma reizinātājs: {STRING} -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Lielpilsētu vidējais lielums attiecībā pret parastām pilsētām spēles sākumā +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Pilsētu sākuma lieluma reizinātājs: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Pilsētu vidējais lielums attiecībā pret parastām apdzīvotām vietām spēles sākumā STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Atjaunināt sadales grafu ik pa {STRING}{NBSP}dien{P 0:2 ai ām ām} STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Laiks starp secīgām saišu grafa pārrēķināšanām. Katra pārrēķināšana izskaitļo plānos vienai grafa komponentei. Tas nozīmē, ka šim iestatījumam vērtība X nenozīmē, ka viss grafs tiks atjaunināts ir pēc X dienām. Tikai dažas komponentes tiks pārrēķinātas. Jo mazāka iestatītā vērtība, jo vairāk laika CPU pavadīs rēķinot. Jo lielāka iestatītā vērtība, jo ilgāk nevarēs sākties kravu izplatīšana jaunos maršrutos. @@ -2503,7 +2503,7 @@ STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lidostas STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}{NUM}. izkārtojums STR_AIRPORT_SMALL :Maza -STR_AIRPORT_CITY :Lielpilsēta +STR_AIRPORT_CITY :Pilsēta STR_AIRPORT_METRO :Metropolitēns STR_AIRPORT_INTERNATIONAL :Starptautiskā lidosta STR_AIRPORT_COMMUTER :Ikdienas satiksme @@ -2579,8 +2579,8 @@ STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Vidējs STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Liels STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Nejaušs STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Izvēlēties pilsētas izmērus -STR_FOUND_TOWN_CITY :{BLACK}Lielpilsēta -STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Lielpilsētas attīstās ātrāk kā pilsētas{}Atkarībā no iestatījumiem, dibināšanas brīdī tās ir lielākas +STR_FOUND_TOWN_CITY :{BLACK}Pilsēta +STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Pilsētas aug straujāk kā parastas apdzīvotās vietas{}Atkarībā no iestatījumiem, dibināšanas brīdī pilsētas ir lielākas STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Pilsētas ceļu izskats: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Atlasīt šajā pilsētā lietojamo ceļu izkārtojumu @@ -3108,7 +3108,7 @@ STR_TOWN_POPULATION :{BLACK}Pasaules # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (lielpilsēta) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (pilsēta) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Iedzīvotāji: {ORANGE}{COMMA}{BLACK} Mājas: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} iepriekšējā mēnesī: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Krava nepieciešama pilsētas attīstībai: From f2b40f40aa7cbccaed20ec52b41d4704a45d8db1 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:44 +0200 Subject: [PATCH 113/601] Codechange: Replace SmallPair with std::pair. std::pair is already the smallest possible pair, and it already handles non-POD types correctly. --- src/core/smallmap_type.hpp | 30 ++++++++---------------------- src/fontcache.cpp | 4 ++-- src/linkgraph/linkgraph.h | 11 ++++++----- src/linkgraph/linkgraphjob.h | 4 ++-- src/newgrf.cpp | 2 +- src/newgrf_config.cpp | 4 ++-- src/newgrf_debug_gui.cpp | 2 +- src/newgrf_text.cpp | 2 +- src/vehicle.cpp | 2 +- 9 files changed, 24 insertions(+), 37 deletions(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 478e7515a6..931a4848b3 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -11,40 +11,26 @@ #define SMALLMAP_TYPE_HPP #include "smallvec_type.hpp" +#include /** - * Simple pair of data. Both types have to be POD ("Plain Old Data")! - * @tparam T Key type. - * @tparam U Value type. - */ -template -struct SmallPair { - T first; - U second; - - /** Initializes this Pair with data */ - inline SmallPair(const T &first, const U &second) : first(first), second(second) { } - SmallPair() = default; -}; - -/** - * Implementation of simple mapping class. Both types have to be POD ("Plain Old Data")! - * It has inherited accessors from SmallVector(). + * Implementation of simple mapping class. + * It has inherited accessors from std::vector(). * @tparam T Key type. * @tparam U Value type. * @tparam S Unit of allocation. * - * @see SmallVector + * @see std::vector */ template -struct SmallMap : std::vector > { - typedef ::SmallPair Pair; +struct SmallMap : std::vector > { + typedef std::pair Pair; typedef Pair *iterator; typedef const Pair *const_iterator; - /** Creates new SmallMap. Data are initialized in SmallVector constructor */ + /** Creates new SmallMap. Data are initialized in std::vector constructor */ inline SmallMap() { } - /** Data are freed in SmallVector destructor */ + /** Data are freed in std::vector destructor */ inline ~SmallMap() { } /** diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 9102f356ad..6cdac1fab8 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -211,7 +211,7 @@ protected: int req_size; ///< Requested font size. int used_size; ///< Used font size. - typedef SmallMap > FontTable; ///< Table with font table cache + typedef SmallMap > FontTable; ///< Table with font table cache FontTable font_tables; ///< Cached font tables. /** Container for information about a glyph. */ @@ -434,7 +434,7 @@ const void *TrueTypeFontCache::GetFontTable(uint32 tag, size_t &length) const void *result = this->InternalGetFontTable(tag, length); - this->font_tables.Insert(tag, SmallPair(length, result)); + this->font_tables.Insert(tag, std::pair(length, result)); return result; } diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h index 997d946230..7362b7d568 100644 --- a/src/linkgraph/linkgraph.h +++ b/src/linkgraph/linkgraph.h @@ -17,6 +17,7 @@ #include "../cargotype.h" #include "../date_func.h" #include "linkgraph_type.h" +#include struct SaveLoad; class LinkGraph; @@ -188,20 +189,20 @@ public: * to return something that implements operator->, but isn't a pointer * from operator->. A fake pointer. */ - class FakePointer : public SmallPair { + class FakePointer : public std::pair { public: /** * Construct a fake pointer from a pair of NodeID and edge. * @param pair Pair to be "pointed" to (in fact shallow-copied). */ - FakePointer(const SmallPair &pair) : SmallPair(pair) {} + FakePointer(const std::pair &pair) : std::pair(pair) {} /** * Retrieve the pair by operator->. * @return Pair being "pointed" to. */ - SmallPair *operator->() { return this; } + std::pair *operator->() { return this; } }; public: @@ -266,9 +267,9 @@ public: * Dereference with operator*. * @return Pair of current target NodeID and edge object. */ - SmallPair operator*() const + std::pair operator*() const { - return SmallPair(this->current, Tedge_wrapper(this->base[this->current])); + return std::pair(this->current, Tedge_wrapper(this->base[this->current])); } /** diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h index 9344ea2462..cd7ece4b1e 100644 --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -160,9 +160,9 @@ public: * @return Pair of the edge currently pointed to and the ID of its * other end. */ - SmallPair operator*() const + std::pair operator*() const { - return SmallPair(this->current, Edge(this->base[this->current], this->base_anno[this->current])); + return std::pair(this->current, Edge(this->base[this->current], this->base_anno[this->current])); } /** diff --git a/src/newgrf.cpp b/src/newgrf.cpp index c422fe99c0..c1b8364811 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8113,7 +8113,7 @@ static bool ChangeGRFParamValueNames(ByteReader *buf) byte langid = buf->ReadByte(); const char *name_string = buf->ReadString(); - SmallPair *val_name = _cur_parameter->value_names.Find(id); + std::pair *val_name = _cur_parameter->value_names.Find(id); if (val_name != _cur_parameter->value_names.End()) { AddGRFTextToList(&val_name->second, langid, _cur.grfconfig->ident.grfid, false, name_string); } else { diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index a0960350da..605bceca5b 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -262,7 +262,7 @@ GRFParameterInfo::GRFParameterInfo(GRFParameterInfo &info) : complete_labels(info.complete_labels) { for (uint i = 0; i < info.value_names.size(); i++) { - SmallPair *data = info.value_names.data() + i; + std::pair *data = info.value_names.data() + i; this->value_names.Insert(data->first, DuplicateGRFText(data->second)); } } @@ -273,7 +273,7 @@ GRFParameterInfo::~GRFParameterInfo() CleanUpGRFText(this->name); CleanUpGRFText(this->desc); for (uint i = 0; i < this->value_names.size(); i++) { - SmallPair *data = this->value_names.data() + i; + std::pair *data = this->value_names.data() + i; CleanUpGRFText(data->second); } } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index a8ba3d5260..19757646d7 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -804,7 +804,7 @@ GrfSpecFeature GetGrfSpecFeature(VehicleType type) /** Window used for aligning sprites. */ struct SpriteAlignerWindow : Window { - typedef SmallPair XyOffs; ///< Pair for x and y offsets of the sprite before alignment. First value contains the x offset, second value y offset. + typedef std::pair XyOffs; ///< Pair for x and y offsets of the sprite before alignment. First value contains the x offset, second value y offset. SpriteID current_sprite; ///< The currently shown sprite. Scrollbar *vscroll; diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index c08877198d..1345119446 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -196,7 +196,7 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { /** Clean everything up. */ ~UnmappedChoiceList() { - for (SmallPair p : this->strings) { + for (std::pair p : this->strings) { free(p.second); } } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index ae5af64a1a..72ef5a31ad 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2278,7 +2278,7 @@ void Vehicle::GetConsistFreeCapacities(SmallMap &capacities) cons { for (const Vehicle *v = this; v != nullptr; v = v->Next()) { if (v->cargo_cap == 0) continue; - SmallPair *pair = capacities.Find(v->cargo_type); + std::pair *pair = capacities.Find(v->cargo_type); if (pair == capacities.End()) { capacities.push_back({v->cargo_type, v->cargo_cap - v->cargo.StoredCount()}); } else { From 43cd892e0c2c012355d7eb6d47cfa4ad4b7e68eb Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:47 +0200 Subject: [PATCH 114/601] Codechange: Replace custom linked list for GRF texts with STL vectors and strings. --- src/network/network_gamelist.cpp | 6 - src/network/network_udp.cpp | 14 +-- src/newgrf.cpp | 22 ++-- src/newgrf_config.cpp | 93 ++++----------- src/newgrf_config.h | 34 +++--- src/newgrf_text.cpp | 196 +++++++++---------------------- src/newgrf_text.h | 27 +++-- 7 files changed, 131 insertions(+), 261 deletions(-) diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp index ff744e8757..dfe07bdbbb 100644 --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -175,21 +175,15 @@ void NetworkAfterNewGRFScan() /* Don't know the GRF, so mark game incompatible and the (possibly) * already resolved name for this GRF (another server has sent the * name of the GRF already. */ - c->name->Release(); c->name = FindUnknownGRFName(c->ident.grfid, c->ident.md5sum, true); - c->name->AddRef(); c->status = GCS_NOT_FOUND; /* If we miss a file, we're obviously incompatible. */ item->info.compatible = false; } else { c->filename = f->filename; - c->name->Release(); c->name = f->name; - c->name->AddRef(); - c->info->Release(); c->info = f->info; - c->info->AddRef(); c->status = GCS_UNKNOWN; } } diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 90b99ec44b..03344fe579 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -426,9 +426,9 @@ void ClientNetworkUDPSocketHandler::Receive_SERVER_NEWGRFS(Packet *p, NetworkAdd /* Try to find the GRFTextWrapper for the name of this GRF ID and MD5sum tuple. * If it exists and not resolved yet, then name of the fake GRF is * overwritten with the name from the reply. */ - GRFTextWrapper *unknown_name = FindUnknownGRFName(c.grfid, c.md5sum, false); - if (unknown_name != nullptr && strcmp(GetGRFStringFromGRFText(unknown_name->text), UNKNOWN_GRF_NAME_PLACEHOLDER) == 0) { - AddGRFTextToList(&unknown_name->text, name); + GRFTextWrapper unknown_name = FindUnknownGRFName(c.grfid, c.md5sum, false); + if (unknown_name && strcmp(GetGRFStringFromGRFText(unknown_name), UNKNOWN_GRF_NAME_PLACEHOLDER) == 0) { + AddGRFTextToList(unknown_name, name); } } } @@ -441,21 +441,13 @@ void ClientNetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig(GRFCo /* Don't know the GRF, so mark game incompatible and the (possibly) * already resolved name for this GRF (another server has sent the * name of the GRF already */ - config->name->Release(); config->name = FindUnknownGRFName(config->ident.grfid, config->ident.md5sum, true); - config->name->AddRef(); config->status = GCS_NOT_FOUND; } else { config->filename = f->filename; - config->name->Release(); config->name = f->name; - config->name->AddRef(); - config->info->Release(); config->info = f->info; - config->info->AddRef(); - config->url->Release(); config->url = f->url; - config->url->AddRef(); } SetBit(config->flags, GCF_COPY); } diff --git a/src/newgrf.cpp b/src/newgrf.cpp index c1b8364811..4ada53a0a4 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6720,11 +6720,11 @@ static void ScanInfo(ByteReader *buf) /* GRF IDs starting with 0xFF are reserved for internal TTDPatch use */ if (GB(grfid, 0, 8) == 0xFF) SetBit(_cur.grfconfig->flags, GCF_SYSTEM); - AddGRFTextToList(&_cur.grfconfig->name->text, 0x7F, grfid, false, name); + AddGRFTextToList(_cur.grfconfig->name, 0x7F, grfid, false, name); if (buf->HasData()) { const char *info = buf->ReadString(); - AddGRFTextToList(&_cur.grfconfig->info->text, 0x7F, grfid, true, info); + AddGRFTextToList(_cur.grfconfig->info, 0x7F, grfid, true, info); } /* GLS_INFOSCAN only looks for the action 8, so we can skip the rest of the file */ @@ -7806,21 +7806,21 @@ static void TranslateGRFStrings(ByteReader *buf) /** Callback function for 'INFO'->'NAME' to add a translation to the newgrf name. */ static bool ChangeGRFName(byte langid, const char *str) { - AddGRFTextToList(&_cur.grfconfig->name->text, langid, _cur.grfconfig->ident.grfid, false, str); + AddGRFTextToList(_cur.grfconfig->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'DESC' to add a translation to the newgrf description. */ static bool ChangeGRFDescription(byte langid, const char *str) { - AddGRFTextToList(&_cur.grfconfig->info->text, langid, _cur.grfconfig->ident.grfid, true, str); + AddGRFTextToList(_cur.grfconfig->info, langid, _cur.grfconfig->ident.grfid, true, str); return true; } /** Callback function for 'INFO'->'URL_' to set the newgrf url. */ static bool ChangeGRFURL(byte langid, const char *str) { - AddGRFTextToList(&_cur.grfconfig->url->text, langid, _cur.grfconfig->ident.grfid, false, str); + AddGRFTextToList(_cur.grfconfig->url, langid, _cur.grfconfig->ident.grfid, false, str); return true; } @@ -7922,14 +7922,14 @@ static GRFParameterInfo *_cur_parameter; ///< The parameter which info is curren /** Callback function for 'INFO'->'PARAM'->param_num->'NAME' to set the name of a parameter. */ static bool ChangeGRFParamName(byte langid, const char *str) { - AddGRFTextToList(&_cur_parameter->name, langid, _cur.grfconfig->ident.grfid, false, str); + AddGRFTextToList(_cur_parameter->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'PARAM'->param_num->'DESC' to set the description of a parameter. */ static bool ChangeGRFParamDescription(byte langid, const char *str) { - AddGRFTextToList(&_cur_parameter->desc, langid, _cur.grfconfig->ident.grfid, true, str); + AddGRFTextToList(_cur_parameter->desc, langid, _cur.grfconfig->ident.grfid, true, str); return true; } @@ -8113,12 +8113,12 @@ static bool ChangeGRFParamValueNames(ByteReader *buf) byte langid = buf->ReadByte(); const char *name_string = buf->ReadString(); - std::pair *val_name = _cur_parameter->value_names.Find(id); + std::pair *val_name = _cur_parameter->value_names.Find(id); if (val_name != _cur_parameter->value_names.End()) { - AddGRFTextToList(&val_name->second, langid, _cur.grfconfig->ident.grfid, false, name_string); + AddGRFTextToList(val_name->second, langid, _cur.grfconfig->ident.grfid, false, name_string); } else { - GRFText *list = nullptr; - AddGRFTextToList(&list, langid, _cur.grfconfig->ident.grfid, false, name_string); + GRFTextList list; + AddGRFTextToList(list, langid, _cur.grfconfig->ident.grfid, false, name_string); _cur_parameter->value_names.Insert(id, list); } diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 605bceca5b..8452d08299 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -21,23 +21,13 @@ #include "textfile_gui.h" #include "thread.h" #include "newgrf_config.h" +#include "newgrf_text.h" #include "fileio_func.h" #include "fios.h" #include "safeguards.h" -/** Create a new GRFTextWrapper. */ -GRFTextWrapper::GRFTextWrapper() : - text(nullptr) -{ -} - -/** Cleanup a GRFTextWrapper object. */ -GRFTextWrapper::~GRFTextWrapper() -{ - CleanUpGRFText(this->text); -} /** * Create a new GRFConfig. @@ -45,15 +35,9 @@ GRFTextWrapper::~GRFTextWrapper() * is copied so the original string isn't needed after the constructor. */ GRFConfig::GRFConfig(const char *filename) : - name(new GRFTextWrapper()), - info(new GRFTextWrapper()), - url(new GRFTextWrapper()), num_valid_params(lengthof(param)) { if (filename != nullptr) this->filename = stredup(filename); - this->name->AddRef(); - this->info->AddRef(); - this->url->AddRef(); } /** @@ -79,9 +63,6 @@ GRFConfig::GRFConfig(const GRFConfig &config) : MemCpyT(this->original_md5sum, config.original_md5sum, lengthof(this->original_md5sum)); MemCpyT(this->param, config.param, lengthof(this->param)); if (config.filename != nullptr) this->filename = stredup(config.filename); - this->name->AddRef(); - this->info->AddRef(); - this->url->AddRef(); if (config.error != nullptr) this->error = new GRFError(*config.error); for (uint i = 0; i < config.param_info.size(); i++) { if (config.param_info[i] == nullptr) { @@ -100,9 +81,6 @@ GRFConfig::~GRFConfig() free(this->filename); delete this->error; } - this->name->Release(); - this->info->Release(); - this->url->Release(); for (uint i = 0; i < this->param_info.size(); i++) delete this->param_info[i]; } @@ -125,7 +103,7 @@ void GRFConfig::CopyParams(const GRFConfig &src) */ const char *GRFConfig::GetName() const { - const char *name = GetGRFStringFromGRFText(this->name->text); + const char *name = GetGRFStringFromGRFText(this->name); return StrEmpty(name) ? this->filename : name; } @@ -135,7 +113,7 @@ const char *GRFConfig::GetName() const */ const char *GRFConfig::GetDescription() const { - return GetGRFStringFromGRFText(this->info->text); + return GetGRFStringFromGRFText(this->info); } /** @@ -144,7 +122,7 @@ const char *GRFConfig::GetDescription() const */ const char *GRFConfig::GetURL() const { - return GetGRFStringFromGRFText(this->url->text); + return GetGRFStringFromGRFText(this->url); } /** Set the default value for all parameters as specified by action14. */ @@ -232,8 +210,8 @@ GRFError::~GRFError() * @param nr The newgrf parameter that is changed. */ GRFParameterInfo::GRFParameterInfo(uint nr) : - name(nullptr), - desc(nullptr), + name(), + desc(), type(PTYPE_UINT_ENUM), min_value(0), max_value(UINT32_MAX), @@ -241,6 +219,7 @@ GRFParameterInfo::GRFParameterInfo(uint nr) : param_nr(nr), first_bit(0), num_bit(32), + value_names(), complete_labels(false) {} @@ -250,8 +229,8 @@ GRFParameterInfo::GRFParameterInfo(uint nr) : * @param info The GRFParameterInfo object to make a copy of. */ GRFParameterInfo::GRFParameterInfo(GRFParameterInfo &info) : - name(DuplicateGRFText(info.name)), - desc(DuplicateGRFText(info.desc)), + name(info.name), + desc(info.desc), type(info.type), min_value(info.min_value), max_value(info.max_value), @@ -259,23 +238,9 @@ GRFParameterInfo::GRFParameterInfo(GRFParameterInfo &info) : param_nr(info.param_nr), first_bit(info.first_bit), num_bit(info.num_bit), + value_names(info.value_names), complete_labels(info.complete_labels) { - for (uint i = 0; i < info.value_names.size(); i++) { - std::pair *data = info.value_names.data() + i; - this->value_names.Insert(data->first, DuplicateGRFText(data->second)); - } -} - -/** Cleanup all parameter info. */ -GRFParameterInfo::~GRFParameterInfo() -{ - CleanUpGRFText(this->name); - CleanUpGRFText(this->desc); - for (uint i = 0; i < this->value_names.size(); i++) { - std::pair *data = this->value_names.data() + i; - CleanUpGRFText(data->second); - } } /** @@ -598,12 +563,8 @@ compatible_grf: free(c->filename); c->filename = stredup(f->filename); memcpy(c->ident.md5sum, f->ident.md5sum, sizeof(c->ident.md5sum)); - c->name->Release(); c->name = f->name; - c->name->AddRef(); - c->info->Release(); c->info = f->name; - c->info->AddRef(); c->error = nullptr; c->version = f->version; c->min_loadable_version = f->min_loadable_version; @@ -686,7 +647,7 @@ bool GRFFileScanner::AddFile(const char *filename, size_t basepath_length, const _modal_progress_paint_mutex.lock(); const char *name = nullptr; - if (c->name != nullptr) name = GetGRFStringFromGRFText(c->name->text); + if (c->name != nullptr) name = GetGRFStringFromGRFText(c->name); if (name == nullptr) name = c->filename; UpdateNewGRFScanStatus(this->num_scanned, name); @@ -820,8 +781,12 @@ const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 /** Structure for UnknownGRFs; this is a lightweight variant of GRFConfig */ struct UnknownGRF : public GRFIdentifier { - UnknownGRF *next; ///< The next unknown GRF. - GRFTextWrapper *name; ///< Name of the GRF. + GRFTextWrapper name; ///< Name of the GRF. + + UnknownGRF() = default; + UnknownGRF(const UnknownGRF &other) = default; + UnknownGRF(UnknownGRF &&other) = default; + UnknownGRF(uint32 grfid, const uint8 *_md5sum) : GRFIdentifier(grfid, _md5sum), name(new GRFTextList) {} }; /** @@ -841,30 +806,24 @@ struct UnknownGRF : public GRFIdentifier { * and MD5 checksum or nullptr when it does not exist and create is false. * This value must NEVER be freed by the caller. */ -GRFTextWrapper *FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create) +GRFTextWrapper FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create) { - UnknownGRF *grf; - static UnknownGRF *unknown_grfs = nullptr; + static std::vector unknown_grfs; - for (grf = unknown_grfs; grf != nullptr; grf = grf->next) { - if (grf->grfid == grfid) { - if (memcmp(md5sum, grf->md5sum, sizeof(grf->md5sum)) == 0) return grf->name; + for (const auto &grf : unknown_grfs) { + if (grf.grfid == grfid) { + if (memcmp(md5sum, grf.md5sum, sizeof(grf.md5sum)) == 0) return grf.name; } } if (!create) return nullptr; - grf = CallocT(1); - grf->grfid = grfid; - grf->next = unknown_grfs; - grf->name = new GRFTextWrapper(); - grf->name->AddRef(); + unknown_grfs.emplace_back(grfid, md5sum); + UnknownGRF &grf = unknown_grfs.back(); - AddGRFTextToList(&grf->name->text, UNKNOWN_GRF_NAME_PLACEHOLDER); - memcpy(grf->md5sum, md5sum, sizeof(grf->md5sum)); + AddGRFTextToList(grf.name, UNKNOWN_GRF_NAME_PLACEHOLDER); - unknown_grfs = grf; - return grf->name; + return grf.name; } /** diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 8c3b2ecdf4..2c8a8559dd 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -16,6 +16,7 @@ #include "misc/countedptr.hpp" #include "fileio_type.h" #include "textfile_type.h" +#include "newgrf_text.h" /** GRF config bit flags */ enum GCF_Flags { @@ -83,6 +84,16 @@ struct GRFIdentifier { uint32 grfid; ///< GRF ID (defined by Action 0x08) uint8 md5sum[16]; ///< MD5 checksum of file to distinguish files with the same GRF ID (eg. newer version of GRF) + GRFIdentifier() = default; + GRFIdentifier(const GRFIdentifier &other) = default; + GRFIdentifier(GRFIdentifier &&other) = default; + GRFIdentifier(uint32 grfid, const uint8 *md5sum) : grfid(grfid) + { + MemCpyT(this->md5sum, md5sum, lengthof(this->md5sum)); + } + + GRFIdentifier& operator =(const GRFIdentifier &other) = default; + /** * Does the identification match the provided values? * @param grfid Expected grfid. @@ -121,9 +132,8 @@ enum GRFParameterType { struct GRFParameterInfo { GRFParameterInfo(uint nr); GRFParameterInfo(GRFParameterInfo &info); - ~GRFParameterInfo(); - struct GRFText *name; ///< The name of this parameter - struct GRFText *desc; ///< The description of this parameter + GRFTextList name; ///< The name of this parameter + GRFTextList desc; ///< The description of this parameter GRFParameterType type; ///< The type of this parameter uint32 min_value; ///< The minimal value this parameter can have uint32 max_value; ///< The maximal value of this parameter @@ -131,7 +141,7 @@ struct GRFParameterInfo { byte param_nr; ///< GRF parameter to store content in byte first_bit; ///< First bit to use in the GRF parameter byte num_bit; ///< Number of bits to use for this parameter - SmallMap value_names; ///< Names for each value. + SmallMap value_names; ///< Names for each value. bool complete_labels; ///< True if all values have a label. uint32 GetValue(struct GRFConfig *config) const; @@ -139,14 +149,6 @@ struct GRFParameterInfo { void Finalize(); }; -/** Reference counted wrapper around a GRFText pointer. */ -struct GRFTextWrapper : public SimpleCountedObject { - struct GRFText *text; ///< The actual text - - GRFTextWrapper(); - ~GRFTextWrapper(); -}; - /** Information about GRF, used in the game and (part of it) in savegames */ struct GRFConfig : ZeroedMemoryAllocator { GRFConfig(const char *filename = nullptr); @@ -156,9 +158,9 @@ struct GRFConfig : ZeroedMemoryAllocator { GRFIdentifier ident; ///< grfid and md5sum to uniquely identify newgrfs uint8 original_md5sum[16]; ///< MD5 checksum of original file if only a 'compatible' file was loaded char *filename; ///< Filename - either with or without full path - GRFTextWrapper *name; ///< NOSAVE: GRF name (Action 0x08) - GRFTextWrapper *info; ///< NOSAVE: GRF info (author, copyright, ...) (Action 0x08) - GRFTextWrapper *url; ///< NOSAVE: URL belonging to this GRF. + GRFTextWrapper name; ///< NOSAVE: GRF name (Action 0x08) + GRFTextWrapper info; ///< NOSAVE: GRF info (author, copyright, ...) (Action 0x08) + GRFTextWrapper url; ///< NOSAVE: URL belonging to this GRF. GRFError *error; ///< NOSAVE: Error/Warning during GRF loading (Action 0x0B) uint32 version; ///< NOSAVE: Version a NewGRF can set so only the newest NewGRF is shown @@ -229,7 +231,7 @@ void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFC /** For communication about GRFs over the network */ #define UNKNOWN_GRF_NAME_PLACEHOLDER "" -GRFTextWrapper *FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create); +GRFTextWrapper FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create); void UpdateNewGRFScanStatus(uint num, const char *name); bool UpdateNewGRFConfigPalette(int32 p1 = 0); diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 1345119446..4f1a6ffd49 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -60,89 +60,6 @@ enum GRFExtendedLanguages { GRFLX_UNSPECIFIED = 0x7F, }; -/** - * Element of the linked list. - * Each of those elements represent the string, - * but according to a different lang. - */ -struct GRFText { -public: - /** - * Allocate, and assign a new GRFText with the given text. - * As these strings can have string terminations in them, e.g. - * due to "choice lists" we (sometimes) cannot rely on detecting - * the length by means of strlen. Also, if the length of already - * known not scanning the whole string is more efficient. - * @param langid The language of the text. - * @param text The text to store in the new GRFText. - * @param len The length of the text. - */ - static GRFText *New(byte langid, const char *text, size_t len) - { - return new (len) GRFText(langid, text, len); - } - - /** - * Create a copy of this GRFText. - * @param orig the grftext to copy. - * @return an exact copy of the given text. - */ - static GRFText *Copy(GRFText *orig) - { - return GRFText::New(orig->langid, orig->text, orig->len); - } - - /** - * Helper allocation function to disallow something. - * Don't allow simple 'news'; they wouldn't have enough memory. - * @param size the amount of space not to allocate. - */ - void *operator new(size_t size) - { - NOT_REACHED(); - } - - /** - * Free the memory we allocated. - * @param p memory to free. - */ - void operator delete(void *p) - { - free(p); - } -private: - /** - * Actually construct the GRFText. - * @param langid_ The language of the text. - * @param text_ The text to store in this GRFText. - * @param len_ The length of the text to store. - */ - GRFText(byte langid_, const char *text_, size_t len_) : next(nullptr), len(len_), langid(langid_) - { - /* We need to use memcpy instead of strcpy due to - * the possibility of "choice lists" and therefore - * intermediate string terminators. */ - memcpy(this->text, text_, len); - } - - /** - * Allocate memory for this class. - * @param size the size of the instance - * @param extra the extra memory for the text - * @return the requested amount of memory for both the instance and the text - */ - void *operator new(size_t size, size_t extra) - { - return MallocT(size + extra); - } - -public: - GRFText *next; ///< The next GRFText in this chain. - size_t len; ///< The length of the stored string, used for copying. - byte langid; ///< The language associated with this GRFText. - char text[]; ///< The actual (translated) text. -}; - /** * Holder of the above structure. @@ -153,7 +70,7 @@ struct GRFTextEntry { uint32 grfid; uint16 stringid; StringID def_string; - GRFText *textholder; + GRFTextList textholder; }; @@ -576,26 +493,23 @@ string_end: } /** - * Add a GRFText to a GRFText list. + * Add a new text to a GRFText list. * @param list The list where the text should be added to. - * @param text_to_add The GRFText to add to the list. + * @param langid The The language of the new text. + * @param text_to_add The text to add to the list. */ -void AddGRFTextToList(GRFText **list, GRFText *text_to_add) +static void AddGRFTextToList(GRFTextList &list, byte langid, const std::string &text_to_add) { - GRFText **ptext, *text; - /* Loop through all languages and see if we can replace a string */ - for (ptext = list; (text = *ptext) != nullptr; ptext = &text->next) { - if (text->langid == text_to_add->langid) { - text_to_add->next = text->next; - *ptext = text_to_add; - delete text; + for (auto &text : list) { + if (text.langid == langid) { + text.text = text_to_add; return; } } /* If a string wasn't replaced, then we must append the new string */ - *ptext = text_to_add; + list.push_back(GRFText{ langid, text_to_add }); } /** @@ -607,14 +521,29 @@ void AddGRFTextToList(GRFText **list, GRFText *text_to_add) * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(struct GRFText **list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextList &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add) { int len; char *translatedtext = TranslateTTDPatchCodes(grfid, langid, allow_newlines, text_to_add, &len); - GRFText *newtext = GRFText::New(langid, translatedtext, len); + std::string newtext(translatedtext, len); free(translatedtext); - AddGRFTextToList(list, newtext); + AddGRFTextToList(list, langid, newtext); +} + +/** + * Add a string to a GRFText list. + * @param list The list where the text should be added to. + * @param langid The language of the new text. + * @param grfid The grfid where this string is defined. + * @param allow_newlines Whether newlines are allowed in this string. + * @param text_to_add The text to add to the list. + * @note All text-codes will be translated. + */ +void AddGRFTextToList(GRFTextWrapper &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add) +{ + if (!list) list.reset(new GRFTextList()); + AddGRFTextToList(*list, langid, grfid, allow_newlines, text_to_add); } /** @@ -623,25 +552,10 @@ void AddGRFTextToList(struct GRFText **list, byte langid, uint32 grfid, bool all * @param list The list where the text should be added to. * @param text_to_add The text to add to the list. */ -void AddGRFTextToList(struct GRFText **list, const char *text_to_add) +void AddGRFTextToList(GRFTextWrapper &list, const char *text_to_add) { - AddGRFTextToList(list, GRFText::New(0x7F, text_to_add, strlen(text_to_add) + 1)); -} - -/** - * Create a copy of this GRFText list. - * @param orig The GRFText list to copy. - * @return A duplicate of the given GRFText. - */ -GRFText *DuplicateGRFText(GRFText *orig) -{ - GRFText *newtext = nullptr; - GRFText **ptext = &newtext; - for (; orig != nullptr; orig = orig->next) { - *ptext = GRFText::Copy(orig); - ptext = &(*ptext)->next; - } - return newtext; + if (!list) list.reset(new GRFTextList()); + AddGRFTextToList(*list, GRFLX_UNSPECIFIED, std::string(text_to_add)); } /** @@ -681,22 +595,20 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne int len; translatedtext = TranslateTTDPatchCodes(grfid, langid_to_add, allow_newlines, text_to_add, &len); - - GRFText *newtext = GRFText::New(langid_to_add, translatedtext, len); - + std::string newtext(translatedtext, len); free(translatedtext); /* If we didn't find our stringid and grfid in the list, allocate a new id */ if (id == _num_grf_texts) _num_grf_texts++; - if (_grf_text[id].textholder == nullptr) { + if (_grf_text[id].textholder.empty()) { _grf_text[id].grfid = grfid; _grf_text[id].stringid = stringid; _grf_text[id].def_string = def_string; } - AddGRFTextToList(&_grf_text[id].textholder, newtext); + AddGRFTextToList(_grf_text[id].textholder, langid_to_add, newtext); - grfmsg(3, "Added 0x%X: grfid %08X string 0x%X lang 0x%X string '%s' (%X)", id, grfid, stringid, newtext->langid, newtext->text, MakeStringID(TEXT_TAB_NEWGRF_START, id)); + grfmsg(3, "Added 0x%X: grfid %08X string 0x%X lang 0x%X string '%s' (%X)", id, grfid, stringid, langid_to_add, newtext.c_str(), MakeStringID(TEXT_TAB_NEWGRF_START, id)); return MakeStringID(TEXT_TAB_NEWGRF_START, id); } @@ -721,26 +633,38 @@ StringID GetGRFStringID(uint32 grfid, StringID stringid) * current language it is returned, otherwise the default translation * is returned. If there is neither a default nor a translation for the * current language nullptr is returned. - * @param text The GRFText to get the string from. + * @param text_list The GRFTextList to get the string from. */ -const char *GetGRFStringFromGRFText(const GRFText *text) +const char *GetGRFStringFromGRFText(const GRFTextList &text_list) { const char *default_text = nullptr; /* Search the list of lang-strings of this stringid for current lang */ - for (; text != nullptr; text = text->next) { - if (text->langid == _currentLangID) return text->text; + for (const auto &text : text_list) { + if (text.langid == _currentLangID) return text.text.c_str(); /* If the current string is English or American, set it as the * fallback language if the specific language isn't available. */ - if (text->langid == GRFLX_UNSPECIFIED || (default_text == nullptr && (text->langid == GRFLX_ENGLISH || text->langid == GRFLX_AMERICAN))) { - default_text = text->text; + if (text.langid == GRFLX_UNSPECIFIED || (default_text == nullptr && (text.langid == GRFLX_ENGLISH || text.langid == GRFLX_AMERICAN))) { + default_text = text.text.c_str(); } } return default_text; } +/** + * Get a C-string from a GRFText-list. If there is a translation for the + * current language it is returned, otherwise the default translation + * is returned. If there is neither a default nor a translation for the + * current language nullptr is returned. + * @param text The GRFTextList to get the string from. + */ +const char *GetGRFStringFromGRFText(const GRFTextWrapper &text) +{ + return text ? GetGRFStringFromGRFText(*text) : nullptr; +} + /** * Get a C-string from a stringid set by a newgrf. */ @@ -782,19 +706,6 @@ bool CheckGrfLangID(byte lang_id, byte grf_version) return (lang_id == _currentLangID || lang_id == GRFLX_UNSPECIFIED); } -/** - * Delete all items of a linked GRFText list. - * @param grftext the head of the list to delete - */ -void CleanUpGRFText(GRFText *grftext) -{ - while (grftext != nullptr) { - GRFText *grftext2 = grftext->next; - delete grftext; - grftext = grftext2; - } -} - /** * House cleaning. * Remove all strings and reset the text counter. @@ -804,10 +715,9 @@ void CleanUpStrings() uint id; for (id = 0; id < _num_grf_texts; id++) { - CleanUpGRFText(_grf_text[id].textholder); _grf_text[id].grfid = 0; _grf_text[id].stringid = 0; - _grf_text[id].textholder = nullptr; + _grf_text[id].textholder.clear(); } _num_grf_texts = 0; diff --git a/src/newgrf_text.h b/src/newgrf_text.h index 709f4dd244..bdd1f1bc95 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -14,26 +14,39 @@ #include "strings_type.h" #include "core/smallvec_type.hpp" #include "table/control_codes.h" +#include +#include +#include /** This character, the thorn ('þ'), indicates a unicode string to NFO. */ static const WChar NFO_UTF8_IDENTIFIER = 0x00DE; +/** A GRF text with associated language ID. */ +struct GRFText { + byte langid; ///< The language associated with this GRFText. + std::string text; ///< The actual (translated) text. +}; + +/** A GRF text with a list of translations. */ +typedef std::vector GRFTextList; +/** Reference counted wrapper around a GRFText pointer. */ +typedef std::shared_ptr GRFTextWrapper; + StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string); StringID GetGRFStringID(uint32 grfid, StringID stringid); -const char *GetGRFStringFromGRFText(const struct GRFText *text); +const char *GetGRFStringFromGRFText(const GRFTextList &text_list); +const char *GetGRFStringFromGRFText(const GRFTextWrapper &text); const char *GetGRFStringPtr(uint16 stringid); void CleanUpStrings(); void SetCurrentGrfLangID(byte language_id); char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen = nullptr, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); -struct GRFText *DuplicateGRFText(struct GRFText *orig); -void AddGRFTextToList(struct GRFText **list, struct GRFText *text_to_add); -void AddGRFTextToList(struct GRFText **list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add); -void AddGRFTextToList(struct GRFText **list, const char *text_to_add); -void CleanUpGRFText(struct GRFText *grftext); +void AddGRFTextToList(GRFTextList &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, const char *text_to_add); bool CheckGrfLangID(byte lang_id, byte grf_version); -void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values = nullptr); +void StartTextRefStackUsage(const struct GRFFile *grffile, byte numEntries, const uint32 *values = nullptr); void StopTextRefStackUsage(); void RewindTextRefStack(); bool UsingNewGRFTextStack(); From 808c8198d5ab61c457d0351ff7971b75ee17c10a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:49 +0200 Subject: [PATCH 115/601] Codechange: Consistently use WChar when passing characters around, and also define it as char32_t. --- src/fontcache.cpp | 4 ++-- src/gfx_func.h | 4 ++-- src/string_type.h | 2 +- src/textbuf_type.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 6cdac1fab8..051c4ee1db 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -105,13 +105,13 @@ SpriteFontCache::~SpriteFontCache() this->ClearGlyphToSpriteMap(); } -SpriteID SpriteFontCache::GetUnicodeGlyph(GlyphID key) +SpriteID SpriteFontCache::GetUnicodeGlyph(WChar key) { if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) return 0; return this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)]; } -void SpriteFontCache::SetUnicodeGlyph(GlyphID key, SpriteID sprite) +void SpriteFontCache::SetUnicodeGlyph(WChar key, SpriteID sprite) { if (this->glyph_to_spriteid_map == nullptr) this->glyph_to_spriteid_map = CallocT(256); if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT(256); diff --git a/src/gfx_func.h b/src/gfx_func.h index 3def1c85a4..0ccdabac3d 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -112,7 +112,7 @@ int DrawString(int left, int right, int top, StringID str, TextColour colour = T int DrawStringMultiLine(int left, int right, int top, int bottom, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL); int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL); -void DrawCharCentered(uint32 c, int x, int y, TextColour colour); +void DrawCharCentered(WChar c, int x, int y, TextColour colour); void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode = FILLRECT_OPAQUE); void GfxFillPolygon(const std::vector &shape, int colour, FillRectMode mode = FILLRECT_OPAQUE); @@ -164,7 +164,7 @@ void SortResolutions(); bool ToggleFullScreen(bool fs); /* gfx.cpp */ -byte GetCharacterWidth(FontSize size, uint32 key); +byte GetCharacterWidth(FontSize size, WChar key); byte GetDigitWidth(FontSize size = FS_NORMAL); void GetBroadestDigit(uint *front, uint *next, FontSize size = FS_NORMAL); diff --git a/src/string_type.h b/src/string_type.h index ced1ab1def..623d74661c 100644 --- a/src/string_type.h +++ b/src/string_type.h @@ -32,7 +32,7 @@ enum CharSetFilter { }; /** Type for wide characters, i.e. non-UTF8 encoded unicode characters. */ -typedef uint32 WChar; +typedef char32_t WChar; /* The following are directional formatting codes used to get the LTR and RTL strings right: * http://www.unicode.org/unicode/reports/tr9/#Directional_Formatting_Codes */ diff --git a/src/textbuf_type.h b/src/textbuf_type.h index a238aa74b5..b4f234f737 100644 --- a/src/textbuf_type.h +++ b/src/textbuf_type.h @@ -53,7 +53,7 @@ struct Textbuf { void DeleteAll(); bool InsertClipboard(); - bool InsertChar(uint32 key); + bool InsertChar(WChar key); bool InsertString(const char *str, bool marked, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr); bool DeleteChar(uint16 keycode); From c082f570cebd237c35de9caa08fcc84a9c44e95d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:51 +0200 Subject: [PATCH 116/601] Codechange: Use std::string when translating TTDP NewGRF string codes. --- src/newgrf.cpp | 11 +- src/newgrf_text.cpp | 332 +++++++++++++++++++++----------------------- src/newgrf_text.h | 2 +- src/string.cpp | 15 +- src/string_func.h | 10 ++ 5 files changed, 188 insertions(+), 182 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4ada53a0a4..3f621e5c95 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6895,7 +6895,7 @@ static void GRFLoadError(ByteReader *buf) if (buf->HasData()) { const char *message = buf->ReadString(); - error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, nullptr, SCC_RAW_STRING_POINTER); + error->custom_message = stredup(TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, SCC_RAW_STRING_POINTER).c_str()); } else { grfmsg(7, "GRFLoadError: No custom message supplied."); error->custom_message = stredup(""); @@ -6907,7 +6907,7 @@ static void GRFLoadError(ByteReader *buf) if (buf->HasData()) { const char *data = buf->ReadString(); - error->data = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data); + error->data = stredup(TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data).c_str()); } else { grfmsg(7, "GRFLoadError: No message data supplied."); error->data = stredup(""); @@ -7456,9 +7456,8 @@ static void FeatureTownName(ByteReader *buf) const char *name = buf->ReadString(); - char *lang_name = TranslateTTDPatchCodes(grfid, lang, false, name); - grfmsg(6, "FeatureTownName: lang 0x%X -> '%s'", lang, lang_name); - free(lang_name); + std::string lang_name = TranslateTTDPatchCodes(grfid, lang, false, name); + grfmsg(6, "FeatureTownName: lang 0x%X -> '%s'", lang, lang_name.c_str()); townname->name[nb_gen] = AddGRFString(grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); @@ -7500,7 +7499,7 @@ static void FeatureTownName(ByteReader *buf) townname->partlist[id][i].parts[j].data.id = ref_id; } else { const char *text = buf->ReadString(); - townname->partlist[id][i].parts[j].data.text = TranslateTTDPatchCodes(grfid, 0, false, text); + townname->partlist[id][i].parts[j].data.text = stredup(TranslateTTDPatchCodes(grfid, 0, false, text).c_str()); grfmsg(6, "FeatureTownName: part %d, text %d, '%s' (with probability %d)", i, j, townname->partlist[id][i].parts[j].data.text, prob); } townname->partlist[id][i].parts[j].prob = prob; diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 4f1a6ffd49..b6a0e48912 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -31,6 +31,8 @@ #include "core/alloc_type.hpp" #include "core/smallmap_type.hpp" #include "language.h" +#include +#include #include "table/strings.h" #include "table/control_codes.h" @@ -109,58 +111,48 @@ int LanguageMap::GetReverseMapping(int openttd_id, bool gender) const } /** Helper structure for mapping choice lists. */ -struct UnmappedChoiceList : ZeroedMemoryAllocator { - /** Clean everything up. */ - ~UnmappedChoiceList() - { - for (std::pair p : this->strings) { - free(p.second); - } - } - +struct UnmappedChoiceList { /** * Initialise the mapping. * @param type The type of mapping. - * @param old_d The old begin of the string, i.e. from where to start writing again. * @param offset The offset to get the plural/gender from. */ - UnmappedChoiceList(StringControlCode type, char *old_d, int offset) : - type(type), old_d(old_d), offset(offset) + UnmappedChoiceList(StringControlCode type, int offset) : + type(type), offset(offset) { } StringControlCode type; ///< The type of choice list. - char *old_d; ///< The old/original location of the "d" local variable. int offset; ///< The offset for the plural/gender form. /** Mapping of NewGRF supplied ID to the different strings in the choice list. */ - SmallMap strings; + std::map strings; /** - * Flush this choice list into the old d variable. - * @param lm The current language mapping. - * @return The new location of the output string. + * Flush this choice list into the destination string. + * @param lm The current language mapping. + * @param dest Target to write to. */ - char *Flush(const LanguageMap *lm) + void Flush(const LanguageMap *lm, std::ostringstream &dest) { - if (!this->strings.Contains(0)) { + if (this->strings.find(0) == this->strings.end()) { /* In case of a (broken) NewGRF without a default, * assume an empty string. */ grfmsg(1, "choice list misses default value"); - this->strings[0] = stredup(""); + this->strings[0] = std::stringstream(); } - char *d = old_d; + std::ostreambuf_iterator d(dest); + if (lm == nullptr) { /* In case there is no mapping, just ignore everything but the default. * A probable cause for this happening is when the language file has * been removed by the user and as such no mapping could be made. */ - size_t len = strlen(this->strings[0]); - memcpy(d, this->strings[0], len); - return d + len; + dest << this->strings[0].rdbuf(); + return; } - d += Utf8Encode(d, this->type); + Utf8Encode(d, this->type); if (this->type == SCC_SWITCH_CASE) { /* @@ -173,33 +165,31 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { int count = 0; for (uint8 i = 0; i < _current_language->num_cases; i++) { /* Count the ones we have a mapped string for. */ - if (this->strings.Contains(lm->GetReverseMapping(i, false))) count++; + if (this->strings.find(lm->GetReverseMapping(i, false)) != this->strings.end()) count++; } *d++ = count; for (uint8 i = 0; i < _current_language->num_cases; i++) { /* Resolve the string we're looking for. */ int idx = lm->GetReverseMapping(i, false); - if (!this->strings.Contains(idx)) continue; - char *str = this->strings[idx]; + if (this->strings.find(idx) == this->strings.end()) continue; + auto str = this->strings[idx].str(); /* "" */ *d++ = i + 1; - /* "" */ - size_t len = strlen(str) + 1; - *d++ = GB(len, 8, 8); - *d++ = GB(len, 0, 8); + /* "": Limit the length of the string to 0xFFFE to leave space for the '\0'. */ + size_t len = min(0xFFFE, str.size()); + *d++ = GB(len + 1, 8, 8); + *d++ = GB(len + 1, 0, 8); /* "" */ - memcpy(d, str, len); - d += len; + dest.write(str.c_str(), len); + *d++ = '\0'; } /* "" */ - size_t len = strlen(this->strings[0]) + 1; - memcpy(d, this->strings[0], len); - d += len; + dest << this->strings[0].rdbuf() << '\0'; } else { if (this->type == SCC_PLURAL_LIST) { *d++ = lm->plural_form; @@ -220,8 +210,8 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { /* "" */ for (int i = 0; i < count; i++) { int idx = (this->type == SCC_GENDER_LIST ? lm->GetReverseMapping(i, true) : i + 1); - const char *str = this->strings[this->strings.Contains(idx) ? idx : 0]; - size_t len = strlen(str) + 1; + const auto &str = this->strings[this->strings.find(idx) != this->strings.end() ? idx : 0].str(); + size_t len = str.size() + 1; if (len > 0xFF) grfmsg(1, "choice list string is too long"); *d++ = GB(len, 0, 8); } @@ -229,16 +219,14 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { /* "" */ for (int i = 0; i < count; i++) { int idx = (this->type == SCC_GENDER_LIST ? lm->GetReverseMapping(i, true) : i + 1); - const char *str = this->strings[this->strings.Contains(idx) ? idx : 0]; + const auto &str = this->strings[this->strings.find(idx) != this->strings.end() ? idx : 0].str(); /* Limit the length of the string we copy to 0xFE. The length is written above * as a byte and we need room for the final '\0'. */ - size_t len = min(0xFE, strlen(str)); - memcpy(d, str, len); - d += len; + size_t len = min(0xFE, str.size()); + dest.write(str.c_str(), len); *d++ = '\0'; } } - return d; } }; @@ -248,47 +236,55 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { * @param language_id The (NewGRF) language ID associated with this string. * @param allow_newlines Whether newlines are allowed in the string or not. * @param str The string to translate. - * @param[out] olen The length of the final string. * @param byte80 The control code to use as replacement for the 0x80-value. * @return The translated string. */ -char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen, StringControlCode byte80) +std::string TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const std::string &str, StringControlCode byte80) { - char *tmp = MallocT(strlen(str) * 10 + 1); // Allocate space to allow for expansion - char *d = tmp; + /* Empty input string? Nothing to do here. */ + if (str.empty()) return str; + + std::string::const_iterator src = str.cbegin(); + + /* Is this an unicode string? */ bool unicode = false; - WChar c; - size_t len = Utf8Decode(&c, str); + WChar marker; + size_t len = Utf8Decode(&marker, &*src); + + if (marker == NFO_UTF8_IDENTIFIER) { + unicode = true; + src += len; + } /* Helper variable for a possible (string) mapping. */ UnmappedChoiceList *mapping = nullptr; - if (c == NFO_UTF8_IDENTIFIER) { - unicode = true; - str += len; - } + std::ostringstream dest; + std::ostreambuf_iterator d(dest); + while (src != str.cend()) { + WChar c; - for (;;) { - if (unicode && Utf8EncodedCharLen(*str) != 0) { - c = Utf8Consume(&str); + if (unicode && Utf8EncodedCharLen(*src) != 0) { + c = Utf8Consume(src); /* 'Magic' range of control codes. */ if (GB(c, 8, 8) == 0xE0) { c = GB(c, 0, 8); } else if (c >= 0x20) { if (!IsValidChar(c, CS_ALPHANUMERAL)) c = '?'; - d += Utf8Encode(d, c); + Utf8Encode(d, c); continue; } } else { - c = (byte)*str++; + c = (byte)*src++; } + if (c == '\0') break; switch (c) { case 0x01: - if (str[0] == '\0') goto string_end; - d += Utf8Encode(d, ' '); - str++; + if (*src == '\0') goto string_end; + Utf8Encode(d, ' '); + src++; break; case 0x0A: break; case 0x0D: @@ -298,92 +294,96 @@ char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newline grfmsg(1, "Detected newline in string that does not allow one"); } break; - case 0x0E: d += Utf8Encode(d, SCC_TINYFONT); break; - case 0x0F: d += Utf8Encode(d, SCC_BIGFONT); break; + case 0x0E: Utf8Encode(d, SCC_TINYFONT); break; + case 0x0F: Utf8Encode(d, SCC_BIGFONT); break; case 0x1F: - if (str[0] == '\0' || str[1] == '\0') goto string_end; - d += Utf8Encode(d, ' '); - str += 2; + if (src[0] == '\0' || src[1] == '\0') goto string_end; + Utf8Encode(d, ' '); + src += 2; break; case 0x7B: case 0x7C: case 0x7D: case 0x7E: - case 0x7F: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_SIGNED + c - 0x7B); break; - case 0x80: d += Utf8Encode(d, byte80); break; - case 0x81: { - if (str[0] == '\0' || str[1] == '\0') goto string_end; + case 0x7F: Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_SIGNED + c - 0x7B); break; + case 0x80: Utf8Encode(d, byte80); break; + case 0x81: + { + if (src[0] == '\0' || src[1] == '\0') goto string_end; StringID string; - string = ((uint8)*str++); - string |= ((uint8)*str++) << 8; - d += Utf8Encode(d, SCC_NEWGRF_STRINL); - d += Utf8Encode(d, MapGRFStringID(grfid, string)); + string = ((uint8)* src++); + string |= ((uint8)* src++) << 8; + Utf8Encode(d, SCC_NEWGRF_STRINL); + Utf8Encode(d, MapGRFStringID(grfid, string)); break; } case 0x82: case 0x83: - case 0x84: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_DATE_LONG + c - 0x82); break; - case 0x85: d += Utf8Encode(d, SCC_NEWGRF_DISCARD_WORD); break; - case 0x86: d += Utf8Encode(d, SCC_NEWGRF_ROTATE_TOP_4_WORDS); break; - case 0x87: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_VOLUME_LONG); break; - case 0x88: d += Utf8Encode(d, SCC_BLUE); break; - case 0x89: d += Utf8Encode(d, SCC_SILVER); break; - case 0x8A: d += Utf8Encode(d, SCC_GOLD); break; - case 0x8B: d += Utf8Encode(d, SCC_RED); break; - case 0x8C: d += Utf8Encode(d, SCC_PURPLE); break; - case 0x8D: d += Utf8Encode(d, SCC_LTBROWN); break; - case 0x8E: d += Utf8Encode(d, SCC_ORANGE); break; - case 0x8F: d += Utf8Encode(d, SCC_GREEN); break; - case 0x90: d += Utf8Encode(d, SCC_YELLOW); break; - case 0x91: d += Utf8Encode(d, SCC_DKGREEN); break; - case 0x92: d += Utf8Encode(d, SCC_CREAM); break; - case 0x93: d += Utf8Encode(d, SCC_BROWN); break; - case 0x94: d += Utf8Encode(d, SCC_WHITE); break; - case 0x95: d += Utf8Encode(d, SCC_LTBLUE); break; - case 0x96: d += Utf8Encode(d, SCC_GRAY); break; - case 0x97: d += Utf8Encode(d, SCC_DKBLUE); break; - case 0x98: d += Utf8Encode(d, SCC_BLACK); break; - case 0x9A: { - int code = *str++; + case 0x84: Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_DATE_LONG + c - 0x82); break; + case 0x85: Utf8Encode(d, SCC_NEWGRF_DISCARD_WORD); break; + case 0x86: Utf8Encode(d, SCC_NEWGRF_ROTATE_TOP_4_WORDS); break; + case 0x87: Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_VOLUME_LONG); break; + case 0x88: Utf8Encode(d, SCC_BLUE); break; + case 0x89: Utf8Encode(d, SCC_SILVER); break; + case 0x8A: Utf8Encode(d, SCC_GOLD); break; + case 0x8B: Utf8Encode(d, SCC_RED); break; + case 0x8C: Utf8Encode(d, SCC_PURPLE); break; + case 0x8D: Utf8Encode(d, SCC_LTBROWN); break; + case 0x8E: Utf8Encode(d, SCC_ORANGE); break; + case 0x8F: Utf8Encode(d, SCC_GREEN); break; + case 0x90: Utf8Encode(d, SCC_YELLOW); break; + case 0x91: Utf8Encode(d, SCC_DKGREEN); break; + case 0x92: Utf8Encode(d, SCC_CREAM); break; + case 0x93: Utf8Encode(d, SCC_BROWN); break; + case 0x94: Utf8Encode(d, SCC_WHITE); break; + case 0x95: Utf8Encode(d, SCC_LTBLUE); break; + case 0x96: Utf8Encode(d, SCC_GRAY); break; + case 0x97: Utf8Encode(d, SCC_DKBLUE); break; + case 0x98: Utf8Encode(d, SCC_BLACK); break; + case 0x9A: + { + int code = *src++; switch (code) { case 0x00: goto string_end; - case 0x01: d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY); break; - /* 0x02: ignore next colour byte is not supported. It works on the final - * string and as such hooks into the string drawing routine. At that - * point many things already happened, such as splitting up of strings - * when drawn over multiple lines or right-to-left translations, which - * make the behaviour peculiar, e.g. only happening at specific width - * of windows. Or we need to add another pass over the string to just - * support this. As such it is not implemented in OpenTTD. */ - case 0x03: { - if (str[0] == '\0' || str[1] == '\0') goto string_end; - uint16 tmp = ((uint8)*str++); - tmp |= ((uint8)*str++) << 8; - d += Utf8Encode(d, SCC_NEWGRF_PUSH_WORD); - d += Utf8Encode(d, tmp); + case 0x01: Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY); break; + /* 0x02: ignore next colour byte is not supported. It works on the final + * string and as such hooks into the string drawing routine. At that + * point many things already happened, such as splitting up of strings + * when drawn over multiple lines or right-to-left translations, which + * make the behaviour peculiar, e.g. only happening at specific width + * of windows. Or we need to add another pass over the string to just + * support this. As such it is not implemented in OpenTTD. */ + case 0x03: + { + if (src[0] == '\0' || src[1] == '\0') goto string_end; + uint16 tmp = ((uint8)* src++); + tmp |= ((uint8)* src++) << 8; + Utf8Encode(d, SCC_NEWGRF_PUSH_WORD); + Utf8Encode(d, tmp); break; } case 0x04: - if (str[0] == '\0') goto string_end; - d += Utf8Encode(d, SCC_NEWGRF_UNPRINT); - d += Utf8Encode(d, *str++); + if (src[0] == '\0') goto string_end; + Utf8Encode(d, SCC_NEWGRF_UNPRINT); + Utf8Encode(d, *src++); break; - case 0x06: d += Utf8Encode(d, SCC_NEWGRF_PRINT_BYTE_HEX); break; - case 0x07: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_HEX); break; - case 0x08: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_HEX); break; + case 0x06: Utf8Encode(d, SCC_NEWGRF_PRINT_BYTE_HEX); break; + case 0x07: Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_HEX); break; + case 0x08: Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_HEX); break; /* 0x09, 0x0A are TTDPatch internal use only string codes. */ - case 0x0B: d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_HEX); break; - case 0x0C: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_STATION_NAME); break; - case 0x0D: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_WEIGHT_LONG); break; + case 0x0B: Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_HEX); break; + case 0x0C: Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_STATION_NAME); break; + case 0x0D: Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_WEIGHT_LONG); break; case 0x0E: - case 0x0F: { + case 0x0F: + { if (str[0] == '\0') goto string_end; const LanguageMap *lm = LanguageMap::GetLanguageMap(grfid, language_id); - int index = *str++; + int index = *src++; int mapped = lm != nullptr ? lm->GetMapping(index, code == 0x0E) : -1; if (mapped >= 0) { - d += Utf8Encode(d, code == 0x0E ? SCC_GENDER_INDEX : SCC_SET_CASE); - d += Utf8Encode(d, code == 0x0E ? mapped : mapped + 1); + Utf8Encode(d, code == 0x0E ? SCC_GENDER_INDEX : SCC_SET_CASE); + Utf8Encode(d, code == 0x0E ? mapped : mapped + 1); } break; } @@ -392,18 +392,16 @@ char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newline case 0x11: if (str[0] == '\0') goto string_end; if (mapping == nullptr) { - if (code == 0x10) str++; // Skip the index + if (code == 0x10) src++; // Skip the index grfmsg(1, "choice list %s marker found when not expected", code == 0x10 ? "next" : "default"); break; } else { - /* Terminate the previous string. */ - *d = '\0'; - int index = (code == 0x10 ? *str++ : 0); - if (mapping->strings.Contains(index)) { + int index = (code == 0x10 ? *src++ : 0); + if (mapping->strings.find(index) != mapping->strings.end()) { grfmsg(1, "duplicate choice list string, ignoring"); d++; } else { - d = mapping->strings[index] = MallocT(strlen(str) * 10 + 1); + d = std::ostreambuf_iterator(mapping->strings[index]); } } break; @@ -412,26 +410,25 @@ char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newline if (mapping == nullptr) { grfmsg(1, "choice list end marker found when not expected"); } else { - /* Terminate the previous string. */ - *d = '\0'; - /* Now we can start flushing everything and clean everything up. */ - d = mapping->Flush(LanguageMap::GetLanguageMap(grfid, language_id)); + mapping->Flush(LanguageMap::GetLanguageMap(grfid, language_id), dest); delete mapping; mapping = nullptr; + + d = std::ostreambuf_iterator(dest); } break; case 0x13: case 0x14: case 0x15: - if (str[0] == '\0') goto string_end; + if (src[0] == '\0') goto string_end; if (mapping != nullptr) { grfmsg(1, "choice lists can't be stacked, it's going to get messy now..."); - if (code != 0x14) str++; + if (code != 0x14) src++; } else { static const StringControlCode mp[] = { SCC_GENDER_LIST, SCC_SWITCH_CASE, SCC_PLURAL_LIST }; - mapping = new UnmappedChoiceList(mp[code - 0x13], d, code == 0x14 ? 0 : *str++); + mapping = new UnmappedChoiceList(mp[code - 0x13], code == 0x14 ? 0 : *src++); } break; @@ -444,11 +441,11 @@ char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newline case 0x1C: case 0x1D: case 0x1E: - d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_DATE_LONG + code - 0x16); + Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD_DATE_LONG + code - 0x16); break; - case 0x1F: d += Utf8Encode(d, SCC_PUSH_COLOUR); break; - case 0x20: d += Utf8Encode(d, SCC_POP_COLOUR); break; + case 0x1F: Utf8Encode(d, SCC_PUSH_COLOUR); break; + case 0x20: Utf8Encode(d, SCC_POP_COLOUR); break; default: grfmsg(1, "missing handler for extended format code"); @@ -457,25 +454,25 @@ char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newline break; } - case 0x9E: d += Utf8Encode(d, 0x20AC); break; // Euro - case 0x9F: d += Utf8Encode(d, 0x0178); break; // Y with diaeresis - case 0xA0: d += Utf8Encode(d, SCC_UP_ARROW); break; - case 0xAA: d += Utf8Encode(d, SCC_DOWN_ARROW); break; - case 0xAC: d += Utf8Encode(d, SCC_CHECKMARK); break; - case 0xAD: d += Utf8Encode(d, SCC_CROSS); break; - case 0xAF: d += Utf8Encode(d, SCC_RIGHT_ARROW); break; - case 0xB4: d += Utf8Encode(d, SCC_TRAIN); break; - case 0xB5: d += Utf8Encode(d, SCC_LORRY); break; - case 0xB6: d += Utf8Encode(d, SCC_BUS); break; - case 0xB7: d += Utf8Encode(d, SCC_PLANE); break; - case 0xB8: d += Utf8Encode(d, SCC_SHIP); break; - case 0xB9: d += Utf8Encode(d, SCC_SUPERSCRIPT_M1); break; - case 0xBC: d += Utf8Encode(d, SCC_SMALL_UP_ARROW); break; - case 0xBD: d += Utf8Encode(d, SCC_SMALL_DOWN_ARROW); break; + case 0x9E: Utf8Encode(d, 0x20AC); break; // Euro + case 0x9F: Utf8Encode(d, 0x0178); break; // Y with diaeresis + case 0xA0: Utf8Encode(d, SCC_UP_ARROW); break; + case 0xAA: Utf8Encode(d, SCC_DOWN_ARROW); break; + case 0xAC: Utf8Encode(d, SCC_CHECKMARK); break; + case 0xAD: Utf8Encode(d, SCC_CROSS); break; + case 0xAF: Utf8Encode(d, SCC_RIGHT_ARROW); break; + case 0xB4: Utf8Encode(d, SCC_TRAIN); break; + case 0xB5: Utf8Encode(d, SCC_LORRY); break; + case 0xB6: Utf8Encode(d, SCC_BUS); break; + case 0xB7: Utf8Encode(d, SCC_PLANE); break; + case 0xB8: Utf8Encode(d, SCC_SHIP); break; + case 0xB9: Utf8Encode(d, SCC_SUPERSCRIPT_M1); break; + case 0xBC: Utf8Encode(d, SCC_SMALL_UP_ARROW); break; + case 0xBD: Utf8Encode(d, SCC_SMALL_DOWN_ARROW); break; default: /* Validate any unhandled character */ if (!IsValidChar(c, CS_ALPHANUMERAL)) c = '?'; - d += Utf8Encode(d, c); + Utf8Encode(d, c); break; } } @@ -486,10 +483,7 @@ string_end: delete mapping; } - *d = '\0'; - if (olen != nullptr) *olen = d - tmp + 1; - tmp = ReallocT(tmp, d - tmp + 1); - return tmp; + return dest.str(); } /** @@ -523,12 +517,7 @@ static void AddGRFTextToList(GRFTextList &list, byte langid, const std::string & */ void AddGRFTextToList(GRFTextList &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add) { - int len; - char *translatedtext = TranslateTTDPatchCodes(grfid, langid, allow_newlines, text_to_add, &len); - std::string newtext(translatedtext, len); - free(translatedtext); - - AddGRFTextToList(list, langid, newtext); + AddGRFTextToList(list, langid, TranslateTTDPatchCodes(grfid, langid, allow_newlines, text_to_add)); } /** @@ -563,9 +552,6 @@ void AddGRFTextToList(GRFTextWrapper &list, const char *text_to_add) */ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string) { - char *translatedtext; - uint id; - /* When working with the old language scheme (grf_version is less than 7) and * English or American is among the set bits, simply add it as English in * the new scheme, i.e. as langid = 1. @@ -584,6 +570,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne } } + uint id; for (id = 0; id < _num_grf_texts; id++) { if (_grf_text[id].grfid == grfid && _grf_text[id].stringid == stringid) { break; @@ -593,10 +580,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne /* Too many strings allocated, return empty */ if (id == lengthof(_grf_text)) return STR_EMPTY; - int len; - translatedtext = TranslateTTDPatchCodes(grfid, langid_to_add, allow_newlines, text_to_add, &len); - std::string newtext(translatedtext, len); - free(translatedtext); + std::string newtext = TranslateTTDPatchCodes(grfid, langid_to_add, allow_newlines, text_to_add); /* If we didn't find our stringid and grfid in the list, allocate a new id */ if (id == _num_grf_texts) _num_grf_texts++; diff --git a/src/newgrf_text.h b/src/newgrf_text.h index bdd1f1bc95..2c7eb731db 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -39,7 +39,7 @@ const char *GetGRFStringFromGRFText(const GRFTextWrapper &text); const char *GetGRFStringPtr(uint16 stringid); void CleanUpStrings(); void SetCurrentGrfLangID(byte language_id); -char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen = nullptr, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); +std::string TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const std::string &str, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); void AddGRFTextToList(GRFTextList &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add); void AddGRFTextToList(GRFTextWrapper &list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add); void AddGRFTextToList(GRFTextWrapper &list, const char *text_to_add); diff --git a/src/string.cpp b/src/string.cpp index dea369037b..90d287c9ef 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -18,6 +18,7 @@ #include #include /* required for tolower() */ +#include #ifdef _MSC_VER #include // required by vsnprintf implementation for MSVC @@ -479,11 +480,13 @@ size_t Utf8Decode(WChar *c, const char *s) /** * Encode a unicode character and place it in the buffer. + * @tparam T Type of the buffer. * @param buf Buffer to place character. * @param c Unicode character to encode. * @return Number of characters in the encoded sequence. */ -size_t Utf8Encode(char *buf, WChar c) +template +inline size_t Utf8Encode(T buf, WChar c) { if (c < 0x80) { *buf = c; @@ -510,6 +513,16 @@ size_t Utf8Encode(char *buf, WChar c) return 1; } +size_t Utf8Encode(char *buf, WChar c) +{ + return Utf8Encode(buf, c); +} + +size_t Utf8Encode(std::ostreambuf_iterator &buf, WChar c) +{ + return Utf8Encode &>(buf, c); +} + /** * Properly terminate an UTF8 string to some maximum length * @param s string to check if it needs additional trimming diff --git a/src/string_func.h b/src/string_func.h index 9942e9a6a7..002b8f2177 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -25,6 +25,7 @@ #define STRING_FUNC_H #include +#include #include "core/bitmath_func.hpp" #include "string_type.h" @@ -79,6 +80,7 @@ bool IsValidChar(WChar key, CharSetFilter afilter); size_t Utf8Decode(WChar *c, const char *s); size_t Utf8Encode(char *buf, WChar c); +size_t Utf8Encode(std::ostreambuf_iterator &buf, WChar c); size_t Utf8TrimString(char *s, size_t maxlen); @@ -89,6 +91,14 @@ static inline WChar Utf8Consume(const char **s) return c; } +template +static inline WChar Utf8Consume(Titr &s) +{ + WChar c; + s += Utf8Decode(&c, &*s); + return c; +} + /** * Return the length of a UTF-8 encoded character. * @param c Unicode character. From 9c2e47d03cbc4c7af416a34b09e0c8d0de7c3474 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:54 +0200 Subject: [PATCH 117/601] Codechange: Use std::string for storing GRF error messages. --- src/newgrf.cpp | 20 ++++++++++---------- src/newgrf_config.cpp | 12 ++---------- src/newgrf_config.h | 13 ++++++------- src/newgrf_gui.cpp | 12 ++++++------ 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 3f621e5c95..6b5a2f9ce1 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5248,7 +5248,7 @@ static void NewSpriteGroup(ByteReader *buf) group->num_input = buf->ReadByte(); if (group->num_input > lengthof(group->subtract_input)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); - error->data = stredup("too many inputs (max 16)"); + error->data = "too many inputs (max 16)"; return; } for (uint i = 0; i < group->num_input; i++) { @@ -5261,7 +5261,7 @@ static void NewSpriteGroup(ByteReader *buf) group->version = 0xFF; } else if (std::find(group->cargo_input, group->cargo_input + i, cargo) != group->cargo_input + i) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); - error->data = stredup("duplicate input cargo"); + error->data = "duplicate input cargo"; return; } group->cargo_input[i] = cargo; @@ -5270,7 +5270,7 @@ static void NewSpriteGroup(ByteReader *buf) group->num_output = buf->ReadByte(); if (group->num_output > lengthof(group->add_output)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); - error->data = stredup("too many outputs (max 16)"); + error->data = "too many outputs (max 16)"; return; } for (uint i = 0; i < group->num_output; i++) { @@ -5281,7 +5281,7 @@ static void NewSpriteGroup(ByteReader *buf) group->version = 0xFF; } else if (std::find(group->cargo_output, group->cargo_output + i, cargo) != group->cargo_output + i) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); - error->data = stredup("duplicate output cargo"); + error->data = "duplicate output cargo"; return; } group->cargo_output[i] = cargo; @@ -6517,7 +6517,7 @@ static void CfgApply(ByteReader *buf) static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig *c) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC, c); - error->data = stredup(_cur.grfconfig->GetName()); + error->data = _cur.grfconfig->GetName(); } /* Action 0x07 @@ -6895,10 +6895,10 @@ static void GRFLoadError(ByteReader *buf) if (buf->HasData()) { const char *message = buf->ReadString(); - error->custom_message = stredup(TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, SCC_RAW_STRING_POINTER).c_str()); + error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, SCC_RAW_STRING_POINTER); } else { grfmsg(7, "GRFLoadError: No custom message supplied."); - error->custom_message = stredup(""); + error->custom_message.clear(); } } else { error->message = msgstr[message_id]; @@ -6907,10 +6907,10 @@ static void GRFLoadError(ByteReader *buf) if (buf->HasData()) { const char *data = buf->ReadString(); - error->data = stredup(TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data).c_str()); + error->data = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data); } else { grfmsg(7, "GRFLoadError: No message data supplied."); - error->data = stredup(""); + error->data.clear(); } /* Only two parameter numbers can be used in the string. */ @@ -7771,7 +7771,7 @@ static void TranslateGRFStrings(ByteReader *buf) char tmp[256]; GetString(tmp, STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE, lastof(tmp)); - error->data = stredup(tmp); + error->data = tmp; return; } diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 8452d08299..75c1977f2c 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -179,7 +179,8 @@ uint _missing_extra_graphics = 0; */ GRFError::GRFError(StringID severity, StringID message) : message(message), - severity(severity) + severity(severity), + param_value() { } @@ -188,23 +189,14 @@ GRFError::GRFError(StringID severity, StringID message) : * @param error The GRFError object to make a copy of. */ GRFError::GRFError(const GRFError &error) : - ZeroedMemoryAllocator(), custom_message(error.custom_message), data(error.data), message(error.message), severity(error.severity) { - if (error.custom_message != nullptr) this->custom_message = stredup(error.custom_message); - if (error.data != nullptr) this->data = stredup(error.data); memcpy(this->param_value, error.param_value, sizeof(this->param_value)); } -GRFError::~GRFError() -{ - free(this->custom_message); - free(this->data); -} - /** * Create a new empty GRFParameterInfo object. * @param nr The newgrf parameter that is changed. diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 2c8a8559dd..ef71289052 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -109,16 +109,15 @@ struct GRFIdentifier { }; /** Information about why GRF had problems during initialisation */ -struct GRFError : ZeroedMemoryAllocator { +struct GRFError { GRFError(StringID severity, StringID message = 0); GRFError(const GRFError &error); - ~GRFError(); - char *custom_message; ///< Custom message (if present) - char *data; ///< Additional data for message and custom_message - StringID message; ///< Default message - StringID severity; ///< Info / Warning / Error / Fatal - uint32 param_value[2]; ///< Values of GRF parameters to show for message and custom_message + std::string custom_message; ///< Custom message (if present) + std::string data; ///< Additional data for message and custom_message + StringID message; ///< Default message + StringID severity; ///< Info / Warning / Error / Fatal + uint32 param_value[2]; ///< Values of GRF parameters to show for message and custom_message }; /** The possible types of a newgrf parameter. */ diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 3b462f427b..3f0a2ee7ec 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -50,10 +50,10 @@ void ShowNewGRFError() /* We only want to show fatal errors */ if (c->error == nullptr || c->error->severity != STR_NEWGRF_ERROR_MSG_FATAL) continue; - SetDParam (0, c->error->custom_message == nullptr ? c->error->message : STR_JUST_RAW_STRING); - SetDParamStr(1, c->error->custom_message); + SetDParam (0, c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING); + SetDParamStr(1, c->error->custom_message.c_str()); SetDParamStr(2, c->filename); - SetDParamStr(3, c->error->data); + SetDParamStr(3, c->error->data.c_str()); for (uint i = 0; i < lengthof(c->error->param_value); i++) { SetDParam(4 + i, c->error->param_value[i]); } @@ -66,13 +66,13 @@ static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint { if (c->error != nullptr) { char message[512]; - SetDParamStr(0, c->error->custom_message); // is skipped by built-in messages + SetDParamStr(0, c->error->custom_message.c_str()); // is skipped by built-in messages SetDParamStr(1, c->filename); - SetDParamStr(2, c->error->data); + SetDParamStr(2, c->error->data.c_str()); for (uint i = 0; i < lengthof(c->error->param_value); i++) { SetDParam(3 + i, c->error->param_value[i]); } - GetString(message, c->error->custom_message == nullptr ? c->error->message : STR_JUST_RAW_STRING, lastof(message)); + GetString(message, c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING, lastof(message)); SetDParamStr(0, message); y = DrawStringMultiLine(x, right, y, bottom, c->error->severity); From 9b6f5e3bb850b6cff02cc761767fcdf49c681645 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:56 +0200 Subject: [PATCH 118/601] Codechange: Store GS lang texts in std::strings. --- src/game/game_text.cpp | 130 +++++++++++++++----------------------- src/game/game_text.hpp | 29 ++++++--- src/saveload/game_sl.cpp | 22 +++---- src/saveload/saveload.cpp | 71 +++++++++++++++++++++ src/saveload/saveload.h | 35 ++++++++++ 5 files changed, 189 insertions(+), 98 deletions(-) diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 64281c60cb..39732f7898 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -58,70 +58,47 @@ void NORETURN CDECL strgen_fatal(const char *s, ...) throw std::exception(); } -/** - * Create a new container for language strings. - * @param language The language name. - * @param end If not nullptr, terminate \a language at this position. - */ -LanguageStrings::LanguageStrings(const char *language, const char *end) -{ - this->language = stredup(language, end != nullptr ? end - 1 : nullptr); -} - -/** Free everything. */ -LanguageStrings::~LanguageStrings() -{ - free(this->language); -} - /** * Read all the raw language strings from the given file. * @param file The file to read from. * @return The raw strings, or nullptr upon error. */ -std::unique_ptr ReadRawLanguageStrings(const char *file) +LanguageStrings ReadRawLanguageStrings(const std::string &file) { - try { - size_t to_read; - FILE *fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read); - if (fh == nullptr) return nullptr; + size_t to_read; + FILE *fh = FioFOpenFile(file.c_str(), "rb", GAME_DIR, &to_read); + if (fh == nullptr) return LanguageStrings(); - FileCloser fhClose(fh); + FileCloser fhClose(fh); - const char *langname = strrchr(file, PATHSEPCHAR); - if (langname == nullptr) { - langname = file; + auto pos = file.rfind(PATHSEPCHAR); + if (pos == std::string::npos) return LanguageStrings(); + std::string langname = file.substr(pos + 1); + + /* Check for invalid empty filename */ + if (langname.empty() || langname.front() == '.') return LanguageStrings(); + + LanguageStrings ret(langname.substr(0, langname.find('.'))); + + char buffer[2048]; + while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != nullptr) { + size_t len = strlen(buffer); + + /* Remove trailing spaces/newlines from the string. */ + size_t i = len; + while (i > 0 && (buffer[i - 1] == '\r' || buffer[i - 1] == '\n' || buffer[i - 1] == ' ')) i--; + buffer[i] = '\0'; + + ret.lines.emplace_back(buffer, i); + + if (len > to_read) { + to_read = 0; } else { - langname++; + to_read -= len; } - - /* Check for invalid empty filename */ - if (*langname == '.' || *langname == 0) return nullptr; - - std::unique_ptr ret(new LanguageStrings(langname, strchr(langname, '.'))); - - char buffer[2048]; - while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != nullptr) { - size_t len = strlen(buffer); - - /* Remove trailing spaces/newlines from the string. */ - size_t i = len; - while (i > 0 && (buffer[i - 1] == '\r' || buffer[i - 1] == '\n' || buffer[i - 1] == ' ')) i--; - buffer[i] = '\0'; - - ret->lines.emplace_back(buffer, i); - - if (len > to_read) { - to_read = 0; - } else { - to_read -= len; - } - } - - return ret; - } catch (...) { - return nullptr; } + + return ret; } @@ -138,7 +115,7 @@ struct StringListReader : StringReader { * @param translation Are we reading a translation? */ StringListReader(StringData &data, const LanguageStrings &strings, bool master, bool translation) : - StringReader(data, strings.language, master, translation), p(strings.lines.begin()), end(strings.lines.end()) + StringReader(data, strings.language.c_str(), master, translation), p(strings.lines.begin()), end(strings.lines.end()) { } @@ -215,12 +192,11 @@ struct StringNameWriter : HeaderWriter { class LanguageScanner : protected FileScanner { private: GameStrings *gs; - char *exclude; + std::string exclude; public: /** Initialise */ - LanguageScanner(GameStrings *gs, const char *exclude) : gs(gs), exclude(stredup(exclude)) {} - ~LanguageScanner() { free(exclude); } + LanguageScanner(GameStrings *gs, const std::string &exclude) : gs(gs), exclude(exclude) {} /** * Scan. @@ -232,10 +208,10 @@ public: bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override { - if (strcmp(filename, exclude) == 0) return true; + if (exclude == filename) return true; auto ls = ReadRawLanguageStrings(filename); - if (ls == nullptr) return false; + if (!ls.IsValid()) return false; gs->raw_strings.push_back(std::move(ls)); return true; @@ -249,17 +225,16 @@ public: GameStrings *LoadTranslations() { const GameInfo *info = Game::GetInfo(); - char filename[512]; - strecpy(filename, info->GetMainScript(), lastof(filename)); - char *e = strrchr(filename, PATHSEPCHAR); - if (e == nullptr) return nullptr; - e++; // Make 'e' point after the PATHSEPCHAR + std::string basename(info->GetMainScript()); + auto e = basename.rfind(PATHSEPCHAR); + if (e == std::string::npos) return nullptr; + basename.erase(e + 1); - strecpy(e, "lang" PATHSEP "english.txt", lastof(filename)); - if (!FioCheckFileExists(filename, GAME_DIR)) return nullptr; + std::string filename = basename + "lang" PATHSEP "english.txt"; + if (!FioCheckFileExists(filename.c_str() , GAME_DIR)) return nullptr; auto ls = ReadRawLanguageStrings(filename); - if (ls == nullptr) return nullptr; + if (!ls.IsValid()) return nullptr; GameStrings *gs = new GameStrings(); try { @@ -267,8 +242,7 @@ GameStrings *LoadTranslations() /* Scan for other language files */ LanguageScanner scanner(gs, filename); - strecpy(e, "lang" PATHSEP, lastof(filename)); - size_t len = strlen(filename); + std::string ldir = basename + "lang" PATHSEP; const char *tar_filename = info->GetTarFile(); TarList::iterator iter; @@ -281,14 +255,14 @@ GameStrings *LoadTranslations() if (tar->second.tar_filename != iter->first) continue; /* Check the path and extension. */ - if (tar->first.size() <= len || tar->first.compare(0, len, filename) != 0) continue; + if (tar->first.size() <= ldir.size() || tar->first.compare(0, ldir.size(), ldir) != 0) continue; if (tar->first.compare(tar->first.size() - 4, 4, ".txt") != 0) continue; scanner.AddFile(tar->first.c_str(), 0, tar_filename); } } else { /* Scan filesystem */ - scanner.Scan(filename); + scanner.Scan(ldir.c_str()); } gs->Compile(); @@ -303,7 +277,7 @@ GameStrings *LoadTranslations() void GameStrings::Compile() { StringData data(32); - StringListReader master_reader(data, *this->raw_strings[0], true, false); + StringListReader master_reader(data, this->raw_strings[0], true, false); master_reader.ParseFile(); if (_errors != 0) throw std::exception(); @@ -314,12 +288,12 @@ void GameStrings::Compile() for (const auto &p : this->raw_strings) { data.FreeTranslation(); - StringListReader translation_reader(data, *p, false, strcmp(p->language, "english") != 0); + StringListReader translation_reader(data, p, false, p.language != "english"); translation_reader.ParseFile(); if (_errors != 0) throw std::exception(); - this->compiled_strings.emplace_back(new LanguageStrings(p->language)); - TranslationWriter writer(this->compiled_strings.back()->lines); + this->compiled_strings.emplace_back(p.language); + TranslationWriter writer(this->compiled_strings.back().lines); writer.WriteLang(data); } } @@ -387,11 +361,11 @@ void ReconsiderGameScriptLanguage() language++; for (auto &p : _current_data->compiled_strings) { - if (strcmp(p->language, language) == 0) { - _current_data->cur_language = p; + if (p.language == language) { + _current_data->cur_language = &p; return; } } - _current_data->cur_language = _current_data->compiled_strings[0]; + _current_data->cur_language = &_current_data->compiled_strings[0]; } diff --git a/src/game/game_text.hpp b/src/game/game_text.hpp index 20cccff54c..91d85847df 100644 --- a/src/game/game_text.hpp +++ b/src/game/game_text.hpp @@ -18,23 +18,34 @@ void ReconsiderGameScriptLanguage(); /** Container for the raw (unencoded) language strings of a language. */ struct LanguageStrings { - const char *language; ///< Name of the language (base filename). - StringList lines; ///< The lines of the file to pass into the parser/encoder. + std::string language; ///< Name of the language (base filename). Empty string if invalid. + StringList lines; ///< The lines of the file to pass into the parser/encoder. - LanguageStrings(const char *language, const char *end = nullptr); - ~LanguageStrings(); + LanguageStrings() {} + LanguageStrings(const std::string &lang) : language(lang) {} + LanguageStrings(const LanguageStrings &other) : language(other.language), lines(other.lines) {} + LanguageStrings(LanguageStrings &&other) : language(std::move(other.language)), lines(std::move(other.lines)) {} + + bool IsValid() const { return !this->language.empty(); } }; /** Container for all the game strings. */ struct GameStrings { - uint version; ///< The version of the language strings. - std::shared_ptr cur_language; ///< The current (compiled) language. + uint version; ///< The version of the language strings. + LanguageStrings *cur_language; ///< The current (compiled) language. - std::vector> raw_strings; ///< The raw strings per language, first must be English/the master language!. - std::vector> compiled_strings; ///< The compiled strings per language, first must be English/the master language!. - StringList string_names; ///< The names of the compiled strings. + std::vector raw_strings; ///< The raw strings per language, first must be English/the master language!. + std::vector compiled_strings; ///< The compiled strings per language, first must be English/the master language!. + StringList string_names; ///< The names of the compiled strings. void Compile(); + + GameStrings() = default; + + GameStrings(const GameStrings &) = delete; + GameStrings(GameStrings &&) = delete; + GameStrings &operator=(const GameStrings &) = delete; + GameStrings &operator=(GameStrings &&) = delete; }; #endif /* GAME_TEXT_HPP */ diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index 28a6c6c11a..e134843850 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -113,23 +113,23 @@ static void Save_GSDT() extern GameStrings *_current_data; -static const char *_game_saveload_string; +static std::string _game_saveload_string; static uint _game_saveload_strings; static const SaveLoad _game_language_header[] = { - SLEG_STR(_game_saveload_string, SLE_STR), - SLEG_VAR(_game_saveload_strings, SLE_UINT32), - SLE_END() + SLEG_SSTR(_game_saveload_string, SLE_STR), + SLEG_VAR(_game_saveload_strings, SLE_UINT32), + SLE_END() }; static const SaveLoad _game_language_string[] = { - SLEG_STR(_game_saveload_string, SLE_STR | SLF_ALLOW_CONTROL), - SLE_END() + SLEG_SSTR(_game_saveload_string, SLE_STR | SLF_ALLOW_CONTROL), + SLE_END() }; static void SaveReal_GSTR(const LanguageStrings *ls) { - _game_saveload_string = ls->language; + _game_saveload_string = ls->language.c_str(); _game_saveload_strings = (uint)ls->lines.size(); SlObject(nullptr, _game_language_header); @@ -145,13 +145,13 @@ static void Load_GSTR() _current_data = new GameStrings(); while (SlIterateArray() != -1) { - _game_saveload_string = nullptr; + _game_saveload_string.clear(); SlObject(nullptr, _game_language_header); - std::unique_ptr ls(new LanguageStrings(_game_saveload_string != nullptr ? _game_saveload_string : "")); + LanguageStrings ls(_game_saveload_string); for (uint i = 0; i < _game_saveload_strings; i++) { SlObject(nullptr, _game_language_string); - ls->lines.emplace_back(_game_saveload_string != nullptr ? _game_saveload_string : ""); + ls.lines.emplace_back(_game_saveload_string); } _current_data->raw_strings.push_back(std::move(ls)); @@ -174,7 +174,7 @@ static void Save_GSTR() for (uint i = 0; i < _current_data->raw_strings.size(); i++) { SlSetArrayIndex(i); - SlAutolength((AutolengthProc *)SaveReal_GSTR, _current_data->raw_strings[i].get()); + SlAutolength((AutolengthProc *)SaveReal_GSTR, &_current_data->raw_strings[i]); } } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index f9eebed46a..7a41f4c405 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -44,6 +44,7 @@ #include "../fios.h" #include "../error.h" #include +#include #include "table/strings.h" @@ -901,6 +902,21 @@ static inline size_t SlCalcStringLen(const void *ptr, size_t length, VarType con return len + SlGetArrayLength(len); // also include the length of the index } +/** + * Calculate the gross length of the string that it + * will occupy in the savegame. This includes the real length, returned + * by SlCalcNetStringLen and the length that the index will occupy. + * @param ptr Pointer to the \c std::string. + * @return The gross length of the string. + */ +static inline size_t SlCalcStdStringLen(const void *ptr) +{ + const std::string *str = reinterpret_cast(ptr); + + size_t len = str->length(); + return len + SlGetArrayLength(len); // also include the length of the index +} + /** * Save/Load a string. * @param ptr the string being manipulated @@ -980,6 +996,53 @@ static void SlString(void *ptr, size_t length, VarType conv) } } +/** + * Save/Load a \c std::string. + * @param ptr the string being manipulated + * @param conv must be SLE_FILE_STRING + */ +static void SlStdString(void *ptr, VarType conv) +{ + std::string *str = reinterpret_cast(ptr); + + switch (_sl.action) { + case SLA_SAVE: { + size_t len = str->length(); + SlWriteArrayLength(len); + SlCopyBytes(const_cast(static_cast(str->c_str())), len); + break; + } + + case SLA_LOAD_CHECK: + case SLA_LOAD: { + size_t len = SlReadArrayLength(); + char *buf = AllocaM(char, len + 1); + + SlCopyBytes(buf, len); + buf[len] = '\0'; // properly terminate the string + + StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK; + if ((conv & SLF_ALLOW_CONTROL) != 0) { + settings = settings | SVS_ALLOW_CONTROL_CODE; + if (IsSavegameVersionBefore(SLV_169)) { + str_fix_scc_encoded(buf, buf + len); + } + } + if ((conv & SLF_ALLOW_NEWLINE) != 0) { + settings = settings | SVS_ALLOW_NEWLINE; + } + str_validate(buf, buf + len, settings); + + // Store sanitized string. + str->assign(buf); + } + + case SLA_PTRS: break; + case SLA_NULL: break; + default: NOT_REACHED(); + } +} + /** * Return the size in bytes of a certain type of atomic array * @param length The length of the array counted in elements @@ -1403,6 +1466,7 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld) case SL_STR: case SL_LST: case SL_DEQUE: + case SL_STDSTR: /* CONDITIONAL saveload types depend on the savegame version */ if (!SlIsObjectValidInSavegame(sld)) break; @@ -1413,6 +1477,7 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld) case SL_STR: return SlCalcStringLen(GetVariableAddress(object, sld), sld->length, sld->conv); case SL_LST: return SlCalcListLen(GetVariableAddress(object, sld)); case SL_DEQUE: return SlCalcDequeLen(GetVariableAddress(object, sld), sld->conv); + case SL_STDSTR: return SlCalcStdStringLen(GetVariableAddress(object, sld)); default: NOT_REACHED(); } break; @@ -1461,6 +1526,10 @@ static bool IsVariableSizeRight(const SaveLoad *sld) /* These should be pointer sized, or fixed array. */ return sld->size == sizeof(void *) || sld->size == sld->length; + case SL_STDSTR: + /* These should be all pointers to std::string. */ + return sld->size == sizeof(std::string); + default: return true; } @@ -1482,6 +1551,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld) case SL_STR: case SL_LST: case SL_DEQUE: + case SL_STDSTR: /* CONDITIONAL saveload types depend on the savegame version */ if (!SlIsObjectValidInSavegame(sld)) return false; if (SlSkipVariableOnLoad(sld)) return false; @@ -1510,6 +1580,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld) case SL_STR: SlString(ptr, sld->length, sld->conv); break; case SL_LST: SlList(ptr, (SLRefType)conv); break; case SL_DEQUE: SlDeque(ptr, conv); break; + case SL_STDSTR: SlStdString(ptr, sld->conv); break; default: NOT_REACHED(); } break; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 5065e568ba..01a074bd80 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -485,6 +485,7 @@ enum SaveLoadTypes { SL_STR = 3, ///< Save/load a string. SL_LST = 4, ///< Save/load a list. SL_DEQUE = 5, ///< Save/load a deque. + SL_STDSTR = 6, ///< Save/load a \c std::string. /* non-normal save-load types */ SL_WRITEBYTE = 8, SL_VEH_INCLUDE = 9, @@ -567,6 +568,16 @@ typedef SaveLoad SaveLoadGlobVarList; */ #define SLE_CONDSTR(base, variable, type, length, from, to) SLE_GENERAL(SL_STR, base, variable, type, length, from, to) +/** + * Storage of a \c std::string in some savegame versions. + * @param base Name of the class or struct containing the string. + * @param variable Name of the variable in the class or struct referenced by \a base. + * @param type Storage of the data in memory and in the savegame. + * @param from First savegame version that has the string. + * @param to Last savegame version that has the string. + */ +#define SLE_CONDSSTR(base, variable, type, from, to) SLE_GENERAL(SL_STDSTR, base, variable, type, 0, from, to) + /** * Storage of a list in some savegame versions. * @param base Name of the class or struct containing the list. @@ -621,6 +632,14 @@ typedef SaveLoad SaveLoadGlobVarList; */ #define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION) +/** + * Storage of a \c std::string in every savegame version. + * @param base Name of the class or struct containing the string. + * @param variable Name of the variable in the class or struct referenced by \a base. + * @param type Storage of the data in memory and in the savegame. + */ +#define SLE_SSTR(base, variable, type) SLE_CONDSSTR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION) + /** * Storage of a list in every savegame version. * @param base Name of the class or struct containing the list. @@ -701,6 +720,15 @@ typedef SaveLoad SaveLoadGlobVarList; */ #define SLEG_CONDSTR(variable, type, length, from, to) SLEG_GENERAL(SL_STR, variable, type, length, from, to) +/** + * Storage of a global \c std::string in some savegame versions. + * @param variable Name of the global variable. + * @param type Storage of the data in memory and in the savegame. + * @param from First savegame version that has the string. + * @param to Last savegame version that has the string. + */ +#define SLEG_CONDSSTR(variable, type, from, to) SLEG_GENERAL(SL_STDSTR, variable, type, 0, from, to) + /** * Storage of a global list in some savegame versions. * @param variable Name of the global variable. @@ -738,6 +766,13 @@ typedef SaveLoad SaveLoadGlobVarList; */ #define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), SL_MIN_VERSION, SL_MAX_VERSION) +/** + * Storage of a global \c std::string in every savegame version. + * @param variable Name of the global variable. + * @param type Storage of the data in memory and in the savegame. + */ +#define SLEG_SSTR(variable, type) SLEG_CONDSSTR(variable, type, SL_MIN_VERSION, SL_MAX_VERSION) + /** * Storage of a global list in every savegame version. * @param variable Name of the global variable. From 63ccb36ef3ecd53a503c0e9fea87f0784802af0f Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:31:59 +0200 Subject: [PATCH 119/601] Codechange: Use std::string for most of the user-settable custom names. --- src/aircraft_cmd.cpp | 2 +- src/base_consist.cpp | 7 +---- src/base_consist.h | 6 ++-- src/base_station_base.h | 4 +-- src/company_base.h | 13 +++------ src/company_cmd.cpp | 20 +++++++------ src/depot.cpp | 2 -- src/depot_base.h | 2 +- src/depot_cmd.cpp | 8 ++---- src/engine.cpp | 10 ++----- src/engine_base.h | 2 +- src/fios_gui.cpp | 4 +-- src/group.h | 4 +-- src/group_cmd.cpp | 13 ++++----- src/saveload/afterload.cpp | 12 ++++---- src/saveload/company_sl.cpp | 6 ++-- src/saveload/depot_sl.cpp | 2 +- src/saveload/engine_sl.cpp | 4 +-- src/saveload/group_sl.cpp | 2 +- src/saveload/saveload.cpp | 4 ++- src/saveload/saveload_internal.h | 2 +- src/saveload/signs_sl.cpp | 2 +- src/saveload/station_sl.cpp | 7 ++--- src/saveload/strings_sl.cpp | 22 ++++++-------- src/saveload/town_sl.cpp | 4 +-- src/saveload/vehicle_sl.cpp | 2 +- src/saveload/waypoint_sl.cpp | 5 ++-- src/signs.cpp | 2 -- src/signs_base.h | 3 +- src/signs_cmd.cpp | 4 +-- src/signs_gui.cpp | 13 +++------ src/station.cpp | 1 - src/station_cmd.cpp | 9 ++++-- src/strings.cpp | 40 +++++++++++++------------- src/town.h | 8 +++--- src/town_cmd.cpp | 16 +++++------ src/town_gui.cpp | 8 +++--- src/townname.cpp | 2 +- src/vehicle_cmd.cpp | 49 +++++++++++++++++++------------- src/vehicle_gui.cpp | 2 +- src/waypoint_cmd.cpp | 9 ++++-- 41 files changed, 160 insertions(+), 177 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index e13658d6fe..eec375d756 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -309,7 +309,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * v->cargo_type = e->GetDefaultCargoType(); u->cargo_type = CT_MAIL; - v->name = nullptr; + v->name.clear(); v->last_station_visited = INVALID_STATION; v->last_loading_station = INVALID_STATION; diff --git a/src/base_consist.cpp b/src/base_consist.cpp index 462f63f2e5..ad9d476b66 100644 --- a/src/base_consist.cpp +++ b/src/base_consist.cpp @@ -14,10 +14,6 @@ #include "safeguards.h" -BaseConsist::~BaseConsist() -{ - free(this->name); -} /** * Copy properties of other BaseConsist. @@ -27,8 +23,7 @@ void BaseConsist::CopyConsistPropertiesFrom(const BaseConsist *src) { if (this == src) return; - free(this->name); - this->name = src->name != nullptr ? stredup(src->name) : nullptr; + this->name = src->name; this->current_order_time = src->current_order_time; this->lateness_counter = src->lateness_counter; diff --git a/src/base_consist.h b/src/base_consist.h index 619229d2a6..a67b9fb6fc 100644 --- a/src/base_consist.h +++ b/src/base_consist.h @@ -12,10 +12,11 @@ #include "order_type.h" #include "date_type.h" +#include /** Various front vehicle properties that are preserved when autoreplacing, using order-backup or switching front engines within a consist. */ struct BaseConsist { - char *name; ///< Name of vehicle + std::string name; ///< Name of vehicle /* Used for timetabling. */ uint32 current_order_time; ///< How many ticks have passed since this order started. @@ -29,8 +30,7 @@ struct BaseConsist { uint16 vehicle_flags; ///< Used for gradual loading and other miscellaneous things (@see VehicleFlags enum) - BaseConsist() : name(nullptr) {} - virtual ~BaseConsist(); + virtual ~BaseConsist() {} void CopyConsistPropertiesFrom(const BaseConsist *src); }; diff --git a/src/base_station_base.h b/src/base_station_base.h index 0467866e50..40543f1b8f 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -54,7 +54,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { TrackedViewportSign sign; ///< NOSAVE: Dimensions of sign byte delete_ctr; ///< Delete counter. If greater than 0 then it is decremented until it reaches 0; the waypoint is then is deleted. - char *name; ///< Custom name + std::string name; ///< Custom name StringID string_id; ///< Default name (town area) of station mutable std::string cached_name; ///< NOSAVE: Cache of the resolved name of the station, if not using a custom name @@ -111,7 +111,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { inline const char *GetCachedName() const { - if (this->name != nullptr) return this->name; + if (!this->name.empty()) return this->name.c_str(); if (this->cached_name.empty()) this->FillCachedName(); return this->cached_name.c_str(); } diff --git a/src/company_base.h b/src/company_base.h index 095f7d9e6c..e21bf9bf3d 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -16,6 +16,7 @@ #include "tile_type.h" #include "settings_type.h" #include "group.h" +#include /** Statistics about the economy. */ struct CompanyEconomyEntry { @@ -54,11 +55,11 @@ extern CompanyPool _company_pool; struct CompanyProperties { uint32 name_2; ///< Parameter of #name_1. StringID name_1; ///< Name of the company if the user did not change it. - char *name; ///< Name of the company if the user changed it. + std::string name; ///< Name of the company if the user changed it. StringID president_name_1; ///< Name of the president if the user did not change it. uint32 president_name_2; ///< Parameter of #president_name_1 - char *president_name; ///< Name of the president if the user changed it. + std::string president_name; ///< Name of the president if the user changed it. CompanyManagerFace face; ///< Face description of the president. @@ -99,17 +100,11 @@ struct CompanyProperties { // TODO: Change some of these member variables to use relevant INVALID_xxx constants CompanyProperties() - : name_2(0), name_1(0), name(nullptr), president_name_1(0), president_name_2(0), president_name(nullptr), + : name_2(0), name_1(0), president_name_1(0), president_name_2(0), face(0), money(0), money_fraction(0), current_loan(0), colour(0), block_preview(0), location_of_HQ(0), last_build_coordinate(0), share_owners(), inaugurated_year(0), months_of_bankruptcy(0), bankrupt_asked(0), bankrupt_timeout(0), bankrupt_value(0), terraform_limit(0), clear_limit(0), tree_limit(0), is_ai(false) {} - - ~CompanyProperties() - { - free(this->name); - free(this->president_name); - } }; struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties { diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 835a7c4a8b..25b3fe6fbb 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -353,7 +353,7 @@ static void GenerateCompanyName(Company *c) StringID str; uint32 strp; - if (t->name == nullptr && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) { + if (t->name.empty() && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) { str = t->townnametype - SPECSTR_TOWNNAME_START + SPECSTR_COMPANY_NAME_START; strp = t->townnameparts; @@ -1043,7 +1043,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, static bool IsUniqueCompanyName(const char *name) { for (const Company *c : Company::Iterate()) { - if (c->name != nullptr && strcmp(c->name, name) == 0) return false; + if (!c->name.empty() && c->name == name) return false; } return true; @@ -1069,8 +1069,11 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin if (flags & DC_EXEC) { Company *c = Company::Get(_current_company); - free(c->name); - c->name = reset ? nullptr : stredup(text); + if (reset) { + c->name.clear(); + } else { + c->name = text; + } MarkWholeScreenDirty(); CompanyAdminUpdate(c); } @@ -1086,7 +1089,7 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin static bool IsUniquePresidentName(const char *name) { for (const Company *c : Company::Iterate()) { - if (c->president_name != nullptr && strcmp(c->president_name, name) == 0) return false; + if (!c->president_name.empty() && c->president_name == name) return false; } return true; @@ -1112,14 +1115,13 @@ CommandCost CmdRenamePresident(TileIndex tile, DoCommandFlag flags, uint32 p1, u if (flags & DC_EXEC) { Company *c = Company::Get(_current_company); - free(c->president_name); if (reset) { - c->president_name = nullptr; + c->president_name.clear(); } else { - c->president_name = stredup(text); + c->president_name = text; - if (c->name_1 == STR_SV_UNNAMED && c->name == nullptr) { + if (c->name_1 == STR_SV_UNNAMED && c->name.empty()) { char buf[80]; seprintf(buf, lastof(buf), "%s Transport", text); diff --git a/src/depot.cpp b/src/depot.cpp index 9207c63629..05e2af3d4a 100644 --- a/src/depot.cpp +++ b/src/depot.cpp @@ -27,8 +27,6 @@ INSTANTIATE_POOL_METHODS(Depot) */ Depot::~Depot() { - free(this->name); - if (CleaningPool()) return; if (!IsDepotTile(this->xy) || GetDepotIndex(this->xy) != this->index) { diff --git a/src/depot_base.h b/src/depot_base.h index aab2b2ae42..f4c52cffe8 100644 --- a/src/depot_base.h +++ b/src/depot_base.h @@ -18,7 +18,7 @@ extern DepotPool _depot_pool; struct Depot : DepotPool::PoolItem<&_depot_pool> { Town *town; - char *name; + std::string name; TileIndex xy; uint16 town_cn; ///< The N-1th depot for this town (consecutive number) diff --git a/src/depot_cmd.cpp b/src/depot_cmd.cpp index a142fbe7d3..9379afb82f 100644 --- a/src/depot_cmd.cpp +++ b/src/depot_cmd.cpp @@ -29,7 +29,7 @@ static bool IsUniqueDepotName(const char *name) { for (const Depot *d : Depot::Iterate()) { - if (d->name != nullptr && strcmp(d->name, name) == 0) return false; + if (!d->name.empty() && d->name == name) return false; } return true; @@ -60,13 +60,11 @@ CommandCost CmdRenameDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } if (flags & DC_EXEC) { - free(d->name); - if (reset) { - d->name = nullptr; + d->name.clear(); MakeDefaultName(d); } else { - d->name = stredup(text); + d->name = text; } /* Update the orders and depot */ diff --git a/src/engine.cpp b/src/engine.cpp index c3e9329fb7..41849b8a21 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -67,7 +67,6 @@ assert_compile(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_i const uint EngineOverrideManager::NUM_DEFAULT_ENGINES = _engine_counts[VEH_TRAIN] + _engine_counts[VEH_ROAD] + _engine_counts[VEH_SHIP] + _engine_counts[VEH_AIRCRAFT]; Engine::Engine() : - name(nullptr), overrides_count(0), overrides(nullptr) { @@ -140,7 +139,6 @@ Engine::Engine(VehicleType type, EngineID base) Engine::~Engine() { UnloadWagonOverrides(this); - free(this->name); } /** @@ -1069,7 +1067,7 @@ void EnginesMonthlyLoop() static bool IsUniqueEngineName(const char *name) { for (const Engine *e : Engine::Iterate()) { - if (e->name != nullptr && strcmp(e->name, name) == 0) return false; + if (!e->name.empty() && e->name == name) return false; } return true; @@ -1097,12 +1095,10 @@ CommandCost CmdRenameEngine(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } if (flags & DC_EXEC) { - free(e->name); - if (reset) { - e->name = nullptr; + e->name.clear(); } else { - e->name = stredup(text); + e->name = text; } MarkWholeScreenDirty(); diff --git a/src/engine_base.h b/src/engine_base.h index 203d35f201..f388e894ba 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -19,7 +19,7 @@ typedef Pool EnginePool; extern EnginePool _engine_pool; struct Engine : EnginePool::PoolItem<&_engine_pool> { - char *name; ///< Custom name of engine. + std::string name; ///< Custom name of engine. Date intro_date; ///< Date of introduction of the engine. Date age; uint16 reliability; ///< Current reliability of the engine. diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 9f8b45413f..47f7e1e2dd 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -533,9 +533,9 @@ public: for (auto &pair : _load_check_data.companies) { SetDParam(0, pair.first + 1); const CompanyProperties &c = *pair.second; - if (c.name != nullptr) { + if (!c.name.empty()) { SetDParam(1, STR_JUST_RAW_STRING); - SetDParamStr(2, c.name); + SetDParamStr(2, c.name.c_str()); } else { SetDParam(1, c.name_1); SetDParam(2, c.name_2); diff --git a/src/group.h b/src/group.h index aeb7f581a8..1be8d8b01f 100644 --- a/src/group.h +++ b/src/group.h @@ -16,6 +16,7 @@ #include "vehicle_type.h" #include "engine_type.h" #include "livery.h" +#include typedef Pool GroupPool; extern GroupPool _group_pool; ///< Pool of groups. @@ -63,7 +64,7 @@ struct GroupStatistics { /** Group data. */ struct Group : GroupPool::PoolItem<&_group_pool> { - char *name; ///< Group Name + std::string name; ///< Group Name Owner owner; ///< Group Owner VehicleType vehicle_type; ///< Vehicle type of the group @@ -76,7 +77,6 @@ struct Group : GroupPool::PoolItem<&_group_pool> { GroupID parent; ///< Parent group Group(CompanyID owner = INVALID_COMPANY); - ~Group(); }; diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 497d74d68b..fd63bd153a 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -290,11 +290,6 @@ Group::Group(Owner owner) this->folded = false; } -Group::~Group() -{ - free(this->name); -} - /** * Create a new vehicle group. @@ -422,10 +417,12 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } if (flags & DC_EXEC) { - /* Delete the old name */ - free(g->name); /* Assign the new one */ - g->name = reset ? nullptr : stredup(text); + if (reset) { + g->name.clear(); + } else { + g->name = text; + } } } else { /* Set group parent */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index fa95303f69..cc2a671a2f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -645,20 +645,20 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_84)) { for (Company *c : Company::Iterate()) { c->name = CopyFromOldName(c->name_1); - if (c->name != nullptr) c->name_1 = STR_SV_UNNAMED; + if (!c->name.empty()) c->name_1 = STR_SV_UNNAMED; c->president_name = CopyFromOldName(c->president_name_1); - if (c->president_name != nullptr) c->president_name_1 = SPECSTR_PRESIDENT_NAME; + if (!c->president_name.empty()) c->president_name_1 = SPECSTR_PRESIDENT_NAME; } 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; + if (!st->name.empty()) st->string_id = STR_SV_STNAME_FALLBACK; } 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; + if (!t->name.empty()) t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name; } } @@ -2502,11 +2502,11 @@ bool AfterLoadGame() * highest possible number to get them numbered in the * order they have in the pool. */ for (Waypoint *wp : Waypoint::Iterate()) { - if (wp->name != nullptr) wp->town_cn = UINT16_MAX; + if (!wp->name.empty()) wp->town_cn = UINT16_MAX; } for (Waypoint* wp : Waypoint::Iterate()) { - if (wp->name != nullptr) MakeDefaultName(wp); + if (!wp->name.empty()) MakeDefaultName(wp); } } diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 5b9266c7b4..6f98c7afa1 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -242,11 +242,11 @@ void AfterLoadCompanyStats() static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, name_2, SLE_UINT32), SLE_VAR(CompanyProperties, name_1, SLE_STRINGID), - SLE_CONDSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_VAR(CompanyProperties, president_name_1, SLE_STRINGID), SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32), - SLE_CONDSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_VAR(CompanyProperties, face, SLE_UINT32), @@ -519,7 +519,7 @@ static void Check_PLYR() } } - if (cprops->name == nullptr && !IsInsideMM(cprops->name_1, SPECSTR_COMPANY_NAME_START, SPECSTR_COMPANY_NAME_LAST + 1) && + if (cprops->name.empty() && !IsInsideMM(cprops->name_1, SPECSTR_COMPANY_NAME_START, SPECSTR_COMPANY_NAME_LAST + 1) && cprops->name_1 != STR_GAME_SAVELOAD_NOT_AVAILABLE && cprops->name_1 != STR_SV_UNNAMED && cprops->name_1 != SPECSTR_ANDCO_NAME && cprops->name_1 != SPECSTR_PRESIDENT_NAME && cprops->name_1 != SPECSTR_SILLY_NAME) { diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp index eb4b9384bc..bd84faefc0 100644 --- a/src/saveload/depot_sl.cpp +++ b/src/saveload/depot_sl.cpp @@ -23,7 +23,7 @@ static const SaveLoad _depot_desc[] = { SLEG_CONDVAR(_town_index, SLE_UINT16, SL_MIN_VERSION, SLV_141), SLE_CONDREF(Depot, town, REF_TOWN, SLV_141, SL_MAX_VERSION), SLE_CONDVAR(Depot, town_cn, SLE_UINT16, SLV_141, SL_MAX_VERSION), - SLE_CONDSTR(Depot, name, SLE_STR, 0, SLV_141, SL_MAX_VERSION), + SLE_CONDSSTR(Depot, name, SLE_STR, SLV_141, SL_MAX_VERSION), SLE_CONDVAR(Depot, build_date, SLE_INT32, SLV_142, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 44ba6498ef..863aabff07 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -39,7 +39,7 @@ static const SaveLoad _engine_desc[] = { SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104), SLE_CONDVAR(Engine, company_avail, SLE_UINT16, SLV_104, SL_MAX_VERSION), SLE_CONDVAR(Engine, company_hidden, SLE_UINT16, SLV_193, SL_MAX_VERSION), - SLE_CONDSTR(Engine, name, SLE_STR, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(Engine, name, SLE_STR, SLV_84, SL_MAX_VERSION), SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space @@ -137,7 +137,7 @@ void CopyTempEngineData() e->preview_wait = se->preview_wait; e->company_avail = se->company_avail; e->company_hidden = se->company_hidden; - if (se->name != nullptr) e->name = stredup(se->name); + e->name = se->name; } ResetTempEngineData(); diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 33c63ee44f..cae313ff83 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -17,7 +17,7 @@ static const SaveLoad _group_desc[] = { SLE_CONDVAR(Group, name, SLE_NAME, SL_MIN_VERSION, SLV_84), - SLE_CONDSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), // num_vehicle SLE_VAR(Group, owner, SLE_UINT8), SLE_VAR(Group, vehicle_type, SLE_UINT8), diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 7a41f4c405..4da89aa847 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -793,7 +793,7 @@ void WriteValue(void *ptr, VarType conv, int64 val) case SLE_VAR_U32: *(uint32*)ptr = val; break; case SLE_VAR_I64: *(int64 *)ptr = val; break; case SLE_VAR_U64: *(uint64*)ptr = val; break; - case SLE_VAR_NAME: *(char**)ptr = CopyFromOldName(val); break; + case SLE_VAR_NAME: *reinterpret_cast(ptr) = CopyFromOldName(val); break; case SLE_VAR_NULL: break; default: NOT_REACHED(); } @@ -1515,6 +1515,8 @@ static bool IsVariableSizeRight(const SaveLoad *sld) case SLE_VAR_I64: case SLE_VAR_U64: return sld->size == sizeof(int64); + case SLE_VAR_NAME: + return sld->size == sizeof(std::string); default: return sld->size == sizeof(void *); } diff --git a/src/saveload/saveload_internal.h b/src/saveload/saveload_internal.h index 8a3f433c22..bca0e87cda 100644 --- a/src/saveload/saveload_internal.h +++ b/src/saveload/saveload_internal.h @@ -17,7 +17,7 @@ void InitializeOldNames(); StringID RemapOldStringID(StringID s); -char *CopyFromOldName(StringID id); +std::string CopyFromOldName(StringID id); void ResetOldNames(); void ResetOldWaypoints(); diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index 0be96e9821..99e24435b9 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -18,7 +18,7 @@ /** Description of a sign within the savegame. */ static const SaveLoad _sign_desc[] = { SLE_CONDVAR(Sign, name, SLE_NAME, SL_MIN_VERSION, SLV_84), - SLE_CONDSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5), SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5), SLE_CONDVAR(Sign, x, SLE_INT32, SLV_5, SL_MAX_VERSION), diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 1d3612ae31..c4d157c0f4 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -62,8 +62,7 @@ void MoveBuoysToWaypoints() TileIndex xy = st->xy; Town *town = st->town; StringID string_id = st->string_id; - char *name = st->name; - st->name = nullptr; + std::string name = st->name; Date build_date = st->build_date; /* TTDPatch could use "buoys with rail station" for rail waypoints */ bool train = st->train_station.tile != INVALID_TILE; @@ -176,7 +175,7 @@ static const SaveLoad _old_station_desc[] = { SLE_CONDNULL(1, SL_MIN_VERSION, SLV_4), ///< alpha_order SLE_VAR(Station, string_id, SLE_STRINGID), - SLE_CONDSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_CONDVAR(Station, indtype, SLE_UINT8, SLV_103, SL_MAX_VERSION), SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_122), SLE_CONDVAR(Station, had_vehicle_of_type, SLE_UINT8, SLV_122, SL_MAX_VERSION), @@ -389,7 +388,7 @@ static const SaveLoad _base_station_desc[] = { SLE_VAR(BaseStation, xy, SLE_UINT32), SLE_REF(BaseStation, town, REF_TOWN), SLE_VAR(BaseStation, string_id, SLE_STRINGID), - SLE_STR(BaseStation, name, SLE_STR | SLF_ALLOW_CONTROL, 0), + SLE_SSTR(BaseStation, name, SLE_STR | SLF_ALLOW_CONTROL), SLE_VAR(BaseStation, delete_ctr, SLE_UINT8), SLE_VAR(BaseStation, owner, SLE_UINT8), SLE_VAR(BaseStation, facilities, SLE_UINT8), diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp index dce8fdedb7..dad7eb1abd 100644 --- a/src/saveload/strings_sl.cpp +++ b/src/saveload/strings_sl.cpp @@ -11,6 +11,7 @@ #include "../string_func.h" #include "../strings_func.h" #include "saveload_internal.h" +#include #include "table/strings.h" @@ -56,18 +57,17 @@ char *_old_name_array = nullptr; * @param id the StringID of the custom name to clone. * @return the clones custom name. */ -char *CopyFromOldName(StringID id) +std::string CopyFromOldName(StringID id) { /* Is this name an (old) custom name? */ - if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return nullptr; + if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return std::string(); if (IsSavegameVersionBefore(SLV_37)) { - /* Allow for expansion when converted to UTF-8. */ - char tmp[LEN_OLD_STRINGS * MAX_CHAR_LENGTH]; uint offs = _savegame_type == SGT_TTO ? LEN_OLD_STRINGS_TTO * GB(id, 0, 8) : LEN_OLD_STRINGS * GB(id, 0, 9); const char *strfrom = &_old_name_array[offs]; - char *strto = tmp; + std::ostringstream tmp; + std::ostreambuf_iterator strto(tmp); for (; *strfrom != '\0'; strfrom++) { WChar c = (byte)*strfrom; @@ -84,19 +84,13 @@ char *CopyFromOldName(StringID id) default: break; } - /* Check character will fit into our buffer. */ - if (strto + Utf8CharLen(c) > lastof(tmp)) break; - - strto += Utf8Encode(strto, c); + Utf8Encode(strto, c); } - /* Terminate the new string and copy it back to the name array */ - *strto = '\0'; - - return stredup(tmp); + return tmp.str(); } else { /* Name will already be in UTF-8. */ - return stredup(&_old_name_array[LEN_OLD_STRINGS * GB(id, 0, 9)]); + return std::string(&_old_name_array[LEN_OLD_STRINGS * GB(id, 0, 9)]); } } diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 6fe1439b4e..cbf7205d07 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -124,7 +124,7 @@ static const SaveLoad _town_desc[] = { SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, SLV_66, SL_MAX_VERSION), SLE_VAR(Town, townnametype, SLE_UINT16), SLE_VAR(Town, townnameparts, SLE_UINT32), - SLE_CONDSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_VAR(Town, flags, SLE_UINT8), SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104), @@ -167,7 +167,7 @@ static const SaveLoad _town_desc[] = { SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION), - SLE_CONDSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_168, SL_MAX_VERSION), + SLE_CONDSSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, SLV_168, SL_MAX_VERSION), SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_54), SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_54), diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 3569507c79..321ad53a69 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -585,7 +585,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_REF(Vehicle, next, REF_VEHICLE_OLD), SLE_CONDVAR(Vehicle, name, SLE_NAME, SL_MIN_VERSION, SLV_84), - SLE_CONDSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_8), SLE_CONDVAR(Vehicle, unitnumber, SLE_UINT16, SLV_8, SL_MAX_VERSION), SLE_VAR(Vehicle, owner, SLE_UINT8), diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 5336d247b4..4117a591ee 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -29,7 +29,7 @@ struct OldWaypoint { Town *town; uint16 town_cn; StringID string_id; - char *name; + std::string name; uint8 delete_ctr; Date build_date; uint8 localidx; @@ -172,7 +172,7 @@ static const SaveLoad _old_waypoint_desc[] = { SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, SLV_12, SLV_89), SLE_CONDVAR(OldWaypoint, town_cn, SLE_UINT16, SLV_89, SL_MAX_VERSION), SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, SL_MIN_VERSION, SLV_84), - SLE_CONDSTR(OldWaypoint, name, SLE_STR, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDSSTR(OldWaypoint, name, SLE_STR, SLV_84, SL_MAX_VERSION), SLE_VAR(OldWaypoint, delete_ctr, SLE_UINT8), SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, SLV_3, SLV_31), @@ -194,7 +194,6 @@ static void Load_WAYP() while ((index = SlIterateArray()) != -1) { /*C++17: OldWaypoint *wp = &*/ _old_waypoints.emplace_back(); OldWaypoint *wp = &_old_waypoints.back(); - memset(wp, 0, sizeof(*wp)); wp->index = index; SlObject(wp, _old_waypoint_desc); diff --git a/src/signs.cpp b/src/signs.cpp index f477ab7641..3e0e7a7a33 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -34,8 +34,6 @@ Sign::Sign(Owner owner) /** Destroy the sign */ Sign::~Sign() { - free(this->name); - if (CleaningPool()) return; DeleteRenameSignWindow(this->index); diff --git a/src/signs_base.h b/src/signs_base.h index 6cc7dc6d80..795f3b8e58 100644 --- a/src/signs_base.h +++ b/src/signs_base.h @@ -14,12 +14,13 @@ #include "viewport_type.h" #include "core/pool_type.hpp" #include "company_type.h" +#include typedef Pool SignPool; extern SignPool _sign_pool; struct Sign : SignPool::PoolItem<&_sign_pool> { - char *name; + std::string name; TrackedViewportSign sign; int32 x; int32 y; diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp index d2caa4a235..a0843917d8 100644 --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -86,10 +86,8 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (Utf8StringLength(text) >= MAX_LENGTH_SIGN_NAME_CHARS) return CMD_ERROR; if (flags & DC_EXEC) { - /* Delete the old name */ - free(si->name); /* Assign the new one */ - si->name = stredup(text); + si->name = text; if (_game_mode != GM_EDITOR) si->owner = _current_company; si->UpdateVirtCoord(); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index ea3de70085..0bb1a0909b 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -75,11 +75,8 @@ struct SignList { * a lot of them. Therefore a worthwhile performance gain can be made by * directly comparing Sign::name instead of going through the string * system for each comparison. */ - const char *a_name = a->name; - const char *b_name = b->name; - - if (a_name == nullptr) a_name = SignList::default_name; - if (b_name == nullptr) b_name = SignList::default_name; + const char *a_name = a->name.empty() ? SignList::default_name : a->name.c_str(); + const char *b_name = b->name.empty() ? SignList::default_name : b->name.c_str(); int r = strnatcmp(a_name, b_name); // Sort by name (natural sorting). @@ -95,9 +92,7 @@ struct SignList { static bool CDECL SignNameFilter(const Sign * const *a, StringFilter &filter) { /* Same performance benefit as above for sorting. */ - const char *a_name = (*a)->name; - - if (a_name == nullptr) a_name = SignList::default_name; + const char *a_name = (*a)->name.empty() ? SignList::default_name : (*a)->name.c_str(); filter.ResetState(); filter.AddLine(a_name); @@ -439,7 +434,7 @@ struct SignWindow : Window, SignList { void UpdateSignEditWindow(const Sign *si) { /* Display an empty string when the sign hasn't been edited yet */ - if (si->name != nullptr) { + if (!si->name.empty()) { SetDParam(0, si->index); this->name_editbox.text.Assign(STR_SIGN_NAME); } else { diff --git a/src/station.cpp b/src/station.cpp index ec332e0bb2..6f55574acf 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -51,7 +51,6 @@ void RebuildStationKdtree() BaseStation::~BaseStation() { - free(this->name); free(this->speclist); if (CleaningPool()) return; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 6cfd94bb2f..7bce21353d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3917,7 +3917,7 @@ static uint UpdateStationWaiting(Station *st, CargoID type, uint amount, SourceT static bool IsUniqueStationName(const char *name) { for (const Station *st : Station::Iterate()) { - if (st->name != nullptr && strcmp(st->name, name) == 0) return false; + if (!st->name.empty() && st->name == name) return false; } return true; @@ -3949,8 +3949,11 @@ CommandCost CmdRenameStation(TileIndex tile, DoCommandFlag flags, uint32 p1, uin if (flags & DC_EXEC) { st->cached_name.clear(); - free(st->name); - st->name = reset ? nullptr : stredup(text); + if (reset) { + st->name.clear(); + } else { + st->name = text; + } st->UpdateVirtCoord(); InvalidateWindowData(WC_STATION_LIST, st->owner, 1); diff --git a/src/strings.cpp b/src/strings.cpp index c65f866360..f7ef999859 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1270,8 +1270,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Company *c = Company::GetIfValid(args->GetInt32()); if (c == nullptr) break; - if (c->name != nullptr) { - int64 args_array[] = {(int64)(size_t)c->name}; + if (!c->name.empty()) { + int64 args_array[] = {(int64)(size_t)c->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1305,8 +1305,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } const Depot *d = Depot::Get(args->GetInt32()); - if (d->name != nullptr) { - int64 args_array[] = {(int64)(size_t)d->name}; + if (!d->name.empty()) { + int64 args_array[] = {(int64)(size_t)d->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1321,8 +1321,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Engine *e = Engine::GetIfValid(args->GetInt32(SCC_ENGINE_NAME)); if (e == nullptr) break; - if (e->name != nullptr && e->IsEnabled()) { - int64 args_array[] = {(int64)(size_t)e->name}; + if (!e->name.empty() && e->IsEnabled()) { + int64 args_array[] = {(int64)(size_t)e->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1336,8 +1336,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Group *g = Group::GetIfValid(args->GetInt32()); if (g == nullptr) break; - if (g->name != nullptr) { - int64 args_array[] = {(int64)(size_t)g->name}; + if (!g->name.empty()) { + int64 args_array[] = {(int64)(size_t)g->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1373,8 +1373,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Company *c = Company::GetIfValid(args->GetInt32(SCC_PRESIDENT_NAME)); if (c == nullptr) break; - if (c->president_name != nullptr) { - int64 args_array[] = {(int64)(size_t)c->president_name}; + if (!c->president_name.empty()) { + int64 args_array[] = {(int64)(size_t)c->president_name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1398,8 +1398,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg break; } - if (st->name != nullptr) { - int64 args_array[] = {(int64)(size_t)st->name}; + if (!st->name.empty()) { + int64 args_array[] = {(int64)(size_t)st->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1428,8 +1428,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Town *t = Town::GetIfValid(args->GetInt32(SCC_TOWN_NAME)); if (t == nullptr) break; - if (t->name != nullptr) { - int64 args_array[] = {(int64)(size_t)t->name}; + if (!t->name.empty()) { + int64 args_array[] = {(int64)(size_t)t->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1442,8 +1442,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg Waypoint *wp = Waypoint::GetIfValid(args->GetInt32(SCC_WAYPOINT_NAME)); if (wp == nullptr) break; - if (wp->name != nullptr) { - int64 args_array[] = {(int64)(size_t)wp->name}; + if (!wp->name.empty()) { + int64 args_array[] = {(int64)(size_t)wp->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1460,8 +1460,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Vehicle *v = Vehicle::GetIfValid(args->GetInt32(SCC_VEHICLE_NAME)); if (v == nullptr) break; - if (v->name != nullptr) { - int64 args_array[] = {(int64)(size_t)v->name}; + if (!v->name.empty()) { + int64 args_array[] = {(int64)(size_t)v->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { @@ -1486,8 +1486,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg const Sign *si = Sign::GetIfValid(args->GetInt32()); if (si == nullptr) break; - if (si->name != nullptr) { - int64 args_array[] = {(int64)(size_t)si->name}; + if (!si->name.empty()) { + int64 args_array[] = {(int64)(size_t)si->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { diff --git a/src/town.h b/src/town.h index 8399fa63f3..af06fa03c3 100644 --- a/src/town.h +++ b/src/town.h @@ -59,7 +59,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { uint32 townnamegrfid; uint16 townnametype; uint32 townnameparts; - char *name; ///< Custom town name. If nullptr, the town was not renamed and uses the generated name. + std::string name; ///< Custom town name. If empty, the town was not renamed and uses the generated name. mutable std::string cached_name; ///< NOSAVE: Cache of the resolved name of the town, if not using a custom town name byte flags; ///< See #TownFlags. @@ -79,7 +79,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { TransportedCargoStat received[NUM_TE]; ///< Cargo statistics about received cargotypes. uint32 goal[NUM_TE]; ///< Amount of cargo required for the town to grow. - char *text; ///< General text with additional information. + std::string text; ///< General text with additional information. inline byte GetPercentTransported(CargoID cid) const { return this->supplied[cid].old_act * 256 / (this->supplied[cid].old_max + 1); } @@ -133,7 +133,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { inline const char *GetCachedName() const { - if (this->name != nullptr) return this->name; + if (!this->name.empty()) return this->name.c_str(); if (this->cached_name.empty()) this->FillCachedName(); return this->cached_name.c_str(); } @@ -249,7 +249,7 @@ template void MakeDefaultName(T *obj) { /* We only want to set names if it hasn't been set before, or when we're calling from afterload. */ - assert(obj->name == nullptr || obj->town_cn == UINT16_MAX); + assert(obj->name.empty() || obj->town_cn == UINT16_MAX); obj->town = ClosestTownFromTile(obj->xy, UINT_MAX); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 1d550fb028..9372d37111 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -101,9 +101,6 @@ static bool TestTownOwnsBridge(TileIndex tile, const Town *t) Town::~Town() { - free(this->name); - free(this->text); - if (CleaningPool()) return; /* Delete town authority window @@ -1854,7 +1851,7 @@ static CommandCost TownCanBePlacedHere(TileIndex tile) static bool IsUniqueTownName(const char *name) { for (const Town *t : Town::Iterate()) { - if (t->name != nullptr && strcmp(t->name, name) == 0) return false; + if (!t->name.empty() && t->name == name) return false; } return true; @@ -2706,8 +2703,11 @@ CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (flags & DC_EXEC) { t->cached_name.clear(); - free(t->name); - t->name = reset ? nullptr : stredup(text); + if (reset) { + t->name.clear(); + } else { + t->name = text; + } t->UpdateVirtCoord(); InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_RESORT); @@ -2783,8 +2783,8 @@ CommandCost CmdTownSetText(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (t == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { - free(t->text); - t->text = StrEmpty(text) ? nullptr : stredup(text); + t->text.clear(); + if (!StrEmpty(text)) t->text = text; InvalidateWindowData(WC_TOWN_VIEW, p1); } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index bc65322baa..38314f3fb4 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -434,8 +434,8 @@ public: DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_NOISE_IN_TOWN); } - if (this->town->text != nullptr) { - SetDParamStr(0, this->town->text); + if (!this->town->text.empty()) { + SetDParamStr(0, this->town->text.c_str()); DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y += FONT_HEIGHT_NORMAL, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK); } } @@ -516,8 +516,8 @@ public: if (_settings_game.economy.station_noise_level) aimed_height += FONT_HEIGHT_NORMAL; - if (this->town->text != nullptr) { - SetDParamStr(0, this->town->text); + if (!this->town->text.empty()) { + SetDParamStr(0, this->town->text.c_str()); aimed_height += GetStringHeight(STR_JUST_RAW_STRING, width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT); } diff --git a/src/townname.cpp b/src/townname.cpp index 5cc414794a..77dfb448b2 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -97,7 +97,7 @@ bool VerifyTownName(uint32 r, const TownNameParams *par, TownNames *town_names) 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; + const char *buf = t->name.empty() ? nullptr : t->name.c_str(); if (buf == nullptr) { GetTownName(buf2, t, lastof(buf2)); buf = buf2; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 2f0a49ca27..bb1574d4f9 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -30,6 +30,8 @@ #include "newgrf.h" #include "company_base.h" #include "core/random_func.hpp" +#include +#include #include "table/strings.h" @@ -749,7 +751,7 @@ CommandCost CmdDepotMassAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 static bool IsUniqueVehicleName(const char *name) { for (const Vehicle *v : Vehicle::Iterate()) { - if (v->name != nullptr && strcmp(v->name, name) == 0) return false; + if (!v->name.empty() && v->name == name) return false; } return true; @@ -762,42 +764,48 @@ static bool IsUniqueVehicleName(const char *name) */ static void CloneVehicleName(const Vehicle *src, Vehicle *dst) { - char buf[256]; + std::string buf; /* Find the position of the first digit in the last group of digits. */ size_t number_position; - for (number_position = strlen(src->name); number_position > 0; number_position--) { + for (number_position = src->name.length(); number_position > 0; number_position--) { /* The design of UTF-8 lets this work simply without having to check * for UTF-8 sequences. */ if (src->name[number_position - 1] < '0' || src->name[number_position - 1] > '9') break; } /* Format buffer and determine starting number. */ - int num; + long num; byte padding = 0; - if (number_position == strlen(src->name)) { + if (number_position == src->name.length()) { /* No digit at the end, so start at number 2. */ - strecpy(buf, src->name, lastof(buf)); - strecat(buf, " ", lastof(buf)); - number_position = strlen(buf); + buf = src->name; + buf += " "; + number_position = buf.length(); num = 2; } else { /* Found digits, parse them and start at the next number. */ - strecpy(buf, src->name, lastof(buf)); - buf[number_position] = '\0'; - char *endptr; - num = strtol(&src->name[number_position], &endptr, 10) + 1; - padding = endptr - &src->name[number_position]; + buf = src->name.substr(0, number_position); + + auto num_str = src->name.substr(number_position); + padding = (byte)num_str.length(); + + std::istringstream iss(num_str); + iss >> num; + num++; } /* Check if this name is already taken. */ for (int max_iterations = 1000; max_iterations > 0; max_iterations--, num++) { + std::ostringstream oss; + /* Attach the number to the temporary name. */ - seprintf(&buf[number_position], lastof(buf), "%0*d", padding, num); + oss << buf << std::setw(padding) << std::setfill('0') << std::internal << num; /* Check the name is unique. */ - if (IsUniqueVehicleName(buf)) { - dst->name = stredup(buf); + auto new_name = oss.str(); + if (IsUniqueVehicleName(new_name.c_str())) { + dst->name = new_name; break; } } @@ -973,7 +981,7 @@ CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint DoCommand(0, w_front->index | (p2 & 1 ? CO_SHARE : CO_COPY) << 30, v_front->index, flags, CMD_CLONE_ORDER); /* Now clone the vehicle's name, if it has one. */ - if (v_front->name != nullptr) CloneVehicleName(v_front, w_front); + if (!v_front->name.empty()) CloneVehicleName(v_front, w_front); } /* Since we can't estimate the cost of cloning a vehicle accurately we must @@ -1074,8 +1082,11 @@ CommandCost CmdRenameVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } if (flags & DC_EXEC) { - free(v->name); - v->name = reset ? nullptr : stredup(text); + if (reset) { + v->name.clear(); + } else { + v->name = text; + } InvalidateWindowClassesData(GetWindowClassForVehicleType(v->type), 1); MarkWholeScreenDirty(); } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index bd38ea26ad..79ffffcf09 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1395,7 +1395,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawVehicleImage(v, image_left, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); DrawString(text_left, text_right, y + line_height - FONT_HEIGHT_SMALL - WD_FRAMERECT_BOTTOM - 1, STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR); - if (v->name != nullptr) { + if (!v->name.empty()) { /* The vehicle got a name so we will print it */ SetDParam(0, v->index); DrawString(text_left, text_right, y, STR_TINY_BLACK_VEHICLE); diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 51d791fc28..01cdbc16e0 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -398,7 +398,7 @@ CommandCost RemoveBuoy(TileIndex tile, DoCommandFlag flags) static bool IsUniqueWaypointName(const char *name) { for (const Waypoint *wp : Waypoint::Iterate()) { - if (wp->name != nullptr && strcmp(wp->name, name) == 0) return false; + if (!wp->name.empty() && wp->name == name) return false; } return true; @@ -431,8 +431,11 @@ CommandCost CmdRenameWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1, ui } if (flags & DC_EXEC) { - free(wp->name); - wp->name = reset ? nullptr : stredup(text); + if (reset) { + wp->name.clear(); + } else { + wp->name = text; + } wp->UpdateVirtCoord(); } From 8aef14386fc403ee631f176abf0ec86af7dcd37b Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:32:01 +0200 Subject: [PATCH 120/601] Add: Optional implementation of std::optional for pre-C++17 compilers. Sourced from https://github.com/akrzemi1/Optional, Boost Software License, Version 1.0. --- README.md | 3 + projects/openttd_vs140.vcxproj | 2 + projects/openttd_vs140.vcxproj.filters | 57 +- projects/openttd_vs141.vcxproj | 2 + projects/openttd_vs141.vcxproj.filters | 57 +- projects/openttd_vs142.vcxproj | 10 +- projects/openttd_vs142.vcxproj.filters | 57 +- projects/openttd_vs142.vcxproj.in | 8 +- projects/settingsgen_vs142.vcxproj | 1 + source.list | 4 + src/3rdparty/optional/LICENSE_1_0.txt | 23 + src/3rdparty/optional/optional.hpp | 1066 ++++++++++++++++++++++++ src/3rdparty/optional/ottd_optional.h | 33 + 13 files changed, 1243 insertions(+), 80 deletions(-) create mode 100644 src/3rdparty/optional/LICENSE_1_0.txt create mode 100644 src/3rdparty/optional/optional.hpp create mode 100644 src/3rdparty/optional/ottd_optional.h diff --git a/README.md b/README.md index 230bbf3b6e..4ca83e9b6a 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,9 @@ See the comments in the source files in `src/3rdparty/md5` for the complete lice The implementations of Posix `getaddrinfo` and `getnameinfo` for OS/2 in `src/3rdparty/os2` are distributed partly under the GNU Lesser General Public License 2.1, and partly under the (3-clause) BSD license. The exact licensing terms can be found in `src/3rdparty/os2/getaddrinfo.c` resp. `src/3rdparty/os2/getnameinfo.c`. +The implementation of C++17 `std::optional` in `src/3rdparty/optional` is licensed under the Boost Software License - Version 1.0. +See `src/3rdparty/optional/LICENSE_1_0.txt` for the complete license text. + ## 4.0 Credits diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 6453d62b86..4e7f7b7c8d 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -974,6 +974,8 @@ + + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 0405740d4c..fd5c07157c 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -28,78 +28,81 @@ {c76ff9f1-1e62-46d8-8d55-000000000008} - + {c76ff9f1-1e62-46d8-8d55-000000000009} - + {c76ff9f1-1e62-46d8-8d55-000000000010} - + {c76ff9f1-1e62-46d8-8d55-000000000011} - + {c76ff9f1-1e62-46d8-8d55-000000000012} - + {c76ff9f1-1e62-46d8-8d55-000000000013} - + {c76ff9f1-1e62-46d8-8d55-000000000014} - + {c76ff9f1-1e62-46d8-8d55-000000000015} - + {c76ff9f1-1e62-46d8-8d55-000000000016} - + {c76ff9f1-1e62-46d8-8d55-000000000017} - + {c76ff9f1-1e62-46d8-8d55-000000000018} - + {c76ff9f1-1e62-46d8-8d55-000000000019} - + {c76ff9f1-1e62-46d8-8d55-000000000020} - + {c76ff9f1-1e62-46d8-8d55-000000000021} - + {c76ff9f1-1e62-46d8-8d55-000000000022} - + {c76ff9f1-1e62-46d8-8d55-000000000023} - + {c76ff9f1-1e62-46d8-8d55-000000000024} - + {c76ff9f1-1e62-46d8-8d55-000000000025} - + {c76ff9f1-1e62-46d8-8d55-000000000026} - + {c76ff9f1-1e62-46d8-8d55-000000000027} - + {c76ff9f1-1e62-46d8-8d55-000000000028} - + {c76ff9f1-1e62-46d8-8d55-000000000029} - + {c76ff9f1-1e62-46d8-8d55-000000000030} - + {c76ff9f1-1e62-46d8-8d55-000000000031} - + {c76ff9f1-1e62-46d8-8d55-000000000032} + + {c76ff9f1-1e62-46d8-8d55-000000000033} + @@ -2010,6 +2013,12 @@ MD5 + + Compat + + + Compat + Script diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index ecfed4a038..4ab1ad85df 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -974,6 +974,8 @@ + + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 0405740d4c..fd5c07157c 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -28,78 +28,81 @@ {c76ff9f1-1e62-46d8-8d55-000000000008} - + {c76ff9f1-1e62-46d8-8d55-000000000009} - + {c76ff9f1-1e62-46d8-8d55-000000000010} - + {c76ff9f1-1e62-46d8-8d55-000000000011} - + {c76ff9f1-1e62-46d8-8d55-000000000012} - + {c76ff9f1-1e62-46d8-8d55-000000000013} - + {c76ff9f1-1e62-46d8-8d55-000000000014} - + {c76ff9f1-1e62-46d8-8d55-000000000015} - + {c76ff9f1-1e62-46d8-8d55-000000000016} - + {c76ff9f1-1e62-46d8-8d55-000000000017} - + {c76ff9f1-1e62-46d8-8d55-000000000018} - + {c76ff9f1-1e62-46d8-8d55-000000000019} - + {c76ff9f1-1e62-46d8-8d55-000000000020} - + {c76ff9f1-1e62-46d8-8d55-000000000021} - + {c76ff9f1-1e62-46d8-8d55-000000000022} - + {c76ff9f1-1e62-46d8-8d55-000000000023} - + {c76ff9f1-1e62-46d8-8d55-000000000024} - + {c76ff9f1-1e62-46d8-8d55-000000000025} - + {c76ff9f1-1e62-46d8-8d55-000000000026} - + {c76ff9f1-1e62-46d8-8d55-000000000027} - + {c76ff9f1-1e62-46d8-8d55-000000000028} - + {c76ff9f1-1e62-46d8-8d55-000000000029} - + {c76ff9f1-1e62-46d8-8d55-000000000030} - + {c76ff9f1-1e62-46d8-8d55-000000000031} - + {c76ff9f1-1e62-46d8-8d55-000000000032} + + {c76ff9f1-1e62-46d8-8d55-000000000033} + @@ -2010,6 +2013,12 @@ MD5 + + Compat + + + Compat + Script diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 49858a3e1d..2539fe1d5f 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -100,7 +100,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Full AnySuitable true @@ -168,7 +168,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) @@ -223,7 +223,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Full AnySuitable true @@ -289,7 +289,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) @@ -974,6 +974,8 @@ + + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 0405740d4c..fd5c07157c 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -28,78 +28,81 @@ {c76ff9f1-1e62-46d8-8d55-000000000008} - + {c76ff9f1-1e62-46d8-8d55-000000000009} - + {c76ff9f1-1e62-46d8-8d55-000000000010} - + {c76ff9f1-1e62-46d8-8d55-000000000011} - + {c76ff9f1-1e62-46d8-8d55-000000000012} - + {c76ff9f1-1e62-46d8-8d55-000000000013} - + {c76ff9f1-1e62-46d8-8d55-000000000014} - + {c76ff9f1-1e62-46d8-8d55-000000000015} - + {c76ff9f1-1e62-46d8-8d55-000000000016} - + {c76ff9f1-1e62-46d8-8d55-000000000017} - + {c76ff9f1-1e62-46d8-8d55-000000000018} - + {c76ff9f1-1e62-46d8-8d55-000000000019} - + {c76ff9f1-1e62-46d8-8d55-000000000020} - + {c76ff9f1-1e62-46d8-8d55-000000000021} - + {c76ff9f1-1e62-46d8-8d55-000000000022} - + {c76ff9f1-1e62-46d8-8d55-000000000023} - + {c76ff9f1-1e62-46d8-8d55-000000000024} - + {c76ff9f1-1e62-46d8-8d55-000000000025} - + {c76ff9f1-1e62-46d8-8d55-000000000026} - + {c76ff9f1-1e62-46d8-8d55-000000000027} - + {c76ff9f1-1e62-46d8-8d55-000000000028} - + {c76ff9f1-1e62-46d8-8d55-000000000029} - + {c76ff9f1-1e62-46d8-8d55-000000000030} - + {c76ff9f1-1e62-46d8-8d55-000000000031} - + {c76ff9f1-1e62-46d8-8d55-000000000032} + + {c76ff9f1-1e62-46d8-8d55-000000000033} + @@ -2010,6 +2013,12 @@ MD5 + + Compat + + + Compat + Script diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in index 83befcd8d0..6941b3450b 100644 --- a/projects/openttd_vs142.vcxproj.in +++ b/projects/openttd_vs142.vcxproj.in @@ -100,7 +100,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Full AnySuitable true @@ -168,7 +168,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) @@ -223,7 +223,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Full AnySuitable true @@ -289,7 +289,7 @@ - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj index 23a4e18562..fb2f7a731e 100644 --- a/projects/settingsgen_vs142.vcxproj +++ b/projects/settingsgen_vs142.vcxproj @@ -39,6 +39,7 @@ %(Inputs) + /std:c++latest /Zc:__cplusplus %(AdditionalOptions) MinSpace Size SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) diff --git a/source.list b/source.list index ce3c50729a..cc9d10c998 100644 --- a/source.list +++ b/source.list @@ -691,6 +691,10 @@ table/water_land.h 3rdparty/md5/md5.cpp 3rdparty/md5/md5.h +# Compat +3rdparty/optional/optional.hpp +3rdparty/optional/ottd_optional.h + # Script script/script_config.cpp script/script_config.hpp diff --git a/src/3rdparty/optional/LICENSE_1_0.txt b/src/3rdparty/optional/LICENSE_1_0.txt new file mode 100644 index 0000000000..36b7cd93cd --- /dev/null +++ b/src/3rdparty/optional/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/src/3rdparty/optional/optional.hpp b/src/3rdparty/optional/optional.hpp new file mode 100644 index 0000000000..fe1832b2ae --- /dev/null +++ b/src/3rdparty/optional/optional.hpp @@ -0,0 +1,1066 @@ +// Copyright (C) 2011 - 2012 Andrzej Krzemienski. +// +// Use, modification, and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// The idea and interface is based on Boost.Optional library +// authored by Fernando Luis Cacciola Carballal + +# ifndef ___OPTIONAL_HPP___ +# define ___OPTIONAL_HPP___ + +# include +# include +# include +# include +# include +# include +# include + +# define TR2_OPTIONAL_REQUIRES(...) typename enable_if<__VA_ARGS__::value, bool>::type = false + +# if defined __GNUC__ // NOTE: GNUC is also defined for Clang +# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8) +# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ +# elif (__GNUC__ > 4) +# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ +# endif +# +# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7) +# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___ +# elif (__GNUC__ > 4) +# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___ +# endif +# +# if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) && (__GNUC_PATCHLEVEL__ >= 1) +# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ +# elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9) +# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ +# elif (__GNUC__ > 4) +# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ +# endif +# endif +# +# if defined __clang_major__ +# if (__clang_major__ == 3 && __clang_minor__ >= 5) +# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ +# elif (__clang_major__ > 3) +# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ +# endif +# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ +# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ +# elif (__clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ >= 2) +# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ +# endif +# endif +# +# if defined _MSC_VER +# if (_MSC_VER >= 1900) +# define TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ +# endif +# endif + +# if defined __clang__ +# if (__clang_major__ > 2) || (__clang_major__ == 2) && (__clang_minor__ >= 9) +# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 +# else +# define OPTIONAL_HAS_THIS_RVALUE_REFS 0 +# endif +# elif defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ +# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 +# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ +# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 +# else +# define OPTIONAL_HAS_THIS_RVALUE_REFS 0 +# endif + + +# if defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ +# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 1 +# define OPTIONAL_CONSTEXPR_INIT_LIST constexpr +# else +# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 0 +# define OPTIONAL_CONSTEXPR_INIT_LIST +# endif + +# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ && (defined __cplusplus) && (__cplusplus != 201103L) +# define OPTIONAL_HAS_MOVE_ACCESSORS 1 +# else +# define OPTIONAL_HAS_MOVE_ACCESSORS 0 +# endif + +# // In C++11 constexpr implies const, so we need to make non-const members also non-constexpr +# if (defined __cplusplus) && (__cplusplus == 201103L) +# define OPTIONAL_MUTABLE_CONSTEXPR +# else +# define OPTIONAL_MUTABLE_CONSTEXPR constexpr +# endif + +namespace std{ + +namespace experimental{ + +// BEGIN workaround for missing is_trivially_destructible +# if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ + // leave it: it is already there +# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ + // leave it: it is already there +# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ + // leave it: it is already there +# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS + // leave it: the user doesn't want it +# else + template + using is_trivially_destructible = std::has_trivial_destructor; +# endif +// END workaround for missing is_trivially_destructible + +# if (defined TR2_OPTIONAL_GCC_4_7_AND_HIGHER___) + // leave it; our metafunctions are already defined. +# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ + // leave it; our metafunctions are already defined. +# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ + // leave it: it is already there +# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS + // leave it: the user doesn't want it +# else + + +// workaround for missing traits in GCC and CLANG +template +struct is_nothrow_move_constructible +{ + constexpr static bool value = std::is_nothrow_constructible::value; +}; + + +template +struct is_assignable +{ + template + constexpr static bool has_assign(...) { return false; } + + template () = std::declval(), true)) > + // the comma operator is necessary for the cases where operator= returns void + constexpr static bool has_assign(bool) { return true; } + + constexpr static bool value = has_assign(true); +}; + + +template +struct is_nothrow_move_assignable +{ + template + struct has_nothrow_move_assign { + constexpr static bool value = false; + }; + + template + struct has_nothrow_move_assign { + constexpr static bool value = noexcept( std::declval() = std::declval() ); + }; + + constexpr static bool value = has_nothrow_move_assign::value>::value; +}; +// end workaround + + +# endif + + + +// 20.5.4, optional for object types +template class optional; + +// 20.5.5, optional for lvalue reference types +template class optional; + + +// workaround: std utility functions aren't constexpr yet +template inline constexpr T&& constexpr_forward(typename std::remove_reference::type& t) noexcept +{ + return static_cast(t); +} + +template inline constexpr T&& constexpr_forward(typename std::remove_reference::type&& t) noexcept +{ + static_assert(!std::is_lvalue_reference::value, "!!"); + return static_cast(t); +} + +template inline constexpr typename std::remove_reference::type&& constexpr_move(T&& t) noexcept +{ + return static_cast::type&&>(t); +} + + +#if defined NDEBUG +# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR) +#else +# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) ((CHECK) ? (EXPR) : ([]{assert(!#CHECK);}(), (EXPR))) +#endif + + +namespace detail_ +{ + +// static_addressof: a constexpr version of addressof +template +struct has_overloaded_addressof +{ + template + constexpr static bool has_overload(...) { return false; } + + template ().operator&()) > + constexpr static bool has_overload(bool) { return true; } + + constexpr static bool value = has_overload(true); +}; + +template )> +constexpr T* static_addressof(T& ref) +{ + return &ref; +} + +template )> +T* static_addressof(T& ref) +{ + return std::addressof(ref); +} + + +// the call to convert(b) has return type A and converts b to type A iff b decltype(b) is implicitly convertible to A +template +constexpr U convert(U v) { return v; } + + +namespace swap_ns +{ + using std::swap; + + template + void adl_swap(T& t, T& u) noexcept(noexcept(swap(t, u))) + { + swap(t, u); + } + +} // namespace swap_ns + +} // namespace detail + + +constexpr struct trivial_init_t{} trivial_init{}; + + +// 20.5.6, In-place construction +constexpr struct in_place_t{} in_place{}; + + +// 20.5.7, Disengaged state indicator +struct nullopt_t +{ + struct init{}; + constexpr explicit nullopt_t(init){} +}; +constexpr nullopt_t nullopt{nullopt_t::init()}; + + +// 20.5.8, class bad_optional_access +class bad_optional_access : public logic_error { +public: + explicit bad_optional_access(const string& what_arg) : logic_error{what_arg} {} + explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {} +}; + + +template +union storage_t +{ + unsigned char dummy_; + T value_; + + constexpr storage_t( trivial_init_t ) noexcept : dummy_() {}; + + template + constexpr storage_t( Args&&... args ) : value_(constexpr_forward(args)...) {} + + ~storage_t(){} +}; + + +template +union constexpr_storage_t +{ + unsigned char dummy_; + T value_; + + constexpr constexpr_storage_t( trivial_init_t ) noexcept : dummy_() {}; + + template + constexpr constexpr_storage_t( Args&&... args ) : value_(constexpr_forward(args)...) {} + + ~constexpr_storage_t() = default; +}; + + +template +struct optional_base +{ + bool init_; + storage_t storage_; + + constexpr optional_base() noexcept : init_(false), storage_(trivial_init) {}; + + explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {} + + explicit constexpr optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {} + + template explicit optional_base(in_place_t, Args&&... args) + : init_(true), storage_(constexpr_forward(args)...) {} + + template >)> + explicit optional_base(in_place_t, std::initializer_list il, Args&&... args) + : init_(true), storage_(il, std::forward(args)...) {} + + ~optional_base() { if (init_) storage_.value_.T::~T(); } +}; + + +template +struct constexpr_optional_base +{ + bool init_; + constexpr_storage_t storage_; + + constexpr constexpr_optional_base() noexcept : init_(false), storage_(trivial_init) {}; + + explicit constexpr constexpr_optional_base(const T& v) : init_(true), storage_(v) {} + + explicit constexpr constexpr_optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {} + + template explicit constexpr constexpr_optional_base(in_place_t, Args&&... args) + : init_(true), storage_(constexpr_forward(args)...) {} + + template >)> + OPTIONAL_CONSTEXPR_INIT_LIST explicit constexpr_optional_base(in_place_t, std::initializer_list il, Args&&... args) + : init_(true), storage_(il, std::forward(args)...) {} + + ~constexpr_optional_base() = default; +}; + +template +using OptionalBase = typename std::conditional< + is_trivially_destructible::value, // if possible + constexpr_optional_base::type>, // use base with trivial destructor + optional_base::type> +>::type; + + + +template +class optional : private OptionalBase +{ + static_assert( !std::is_same::type, nullopt_t>::value, "bad T" ); + static_assert( !std::is_same::type, in_place_t>::value, "bad T" ); + + + constexpr bool initialized() const noexcept { return OptionalBase::init_; } + typename std::remove_const::type* dataptr() { return std::addressof(OptionalBase::storage_.value_); } + constexpr const T* dataptr() const { return detail_::static_addressof(OptionalBase::storage_.value_); } + +# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1 + constexpr const T& contained_val() const& { return OptionalBase::storage_.value_; } +# if OPTIONAL_HAS_MOVE_ACCESSORS == 1 + OPTIONAL_MUTABLE_CONSTEXPR T&& contained_val() && { return std::move(OptionalBase::storage_.value_); } + OPTIONAL_MUTABLE_CONSTEXPR T& contained_val() & { return OptionalBase::storage_.value_; } +# else + T& contained_val() & { return OptionalBase::storage_.value_; } + T&& contained_val() && { return std::move(OptionalBase::storage_.value_); } +# endif +# else + constexpr const T& contained_val() const { return OptionalBase::storage_.value_; } + T& contained_val() { return OptionalBase::storage_.value_; } +# endif + + void clear() noexcept { + if (initialized()) dataptr()->T::~T(); + OptionalBase::init_ = false; + } + + template + void initialize(Args&&... args) noexcept(noexcept(T(std::forward(args)...))) + { + assert(!OptionalBase::init_); + ::new (static_cast(dataptr())) T(std::forward(args)...); + OptionalBase::init_ = true; + } + + template + void initialize(std::initializer_list il, Args&&... args) noexcept(noexcept(T(il, std::forward(args)...))) + { + assert(!OptionalBase::init_); + ::new (static_cast(dataptr())) T(il, std::forward(args)...); + OptionalBase::init_ = true; + } + +public: + typedef T value_type; + + // 20.5.5.1, constructors + constexpr optional() noexcept : OptionalBase() {}; + constexpr optional(nullopt_t) noexcept : OptionalBase() {}; + + optional(const optional& rhs) + : OptionalBase() + { + if (rhs.initialized()) { + ::new (static_cast(dataptr())) T(*rhs); + OptionalBase::init_ = true; + } + } + + optional(optional&& rhs) noexcept(is_nothrow_move_constructible::value) + : OptionalBase() + { + if (rhs.initialized()) { + ::new (static_cast(dataptr())) T(std::move(*rhs)); + OptionalBase::init_ = true; + } + } + + constexpr optional(const T& v) : OptionalBase(v) {} + + constexpr optional(T&& v) : OptionalBase(constexpr_move(v)) {} + + template + explicit constexpr optional(in_place_t, Args&&... args) + : OptionalBase(in_place_t{}, constexpr_forward(args)...) {} + + template >)> + OPTIONAL_CONSTEXPR_INIT_LIST explicit optional(in_place_t, std::initializer_list il, Args&&... args) + : OptionalBase(in_place_t{}, il, constexpr_forward(args)...) {} + + // 20.5.4.2, Destructor + ~optional() = default; + + // 20.5.4.3, assignment + optional& operator=(nullopt_t) noexcept + { + clear(); + return *this; + } + + optional& operator=(const optional& rhs) + { + if (initialized() == true && rhs.initialized() == false) clear(); + else if (initialized() == false && rhs.initialized() == true) initialize(*rhs); + else if (initialized() == true && rhs.initialized() == true) contained_val() = *rhs; + return *this; + } + + optional& operator=(optional&& rhs) + noexcept(is_nothrow_move_assignable::value && is_nothrow_move_constructible::value) + { + if (initialized() == true && rhs.initialized() == false) clear(); + else if (initialized() == false && rhs.initialized() == true) initialize(std::move(*rhs)); + else if (initialized() == true && rhs.initialized() == true) contained_val() = std::move(*rhs); + return *this; + } + + template + auto operator=(U&& v) + -> typename enable_if + < + is_same::type, T>::value, + optional& + >::type + { + if (initialized()) { contained_val() = std::forward(v); } + else { initialize(std::forward(v)); } + return *this; + } + + + template + void emplace(Args&&... args) + { + clear(); + initialize(std::forward(args)...); + } + + template + void emplace(initializer_list il, Args&&... args) + { + clear(); + initialize(il, std::forward(args)...); + } + + // 20.5.4.4, Swap + void swap(optional& rhs) noexcept(is_nothrow_move_constructible::value + && noexcept(detail_::swap_ns::adl_swap(declval(), declval()))) + { + if (initialized() == true && rhs.initialized() == false) { rhs.initialize(std::move(**this)); clear(); } + else if (initialized() == false && rhs.initialized() == true) { initialize(std::move(*rhs)); rhs.clear(); } + else if (initialized() == true && rhs.initialized() == true) { using std::swap; swap(**this, *rhs); } + } + + // 20.5.4.5, Observers + + explicit constexpr operator bool() const noexcept { return initialized(); } + constexpr bool has_value() const noexcept { return initialized(); } + + constexpr T const* operator ->() const { + return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr()); + } + +# if OPTIONAL_HAS_MOVE_ACCESSORS == 1 + + OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() { + assert (initialized()); + return dataptr(); + } + + constexpr T const& operator *() const& { + return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val()); + } + + OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & { + assert (initialized()); + return contained_val(); + } + + OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && { + assert (initialized()); + return constexpr_move(contained_val()); + } + + constexpr T const& value() const& { + return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); + } + + OPTIONAL_MUTABLE_CONSTEXPR T& value() & { + return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); + } + + OPTIONAL_MUTABLE_CONSTEXPR T&& value() && { + if (!initialized()) throw bad_optional_access("bad optional access"); + return std::move(contained_val()); + } + +# else + + T* operator ->() { + assert (initialized()); + return dataptr(); + } + + constexpr T const& operator *() const { + return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val()); + } + + T& operator *() { + assert (initialized()); + return contained_val(); + } + + constexpr T const& value() const { + return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); + } + + T& value() { + return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); + } + +# endif + +# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1 + + template + constexpr T value_or(V&& v) const& + { + return *this ? **this : detail_::convert(constexpr_forward(v)); + } + +# if OPTIONAL_HAS_MOVE_ACCESSORS == 1 + + template + OPTIONAL_MUTABLE_CONSTEXPR T value_or(V&& v) && + { + return *this ? constexpr_move(const_cast&>(*this).contained_val()) : detail_::convert(constexpr_forward(v)); + } + +# else + + template + T value_or(V&& v) && + { + return *this ? constexpr_move(const_cast&>(*this).contained_val()) : detail_::convert(constexpr_forward(v)); + } + +# endif + +# else + + template + constexpr T value_or(V&& v) const + { + return *this ? **this : detail_::convert(constexpr_forward(v)); + } + +# endif + + // 20.6.3.6, modifiers + void reset() noexcept { clear(); } +}; + + +template +class optional +{ + static_assert( !std::is_same::value, "bad T" ); + static_assert( !std::is_same::value, "bad T" ); + T* ref; + +public: + + // 20.5.5.1, construction/destruction + constexpr optional() noexcept : ref(nullptr) {} + + constexpr optional(nullopt_t) noexcept : ref(nullptr) {} + + constexpr optional(T& v) noexcept : ref(detail_::static_addressof(v)) {} + + optional(T&&) = delete; + + constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {} + + explicit constexpr optional(in_place_t, T& v) noexcept : ref(detail_::static_addressof(v)) {} + + explicit optional(in_place_t, T&&) = delete; + + ~optional() = default; + + // 20.5.5.2, mutation + optional& operator=(nullopt_t) noexcept { + ref = nullptr; + return *this; + } + + // optional& operator=(const optional& rhs) noexcept { + // ref = rhs.ref; + // return *this; + // } + + // optional& operator=(optional&& rhs) noexcept { + // ref = rhs.ref; + // return *this; + // } + + template + auto operator=(U&& rhs) noexcept + -> typename enable_if + < + is_same::type, optional>::value, + optional& + >::type + { + ref = rhs.ref; + return *this; + } + + template + auto operator=(U&& rhs) noexcept + -> typename enable_if + < + !is_same::type, optional>::value, + optional& + >::type + = delete; + + void emplace(T& v) noexcept { + ref = detail_::static_addressof(v); + } + + void emplace(T&&) = delete; + + + void swap(optional& rhs) noexcept + { + std::swap(ref, rhs.ref); + } + + // 20.5.5.3, observers + constexpr T* operator->() const { + return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, ref); + } + + constexpr T& operator*() const { + return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, *ref); + } + + constexpr T& value() const { + return ref ? *ref : (throw bad_optional_access("bad optional access"), *ref); + } + + explicit constexpr operator bool() const noexcept { + return ref != nullptr; + } + + constexpr bool has_value() const noexcept { + return ref != nullptr; + } + + template + constexpr typename decay::type value_or(V&& v) const + { + return *this ? **this : detail_::convert::type>(constexpr_forward(v)); + } + + // x.x.x.x, modifiers + void reset() noexcept { ref = nullptr; } +}; + + +template +class optional +{ + static_assert( sizeof(T) == 0, "optional rvalue references disallowed" ); +}; + + +// 20.5.8, Relational operators +template constexpr bool operator==(const optional& x, const optional& y) +{ + return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y; +} + +template constexpr bool operator!=(const optional& x, const optional& y) +{ + return !(x == y); +} + +template constexpr bool operator<(const optional& x, const optional& y) +{ + return (!y) ? false : (!x) ? true : *x < *y; +} + +template constexpr bool operator>(const optional& x, const optional& y) +{ + return (y < x); +} + +template constexpr bool operator<=(const optional& x, const optional& y) +{ + return !(y < x); +} + +template constexpr bool operator>=(const optional& x, const optional& y) +{ + return !(x < y); +} + + +// 20.5.9, Comparison with nullopt +template constexpr bool operator==(const optional& x, nullopt_t) noexcept +{ + return (!x); +} + +template constexpr bool operator==(nullopt_t, const optional& x) noexcept +{ + return (!x); +} + +template constexpr bool operator!=(const optional& x, nullopt_t) noexcept +{ + return bool(x); +} + +template constexpr bool operator!=(nullopt_t, const optional& x) noexcept +{ + return bool(x); +} + +template constexpr bool operator<(const optional&, nullopt_t) noexcept +{ + return false; +} + +template constexpr bool operator<(nullopt_t, const optional& x) noexcept +{ + return bool(x); +} + +template constexpr bool operator<=(const optional& x, nullopt_t) noexcept +{ + return (!x); +} + +template constexpr bool operator<=(nullopt_t, const optional&) noexcept +{ + return true; +} + +template constexpr bool operator>(const optional& x, nullopt_t) noexcept +{ + return bool(x); +} + +template constexpr bool operator>(nullopt_t, const optional&) noexcept +{ + return false; +} + +template constexpr bool operator>=(const optional&, nullopt_t) noexcept +{ + return true; +} + +template constexpr bool operator>=(nullopt_t, const optional& x) noexcept +{ + return (!x); +} + + + +// 20.5.10, Comparison with T +template constexpr bool operator==(const optional& x, const T& v) +{ + return bool(x) ? *x == v : false; +} + +template constexpr bool operator==(const T& v, const optional& x) +{ + return bool(x) ? v == *x : false; +} + +template constexpr bool operator!=(const optional& x, const T& v) +{ + return bool(x) ? *x != v : true; +} + +template constexpr bool operator!=(const T& v, const optional& x) +{ + return bool(x) ? v != *x : true; +} + +template constexpr bool operator<(const optional& x, const T& v) +{ + return bool(x) ? *x < v : true; +} + +template constexpr bool operator>(const T& v, const optional& x) +{ + return bool(x) ? v > *x : true; +} + +template constexpr bool operator>(const optional& x, const T& v) +{ + return bool(x) ? *x > v : false; +} + +template constexpr bool operator<(const T& v, const optional& x) +{ + return bool(x) ? v < *x : false; +} + +template constexpr bool operator>=(const optional& x, const T& v) +{ + return bool(x) ? *x >= v : false; +} + +template constexpr bool operator<=(const T& v, const optional& x) +{ + return bool(x) ? v <= *x : false; +} + +template constexpr bool operator<=(const optional& x, const T& v) +{ + return bool(x) ? *x <= v : true; +} + +template constexpr bool operator>=(const T& v, const optional& x) +{ + return bool(x) ? v >= *x : true; +} + + +// Comparison of optional with T +template constexpr bool operator==(const optional& x, const T& v) +{ + return bool(x) ? *x == v : false; +} + +template constexpr bool operator==(const T& v, const optional& x) +{ + return bool(x) ? v == *x : false; +} + +template constexpr bool operator!=(const optional& x, const T& v) +{ + return bool(x) ? *x != v : true; +} + +template constexpr bool operator!=(const T& v, const optional& x) +{ + return bool(x) ? v != *x : true; +} + +template constexpr bool operator<(const optional& x, const T& v) +{ + return bool(x) ? *x < v : true; +} + +template constexpr bool operator>(const T& v, const optional& x) +{ + return bool(x) ? v > *x : true; +} + +template constexpr bool operator>(const optional& x, const T& v) +{ + return bool(x) ? *x > v : false; +} + +template constexpr bool operator<(const T& v, const optional& x) +{ + return bool(x) ? v < *x : false; +} + +template constexpr bool operator>=(const optional& x, const T& v) +{ + return bool(x) ? *x >= v : false; +} + +template constexpr bool operator<=(const T& v, const optional& x) +{ + return bool(x) ? v <= *x : false; +} + +template constexpr bool operator<=(const optional& x, const T& v) +{ + return bool(x) ? *x <= v : true; +} + +template constexpr bool operator>=(const T& v, const optional& x) +{ + return bool(x) ? v >= *x : true; +} + +// Comparison of optional with T +template constexpr bool operator==(const optional& x, const T& v) +{ + return bool(x) ? *x == v : false; +} + +template constexpr bool operator==(const T& v, const optional& x) +{ + return bool(x) ? v == *x : false; +} + +template constexpr bool operator!=(const optional& x, const T& v) +{ + return bool(x) ? *x != v : true; +} + +template constexpr bool operator!=(const T& v, const optional& x) +{ + return bool(x) ? v != *x : true; +} + +template constexpr bool operator<(const optional& x, const T& v) +{ + return bool(x) ? *x < v : true; +} + +template constexpr bool operator>(const T& v, const optional& x) +{ + return bool(x) ? v > *x : true; +} + +template constexpr bool operator>(const optional& x, const T& v) +{ + return bool(x) ? *x > v : false; +} + +template constexpr bool operator<(const T& v, const optional& x) +{ + return bool(x) ? v < *x : false; +} + +template constexpr bool operator>=(const optional& x, const T& v) +{ + return bool(x) ? *x >= v : false; +} + +template constexpr bool operator<=(const T& v, const optional& x) +{ + return bool(x) ? v <= *x : false; +} + +template constexpr bool operator<=(const optional& x, const T& v) +{ + return bool(x) ? *x <= v : true; +} + +template constexpr bool operator>=(const T& v, const optional& x) +{ + return bool(x) ? v >= *x : true; +} + + +// 20.5.12, Specialized algorithms +template +void swap(optional& x, optional& y) noexcept(noexcept(x.swap(y))) +{ + x.swap(y); +} + + +template +constexpr optional::type> make_optional(T&& v) +{ + return optional::type>(constexpr_forward(v)); +} + +template +constexpr optional make_optional(reference_wrapper v) +{ + return optional(v.get()); +} + + +} // namespace experimental +} // namespace std + +namespace std +{ + template + struct hash> + { + typedef typename hash::result_type result_type; + typedef std::experimental::optional argument_type; + + constexpr result_type operator()(argument_type const& arg) const { + return arg ? std::hash{}(*arg) : result_type{}; + } + }; + + template + struct hash> + { + typedef typename hash::result_type result_type; + typedef std::experimental::optional argument_type; + + constexpr result_type operator()(argument_type const& arg) const { + return arg ? std::hash{}(*arg) : result_type{}; + } + }; +} + +# undef TR2_OPTIONAL_REQUIRES +# undef TR2_OPTIONAL_ASSERTED_EXPRESSION + +# endif //___OPTIONAL_HPP___ diff --git a/src/3rdparty/optional/ottd_optional.h b/src/3rdparty/optional/ottd_optional.h new file mode 100644 index 0000000000..19b44c5055 --- /dev/null +++ b/src/3rdparty/optional/ottd_optional.h @@ -0,0 +1,33 @@ +/* + * 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 ottd_optional.h Header to select between native. */ + +#ifndef OTTD_OPTIONAL_H +#define OTTD_OPTIONAL_H + +#if defined(__has_include) +# if __has_include() +# include +# endif +#endif + +#if (__cplusplus >= 201703L) || (defined(__cpp_lib_optional) && __cpp_lib_optional >= 201606L) + +/* Native std::optional. */ +#include +namespace opt = std; + +#else + +/* No std::optional, use local copy instead. */ +#include "optional.hpp" +namespace opt = std::experimental; + +#endif + +#endif /* OTTD_OPTIONAL_H */ From 715aa67a9c13444ee76e717bfa656472f5fb2ac3 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:32:03 +0200 Subject: [PATCH 121/601] Codechange: Use std::string in INI file parsing. --- src/base_media_func.h | 34 +++++++-------- src/gfxinit.cpp | 4 +- src/hotkeys.cpp | 2 +- src/ini.cpp | 45 ++++++++++--------- src/ini_load.cpp | 74 ++++++++++++++------------------ src/ini_type.h | 24 ++++++----- src/music.cpp | 22 +++++----- src/settings.cpp | 76 +++++++++++++++------------------ src/settingsgen/settingsgen.cpp | 22 +++++----- src/string.cpp | 43 ++++++++++++++----- src/string_func.h | 1 + 11 files changed, 179 insertions(+), 168 deletions(-) diff --git a/src/base_media_func.h b/src/base_media_func.h index 01e184f8ca..0ec644aaa5 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -21,7 +21,7 @@ */ #define fetch_metadata(name) \ item = metadata->GetItem(name, false); \ - if (item == nullptr || StrEmpty(item->value)) { \ + if (item == nullptr || !item->value.has_value() || item->value->empty()) { \ DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing.", name); \ DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename); \ return false; \ @@ -42,28 +42,28 @@ bool BaseSet::FillSetDetails(IniFile *ini, const IniItem *item; fetch_metadata("name"); - this->name = stredup(item->value); + this->name = stredup(item->value->c_str()); fetch_metadata("description"); - this->description[stredup("")] = stredup(item->value); + this->description[stredup("")] = stredup(item->value->c_str()); /* Add the translations of the descriptions too. */ for (const IniItem *item = metadata->item; item != nullptr; item = item->next) { - if (strncmp("description.", item->name, 12) != 0) continue; + if (item->name.compare(0, 12, "description.") != 0) continue; - this->description[stredup(item->name + 12)] = stredup(item->value); + this->description[stredup(item->name.c_str() + 12)] = stredup(item->value.value_or("").c_str()); } fetch_metadata("shortname"); - for (uint i = 0; item->value[i] != '\0' && i < 4; i++) { - this->shortname |= ((uint8)item->value[i]) << (i * 8); + for (uint i = 0; item->value.value()[i] != '\0' && i < 4; i++) { + this->shortname |= ((uint8)item->value.value()[i]) << (i * 8); } fetch_metadata("version"); - this->version = atoi(item->value); + this->version = atoi(item->value->c_str()); item = metadata->GetItem("fallback", false); - this->fallback = (item != nullptr && strcmp(item->value, "0") != 0 && strcmp(item->value, "false") != 0); + this->fallback = (item != nullptr && item->value && item->value.value() != "0" && item->value.value() != "false"); /* For each of the file types we want to find the file, MD5 checksums and warning messages. */ IniGroup *files = ini->GetGroup("files"); @@ -73,13 +73,12 @@ bool BaseSet::FillSetDetails(IniFile *ini, const MD5File *file = &this->files[i]; /* Find the filename first. */ item = files->GetItem(BaseSet::file_names[i], false); - if (item == nullptr || (item->value == nullptr && !allow_empty_filename)) { + if (item == nullptr || (!item->value.has_value() && !allow_empty_filename)) { DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet::file_names[i], full_filename); return false; } - const char *filename = item->value; - if (filename == nullptr) { + if (!item->value.has_value()) { file->filename = nullptr; /* If we list no file, that file must be valid */ this->valid_files++; @@ -87,15 +86,16 @@ bool BaseSet::FillSetDetails(IniFile *ini, const continue; } + const char *filename = item->value->c_str(); file->filename = str_fmt("%s%s", path, filename); /* Then find the MD5 checksum */ item = md5s->GetItem(filename, false); - if (item == nullptr || item->value == nullptr) { + if (item == nullptr || !item->value.has_value()) { DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename, full_filename); return false; } - char *c = item->value; + const char *c = item->value->c_str(); for (uint i = 0; i < sizeof(file->hash) * 2; i++, c++) { uint j; if ('0' <= *c && *c <= '9') { @@ -118,11 +118,11 @@ bool BaseSet::FillSetDetails(IniFile *ini, const /* Then find the warning message when the file's missing */ item = origin->GetItem(filename, false); if (item == nullptr) item = origin->GetItem("default", false); - if (item == nullptr) { + if (item == nullptr || !item->value.has_value()) { DEBUG(grf, 1, "No origin warning message specified for: %s", filename); file->missing_warning = stredup(""); } else { - file->missing_warning = stredup(item->value); + file->missing_warning = stredup(item->value->c_str()); } file->check_result = T::CheckMD5(file, BASESET_DIR); @@ -170,7 +170,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, if (set->FillSetDetails(ini, path, filename)) { Tbase_set *duplicate = nullptr; for (Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { - if (strcmp(c->name, set->name) == 0 || c->shortname == set->shortname) { + if (c->name == set->name || c->shortname == set->shortname) { duplicate = c; break; } diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 86dc868e6b..5fe913fb9a 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -356,11 +356,11 @@ bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *ful IniItem *item; fetch_metadata("palette"); - this->palette = (*item->value == 'D' || *item->value == 'd') ? PAL_DOS : PAL_WINDOWS; + this->palette = (item->value.value()[0] == 'D' || item->value.value()[0] == 'd') ? PAL_DOS : PAL_WINDOWS; /* Get optional blitter information. */ item = metadata->GetItem("blitter", false); - this->blitter = (item != nullptr && *item->value == '3') ? BLT_32BPP : BLT_8BPP; + this->blitter = (item != nullptr && item->value.value()[0] == '3') ? BLT_32BPP : BLT_8BPP; } return ret; } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index d5cd90b3c5..0bf350f8f0 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -290,7 +290,7 @@ void HotkeyList::Load(IniFile *ini) IniItem *item = group->GetItem(hotkey->name, false); if (item != nullptr) { hotkey->keycodes.clear(); - if (item->value != nullptr) ParseHotkeys(hotkey, item->value); + if (item->value.has_value()) ParseHotkeys(hotkey, item->value->c_str()); } } } diff --git a/src/ini.cpp b/src/ini.cpp index a02d4c14da..f81d109ff2 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -12,9 +12,11 @@ #include "ini_type.h" #include "string_func.h" #include "fileio_func.h" +#include #if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500) # include +# include #endif #ifdef _WIN32 @@ -45,31 +47,33 @@ bool IniFile::SaveToDisk(const char *filename) * that file. This to prevent that when OpenTTD crashes during the save * you end up with a truncated configuration file. */ - char file_new[MAX_PATH]; + std::string file_new{ filename }; + file_new.append(".new"); - strecpy(file_new, filename, lastof(file_new)); - strecat(file_new, ".new", lastof(file_new)); - FILE *f = fopen(file_new, "w"); - if (f == nullptr) return false; + std::ofstream os(OTTD2FS(file_new.c_str())); + if (os.fail()) return false; for (const IniGroup *group = this->group; group != nullptr; group = group->next) { - if (group->comment) fputs(group->comment, f); - fprintf(f, "[%s]\n", group->name); + os << group->comment << "[" << group->name << "]\n"; for (const IniItem *item = group->item; item != nullptr; item = item->next) { - if (item->comment != nullptr) fputs(item->comment, f); + os << item->comment; /* protect item->name with quotes if needed */ - if (strchr(item->name, ' ') != nullptr || - item->name[0] == '[') { - fprintf(f, "\"%s\"", item->name); + if (item->name.find(' ') != std::string::npos || + item->name[0] == '[') { + os << "\"" << item->name << "\""; } else { - fprintf(f, "%s", item->name); + os << item->name; } - fprintf(f, " = %s\n", item->value == nullptr ? "" : item->value); + os << " = " << item->value.value_or("") << "\n"; } } - if (this->comment) fputs(this->comment, f); + os << this->comment; + + os.flush(); + os.close(); + if (os.fail()) return false; /* * POSIX (and friends) do not guarantee that when a file is closed it is @@ -78,11 +82,10 @@ bool IniFile::SaveToDisk(const char *filename) * (modification date etc.) is not important to us; only the real data is. */ #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 - int ret = fdatasync(fileno(f)); - fclose(f); + int f = open(file_new.c_str(), O_RDWR); + int ret = fdatasync(f); + close(f); if (ret != 0) return false; -#else - fclose(f); #endif #if defined(_WIN32) @@ -91,7 +94,7 @@ bool IniFile::SaveToDisk(const char *filename) /* Allocate space for one more \0 character. */ TCHAR tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1]; _tcsncpy(tfilename, OTTD2FS(filename), MAX_PATH); - _tcsncpy(tfile_new, OTTD2FS(file_new), MAX_PATH); + _tcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH); /* SHFileOperation wants a double '\0' terminated string. */ tfilename[MAX_PATH - 1] = '\0'; tfile_new[MAX_PATH - 1] = '\0'; @@ -107,8 +110,8 @@ bool IniFile::SaveToDisk(const char *filename) shfopt.pTo = tfilename; SHFileOperation(&shfopt); #else - if (rename(file_new, filename) < 0) { - DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new, filename); + if (rename(file_new.c_str(), filename) < 0) { + DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename); } #endif diff --git a/src/ini_load.cpp b/src/ini_load.cpp index dd72831308..93b6bdf72d 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -19,12 +19,10 @@ * Construct a new in-memory item of an Ini file. * @param parent the group we belong to * @param name the name of the item - * @param last the last element of the name of the item */ -IniItem::IniItem(IniGroup *parent, const char *name, const char *last) : next(nullptr), value(nullptr), comment(nullptr) +IniItem::IniItem(IniGroup *parent, const std::string &name) : next(nullptr) { - this->name = stredup(name, last); - str_validate(this->name, this->name + strlen(this->name)); + this->name = str_validate(name); *parent->last_item = this; parent->last_item = &this->next; @@ -33,10 +31,6 @@ IniItem::IniItem(IniGroup *parent, const char *name, const char *last) : next(nu /** Free everything we loaded. */ IniItem::~IniItem() { - free(this->name); - free(this->value); - free(this->comment); - delete this->next; } @@ -46,20 +40,21 @@ IniItem::~IniItem() */ void IniItem::SetValue(const char *value) { - free(this->value); - this->value = stredup(value); + if (value == nullptr) { + this->value.reset(); + } else { + this->value.emplace(value); + } } /** * Construct a new in-memory group of an Ini file. * @param parent the file we belong to * @param name the name of the group - * @param last the last element of the name of the group */ -IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : next(nullptr), type(IGT_VARIABLES), item(nullptr), comment(nullptr) +IniGroup::IniGroup(IniLoadFile *parent, const std::string &name) : next(nullptr), type(IGT_VARIABLES), item(nullptr) { - this->name = stredup(name, last); - str_validate(this->name, this->name + strlen(this->name)); + this->name = str_validate(name); this->last_item = &this->item; *parent->last_group = this; @@ -67,7 +62,7 @@ IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : ne if (parent->list_group_names != nullptr) { for (uint i = 0; parent->list_group_names[i] != nullptr; i++) { - if (strcmp(this->name, parent->list_group_names[i]) == 0) { + if (this->name == parent->list_group_names[i]) { this->type = IGT_LIST; return; } @@ -75,7 +70,7 @@ IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : ne } if (parent->seq_group_names != nullptr) { for (uint i = 0; parent->seq_group_names[i] != nullptr; i++) { - if (strcmp(this->name, parent->seq_group_names[i]) == 0) { + if (this->name == parent->seq_group_names[i]) { this->type = IGT_SEQUENCE; return; } @@ -86,9 +81,6 @@ IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : ne /** Free everything we loaded. */ IniGroup::~IniGroup() { - free(this->name); - free(this->comment); - delete this->item; delete this->next; } @@ -100,16 +92,16 @@ IniGroup::~IniGroup() * @param create whether to create an item when not found or not. * @return the requested item or nullptr if not found. */ -IniItem *IniGroup::GetItem(const char *name, bool create) +IniItem *IniGroup::GetItem(const std::string &name, bool create) { for (IniItem *item = this->item; item != nullptr; item = item->next) { - if (strcmp(item->name, name) == 0) return item; + if (item->name == name) return item; } if (!create) return nullptr; /* otherwise make a new one */ - return new IniItem(this, name, nullptr); + return new IniItem(this, name); } /** @@ -129,7 +121,6 @@ void IniGroup::Clear() */ IniLoadFile::IniLoadFile(const char * const *list_group_names, const char * const *seq_group_names) : group(nullptr), - comment(nullptr), list_group_names(list_group_names), seq_group_names(seq_group_names) { @@ -139,7 +130,6 @@ IniLoadFile::IniLoadFile(const char * const *list_group_names, const char * cons /** Free everything we loaded. */ IniLoadFile::~IniLoadFile() { - free(this->comment); delete this->group; } @@ -147,26 +137,21 @@ IniLoadFile::~IniLoadFile() * Get the group with the given name. If it doesn't exist * and \a create_new is \c true create a new group. * @param name name of the group to find. - * @param len the maximum length of said name (\c 0 means length of the string). * @param create_new Allow creation of group if it does not exist. * @return The requested group if it exists or was created, else \c nullptr. */ -IniGroup *IniLoadFile::GetGroup(const char *name, size_t len, bool create_new) +IniGroup *IniLoadFile::GetGroup(const std::string &name, bool create_new) { - if (len == 0) len = strlen(name); - /* does it exist already? */ for (IniGroup *group = this->group; group != nullptr; group = group->next) { - if (!strncmp(group->name, name, len) && group->name[len] == 0) { - return group; - } + if (group->name == name) return group; } if (!create_new) return nullptr; /* otherwise make a new one */ - IniGroup *group = new IniGroup(this, name, name + len - 1); - group->comment = stredup("\n"); + IniGroup *group = new IniGroup(this, name); + group->comment = "\n"; return group; } @@ -182,7 +167,7 @@ void IniLoadFile::RemoveGroup(const char *name) /* does it exist already? */ for (group = this->group; group != nullptr; prev = group, group = group->next) { - if (strncmp(group->name, name, len) == 0) { + if (group->name.compare(0, len, name) == 0) { break; } } @@ -260,17 +245,17 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) e--; } s++; // skip [ - group = new IniGroup(this, s, e - 1); + group = new IniGroup(this, std::string(s, e - s)); if (comment_size != 0) { - group->comment = stredup(comment, comment + comment_size - 1); + group->comment.assign(comment, comment_size); comment_size = 0; } } else if (group != nullptr) { if (group->type == IGT_SEQUENCE) { /* A sequence group, use the line as item name without further interpretation. */ - IniItem *item = new IniItem(group, buffer, e - 1); + IniItem *item = new IniItem(group, std::string(buffer, e - buffer)); if (comment_size) { - item->comment = stredup(comment, comment + comment_size - 1); + item->comment.assign(comment, comment_size); comment_size = 0; } continue; @@ -286,9 +271,9 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) } /* it's an item in an existing group */ - IniItem *item = new IniItem(group, s, t - 1); + IniItem *item = new IniItem(group, std::string(s, t - s)); if (comment_size != 0) { - item->comment = stredup(comment, comment + comment_size - 1); + item->comment.assign(comment, comment_size); comment_size = 0; } @@ -304,8 +289,11 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) *e = '\0'; /* If the value was not quoted and empty, it must be nullptr */ - item->value = (!quoted && e == t) ? nullptr : stredup(t); - if (item->value != nullptr) str_validate(item->value, item->value + strlen(item->value)); + if (!quoted && e == t) { + item->value.reset(); + } else { + item->value = str_validate(std::string(t)); + } } else { /* it's an orphan item */ this->ReportFileError("ini: '", buffer, "' outside of group"); @@ -313,7 +301,7 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) } if (comment_size > 0) { - this->comment = stredup(comment, comment + comment_size - 1); + this->comment.assign(comment, comment_size); comment_size = 0; } diff --git a/src/ini_type.h b/src/ini_type.h index 679969efda..f98b6395b9 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -11,6 +11,8 @@ #define INI_TYPE_H #include "fileio_type.h" +#include +#include "3rdparty/optional/ottd_optional.h" /** Types of groups */ enum IniGroupType { @@ -21,12 +23,12 @@ enum IniGroupType { /** A single "line" in an ini file. */ struct IniItem { - IniItem *next; ///< The next item in this group - char *name; ///< The name of this item - char *value; ///< The value of this item - char *comment; ///< The comment associated with this item + IniItem *next; ///< The next item in this group + std::string name; ///< The name of this item + opt::optional value; ///< The value of this item + std::string comment; ///< The comment associated with this item - IniItem(struct IniGroup *parent, const char *name, const char *last = nullptr); + IniItem(struct IniGroup *parent, const std::string &name); ~IniItem(); void SetValue(const char *value); @@ -38,13 +40,13 @@ struct IniGroup { IniGroupType type; ///< type of group IniItem *item; ///< the first item in the group IniItem **last_item; ///< the last item in the group - char *name; ///< name of group - char *comment; ///< comment for group + std::string name; ///< name of group + std::string comment; ///< comment for group - IniGroup(struct IniLoadFile *parent, const char *name, const char *last = nullptr); + IniGroup(struct IniLoadFile *parent, const std::string &name); ~IniGroup(); - IniItem *GetItem(const char *name, bool create); + IniItem *GetItem(const std::string &name, bool create); void Clear(); }; @@ -52,14 +54,14 @@ struct IniGroup { struct IniLoadFile { IniGroup *group; ///< the first group in the ini IniGroup **last_group; ///< the last group in the ini - char *comment; ///< last comment in file + std::string comment; ///< last comment in file const char * const *list_group_names; ///< nullptr terminated list with group names that are lists const char * const *seq_group_names; ///< nullptr terminated list with group names that are sequences. IniLoadFile(const char * const *list_group_names = nullptr, const char * const *seq_group_names = nullptr); virtual ~IniLoadFile(); - IniGroup *GetGroup(const char *name, size_t len = 0, bool create_new = true); + IniGroup *GetGroup(const std::string &name, bool create_new = true); void RemoveGroup(const char *name); void LoadFromDisk(const char *filename, Subdirectory subdir); diff --git a/src/music.cpp b/src/music.cpp index a95a9d348d..131651e55c 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -135,10 +135,10 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f this->songinfo[i].filename = filename; // non-owned pointer IniItem *item = catindex->GetItem(_music_file_names[i], false); - if (item != nullptr && !StrEmpty(item->value)) { + if (item != nullptr && item->value.has_value() && !item->value->empty()) { /* Song has a CAT file index, assume it's MPS MIDI format */ this->songinfo[i].filetype = MTT_MPSMIDI; - this->songinfo[i].cat_index = atoi(item->value); + this->songinfo[i].cat_index = atoi(item->value->c_str()); char *songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index); if (songname == nullptr) { DEBUG(grf, 0, "Base music set song missing from CAT file: %s/%d", filename, this->songinfo[i].cat_index); @@ -161,12 +161,12 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f while (*trimmed_filename == PATHSEPCHAR) trimmed_filename++; item = names->GetItem(trimmed_filename, false); - if (item != nullptr && !StrEmpty(item->value)) break; + if (item != nullptr && item->value.has_value() && !item->value->empty()) break; } if (this->songinfo[i].filetype == MTT_STANDARDMIDI) { - if (item != nullptr && !StrEmpty(item->value)) { - strecpy(this->songinfo[i].songname, item->value, lastof(this->songinfo[i].songname)); + if (item != nullptr && item->value.has_value() && !item->value->empty()) { + strecpy(this->songinfo[i].songname, item->value->c_str(), lastof(this->songinfo[i].songname)); } else { DEBUG(grf, 0, "Base music set song name missing: %s", filename); return false; @@ -181,12 +181,12 @@ bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_f this->songinfo[i].tracknr = tracknr++; } - item = timingtrim->GetItem(trimmed_filename, false); - if (item != nullptr && !StrEmpty(item->value)) { - const char *endpos = strchr(item->value, ':'); - if (endpos != nullptr) { - this->songinfo[i].override_start = atoi(item->value); - this->songinfo[i].override_end = atoi(endpos + 1); + item = trimmed_filename != nullptr ? timingtrim->GetItem(trimmed_filename, false) : nullptr; + if (item != nullptr && item->value.has_value() && !item->value->empty()) { + auto endpos = item->value->find(':'); + if (endpos != std::string::npos) { + this->songinfo[i].override_start = atoi(item->value->c_str()); + this->songinfo[i].override_end = atoi(item->value->c_str() + endpos + 1); } } } diff --git a/src/settings.cpp b/src/settings.cpp index 7fb2e72491..ef1aaa1b6c 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -505,10 +505,6 @@ static void IniLoadSettings(IniFile *ini, const SettingDesc *sd, const char *grp { IniGroup *group; IniGroup *group_def = ini->GetGroup(grpname); - IniItem *item; - const void *p; - void *ptr; - const char *s; for (; sd->save.cmd != SL_END; sd++) { const SettingDescBase *sdb = &sd->desc; @@ -517,30 +513,30 @@ static void IniLoadSettings(IniFile *ini, const SettingDesc *sd, const char *grp if (!SlIsObjectCurrentlyValid(sld->version_from, sld->version_to)) continue; /* For settings.xx.yy load the settings from [xx] yy = ? */ - s = strchr(sdb->name, '.'); - if (s != nullptr) { - group = ini->GetGroup(sdb->name, s - sdb->name); - s++; + std::string s{ sdb->name }; + auto sc = s.find('.'); + if (sc != std::string::npos) { + group = ini->GetGroup(s.substr(0, sc)); + s = s.substr(sc + 1); } else { - s = sdb->name; group = group_def; } - item = group->GetItem(s, false); + IniItem *item = group->GetItem(s, false); if (item == nullptr && group != group_def) { - /* For settings.xx.yy load the settings from [settingss] yy = ? in case the previous + /* For settings.xx.yy load the settings from [settings] yy = ? in case the previous * did not exist (e.g. loading old config files with a [settings] section */ item = group_def->GetItem(s, false); } if (item == nullptr) { /* For settings.xx.zz.yy load the settings from [zz] yy = ? in case the previous * did not exist (e.g. loading old config files with a [yapf] section */ - const char *sc = strchr(s, '.'); - if (sc != nullptr) item = ini->GetGroup(s, sc - s)->GetItem(sc + 1, false); + sc = s.find('.'); + if (sc != std::string::npos) item = ini->GetGroup(s.substr(0, sc))->GetItem(s.substr(sc + 1), false); } - p = (item == nullptr) ? sdb->def : StringToVal(sdb, item->value); - ptr = GetVariableAddress(object, sld); + const void *p = (item == nullptr) ? sdb->def : StringToVal(sdb, item->value.has_value() ? item->value->c_str() : nullptr); + void *ptr = GetVariableAddress(object, sld); switch (sdb->cmd) { case SDT_BOOLX: // All four are various types of (integer) numbers @@ -604,7 +600,6 @@ static void IniSaveSettings(IniFile *ini, const SettingDesc *sd, const char *grp IniGroup *group_def = nullptr, *group; IniItem *item; char buf[512]; - const char *s; void *ptr; for (; sd->save.cmd != SL_END; sd++) { @@ -617,22 +612,22 @@ static void IniSaveSettings(IniFile *ini, const SettingDesc *sd, const char *grp if (sld->conv & SLF_NOT_IN_CONFIG) continue; /* XXX - wtf is this?? (group override?) */ - s = strchr(sdb->name, '.'); - if (s != nullptr) { - group = ini->GetGroup(sdb->name, s - sdb->name); - s++; + std::string s{ sdb->name }; + auto sc = s.find('.'); + if (sc != std::string::npos) { + group = ini->GetGroup(s.substr(0, sc)); + s = s.substr(sc + 1); } else { if (group_def == nullptr) group_def = ini->GetGroup(grpname); - s = sdb->name; group = group_def; } item = group->GetItem(s, true); ptr = GetVariableAddress(object, sld); - if (item->value != nullptr) { + if (item->value.has_value()) { /* check if the value is the same as the old value */ - const void *p = StringToVal(sdb, item->value); + const void *p = StringToVal(sdb, item->value->c_str()); /* The main type of a variable/setting is in bytes 8-15 * The subtype (what kind of numbers do we have there) is in 0-7 */ @@ -714,8 +709,7 @@ static void IniSaveSettings(IniFile *ini, const SettingDesc *sd, const char *grp } /* The value is different, that means we have to write it to the ini */ - free(item->value); - item->value = stredup(buf); + item->value.emplace(buf); } } @@ -737,7 +731,7 @@ static void IniLoadSettingList(IniFile *ini, const char *grpname, StringList &li list.clear(); for (const IniItem *item = group->item; item != nullptr; item = item->next) { - if (item->name != nullptr) list.emplace_back(item->name); + if (!item->name.empty()) list.push_back(item->name); } } @@ -1427,14 +1421,14 @@ static void AILoadConfig(IniFile *ini, const char *grpname) for (item = group->item; c < MAX_COMPANIES && item != nullptr; c++, item = item->next) { AIConfig *config = AIConfig::GetConfig(c, AIConfig::SSS_FORCE_NEWGAME); - config->Change(item->name); + config->Change(item->name.c_str()); if (!config->HasScript()) { - if (strcmp(item->name, "none") != 0) { - DEBUG(script, 0, "The AI by the name '%s' was no longer found, and removed from the list.", item->name); + if (item->name != "none") { + DEBUG(script, 0, "The AI by the name '%s' was no longer found, and removed from the list.", item->name.c_str()); continue; } } - if (item->value != nullptr) config->StringToSettings(item->value); + if (item->value.has_value()) config->StringToSettings(item->value->c_str()); } } @@ -1454,14 +1448,14 @@ static void GameLoadConfig(IniFile *ini, const char *grpname) GameConfig *config = GameConfig::GetConfig(AIConfig::SSS_FORCE_NEWGAME); - config->Change(item->name); + config->Change(item->name.c_str()); if (!config->HasScript()) { - if (strcmp(item->name, "none") != 0) { - DEBUG(script, 0, "The GameScript by the name '%s' was no longer found, and removed from the list.", item->name); + if (item->name != "none") { + DEBUG(script, 0, "The GameScript by the name '%s' was no longer found, and removed from the list.", item->name.c_str()); return; } } - if (item->value != nullptr) config->StringToSettings(item->value); + if (item->value.has_value()) config->StringToSettings(item->value->c_str()); } /** @@ -1485,7 +1479,7 @@ static int DecodeHexNibble(char c) * @param dest_size Number of bytes in \a dest. * @return Whether reading was successful. */ -static bool DecodeHexText(char *pos, uint8 *dest, size_t dest_size) +static bool DecodeHexText(const char *pos, uint8 *dest, size_t dest_size) { while (dest_size > 0) { int hi = DecodeHexNibble(pos[0]); @@ -1517,7 +1511,7 @@ static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_stati GRFConfig *c = nullptr; uint8 grfid_buf[4], md5sum[16]; - char *filename = item->name; + const char *filename = item->name.c_str(); bool has_grfid = false; bool has_md5sum = false; @@ -1541,8 +1535,8 @@ static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_stati if (c == nullptr) c = new GRFConfig(filename); /* Parse parameters */ - if (!StrEmpty(item->value)) { - int count = ParseIntList(item->value, c->param, lengthof(c->param)); + if (item->value.has_value() && !item->value->empty()) { + int count = ParseIntList(item->value->c_str(), c->param, lengthof(c->param)); if (count < 0) { SetDParamStr(0, filename); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_ARRAY, WL_CRITICAL); @@ -1565,7 +1559,7 @@ static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_stati SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN); } - SetDParamStr(0, StrEmpty(filename) ? item->name : filename); + SetDParamStr(0, StrEmpty(filename) ? item->name.c_str() : filename); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_GRF, WL_CRITICAL); delete c; continue; @@ -1776,8 +1770,8 @@ StringList GetGRFPresetList() std::unique_ptr ini(IniLoadConfig()); for (IniGroup *group = ini->group; group != nullptr; group = group->next) { - if (strncmp(group->name, "preset-", 7) == 0) { - list.emplace_back(group->name + 7); + if (group->name.compare(0, 7, "preset-") == 0) { + list.push_back(group->name.substr(7)); } } diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 9f272dabbe..764f370bde 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -214,11 +214,11 @@ static IniLoadFile *LoadIniFile(const char *filename) */ static void DumpGroup(IniLoadFile *ifile, const char * const group_name) { - IniGroup *grp = ifile->GetGroup(group_name, 0, false); + IniGroup *grp = ifile->GetGroup(group_name, false); if (grp != nullptr && grp->type == IGT_SEQUENCE) { for (IniItem *item = grp->item; item != nullptr; item = item->next) { - if (item->name) { - _stored_output.Add(item->name); + if (!item->name.empty()) { + _stored_output.Add(item->name.c_str()); _stored_output.Add("\n", 1); } } @@ -236,8 +236,8 @@ static const char *FindItemValue(const char *name, IniGroup *grp, IniGroup *defa { IniItem *item = grp->GetItem(name, false); if (item == nullptr && defaults != nullptr) item = defaults->GetItem(name, false); - if (item == nullptr || item->value == nullptr) return nullptr; - return item->value; + if (item == nullptr || !item->value.has_value()) return nullptr; + return item->value->c_str(); } /** @@ -249,19 +249,19 @@ static void DumpSections(IniLoadFile *ifile) static const int MAX_VAR_LENGTH = 64; static const char * const special_group_names[] = {PREAMBLE_GROUP_NAME, POSTAMBLE_GROUP_NAME, DEFAULTS_GROUP_NAME, TEMPLATES_GROUP_NAME, nullptr}; - IniGroup *default_grp = ifile->GetGroup(DEFAULTS_GROUP_NAME, 0, false); - IniGroup *templates_grp = ifile->GetGroup(TEMPLATES_GROUP_NAME, 0, false); + IniGroup *default_grp = ifile->GetGroup(DEFAULTS_GROUP_NAME, false); + IniGroup *templates_grp = ifile->GetGroup(TEMPLATES_GROUP_NAME, false); if (templates_grp == nullptr) return; /* Output every group, using its name as template name. */ for (IniGroup *grp = ifile->group; grp != nullptr; grp = grp->next) { const char * const *sgn; - for (sgn = special_group_names; *sgn != nullptr; sgn++) if (strcmp(grp->name, *sgn) == 0) break; + for (sgn = special_group_names; *sgn != nullptr; sgn++) if (grp->name == *sgn) break; if (*sgn != nullptr) continue; IniItem *template_item = templates_grp->GetItem(grp->name, false); // Find template value. - if (template_item == nullptr || template_item->value == nullptr) { - fprintf(stderr, "settingsgen: Warning: Cannot find template %s\n", grp->name); + if (template_item == nullptr || !template_item->value.has_value()) { + fprintf(stderr, "settingsgen: Warning: Cannot find template %s\n", grp->name.c_str()); continue; } @@ -281,7 +281,7 @@ static void DumpSections(IniLoadFile *ifile) } /* Output text of the template, except template variables of the form '$[_a-z0-9]+' which get replaced by their value. */ - const char *txt = template_item->value; + const char *txt = template_item->value->c_str(); while (*txt != '\0') { if (*txt != '$') { _stored_output.Add(txt, 1); diff --git a/src/string.cpp b/src/string.cpp index 90d287c9ef..bec7c8e926 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -185,18 +185,11 @@ void str_fix_scc_encoded(char *str, const char *last) } -/** - * Scans the string for valid characters and if it finds invalid ones, - * replaces them with a question mark '?' (if not ignored) - * @param str the string to validate - * @param last the last valid character of str - * @param settings the settings for the string validation. - */ -void str_validate(char *str, const char *last, StringValidationSettings settings) +template +static void str_validate(T &dst, const char *str, const char *last, StringValidationSettings settings) { /* Assume the ABSOLUTE WORST to be in str as it comes from the outside. */ - char *dst = str; while (str <= last && *str != '\0') { size_t len = Utf8EncodedCharLen(*str); /* If the character is unknown, i.e. encoded length is 0 @@ -220,7 +213,7 @@ void str_validate(char *str, const char *last, StringValidationSettings settings do { *dst++ = *str++; } while (--len != 0); - } else if ((settings & SVS_ALLOW_NEWLINE) != 0 && c == '\n') { + } else if ((settings & SVS_ALLOW_NEWLINE) != 0 && c == '\n') { *dst++ = *str++; } else { if ((settings & SVS_ALLOW_NEWLINE) != 0 && c == '\r' && str[1] == '\n') { @@ -232,10 +225,40 @@ void str_validate(char *str, const char *last, StringValidationSettings settings if ((settings & SVS_REPLACE_WITH_QUESTION_MARK) != 0) *dst++ = '?'; } } +} +/** + * Scans the string for valid characters and if it finds invalid ones, + * replaces them with a question mark '?' (if not ignored) + * @param str the string to validate + * @param last the last valid character of str + * @param settings the settings for the string validation. + */ +void str_validate(char *str, const char *last, StringValidationSettings settings) +{ + char *dst = str; + str_validate(dst, str, last, settings); *dst = '\0'; } +/** + * Scans the string for valid characters and if it finds invalid ones, + * replaces them with a question mark '?' (if not ignored) + * @param str the string to validate + * @param settings the settings for the string validation. + */ +std::string str_validate(const std::string &str, StringValidationSettings settings) +{ + auto buf = str.data(); + auto last = buf + str.size(); + + std::ostringstream dst; + std::ostreambuf_iterator dst_iter(dst); + str_validate(dst_iter, buf, last, settings); + + return dst.str(); +} + /** * Scans the string for valid characters and if it finds invalid ones, * replaces them with a question mark '?'. diff --git a/src/string_func.h b/src/string_func.h index 002b8f2177..febdf7c2a4 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -40,6 +40,7 @@ int CDECL vseprintf(char *str, const char *last, const char *format, va_list ap) char *CDECL str_fmt(const char *str, ...) WARN_FORMAT(1, 2); void str_validate(char *str, const char *last, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); +std::string str_validate(const std::string &str, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); void ValidateString(const char *str); void str_fix_scc_encoded(char *str, const char *last); From a49fdb7ebbb8d8ce96bcd7bd779b18bcd86d0643 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:32:06 +0200 Subject: [PATCH 122/601] Codechange: Store base set related texts in std::strings. --- src/base_media_base.h | 35 +++++++++++--------------- src/base_media_func.h | 24 +++++++++--------- src/crashlog.cpp | 6 ++--- src/gfxinit.cpp | 6 ++--- src/music_gui.cpp | 13 ++++------ src/newgrf_gui.cpp | 2 +- src/openttd.cpp | 46 ++++++++++++++--------------------- src/screenshot.cpp | 2 +- src/settings.cpp | 33 +++++++++++++++++++++++++ src/settings_gui.cpp | 13 +++++----- src/settings_internal.h | 3 ++- src/table/misc_settings.ini | 7 +++--- src/table/settings.h.preamble | 3 +++ src/widgets/dropdown.cpp | 2 +- src/widgets/dropdown_type.h | 4 +-- 15 files changed, 108 insertions(+), 91 deletions(-) diff --git a/src/base_media_base.h b/src/base_media_base.h index 0b006efbea..881fdc3f38 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -15,6 +15,7 @@ #include "gfx_type.h" #include "textfile_type.h" #include "textfile_gui.h" +#include /* Forward declare these; can't do 'struct X' in functions as older GCCs barf on that */ struct IniFile; @@ -46,7 +47,7 @@ struct MD5File { */ template struct BaseSet { - typedef SmallMap TranslatedStrings; + typedef std::unordered_map TranslatedStrings; /** Number of files in this set */ static const size_t NUM_FILES = Tnum_files; @@ -57,7 +58,7 @@ struct BaseSet { /** Internal names of the files in this set. */ static const char * const *file_names; - const char *name; ///< The name of the base set + std::string name; ///< The name of the base set TranslatedStrings description; ///< Description of the base set uint32 shortname; ///< Four letter short variant of the name uint32 version; ///< The version of this base set @@ -72,13 +73,6 @@ struct BaseSet { /** Free everything we allocated */ ~BaseSet() { - free(this->name); - - for (auto &pair : this->description) { - free(pair.first); - free(pair.second); - } - for (uint i = 0; i < NUM_FILES; i++) { free(this->files[i].filename); free(this->files[i].missing_warning); @@ -116,20 +110,19 @@ struct BaseSet { * @param isocode the isocode to search for * @return the description */ - const char *GetDescription(const char *isocode = nullptr) const + const char *GetDescription(const std::string &isocode) const { - if (isocode != nullptr) { + if (!isocode.empty()) { /* First the full ISO code */ - for (const auto &pair : this->description) { - if (strcmp(pair.first, isocode) == 0) return pair.second; - } + auto desc = this->description.find(isocode); + if (desc != this->description.end()) return desc->second.c_str(); + /* Then the first two characters */ - for (const auto &pair : this->description) { - if (strncmp(pair.first, isocode, 2) == 0) return pair.second; - } + desc = this->description.find(isocode.substr(0, 2)); + if (desc != this->description.end()) return desc->second.c_str(); } /* Then fall back */ - return this->description.front().second; + return this->description.at(std::string{}).c_str(); } /** @@ -183,7 +176,7 @@ protected: static const char *GetExtension(); public: /** The set as saved in the config file. */ - static const char *ini_set; + static std::string ini_set; /** * Determine the graphics pack that has to be used. @@ -203,7 +196,7 @@ public: static Tbase_set *GetAvailableSets(); - static bool SetSet(const char *name); + static bool SetSet(const std::string &name); static char *GetSetsList(char *p, const char *last); static int GetNumSets(); static int GetIndexOfUsedSet(); @@ -219,7 +212,7 @@ public: static bool HasSet(const ContentInfo *ci, bool md5sum); }; -template /* static */ const char *BaseMedia::ini_set; +template /* static */ std::string BaseMedia::ini_set; template /* static */ const Tbase_set *BaseMedia::used_set; template /* static */ Tbase_set *BaseMedia::available_sets; template /* static */ Tbase_set *BaseMedia::duplicate_sets; diff --git a/src/base_media_func.h b/src/base_media_func.h index 0ec644aaa5..02c445c21a 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -42,16 +42,16 @@ bool BaseSet::FillSetDetails(IniFile *ini, const IniItem *item; fetch_metadata("name"); - this->name = stredup(item->value->c_str()); + this->name = *item->value; fetch_metadata("description"); - this->description[stredup("")] = stredup(item->value->c_str()); + this->description[std::string{}] = *item->value; /* Add the translations of the descriptions too. */ for (const IniItem *item = metadata->item; item != nullptr; item = item->next) { if (item->name.compare(0, 12, "description.") != 0) continue; - this->description[stredup(item->name.c_str() + 12)] = stredup(item->value.value_or("").c_str()); + this->description[item->name.substr(12)] = item->value.value_or(""); } fetch_metadata("shortname"); @@ -179,7 +179,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, /* The more complete set takes precedence over the version number. */ if ((duplicate->valid_files == set->valid_files && duplicate->version >= set->version) || duplicate->valid_files > set->valid_files) { - DEBUG(grf, 1, "Not adding %s (%i) as base " SET_TYPE " set (duplicate, %s)", set->name, set->version, + DEBUG(grf, 1, "Not adding %s (%i) as base " SET_TYPE " set (duplicate, %s)", set->name.c_str(), set->version, duplicate->valid_files > set->valid_files ? "less valid files" : "lower version"); set->next = BaseMedia::duplicate_sets; BaseMedia::duplicate_sets = set; @@ -195,7 +195,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, * version number until a new game is started which isn't a big problem */ if (BaseMedia::used_set == duplicate) BaseMedia::used_set = set; - DEBUG(grf, 1, "Removing %s (%i) as base " SET_TYPE " set (duplicate, %s)", duplicate->name, duplicate->version, + DEBUG(grf, 1, "Removing %s (%i) as base " SET_TYPE " set (duplicate, %s)", duplicate->name.c_str(), duplicate->version, duplicate->valid_files < set->valid_files ? "less valid files" : "lower version"); duplicate->next = BaseMedia::duplicate_sets; BaseMedia::duplicate_sets = duplicate; @@ -209,7 +209,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, ret = true; } if (ret) { - DEBUG(grf, 1, "Adding %s (%i) as base " SET_TYPE " set", set->name, set->version); + DEBUG(grf, 1, "Adding %s (%i) as base " SET_TYPE " set", set->name.c_str(), set->version); } } else { delete set; @@ -226,18 +226,18 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, * @return true if it could be loaded */ template -/* static */ bool BaseMedia::SetSet(const char *name) +/* static */ bool BaseMedia::SetSet(const std::string &name) { extern void CheckExternalFiles(); - if (StrEmpty(name)) { + if (name.empty()) { if (!BaseMedia::DetermineBestSet()) return false; CheckExternalFiles(); return true; } for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { - if (strcmp(name, s->name) == 0) { + if (name == s->name) { BaseMedia::used_set = s; CheckExternalFiles(); return true; @@ -257,7 +257,7 @@ template { p += seprintf(p, last, "List of " SET_TYPE " sets:\n"); for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { - p += seprintf(p, last, "%18s: %s", s->name, s->GetDescription()); + p += seprintf(p, last, "%18s: %s", s->name.c_str(), s->GetDescription({})); int invalid = s->GetNumInvalid(); if (invalid != 0) { int missing = s->GetNumMissing(); @@ -376,11 +376,11 @@ template * @param set_type the type of the BaseSet to instantiate */ #define INSTANTIATE_BASE_MEDIA_METHODS(repl_type, set_type) \ - template const char *repl_type::ini_set; \ + template std::string repl_type::ini_set; \ template const char *repl_type::GetExtension(); \ template bool repl_type::AddFile(const char *filename, size_t pathlength, const char *tar_filename); \ template bool repl_type::HasSet(const struct ContentInfo *ci, bool md5sum); \ - template bool repl_type::SetSet(const char *name); \ + template bool repl_type::SetSet(const std::string &name); \ template char *repl_type::GetSetsList(char *p, const char *last); \ template int repl_type::GetNumSets(); \ template int repl_type::GetIndexOfUsedSet(); \ diff --git a/src/crashlog.cpp b/src/crashlog.cpp index c7cf48154c..29e650b937 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -167,15 +167,15 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const " Sound set: %s (%u)\n" " Video driver: %s\n\n", BlitterFactory::GetCurrentBlitter() == nullptr ? "none" : BlitterFactory::GetCurrentBlitter()->GetName(), - BaseGraphics::GetUsedSet() == nullptr ? "none" : BaseGraphics::GetUsedSet()->name, + BaseGraphics::GetUsedSet() == nullptr ? "none" : BaseGraphics::GetUsedSet()->name.c_str(), BaseGraphics::GetUsedSet() == nullptr ? UINT32_MAX : BaseGraphics::GetUsedSet()->version, _current_language == nullptr ? "none" : _current_language->file, MusicDriver::GetInstance() == nullptr ? "none" : MusicDriver::GetInstance()->GetName(), - BaseMusic::GetUsedSet() == nullptr ? "none" : BaseMusic::GetUsedSet()->name, + BaseMusic::GetUsedSet() == nullptr ? "none" : BaseMusic::GetUsedSet()->name.c_str(), BaseMusic::GetUsedSet() == nullptr ? UINT32_MAX : BaseMusic::GetUsedSet()->version, _networking ? (_network_server ? "server" : "client") : "no", SoundDriver::GetInstance() == nullptr ? "none" : SoundDriver::GetInstance()->GetName(), - BaseSounds::GetUsedSet() == nullptr ? "none" : BaseSounds::GetUsedSet()->name, + BaseSounds::GetUsedSet() == nullptr ? "none" : BaseSounds::GetUsedSet()->name.c_str(), BaseSounds::GetUsedSet() == nullptr ? UINT32_MAX : BaseSounds::GetUsedSet()->version, VideoDriver::GetInstance() == nullptr ? "none" : VideoDriver::GetInstance()->GetName() ); diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 5fe913fb9a..ba80690254 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -122,7 +122,7 @@ void CheckExternalFiles() const GraphicsSet *used_set = BaseGraphics::GetUsedSet(); - DEBUG(grf, 1, "Using the %s base graphics set", used_set->name); + DEBUG(grf, 1, "Using the %s base graphics set", used_set->name.c_str()); static const size_t ERROR_MESSAGE_LENGTH = 256; static const size_t MISSING_FILE_MESSAGE_LENGTH = 128; @@ -137,7 +137,7 @@ void CheckExternalFiles() if (used_set->GetNumInvalid() != 0) { /* Not all files were loaded successfully, see which ones */ - add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name); + add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name.c_str()); for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) { MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR); if (res != MD5File::CR_MATCH) add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", used_set->files[i].filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning); @@ -147,7 +147,7 @@ void CheckExternalFiles() const SoundsSet *sounds_set = BaseSounds::GetUsedSet(); if (sounds_set->GetNumInvalid() != 0) { - add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name); + add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name.c_str()); assert_compile(SoundsSet::NUM_FILES == 1); /* No need to loop each file, as long as there is only a single diff --git a/src/music_gui.cpp b/src/music_gui.cpp index d15025ea3d..dad5c2ba71 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -65,7 +65,7 @@ struct MusicSystem { void BuildPlaylists(); void ChangePlaylist(PlaylistChoices pl); - void ChangeMusicSet(const char *set_name); + void ChangeMusicSet(const std::string &set_name); void Shuffle(); void Unshuffle(); @@ -167,12 +167,10 @@ void MusicSystem::ChangePlaylist(PlaylistChoices pl) * Change to named music set, and reset playback. * @param set_name Name of music set to select */ -void MusicSystem::ChangeMusicSet(const char *set_name) +void MusicSystem::ChangeMusicSet(const std::string &set_name) { BaseMusic::SetSet(set_name); - - free(BaseMusic::ini_set); - BaseMusic::ini_set = stredup(set_name); + BaseMusic::ini_set = set_name; this->BuildPlaylists(); this->ChangePlaylist(this->selected_playlist); @@ -433,8 +431,7 @@ void MusicLoop() void ChangeMusicSet(int index) { if (BaseMusic::GetIndexOfUsedSet() == index) return; - const char *name = BaseMusic::GetSet(index)->name; - _music.ChangeMusicSet(name); + _music.ChangeMusicSet(BaseMusic::GetSet(index)->name); } /** @@ -464,7 +461,7 @@ struct MusicTrackSelectionWindow : public Window { SetDParam(0, STR_MUSIC_PLAYLIST_ALL + _settings_client.music.playlist); break; case WID_MTS_CAPTION: - SetDParamStr(0, BaseMusic::GetUsedSet()->name); + SetDParamStr(0, BaseMusic::GetUsedSet()->name.c_str()); break; } } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 3f0a2ee7ec..284e5737eb 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -925,7 +925,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { list.emplace_back(new DropDownListStringItem(STR_NONE, -1, false)); for (uint i = 0; i < this->grf_presets.size(); i++) { - list.emplace_back(new DropDownListCharStringItem(this->grf_presets[i].c_str(), i, false)); + list.emplace_back(new DropDownListCharStringItem(this->grf_presets[i], i, false)); } this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window diff --git a/src/openttd.cpp b/src/openttd.cpp index 7d9bd09a61..e5a6d1b054 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -537,9 +537,9 @@ int openttd_main(int argc, char *argv[]) char *sounddriver = nullptr; char *videodriver = nullptr; char *blitter = nullptr; - char *graphics_set = nullptr; - char *sounds_set = nullptr; - char *music_set = nullptr; + std::string graphics_set; + std::string sounds_set; + std::string music_set; Dimension resolution = {0, 0}; /* AfterNewGRFScan sets save_config to true after scanning completed. */ bool save_config = false; @@ -563,9 +563,9 @@ int openttd_main(int argc, char *argv[]) int i; while ((i = mgo.GetOpt()) != -1) { switch (i) { - case 'I': free(graphics_set); graphics_set = stredup(mgo.opt); break; - case 'S': free(sounds_set); sounds_set = stredup(mgo.opt); break; - case 'M': free(music_set); music_set = stredup(mgo.opt); break; + case 'I': graphics_set = mgo.opt; break; + case 'S': sounds_set = mgo.opt; break; + case 'M': music_set = mgo.opt; break; case 'm': free(musicdriver); musicdriver = stredup(mgo.opt); break; case 's': free(sounddriver); sounddriver = stredup(mgo.opt); break; case 'v': free(videodriver); videodriver = stredup(mgo.opt); break; @@ -731,17 +731,16 @@ int openttd_main(int argc, char *argv[]) InitWindowSystem(); BaseGraphics::FindSets(); - if (graphics_set == nullptr && BaseGraphics::ini_set != nullptr) graphics_set = stredup(BaseGraphics::ini_set); + if (graphics_set.empty() && !BaseGraphics::ini_set.empty()) graphics_set = BaseGraphics::ini_set; if (!BaseGraphics::SetSet(graphics_set)) { - if (!StrEmpty(graphics_set)) { - BaseGraphics::SetSet(nullptr); + if (!graphics_set.empty()) { + BaseGraphics::SetSet({}); ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND); - msg.SetDParamStr(0, graphics_set); + msg.SetDParamStr(0, graphics_set.c_str()); ScheduleErrorMessage(msg); } } - free(graphics_set); /* Initialize game palette */ GfxInitPalettes(); @@ -802,30 +801,28 @@ int openttd_main(int argc, char *argv[]) InitializeScreenshotFormats(); BaseSounds::FindSets(); - if (sounds_set == nullptr && BaseSounds::ini_set != nullptr) sounds_set = stredup(BaseSounds::ini_set); + if (sounds_set.empty() && !BaseSounds::ini_set.empty()) sounds_set = BaseSounds::ini_set; if (!BaseSounds::SetSet(sounds_set)) { - if (StrEmpty(sounds_set) || !BaseSounds::SetSet(nullptr)) { + if (sounds_set.empty() || !BaseSounds::SetSet({})) { 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); + msg.SetDParamStr(0, sounds_set.c_str()); ScheduleErrorMessage(msg); } } - free(sounds_set); BaseMusic::FindSets(); - if (music_set == nullptr && BaseMusic::ini_set != nullptr) music_set = stredup(BaseMusic::ini_set); + if (music_set.empty() && !BaseMusic::ini_set.empty()) music_set = BaseMusic::ini_set; if (!BaseMusic::SetSet(music_set)) { - if (StrEmpty(music_set) || !BaseMusic::SetSet(nullptr)) { + if (music_set.empty() || !BaseMusic::SetSet({})) { 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); + msg.SetDParamStr(0, music_set.c_str()); ScheduleErrorMessage(msg); } } - free(music_set); if (sounddriver == nullptr && _ini_sounddriver != nullptr) sounddriver = stredup(_ini_sounddriver); DriverFactoryBase::SelectDriver(sounddriver, Driver::DT_SOUND); @@ -875,22 +872,15 @@ int openttd_main(int argc, char *argv[]) exit_noshutdown: /* These three are normally freed before bootstrap. */ - free(graphics_set); free(videodriver); free(blitter); exit_bootstrap: /* These are normally freed before exit, but after bootstrap. */ - free(sounds_set); - free(music_set); free(musicdriver); free(sounddriver); exit_normal: - free(BaseGraphics::ini_set); - free(BaseSounds::ini_set); - free(BaseMusic::ini_set); - free(_ini_musicdriver); free(_ini_sounddriver); free(_ini_videodriver); @@ -1142,9 +1132,9 @@ void SwitchToMode(SwitchMode new_mode) case SM_MENU: // Switch to game intro menu LoadIntroGame(); - if (BaseSounds::ini_set == nullptr && BaseSounds::GetUsedSet()->fallback) { + if (BaseSounds::ini_set.empty() && BaseSounds::GetUsedSet()->fallback) { ShowErrorMessage(STR_WARNING_FALLBACK_SOUNDSET, INVALID_STRING_ID, WL_CRITICAL); - BaseSounds::ini_set = stredup(BaseSounds::GetUsedSet()->name); + BaseSounds::ini_set = BaseSounds::GetUsedSet()->name; } break; diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 07a8121fe3..1db7cceae0 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -310,7 +310,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user char buf[8192]; char *p = buf; - p += seprintf(p, lastof(buf), "Graphics set: %s (%u)\n", BaseGraphics::GetUsedSet()->name, BaseGraphics::GetUsedSet()->version); + p += seprintf(p, lastof(buf), "Graphics set: %s (%u)\n", BaseGraphics::GetUsedSet()->name.c_str(), BaseGraphics::GetUsedSet()->version); p = strecpy(p, "NewGRFs:\n", lastof(buf)); for (const GRFConfig *c = _game_mode == GM_MENU ? nullptr : _grfconfig; c != nullptr; c = c->next) { p += seprintf(p, lastof(buf), "%08X ", BSWAP32(c->ident.grfid)); diff --git a/src/settings.cpp b/src/settings.cpp index ef1aaa1b6c..505638e94e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -414,6 +414,7 @@ static const void *StringToVal(const SettingDescBase *desc, const char *orig_str return desc->def; } + case SDT_STDSTRING: case SDT_STRING: return orig_str; case SDT_INTLIST: return str; default: break; @@ -565,6 +566,22 @@ static void IniLoadSettings(IniFile *ini, const SettingDesc *sd, const char *grp } break; + case SDT_STDSTRING: + switch (GetVarMemType(sld->conv)) { + case SLE_VAR_STR: + case SLE_VAR_STRQ: + if (p != nullptr) { + reinterpret_cast(ptr)->assign((const char *)p); + } else { + reinterpret_cast(ptr)->clear(); + } + break; + + default: NOT_REACHED(); + } + + break; + case SDT_INTLIST: { if (!LoadIntList((const char*)p, ptr, sld->length, GetVarMemType(sld->conv))) { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_ARRAY); @@ -701,6 +718,22 @@ static void IniSaveSettings(IniFile *ini, const SettingDesc *sd, const char *grp } break; + case SDT_STDSTRING: + switch (GetVarMemType(sld->conv)) { + case SLE_VAR_STR: strecpy(buf, reinterpret_cast(ptr)->c_str(), lastof(buf)); break; + + case SLE_VAR_STRQ: + if (reinterpret_cast(ptr)->empty()) { + buf[0] = '\0'; + } else { + seprintf(buf, lastof(buf), "\"%s\"", reinterpret_cast(ptr)->c_str()); + } + break; + + default: NOT_REACHED(); + } + break; + case SDT_INTLIST: MakeIntList(buf, lastof(buf), ptr, sld->length, sld->conv); break; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 968be54f67..a124d69894 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -152,7 +152,7 @@ struct BaseSetTextfileWindow : public TextfileWindow { { if (widget == WID_TF_CAPTION) { SetDParam(0, content_type); - SetDParamStr(1, this->baseset->name); + SetDParamStr(1, this->baseset->name.c_str()); } } }; @@ -335,10 +335,10 @@ struct GameOptionsWindow : Window { case WID_GO_RESOLUTION_DROPDOWN: SetDParam(0, GetCurRes() == _resolutions.size() ? STR_GAME_OPTIONS_RESOLUTION_OTHER : SPECSTR_RESOLUTION_START + GetCurRes()); break; case WID_GO_GUI_ZOOM_DROPDOWN: SetDParam(0, _gui_zoom_dropdown[ZOOM_LVL_OUT_4X - _gui_zoom]); break; case WID_GO_FONT_ZOOM_DROPDOWN: SetDParam(0, _font_zoom_dropdown[ZOOM_LVL_OUT_4X - _font_zoom]); break; - case WID_GO_BASE_GRF_DROPDOWN: SetDParamStr(0, BaseGraphics::GetUsedSet()->name); break; + case WID_GO_BASE_GRF_DROPDOWN: SetDParamStr(0, BaseGraphics::GetUsedSet()->name.c_str()); break; case WID_GO_BASE_GRF_STATUS: SetDParam(0, BaseGraphics::GetUsedSet()->GetNumInvalid()); break; - case WID_GO_BASE_SFX_DROPDOWN: SetDParamStr(0, BaseSounds::GetUsedSet()->name); break; - case WID_GO_BASE_MUSIC_DROPDOWN: SetDParamStr(0, BaseMusic::GetUsedSet()->name); break; + case WID_GO_BASE_SFX_DROPDOWN: SetDParamStr(0, BaseSounds::GetUsedSet()->name.c_str()); break; + case WID_GO_BASE_MUSIC_DROPDOWN: SetDParamStr(0, BaseMusic::GetUsedSet()->name.c_str()); break; case WID_GO_BASE_MUSIC_STATUS: SetDParam(0, BaseMusic::GetUsedSet()->GetNumInvalid()); break; } } @@ -481,10 +481,9 @@ struct GameOptionsWindow : Window { void SetMediaSet(int index) { if (_game_mode == GM_MENU) { - const char *name = T::GetSet(index)->name; + auto name = T::GetSet(index)->name; - free(T::ini_set); - T::ini_set = stredup(name); + T::ini_set = name; T::SetSet(name); this->reload = true; diff --git a/src/settings_internal.h b/src/settings_internal.h index 3d9764dc6f..fcad02c3c9 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -27,8 +27,9 @@ enum SettingDescType : byte { SDT_MANYOFMANY = 3, ///< bitmasked number where MULTIPLE bits may be set SDT_INTLIST = 4, ///< list of integers separated by a comma ',' SDT_STRING = 5, ///< string with a pre-allocated buffer + SDT_STDSTRING = 6, ///< \c std::string SDT_END, - /* 10 more possible primitives */ + /* 9 more possible primitives */ }; diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini index c9441459ff..c97663605b 100644 --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -17,6 +17,7 @@ SDTG_LIST = SDTG_LIST($name, $type, $length, $flags, $guiflags, $var, $def, SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $guiflags, $var, $def, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat), SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def, $max, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat), SDTG_STR = SDTG_STR($name, $type, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat), +SDTG_SSTR = SDTG_SSTR($name, $type, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat), SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat), SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat), SDTG_END = SDTG_END() @@ -58,21 +59,21 @@ max = 2 full = _support8bppmodes cat = SC_BASIC -[SDTG_STR] +[SDTG_SSTR] name = ""graphicsset"" type = SLE_STRQ var = BaseGraphics::ini_set def = nullptr cat = SC_BASIC -[SDTG_STR] +[SDTG_SSTR] name = ""soundsset"" type = SLE_STRQ var = BaseSounds::ini_set def = nullptr cat = SC_BASIC -[SDTG_STR] +[SDTG_SSTR] name = ""musicset"" type = SLE_STRQ var = BaseMusic::ini_set diff --git a/src/table/settings.h.preamble b/src/table/settings.h.preamble index 2be8239a6c..ddb9d2abfc 100644 --- a/src/table/settings.h.preamble +++ b/src/table/settings.h.preamble @@ -74,6 +74,9 @@ static size_t ConvertLandscape(const char *value); #define SDTG_STR(name, type, flags, guiflags, var, def, str, strhelp, strval, proc, from, to, cat)\ SDTG_GENERAL(name, SDT_STRING, SL_STR, type, flags, guiflags, var, sizeof(var), def, 0, 0, 0, nullptr, str, strhelp, strval, proc, from, to, cat) +#define SDTG_SSTR(name, type, flags, guiflags, var, def, str, strhelp, strval, proc, from, to, cat)\ + SDTG_GENERAL(name, SDT_STDSTRING, SL_STDSTR, type, flags, guiflags, var, sizeof(var), def, 0, 0, 0, nullptr, str, strhelp, strval, proc, from, to, cat) + #define SDTG_OMANY(name, type, flags, guiflags, var, def, max, full, str, strhelp, strval, proc, from, to, cat)\ SDTG_GENERAL(name, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, max, 0, full, str, strhelp, strval, proc, from, to, cat) diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 3412a98bdd..c450dc7b8c 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -65,7 +65,7 @@ StringID DropDownListParamStringItem::String() const StringID DropDownListCharStringItem::String() const { - SetDParamStr(0, this->raw_string); + SetDParamStr(0, this->raw_string.c_str()); return this->string; } diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index c7d3251d68..5617027e3f 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -68,9 +68,9 @@ public: */ class DropDownListCharStringItem : public DropDownListStringItem { public: - const char *raw_string; + std::string raw_string; - DropDownListCharStringItem(const char *raw_string, int result, bool masked) : DropDownListStringItem(STR_JUST_RAW_STRING, result, masked), raw_string(raw_string) {} + DropDownListCharStringItem(const std::string &raw_string, int result, bool masked) : DropDownListStringItem(STR_JUST_RAW_STRING, result, masked), raw_string(raw_string) {} StringID String() const override; }; From 37bc2f806462b3c2a84891b3aad6db00e935da86 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:32:08 +0200 Subject: [PATCH 123/601] Codechange: Use std::string in the driver and blitter selection code. --- src/blitter/factory.hpp | 29 ++++++-------- src/driver.cpp | 80 +++++++++++++++---------------------- src/driver.h | 15 +++---- src/music/allegro_m.cpp | 2 +- src/music/allegro_m.h | 2 +- src/music/bemidi.cpp | 2 +- src/music/bemidi.h | 2 +- src/music/cocoa_m.cpp | 2 +- src/music/cocoa_m.h | 2 +- src/music/dmusic.cpp | 2 +- src/music/dmusic.h | 2 +- src/music/extmidi.cpp | 2 +- src/music/extmidi.h | 2 +- src/music/fluidsynth.cpp | 2 +- src/music/fluidsynth.h | 2 +- src/music/music_driver.hpp | 2 +- src/music/null_m.h | 2 +- src/music/os2_m.cpp | 2 +- src/music/os2_m.h | 2 +- src/music/win32_m.cpp | 2 +- src/music/win32_m.h | 2 +- src/openttd.cpp | 60 +++++++++------------------- src/sound/allegro_s.cpp | 2 +- src/sound/allegro_s.h | 2 +- src/sound/cocoa_s.cpp | 2 +- src/sound/cocoa_s.h | 2 +- src/sound/null_s.h | 2 +- src/sound/sdl2_s.cpp | 2 +- src/sound/sdl_s.cpp | 2 +- src/sound/sdl_s.h | 2 +- src/sound/sound_driver.hpp | 2 +- src/sound/win32_s.cpp | 2 +- src/sound/win32_s.h | 2 +- src/sound/xaudio2_s.cpp | 2 +- src/sound/xaudio2_s.h | 2 +- src/table/misc_settings.ini | 8 ++-- src/video/allegro_v.cpp | 2 +- src/video/allegro_v.h | 2 +- src/video/cocoa/cocoa_v.h | 2 +- src/video/cocoa/cocoa_v.mm | 4 +- src/video/dedicated_v.cpp | 2 +- src/video/dedicated_v.h | 2 +- src/video/null_v.cpp | 2 +- src/video/null_v.h | 2 +- src/video/sdl2_v.cpp | 4 +- src/video/sdl2_v.h | 2 +- src/video/sdl_v.cpp | 4 +- src/video/sdl_v.h | 2 +- src/video/video_driver.hpp | 2 +- src/video/win32_v.cpp | 4 +- src/video/win32_v.h | 2 +- 51 files changed, 126 insertions(+), 166 deletions(-) diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp index 30a70570be..c7776f4a46 100644 --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -22,10 +22,10 @@ */ class BlitterFactory { private: - const char *name; ///< The name of the blitter factory. - const char *description; ///< The description of the blitter. + const std::string name; ///< The name of the blitter factory. + const std::string description; ///< The description of the blitter. - typedef std::map Blitters; ///< Map of blitter factories. + typedef std::map Blitters; ///< Map of blitter factories. /** * Get the map with currently known blitters. @@ -58,7 +58,7 @@ protected: * @pre There is no blitter registered with this name. */ BlitterFactory(const char *name, const char *description, bool usable = true) : - name(stredup(name)), description(stredup(description)) + name(name), description(description) { if (usable) { /* @@ -78,9 +78,6 @@ public: { GetBlitters().erase(this->name); if (GetBlitters().empty()) delete &GetBlitters(); - - free(this->name); - free(this->description); } /** @@ -88,7 +85,7 @@ public: * @param name the blitter to select. * @post Sets the blitter so GetCurrentBlitter() returns it too. */ - static Blitter *SelectBlitter(const char *name) + static Blitter *SelectBlitter(const std::string &name) { BlitterFactory *b = GetBlitterFactory(name); if (b == nullptr) return nullptr; @@ -97,7 +94,7 @@ public: delete *GetActiveBlitter(); *GetActiveBlitter() = newb; - DEBUG(driver, 1, "Successfully %s blitter '%s'", StrEmpty(name) ? "probed" : "loaded", newb->GetName()); + DEBUG(driver, 1, "Successfully %s blitter '%s'", name.empty() ? "probed" : "loaded", newb->GetName()); return newb; } @@ -106,7 +103,7 @@ public: * @param name the blitter factory to select. * @return The blitter factory, or nullptr when there isn't one with the wanted name. */ - static BlitterFactory *GetBlitterFactory(const char *name) + static BlitterFactory *GetBlitterFactory(const std::string &name) { #if defined(DEDICATED) const char *default_blitter = "null"; @@ -116,12 +113,12 @@ public: const char *default_blitter = "8bpp-optimized"; #endif if (GetBlitters().size() == 0) return nullptr; - const char *bname = (StrEmpty(name)) ? default_blitter : name; + const char *bname = name.empty() ? default_blitter : name.c_str(); Blitters::iterator it = GetBlitters().begin(); for (; it != GetBlitters().end(); it++) { BlitterFactory *b = (*it).second; - if (strcasecmp(bname, b->name) == 0) { + if (strcasecmp(bname, b->name.c_str()) == 0) { return b; } } @@ -148,7 +145,7 @@ public: Blitters::iterator it = GetBlitters().begin(); for (; it != GetBlitters().end(); it++) { BlitterFactory *b = (*it).second; - p += seprintf(p, last, "%18s: %s\n", b->name, b->GetDescription()); + p += seprintf(p, last, "%18s: %s\n", b->name.c_str(), b->GetDescription().c_str()); } p += seprintf(p, last, "\n"); @@ -158,7 +155,7 @@ public: /** * Get the long, human readable, name for the Blitter-class. */ - const char *GetName() const + const std::string &GetName() const { return this->name; } @@ -166,7 +163,7 @@ public: /** * Get a nice description of the blitter-class. */ - const char *GetDescription() const + const std::string &GetDescription() const { return this->description; } @@ -177,7 +174,7 @@ public: virtual Blitter *CreateInstance() = 0; }; -extern char *_ini_blitter; +extern std::string _ini_blitter; extern bool _blitter_autodetected; #endif /* BLITTER_FACTORY_HPP */ diff --git a/src/driver.cpp b/src/driver.cpp index a642a2f867..c4efd35692 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -13,19 +13,21 @@ #include "music/music_driver.hpp" #include "video/video_driver.hpp" #include "string_func.h" +#include +#include #include "safeguards.h" -char *_ini_videodriver; ///< The video driver a stored in the configuration file. +std::string _ini_videodriver; ///< The video driver a stored in the configuration file. std::vector _resolutions; ///< List of resolutions. Dimension _cur_resolution; ///< The current resolution. bool _rightclick_emulate; ///< Whether right clicking is emulated. -char *_ini_sounddriver; ///< The sound driver a stored in the configuration file. +std::string _ini_sounddriver; ///< The sound driver a stored in the configuration file. -char *_ini_musicdriver; ///< The music driver a stored in the configuration file. +std::string _ini_musicdriver; ///< The music driver a stored in the configuration file. -char *_ini_blitter; ///< The blitter as stored in the configuration file. +std::string _ini_blitter; ///< The blitter as stored in the configuration file. bool _blitter_autodetected; ///< Was the blitter autodetected or specified by the user? /** @@ -34,19 +36,15 @@ bool _blitter_autodetected; ///< Was the blitter autodetected or specif * @param name The parameter name we're looking for. * @return The parameter value. */ -const char *GetDriverParam(const char * const *parm, const char *name) +const char *GetDriverParam(const StringList &parm, const char *name) { - size_t len; + if (parm.empty()) return nullptr; - if (parm == nullptr) return nullptr; - - len = strlen(name); - for (; *parm != nullptr; parm++) { - const char *p = *parm; - - if (strncmp(p, name, len) == 0) { - if (p[len] == '=') return p + len + 1; - if (p[len] == '\0') return p + len; + size_t len = strlen(name); + for (auto &p : parm) { + if (p.compare(0, len, name) == 0) { + if (p.length() == len) return ""; + if (p[len] == '=') return p.c_str() + len + 1; } } return nullptr; @@ -58,7 +56,7 @@ const char *GetDriverParam(const char * const *parm, const char *name) * @param name The parameter name we're looking for. * @return The parameter value. */ -bool GetDriverParamBool(const char * const *parm, const char *name) +bool GetDriverParamBool(const StringList &parm, const char *name) { return GetDriverParam(parm, name) != nullptr; } @@ -70,7 +68,7 @@ bool GetDriverParamBool(const char * const *parm, const char *name) * @param def The default value if the parameter doesn't exist. * @return The parameter value. */ -int GetDriverParamInt(const char * const *parm, const char *name, int def) +int GetDriverParamInt(const StringList &parm, const char *name, int def) { const char *p = GetDriverParam(parm, name); return p != nullptr ? atoi(p) : def; @@ -82,12 +80,12 @@ int GetDriverParamInt(const char * const *parm, const char *name, int def) * @param type the type of driver to select * @post Sets the driver so GetCurrentDriver() returns it too. */ -void DriverFactoryBase::SelectDriver(const char *name, Driver::Type type) +void DriverFactoryBase::SelectDriver(const std::string &name, Driver::Type type) { if (!DriverFactoryBase::SelectDriverImpl(name, type)) { - StrEmpty(name) ? + name.empty() ? usererror("Failed to autoprobe %s driver", GetDriverTypeName(type)) : - usererror("Failed to select requested %s driver '%s'", GetDriverTypeName(type), name); + usererror("Failed to select requested %s driver '%s'", GetDriverTypeName(type), name.c_str()); } } @@ -98,11 +96,11 @@ void DriverFactoryBase::SelectDriver(const char *name, Driver::Type type) * @post Sets the driver so GetCurrentDriver() returns it too. * @return True upon success, otherwise false. */ -bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) +bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type type) { if (GetDrivers().size() == 0) return false; - if (StrEmpty(name)) { + if (name.empty()) { /* Probe for this driver, but do not fall back to dedicated/null! */ for (int priority = 10; priority > 0; priority--) { Drivers::iterator it = GetDrivers().begin(); @@ -117,7 +115,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) Driver *newd = d->CreateInstance(); *GetActiveDriver(type) = newd; - const char *err = newd->Start(nullptr); + const char *err = newd->Start({}); if (err == nullptr) { DEBUG(driver, 1, "Successfully probed %s driver '%s'", GetDriverTypeName(type), d->name); delete oldd; @@ -131,23 +129,15 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) } usererror("Couldn't find any suitable %s driver", GetDriverTypeName(type)); } else { - char *parm; - char buffer[256]; - const char *parms[32]; - /* Extract the driver name and put parameter list in parm */ - strecpy(buffer, name, lastof(buffer)); - parm = strchr(buffer, ':'); - parms[0] = nullptr; - if (parm != nullptr) { - uint np = 0; - /* Tokenize the parm. */ - do { - *parm++ = '\0'; - if (np < lengthof(parms) - 1) parms[np++] = parm; - while (*parm != '\0' && *parm != ',') parm++; - } while (*parm == ','); - parms[np] = nullptr; + std::istringstream buffer(name); + std::string dname; + std::getline(buffer, dname, ':'); + + std::string param; + std::vector parms; + while (std::getline(buffer, param, ',')) { + parms.push_back(param); } /* Find this driver */ @@ -159,7 +149,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) if (d->type != type) continue; /* Check driver name */ - if (strcasecmp(buffer, d->name) != 0) continue; + if (strcasecmp(dname.c_str(), d->name) != 0) continue; /* Found our driver, let's try it */ Driver *newd = d->CreateInstance(); @@ -175,7 +165,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) *GetActiveDriver(type) = newd; return true; } - usererror("No such %s driver: %s\n", GetDriverTypeName(type), buffer); + usererror("No such %s driver: %s\n", GetDriverTypeName(type), dname.c_str()); } } @@ -221,9 +211,7 @@ DriverFactoryBase::DriverFactoryBase(Driver::Type type, int priority, const char strecpy(buf, GetDriverTypeName(type), lastof(buf)); strecpy(buf + 5, name, lastof(buf)); - const char *longname = stredup(buf); - - std::pair P = GetDrivers().insert(Drivers::value_type(longname, this)); + std::pair P = GetDrivers().insert(Drivers::value_type(buf, this)); assert(P.second); } @@ -240,10 +228,6 @@ DriverFactoryBase::~DriverFactoryBase() Drivers::iterator it = GetDrivers().find(buf); assert(it != GetDrivers().end()); - const char *longname = (*it).first; - GetDrivers().erase(it); - free(longname); - if (GetDrivers().empty()) delete &GetDrivers(); } diff --git a/src/driver.h b/src/driver.h index 3ac4f7f8a4..68d9fac929 100644 --- a/src/driver.h +++ b/src/driver.h @@ -12,11 +12,12 @@ #include "core/enum_type.hpp" #include "core/string_compare_type.hpp" +#include "string_type.h" #include -const char *GetDriverParam(const char * const *parm, const char *name); -bool GetDriverParamBool(const char * const *parm, const char *name); -int GetDriverParamInt(const char * const *parm, const char *name, int def); +const char *GetDriverParam(const StringList &parm, const char *name); +bool GetDriverParamBool(const StringList &parm, const char *name); +int GetDriverParamInt(const StringList &parm, const char *name, int def); /** A driver for communicating with the user. */ class Driver { @@ -26,7 +27,7 @@ public: * @param parm Parameters passed to the driver. * @return nullptr if everything went okay, otherwise an error message. */ - virtual const char *Start(const char * const *parm) = 0; + virtual const char *Start(const StringList &parm) = 0; /** * Stop this driver. @@ -66,7 +67,7 @@ private: const char *name; ///< The name of the drivers of this factory. const char *description; ///< The description of this driver. - typedef std::map Drivers; ///< Type for a map of drivers. + typedef std::map Drivers; ///< Type for a map of drivers. /** * Get the map with drivers. @@ -99,7 +100,7 @@ private: return driver_type_name[type]; } - static bool SelectDriverImpl(const char *name, Driver::Type type); + static bool SelectDriverImpl(const std::string &name, Driver::Type type); protected: DriverFactoryBase(Driver::Type type, int priority, const char *name, const char *description); @@ -118,7 +119,7 @@ public: } } - static void SelectDriver(const char *name, Driver::Type type); + static void SelectDriver(const std::string &name, Driver::Type type); static char *GetDriversInfo(char *p, const char *last); /** diff --git a/src/music/allegro_m.cpp b/src/music/allegro_m.cpp index 4f90bce061..6d06ce87ec 100644 --- a/src/music/allegro_m.cpp +++ b/src/music/allegro_m.cpp @@ -26,7 +26,7 @@ static MIDI *_midi = nullptr; */ extern int _allegro_instance_count; -const char *MusicDriver_Allegro::Start(const char * const *param) +const char *MusicDriver_Allegro::Start(const StringList ¶m) { if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { DEBUG(driver, 0, "allegro: install_allegro failed '%s'", allegro_error); diff --git a/src/music/allegro_m.h b/src/music/allegro_m.h index 1965626ca2..b07a7073b6 100644 --- a/src/music/allegro_m.h +++ b/src/music/allegro_m.h @@ -15,7 +15,7 @@ /** Allegro's music player. */ class MusicDriver_Allegro : public MusicDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/bemidi.cpp b/src/music/bemidi.cpp index c3ea152dae..4175f526b0 100644 --- a/src/music/bemidi.cpp +++ b/src/music/bemidi.cpp @@ -24,7 +24,7 @@ static BMidiSynthFile midiSynthFile; /** Factory for BeOS' midi player. */ static FMusicDriver_BeMidi iFMusicDriver_BeMidi; -const char *MusicDriver_BeMidi::Start(const char * const *parm) +const char *MusicDriver_BeMidi::Start(const StringList &parm) { return nullptr; } diff --git a/src/music/bemidi.h b/src/music/bemidi.h index a524069db0..8e96acc8d7 100644 --- a/src/music/bemidi.h +++ b/src/music/bemidi.h @@ -15,7 +15,7 @@ /** The midi player for BeOS. */ class MusicDriver_BeMidi : public MusicDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp index 9fec5ba15b..a989cfe769 100644 --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -79,7 +79,7 @@ static void DoSetVolume() /** * Initialized the MIDI player, including QuickTime initialization. */ -const char *MusicDriver_Cocoa::Start(const char * const *parm) +const char *MusicDriver_Cocoa::Start(const StringList &parm) { if (NewMusicPlayer(&_player) != noErr) return "failed to create music player"; diff --git a/src/music/cocoa_m.h b/src/music/cocoa_m.h index aa477eddaf..046a60c386 100644 --- a/src/music/cocoa_m.h +++ b/src/music/cocoa_m.h @@ -14,7 +14,7 @@ class MusicDriver_Cocoa : public MusicDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 4a7461ee8f..780666142c 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -1071,7 +1071,7 @@ static const char *LoadDefaultDLSFile(const char *user_dls) } -const char *MusicDriver_DMusic::Start(const char * const *parm) +const char *MusicDriver_DMusic::Start(const StringList &parm) { /* Initialize COM */ if (FAILED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED))) return "COM initialization failed"; diff --git a/src/music/dmusic.h b/src/music/dmusic.h index bfbb07f16d..616bf01208 100644 --- a/src/music/dmusic.h +++ b/src/music/dmusic.h @@ -17,7 +17,7 @@ class MusicDriver_DMusic : public MusicDriver { public: virtual ~MusicDriver_DMusic(); - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index b7e7e63b90..f882452501 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -36,7 +36,7 @@ /** Factory for the midi player that uses external players. */ static FMusicDriver_ExtMidi iFMusicDriver_ExtMidi; -const char *MusicDriver_ExtMidi::Start(const char * const * parm) +const char *MusicDriver_ExtMidi::Start(const StringList &parm) { if (strcmp(VideoDriver::GetInstance()->GetName(), "allegro") == 0 || strcmp(SoundDriver::GetInstance()->GetName(), "allegro") == 0) { diff --git a/src/music/extmidi.h b/src/music/extmidi.h index 495e9a72cf..f43bbad179 100644 --- a/src/music/extmidi.h +++ b/src/music/extmidi.h @@ -22,7 +22,7 @@ private: void DoStop(); public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index 64abe0e538..61686a441e 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -50,7 +50,7 @@ static void RenderMusicStream(int16 *buffer, size_t samples) fluid_synth_write_s16(_midi.synth, samples, buffer, 0, 2, buffer, 1, 2); } -const char *MusicDriver_FluidSynth::Start(const char * const *param) +const char *MusicDriver_FluidSynth::Start(const StringList ¶m) { std::lock_guard lock{ _midi.synth_mutex }; diff --git a/src/music/fluidsynth.h b/src/music/fluidsynth.h index 71d43fec4c..91543662d0 100644 --- a/src/music/fluidsynth.h +++ b/src/music/fluidsynth.h @@ -15,7 +15,7 @@ /** Music driver making use of FluidSynth. */ class MusicDriver_FluidSynth : public MusicDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/music_driver.hpp b/src/music/music_driver.hpp index 601cc6d475..3953685bf0 100644 --- a/src/music/music_driver.hpp +++ b/src/music/music_driver.hpp @@ -48,6 +48,6 @@ public: } }; -extern char *_ini_musicdriver; +extern std::string _ini_musicdriver; #endif /* MUSIC_MUSIC_DRIVER_HPP */ diff --git a/src/music/null_m.h b/src/music/null_m.h index 09f84e35ce..3a034110dc 100644 --- a/src/music/null_m.h +++ b/src/music/null_m.h @@ -15,7 +15,7 @@ /** The music player that does nothing. */ class MusicDriver_Null : public MusicDriver { public: - const char *Start(const char * const *param) override { return nullptr; } + const char *Start(const StringList ¶m) override { return nullptr; } void Stop() override { } diff --git a/src/music/os2_m.cpp b/src/music/os2_m.cpp index f66c2bd9e8..4736065678 100644 --- a/src/music/os2_m.cpp +++ b/src/music/os2_m.cpp @@ -80,7 +80,7 @@ bool MusicDriver_OS2::IsSongPlaying() return strcmp(buf, "playing") == 0 || strcmp(buf, "seeking") == 0; } -const char *MusicDriver_OS2::Start(const char * const *parm) +const char *MusicDriver_OS2::Start(const StringList &parm) { return 0; } diff --git a/src/music/os2_m.h b/src/music/os2_m.h index d0a4809b2c..a60f5bbfc7 100644 --- a/src/music/os2_m.h +++ b/src/music/os2_m.h @@ -15,7 +15,7 @@ /** OS/2's music player. */ class MusicDriver_OS2 : public MusicDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index b4f656b141..249fc5b6d7 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -362,7 +362,7 @@ void MusicDriver_Win32::SetVolume(byte vol) _midi.new_volume = vol; } -const char *MusicDriver_Win32::Start(const char * const *parm) +const char *MusicDriver_Win32::Start(const StringList &parm) { DEBUG(driver, 2, "Win32-MIDI: Start: initializing"); diff --git a/src/music/win32_m.h b/src/music/win32_m.h index 394c3d9909..5101d29321 100644 --- a/src/music/win32_m.h +++ b/src/music/win32_m.h @@ -15,7 +15,7 @@ /** The Windows music player. */ class MusicDriver_Win32 : public MusicDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/openttd.cpp b/src/openttd.cpp index e5a6d1b054..980eb2f13e 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -533,10 +533,10 @@ static const OptionData _options[] = { */ int openttd_main(int argc, char *argv[]) { - char *musicdriver = nullptr; - char *sounddriver = nullptr; - char *videodriver = nullptr; - char *blitter = nullptr; + std::string musicdriver; + std::string sounddriver; + std::string videodriver; + std::string blitter; std::string graphics_set; std::string sounds_set; std::string music_set; @@ -566,19 +566,15 @@ int openttd_main(int argc, char *argv[]) case 'I': graphics_set = mgo.opt; break; case 'S': sounds_set = mgo.opt; break; case 'M': music_set = mgo.opt; break; - case 'm': free(musicdriver); musicdriver = stredup(mgo.opt); break; - case 's': free(sounddriver); sounddriver = stredup(mgo.opt); break; - case 'v': free(videodriver); videodriver = stredup(mgo.opt); break; - case 'b': free(blitter); blitter = stredup(mgo.opt); break; + case 'm': musicdriver = mgo.opt; break; + case 's': sounddriver = mgo.opt; break; + case 'v': videodriver = mgo.opt; break; + case 'b': blitter = mgo.opt; break; case 'D': - free(musicdriver); - free(sounddriver); - free(videodriver); - free(blitter); - musicdriver = stredup("null"); - sounddriver = stredup("null"); - videodriver = stredup("dedicated"); - blitter = stredup("null"); + musicdriver = "null"; + sounddriver = "null"; + videodriver = "dedicated"; + blitter = "null"; dedicated = true; SetDebugString("net=6"); if (mgo.opt != nullptr) { @@ -746,8 +742,8 @@ int openttd_main(int argc, char *argv[]) GfxInitPalettes(); DEBUG(misc, 1, "Loading blitter..."); - if (blitter == nullptr && _ini_blitter != nullptr) blitter = stredup(_ini_blitter); - _blitter_autodetected = StrEmpty(blitter); + if (blitter.empty() && !_ini_blitter.empty()) blitter = _ini_blitter; + _blitter_autodetected = blitter.empty(); /* Activate the initial blitter. * This is only some initial guess, after NewGRFs have been loaded SwitchNewGRFBlitter may switch to a different one. * - Never guess anything, if the user specified a blitter. (_blitter_autodetected) @@ -758,16 +754,14 @@ int openttd_main(int argc, char *argv[]) (_support8bpp != S8BPP_NONE && (BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->blitter == BLT_8BPP)) || BlitterFactory::SelectBlitter("32bpp-anim") == nullptr) { if (BlitterFactory::SelectBlitter(blitter) == nullptr) { - StrEmpty(blitter) ? + blitter.empty() ? usererror("Failed to autoprobe blitter") : - usererror("Failed to select requested blitter '%s'; does it exist?", blitter); + usererror("Failed to select requested blitter '%s'; does it exist?", blitter.c_str()); } } - free(blitter); - if (videodriver == nullptr && _ini_videodriver != nullptr) videodriver = stredup(_ini_videodriver); + if (videodriver.empty() && !_ini_videodriver.empty()) videodriver = _ini_videodriver; DriverFactoryBase::SelectDriver(videodriver, Driver::DT_VIDEO); - free(videodriver); InitializeSpriteSorter(); @@ -824,13 +818,11 @@ int openttd_main(int argc, char *argv[]) } } - if (sounddriver == nullptr && _ini_sounddriver != nullptr) sounddriver = stredup(_ini_sounddriver); + if (sounddriver.empty() && !_ini_sounddriver.empty()) sounddriver = _ini_sounddriver; DriverFactoryBase::SelectDriver(sounddriver, Driver::DT_SOUND); - free(sounddriver); - if (musicdriver == nullptr && _ini_musicdriver != nullptr) musicdriver = stredup(_ini_musicdriver); + if (musicdriver.empty() && !_ini_musicdriver.empty()) musicdriver = _ini_musicdriver; DriverFactoryBase::SelectDriver(musicdriver, Driver::DT_MUSIC); - free(musicdriver); /* Take our initial lock on whatever we might want to do! */ try { @@ -868,23 +860,9 @@ int openttd_main(int argc, char *argv[]) /* Reset windowing system, stop drivers, free used memory, ... */ ShutdownGame(); - goto exit_normal; exit_noshutdown: - /* These three are normally freed before bootstrap. */ - free(videodriver); - free(blitter); - exit_bootstrap: - /* These are normally freed before exit, but after bootstrap. */ - free(musicdriver); - free(sounddriver); - -exit_normal: - free(_ini_musicdriver); - free(_ini_sounddriver); - free(_ini_videodriver); - free(_ini_blitter); delete scanner; diff --git a/src/sound/allegro_s.cpp b/src/sound/allegro_s.cpp index f7fa5df08b..09198100bf 100644 --- a/src/sound/allegro_s.cpp +++ b/src/sound/allegro_s.cpp @@ -50,7 +50,7 @@ void SoundDriver_Allegro::MainLoop() */ extern int _allegro_instance_count; -const char *SoundDriver_Allegro::Start(const char * const *parm) +const char *SoundDriver_Allegro::Start(const StringList &parm) { if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { DEBUG(driver, 0, "allegro: install_allegro failed '%s'", allegro_error); diff --git a/src/sound/allegro_s.h b/src/sound/allegro_s.h index 307d10fca4..6d40c58760 100644 --- a/src/sound/allegro_s.h +++ b/src/sound/allegro_s.h @@ -15,7 +15,7 @@ /** Implementation of the allegro sound driver. */ class SoundDriver_Allegro : public SoundDriver { public: - const char *Start(const char * const *param); + const char *Start(const StringList ¶m); void Stop(); diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp index cb1bc59e80..f5003a23c3 100644 --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -44,7 +44,7 @@ static OSStatus audioCallback(void *inRefCon, AudioUnitRenderActionFlags *inActi } -const char *SoundDriver_Cocoa::Start(const char * const *parm) +const char *SoundDriver_Cocoa::Start(const StringList &parm) { struct AURenderCallbackStruct callback; AudioStreamBasicDescription requestedDesc; diff --git a/src/sound/cocoa_s.h b/src/sound/cocoa_s.h index 43646504d7..dca5421915 100644 --- a/src/sound/cocoa_s.h +++ b/src/sound/cocoa_s.h @@ -14,7 +14,7 @@ class SoundDriver_Cocoa : public SoundDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; const char *GetName() const override { return "cocoa"; } diff --git a/src/sound/null_s.h b/src/sound/null_s.h index 5b883dde1e..c01eae32a6 100644 --- a/src/sound/null_s.h +++ b/src/sound/null_s.h @@ -15,7 +15,7 @@ /** Implementation of the null sound driver. */ class SoundDriver_Null : public SoundDriver { public: - const char *Start(const char * const *param) override { return nullptr; } + const char *Start(const StringList ¶m) override { return nullptr; } void Stop() override { } const char *GetName() const override { return "null"; } diff --git a/src/sound/sdl2_s.cpp b/src/sound/sdl2_s.cpp index 0b4e6c086d..9d1e47fabb 100644 --- a/src/sound/sdl2_s.cpp +++ b/src/sound/sdl2_s.cpp @@ -31,7 +31,7 @@ static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len) MxMixSamples(stream, len / 4); } -const char *SoundDriver_SDL::Start(const char * const *parm) +const char *SoundDriver_SDL::Start(const StringList &parm) { SDL_AudioSpec spec; SDL_AudioSpec spec_actual; diff --git a/src/sound/sdl_s.cpp b/src/sound/sdl_s.cpp index aac786dab5..737192a7ed 100644 --- a/src/sound/sdl_s.cpp +++ b/src/sound/sdl_s.cpp @@ -31,7 +31,7 @@ static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len) MxMixSamples(stream, len / 4); } -const char *SoundDriver_SDL::Start(const char * const *parm) +const char *SoundDriver_SDL::Start(const StringList &parm) { SDL_AudioSpec spec; diff --git a/src/sound/sdl_s.h b/src/sound/sdl_s.h index 4f746107c7..2b3be4d14c 100644 --- a/src/sound/sdl_s.h +++ b/src/sound/sdl_s.h @@ -15,7 +15,7 @@ /** Implementation of the SDL sound driver. */ class SoundDriver_SDL : public SoundDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; const char *GetName() const override { return "sdl"; } diff --git a/src/sound/sound_driver.hpp b/src/sound/sound_driver.hpp index f1a0519f83..6de66d74e9 100644 --- a/src/sound/sound_driver.hpp +++ b/src/sound/sound_driver.hpp @@ -26,6 +26,6 @@ public: } }; -extern char *_ini_sounddriver; +extern std::string _ini_sounddriver; #endif /* SOUND_SOUND_DRIVER_HPP */ diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index f45a619b53..4551778bd6 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -58,7 +58,7 @@ static DWORD WINAPI SoundThread(LPVOID arg) return 0; } -const char *SoundDriver_Win32::Start(const char * const *parm) +const char *SoundDriver_Win32::Start(const StringList &parm) { WAVEFORMATEX wfex; wfex.wFormatTag = WAVE_FORMAT_PCM; diff --git a/src/sound/win32_s.h b/src/sound/win32_s.h index be48a055c5..6f8f9791db 100644 --- a/src/sound/win32_s.h +++ b/src/sound/win32_s.h @@ -15,7 +15,7 @@ /** Implementation of the sound driver for Windows. */ class SoundDriver_Win32 : public SoundDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; const char *GetName() const override { return "win32"; } diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp index 8b9afbd1b1..5aa0580407 100644 --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -126,7 +126,7 @@ static StreamingVoiceContext* _voice_context = nullptr; * @return An error message if unsuccessful, or nullptr otherwise. * */ -const char *SoundDriver_XAudio2::Start(const char * const *parm) +const char *SoundDriver_XAudio2::Start(const StringList &parm) { HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); diff --git a/src/sound/xaudio2_s.h b/src/sound/xaudio2_s.h index 70b4d80cc9..9fcd26fd0a 100644 --- a/src/sound/xaudio2_s.h +++ b/src/sound/xaudio2_s.h @@ -15,7 +15,7 @@ /** Implementation of the XAudio2 sound driver. */ class SoundDriver_XAudio2 : public SoundDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; const char *GetName() const override { return "xaudio2"; } diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini index c97663605b..60799a4369 100644 --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -80,28 +80,28 @@ var = BaseMusic::ini_set def = nullptr cat = SC_BASIC -[SDTG_STR] +[SDTG_SSTR] name = ""videodriver"" type = SLE_STRQ var = _ini_videodriver def = nullptr cat = SC_EXPERT -[SDTG_STR] +[SDTG_SSTR] name = ""musicdriver"" type = SLE_STRQ var = _ini_musicdriver def = nullptr cat = SC_EXPERT -[SDTG_STR] +[SDTG_SSTR] name = ""sounddriver"" type = SLE_STRQ var = _ini_sounddriver def = nullptr cat = SC_EXPERT -[SDTG_STR] +[SDTG_SSTR] name = ""blitter"" type = SLE_STRQ var = _ini_blitter diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 88e5c528ff..9b0bef1ac7 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -410,7 +410,7 @@ static void PollEvent() */ int _allegro_instance_count = 0; -const char *VideoDriver_Allegro::Start(const char * const *parm) +const char *VideoDriver_Allegro::Start(const StringList &parm) { if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { DEBUG(driver, 0, "allegro: install_allegro failed '%s'", allegro_error); diff --git a/src/video/allegro_v.h b/src/video/allegro_v.h index fb7b84ee2c..641e3d6c2f 100644 --- a/src/video/allegro_v.h +++ b/src/video/allegro_v.h @@ -15,7 +15,7 @@ /** The allegro video driver. */ class VideoDriver_Allegro : public VideoDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 7286c685b8..3da6848d09 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -14,7 +14,7 @@ class VideoDriver_Cocoa : public VideoDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; /** Stop the video driver */ void Stop() override; diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 13a9cc9c47..10f30027bc 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -396,7 +396,7 @@ void VideoDriver_Cocoa::Stop() /** * Initialize a cocoa video subdriver. */ -const char *VideoDriver_Cocoa::Start(const char * const *parm) +const char *VideoDriver_Cocoa::Start(const StringList &parm) { if (!MacOSVersionIsAtLeast(10, 6, 0)) return "The Cocoa video driver requires Mac OS X 10.6 or later."; @@ -520,7 +520,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel bool wasstarted = _cocoa_video_started; if (VideoDriver::GetInstance() == NULL) { setupApplication(); // Setup application before showing dialog - } else if (!_cocoa_video_started && VideoDriver::GetInstance()->Start(NULL) != NULL) { + } else if (!_cocoa_video_started && VideoDriver::GetInstance()->Start(StringList()) != NULL) { fprintf(stderr, "%s: %s\n", title, message); return; } diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index ac7d38bb7f..0089d163df 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -133,7 +133,7 @@ extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileTy static FVideoDriver_Dedicated iFVideoDriver_Dedicated; -const char *VideoDriver_Dedicated::Start(const char * const *parm) +const char *VideoDriver_Dedicated::Start(const StringList &parm) { int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth(); _dedicated_video_mem = (bpp == 0) ? nullptr : MallocT(_cur_resolution.width * _cur_resolution.height * (bpp / 8)); diff --git a/src/video/dedicated_v.h b/src/video/dedicated_v.h index 27401aae91..54e2dd402b 100644 --- a/src/video/dedicated_v.h +++ b/src/video/dedicated_v.h @@ -15,7 +15,7 @@ /** The dedicated server video driver. */ class VideoDriver_Dedicated : public VideoDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp index 3e98ea9258..2fa45e1bc8 100644 --- a/src/video/null_v.cpp +++ b/src/video/null_v.cpp @@ -17,7 +17,7 @@ /** Factory for the null video driver. */ static FVideoDriver_Null iFVideoDriver_Null; -const char *VideoDriver_Null::Start(const char * const *parm) +const char *VideoDriver_Null::Start(const StringList &parm) { #ifdef _MSC_VER /* Disable the MSVC assertion message box. */ diff --git a/src/video/null_v.h b/src/video/null_v.h index ed563bffb7..ee83de7e65 100644 --- a/src/video/null_v.h +++ b/src/video/null_v.h @@ -18,7 +18,7 @@ private: uint ticks; ///< Amount of ticks to run. public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 0b3b9b8e30..0442a0e87a 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -626,7 +626,7 @@ int VideoDriver_SDL::PollEvent() return -1; } -const char *VideoDriver_SDL::Start(const char * const *parm) +const char *VideoDriver_SDL::Start(const StringList &parm) { /* Explicitly disable hardware acceleration. Enabling this causes * UpdateWindowSurface() to update the window's texture instead of @@ -652,7 +652,7 @@ const char *VideoDriver_SDL::Start(const char * const *parm) MarkWholeScreenDirty(); - _draw_threaded = GetDriverParam(parm, "no_threads") == nullptr && GetDriverParam(parm, "no_thread") == nullptr; + _draw_threaded = !GetDriverParamBool(parm, "no_threads") && !GetDriverParamBool(parm, "no_thread"); SDL_StopTextInput(); this->edit_box_focused = false; diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h index ae456a39d1..80d4018a77 100644 --- a/src/video/sdl2_v.h +++ b/src/video/sdl2_v.h @@ -15,7 +15,7 @@ /** The SDL video driver. */ class VideoDriver_SDL : public VideoDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index aacd3f2cba..fba6166c9c 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -596,7 +596,7 @@ int VideoDriver_SDL::PollEvent() return -1; } -const char *VideoDriver_SDL::Start(const char * const *parm) +const char *VideoDriver_SDL::Start(const StringList &parm) { char buf[30]; _use_hwpalette = GetDriverParamInt(parm, "hw_palette", 2); @@ -623,7 +623,7 @@ const char *VideoDriver_SDL::Start(const char * const *parm) MarkWholeScreenDirty(); SetupKeyboard(); - _draw_threaded = GetDriverParam(parm, "no_threads") == nullptr && GetDriverParam(parm, "no_thread") == nullptr; + _draw_threaded = !GetDriverParamBool(parm, "no_threads") && !GetDriverParamBool(parm, "no_thread"); return nullptr; } diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h index 39c77e5d33..ffebd041e0 100644 --- a/src/video/sdl_v.h +++ b/src/video/sdl_v.h @@ -15,7 +15,7 @@ /** The SDL video driver. */ class VideoDriver_SDL : public VideoDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp index 2cca66d3b2..15dd5d0d48 100644 --- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -104,7 +104,7 @@ public: } }; -extern char *_ini_videodriver; +extern std::string _ini_videodriver; extern std::vector _resolutions; extern Dimension _cur_resolution; extern bool _rightclick_emulate; diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 3deb0beb06..3411873201 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1111,7 +1111,7 @@ static void FindResolutions() static FVideoDriver_Win32 iFVideoDriver_Win32; -const char *VideoDriver_Win32::Start(const char * const *parm) +const char *VideoDriver_Win32::Start(const StringList &parm) { memset(&_wnd, 0, sizeof(_wnd)); @@ -1132,7 +1132,7 @@ const char *VideoDriver_Win32::Start(const char * const *parm) MarkWholeScreenDirty(); - _draw_threaded = GetDriverParam(parm, "no_threads") == nullptr && GetDriverParam(parm, "no_thread") == nullptr && std::thread::hardware_concurrency() > 1; + _draw_threaded = !GetDriverParamBool(parm, "no_threads") && !GetDriverParamBool(parm, "no_thread") && std::thread::hardware_concurrency() > 1; return nullptr; } diff --git a/src/video/win32_v.h b/src/video/win32_v.h index a0b5c7e161..5c1b20322f 100644 --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -15,7 +15,7 @@ /** The video driver for windows. */ class VideoDriver_Win32 : public VideoDriver { public: - const char *Start(const char * const *param) override; + const char *Start(const StringList ¶m) override; void Stop() override; From c972a63c8cbee7fa8d6d5af2cbbecb8c75ee561a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 May 2020 23:32:10 +0200 Subject: [PATCH 124/601] Codechange: Store info about the dedicated server log file in globals with automatic destruction to simplify control flow in openttd_main. --- src/dedicated.cpp | 14 ++++++++------ src/fileio.cpp | 5 +++-- src/fileio_func.h | 8 ++++++++ src/openttd.cpp | 29 +++++++---------------------- 4 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/dedicated.cpp b/src/dedicated.cpp index 8ab035e61d..fe3cd7cfb8 100644 --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -8,9 +8,11 @@ /** @file dedicated.cpp Forking support for dedicated servers. */ #include "stdafx.h" +#include "fileio_func.h" +#include -char *_log_file = nullptr; ///< File to reroute output of a forked OpenTTD to -FILE *_log_fd = nullptr; ///< File to reroute output of a forked OpenTTD to +std::string _log_file; ///< File to reroute output of a forked OpenTTD to +std::unique_ptr _log_fd; ///< File to reroute output of a forked OpenTTD to #if defined(UNIX) @@ -38,17 +40,17 @@ void DedicatedFork() case 0: { // We're the child /* Open the log-file to log all stuff too */ - _log_fd = fopen(_log_file, "a"); - if (_log_fd == nullptr) { + _log_fd.reset(fopen(_log_file.c_str(), "a")); + if (!_log_fd) { perror("Unable to open logfile"); exit(1); } /* Redirect stdout and stderr to log-file */ - if (dup2(fileno(_log_fd), fileno(stdout)) == -1) { + if (dup2(fileno(_log_fd.get()), fileno(stdout)) == -1) { perror("Rerouting stdout"); exit(1); } - if (dup2(fileno(_log_fd), fileno(stderr)) == -1) { + if (dup2(fileno(_log_fd.get()), fileno(stderr)) == -1) { perror("Rerouting stderr"); exit(1); } diff --git a/src/fileio.cpp b/src/fileio.cpp index 5797c592b3..f17a0ffc0e 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1245,8 +1245,9 @@ void DeterminePaths(const char *exe) free(tmp); } - extern char *_log_file; - _log_file = str_fmt("%sopenttd.log", _personal_dir); + extern std::string _log_file; + _log_file = _personal_dir; + _log_file += "openttd.log"; } /** diff --git a/src/fileio_func.h b/src/fileio_func.h index dec1931939..d951318801 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -159,4 +159,12 @@ public: } }; +/** Helper to manage a FILE with a \c std::unique_ptr. */ +struct FileDeleter { + void operator()(FILE *f) + { + if (f) fclose(f); + } +}; + #endif /* FILEIO_FUNC_H */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 980eb2f13e..94c6f4a98a 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -543,7 +543,7 @@ int openttd_main(int argc, char *argv[]) Dimension resolution = {0, 0}; /* AfterNewGRFScan sets save_config to true after scanning completed. */ bool save_config = false; - AfterNewGRFScan *scanner = new AfterNewGRFScan(&save_config); + std::unique_ptr scanner(new AfterNewGRFScan(&save_config)); bool dedicated = false; char *debuglog_conn = nullptr; @@ -637,7 +637,7 @@ int openttd_main(int argc, char *argv[]) DeterminePaths(argv[0]); if (StrEmpty(mgo.opt)) { ret = 1; - goto exit_noshutdown; + return ret; } char title[80]; @@ -654,12 +654,11 @@ int openttd_main(int argc, char *argv[]) GetString(buf, _load_check_data.error, lastof(buf)); fprintf(stderr, "%s\n", buf); } - goto exit_noshutdown; + return ret; } WriteSavegameInfo(title); - - goto exit_noshutdown; + return ret; } case 'G': scanner->generation_seed = strtoul(mgo.opt, nullptr, 10); break; case 'c': free(_config_file); _config_file = stredup(mgo.opt); break; @@ -683,8 +682,7 @@ int openttd_main(int argc, char *argv[]) BaseSounds::FindSets(); BaseMusic::FindSets(); ShowHelp(); - - goto exit_noshutdown; + return ret; } DeterminePaths(argv[0]); @@ -785,8 +783,7 @@ int openttd_main(int argc, char *argv[]) if (!HandleBootstrap()) { ShutdownGame(); - - goto exit_bootstrap; + return ret; } VideoDriver::GetInstance()->ClaimMousePointer(); @@ -842,8 +839,7 @@ int openttd_main(int argc, char *argv[]) CheckForMissingGlyphs(); /* ScanNewGRFFiles now has control over the scanner. */ - ScanNewGRFFiles(scanner); - scanner = nullptr; + ScanNewGRFFiles(scanner.release()); VideoDriver::GetInstance()->MainLoop(); @@ -860,17 +856,6 @@ int openttd_main(int argc, char *argv[]) /* Reset windowing system, stop drivers, free used memory, ... */ ShutdownGame(); - -exit_noshutdown: -exit_bootstrap: - - delete scanner; - - extern FILE *_log_fd; - if (_log_fd != nullptr) { - fclose(_log_fd); - } - return ret; } From 800ade77021b34adf8daa5ca5de0efaa8df24152 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Fri, 22 May 2020 22:22:55 +0200 Subject: [PATCH 125/601] Feature: Push-buttons on storybook pages (#7896) Allow more direct player-initiated interaction for Game Scripts, by letting the GS put push-buttons on storybook pages. These buttons can either trigger an immediate event, or require the player to first select a tile on the map, or a vehicle. Additionally this reworks how the storybook pages are layouted and rendered, to allow for slightly more complex layouts, and maybe speeding drawing up a bit. --- src/command.cpp | 2 + src/command_type.h | 1 + src/game/game_instance.cpp | 3 + src/script/api/ai/ai_event.hpp.sq | 3 + src/script/api/game/game_event.hpp.sq | 3 + src/script/api/game/game_event_types.hpp.sq | 53 +++ src/script/api/game/game_story_page.hpp.sq | 108 ++++- src/script/api/game_changelog.hpp | 8 + src/script/api/script_event.hpp | 3 + src/script/api/script_event_types.hpp | 132 ++++++ src/script/api/script_story_page.cpp | 87 +++- src/script/api/script_story_page.hpp | 139 +++++- .../api/template/template_event_types.hpp.sq | 27 ++ .../api/template/template_story_page.hpp.sq | 6 + src/story.cpp | 143 ++++++ src/story_base.h | 109 ++++- src/story_gui.cpp | 414 +++++++++++++++--- 17 files changed, 1159 insertions(+), 82 deletions(-) diff --git a/src/command.cpp b/src/command.cpp index ac1ac25521..8890381784 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -170,6 +170,7 @@ CommandProc CmdShowStoryPage; CommandProc CmdRemoveStoryPage; CommandProc CmdRemoveStoryPageElement; CommandProc CmdScrollViewport; +CommandProc CmdStoryPageButton; CommandProc CmdLevelLand; @@ -330,6 +331,7 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_PAGE DEF_CMD(CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_ELEMENT_PAGE DEF_CMD(CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SCROLL_VIEWPORT + DEF_CMD(CmdStoryPageButton, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_STORY_PAGE_BUTTON DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once diff --git a/src/command_type.h b/src/command_type.h index 2e026a63d9..04dbfe893c 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -295,6 +295,7 @@ enum Commands { CMD_REMOVE_STORY_PAGE, ///< remove a story page CMD_REMOVE_STORY_PAGE_ELEMENT, ///< remove a story page element CMD_SCROLL_VIEWPORT, ///< scroll main viewport of players + CMD_STORY_PAGE_BUTTON, ///< selection via story page button CMD_LEVEL_LAND, ///< level land diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 57b2213ea9..4424c801c6 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -147,6 +147,9 @@ void GameInstance::RegisterAPI() SQGSEventIndustryOpen_Register(this->engine); SQGSEventRoadReconstruction_Register(this->engine); SQGSEventStationFirstVehicle_Register(this->engine); + SQGSEventStoryPageButtonClick_Register(this->engine); + SQGSEventStoryPageTileSelect_Register(this->engine); + SQGSEventStoryPageVehicleSelect_Register(this->engine); SQGSEventSubsidyAwarded_Register(this->engine); SQGSEventSubsidyExpired_Register(this->engine); SQGSEventSubsidyOffer_Register(this->engine); diff --git a/src/script/api/ai/ai_event.hpp.sq b/src/script/api/ai/ai_event.hpp.sq index 6061eeed52..1290008c75 100644 --- a/src/script/api/ai/ai_event.hpp.sq +++ b/src/script/api/ai/ai_event.hpp.sq @@ -49,6 +49,9 @@ void SQAIEvent_Register(Squirrel *engine) SQAIEvent.DefSQConst(engine, ScriptEvent::ET_EXCLUSIVE_TRANSPORT_RIGHTS, "ET_EXCLUSIVE_TRANSPORT_RIGHTS"); SQAIEvent.DefSQConst(engine, ScriptEvent::ET_ROAD_RECONSTRUCTION, "ET_ROAD_RECONSTRUCTION"); SQAIEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_AUTOREPLACED, "ET_VEHICLE_AUTOREPLACED"); + SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_BUTTON_CLICK, "ET_STORYPAGE_BUTTON_CLICK"); + SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_TILE_SELECT, "ET_STORYPAGE_TILE_SELECT"); + SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_VEHICLE_SELECT, "ET_STORYPAGE_VEHICLE_SELECT"); SQAIEvent.DefSQMethod(engine, &ScriptEvent::GetEventType, "GetEventType", 1, "x"); diff --git a/src/script/api/game/game_event.hpp.sq b/src/script/api/game/game_event.hpp.sq index 42ea11b8ba..2be056cd8b 100644 --- a/src/script/api/game/game_event.hpp.sq +++ b/src/script/api/game/game_event.hpp.sq @@ -49,6 +49,9 @@ void SQGSEvent_Register(Squirrel *engine) SQGSEvent.DefSQConst(engine, ScriptEvent::ET_EXCLUSIVE_TRANSPORT_RIGHTS, "ET_EXCLUSIVE_TRANSPORT_RIGHTS"); SQGSEvent.DefSQConst(engine, ScriptEvent::ET_ROAD_RECONSTRUCTION, "ET_ROAD_RECONSTRUCTION"); SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_AUTOREPLACED, "ET_VEHICLE_AUTOREPLACED"); + SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_BUTTON_CLICK, "ET_STORYPAGE_BUTTON_CLICK"); + SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_TILE_SELECT, "ET_STORYPAGE_TILE_SELECT"); + SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_VEHICLE_SELECT, "ET_STORYPAGE_VEHICLE_SELECT"); SQGSEvent.DefSQMethod(engine, &ScriptEvent::GetEventType, "GetEventType", 1, "x"); diff --git a/src/script/api/game/game_event_types.hpp.sq b/src/script/api/game/game_event_types.hpp.sq index 62e4f6a089..6a0e89b499 100644 --- a/src/script/api/game/game_event_types.hpp.sq +++ b/src/script/api/game/game_event_types.hpp.sq @@ -308,3 +308,56 @@ void SQGSEventRoadReconstruction_Register(Squirrel *engine) SQGSEventRoadReconstruction.PostRegister(engine); } + + +template <> const char *GetClassName() { return "GSEventStoryPageButtonClick"; } + +void SQGSEventStoryPageButtonClick_Register(Squirrel *engine) +{ + DefSQClass SQGSEventStoryPageButtonClick("GSEventStoryPageButtonClick"); + SQGSEventStoryPageButtonClick.PreRegister(engine, "GSEvent"); + + SQGSEventStoryPageButtonClick.DefSQStaticMethod(engine, &ScriptEventStoryPageButtonClick::Convert, "Convert", 2, ".x"); + + SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetCompanyID, "GetCompanyID", 1, "x"); + SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetStoryPageID, "GetStoryPageID", 1, "x"); + SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetElementID, "GetElementID", 1, "x"); + + SQGSEventStoryPageButtonClick.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventStoryPageTileSelect"; } + +void SQGSEventStoryPageTileSelect_Register(Squirrel *engine) +{ + DefSQClass SQGSEventStoryPageTileSelect("GSEventStoryPageTileSelect"); + SQGSEventStoryPageTileSelect.PreRegister(engine, "GSEvent"); + + SQGSEventStoryPageTileSelect.DefSQStaticMethod(engine, &ScriptEventStoryPageTileSelect::Convert, "Convert", 2, ".x"); + + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetCompanyID, "GetCompanyID", 1, "x"); + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetStoryPageID, "GetStoryPageID", 1, "x"); + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetElementID, "GetElementID", 1, "x"); + SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetTile, "GetTile", 1, "x"); + + SQGSEventStoryPageTileSelect.PostRegister(engine); +} + + +template <> const char *GetClassName() { return "GSEventStoryPageVehicleSelect"; } + +void SQGSEventStoryPageVehicleSelect_Register(Squirrel *engine) +{ + DefSQClass SQGSEventStoryPageVehicleSelect("GSEventStoryPageVehicleSelect"); + SQGSEventStoryPageVehicleSelect.PreRegister(engine, "GSEvent"); + + SQGSEventStoryPageVehicleSelect.DefSQStaticMethod(engine, &ScriptEventStoryPageVehicleSelect::Convert, "Convert", 2, ".x"); + + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetCompanyID, "GetCompanyID", 1, "x"); + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetStoryPageID, "GetStoryPageID", 1, "x"); + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetElementID, "GetElementID", 1, "x"); + SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetVehicleID, "GetVehicleID", 1, "x"); + + SQGSEventStoryPageVehicleSelect.PostRegister(engine); +} diff --git a/src/script/api/game/game_story_page.hpp.sq b/src/script/api/game/game_story_page.hpp.sq index 99bc237bf8..b9fbf60260 100644 --- a/src/script/api/game/game_story_page.hpp.sq +++ b/src/script/api/game/game_story_page.hpp.sq @@ -24,21 +24,101 @@ void SQGSStoryPage_Register(Squirrel *engine) SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_TEXT, "SPET_TEXT"); SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_LOCATION, "SPET_LOCATION"); SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_GOAL, "SPET_GOAL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_PUSH, "SPET_BUTTON_PUSH"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_TILE, "SPET_BUTTON_TILE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_VEHICLE, "SPET_BUTTON_VEHICLE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_NONE, "SPBF_NONE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_FLOAT_LEFT, "SPBF_FLOAT_LEFT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_FLOAT_RIGHT, "SPBF_FLOAT_RIGHT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MOUSE, "SPBC_MOUSE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ZZZ, "SPBC_ZZZ"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUOY, "SPBC_BUOY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_QUERY, "SPBC_QUERY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_HQ, "SPBC_HQ"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_SHIP_DEPOT, "SPBC_SHIP_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_SIGN, "SPBC_SIGN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TREE, "SPBC_TREE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUY_LAND, "SPBC_BUY_LAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LEVEL_LAND, "SPBC_LEVEL_LAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TOWN, "SPBC_TOWN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_INDUSTRY, "SPBC_INDUSTRY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROCKY_AREA, "SPBC_ROCKY_AREA"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DESERT, "SPBC_DESERT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TRANSMITTER, "SPBC_TRANSMITTER"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AIRPORT, "SPBC_AIRPORT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DOCK, "SPBC_DOCK"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CANAL, "SPBC_CANAL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LOCK, "SPBC_LOCK"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RIVER, "SPBC_RIVER"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AQUEDUCT, "SPBC_AQUEDUCT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BRIDGE, "SPBC_BRIDGE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAIL_STATION, "SPBC_RAIL_STATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_RAIL, "SPBC_TUNNEL_RAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_ELRAIL, "SPBC_TUNNEL_ELRAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_MONO, "SPBC_TUNNEL_MONO"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_MAGLEV, "SPBC_TUNNEL_MAGLEV"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTORAIL, "SPBC_AUTORAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOELRAIL, "SPBC_AUTOELRAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOMONO, "SPBC_AUTOMONO"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOMAGLEV, "SPBC_AUTOMAGLEV"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_WAYPOINT, "SPBC_WAYPOINT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAIL_DEPOT, "SPBC_RAIL_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ELRAIL_DEPOT, "SPBC_ELRAIL_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MONO_DEPOT, "SPBC_MONO_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MAGLEV_DEPOT, "SPBC_MAGLEV_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_RAIL, "SPBC_CONVERT_RAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_ELRAIL, "SPBC_CONVERT_ELRAIL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_MONO, "SPBC_CONVERT_MONO"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_MAGLEV, "SPBC_CONVERT_MAGLEV"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOROAD, "SPBC_AUTOROAD"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOTRAM, "SPBC_AUTOTRAM"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROAD_DEPOT, "SPBC_ROAD_DEPOT"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUS_STATION, "SPBC_BUS_STATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TRUCK_STATION, "SPBC_TRUCK_STATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROAD_TUNNEL, "SPBC_ROAD_TUNNEL"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_TRAIN, "SPBC_CLONE_TRAIN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_ROADVEH, "SPBC_CLONE_ROADVEH"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_SHIP, "SPBC_CLONE_SHIP"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_AIRPLANE, "SPBC_CLONE_AIRPLANE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DEMOLISH, "SPBC_DEMOLISH"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LOWERLAND, "SPBC_LOWERLAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAISELAND, "SPBC_RAISELAND"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PICKSTATION, "SPBC_PICKSTATION"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUILDSIGNALS, "SPBC_BUILDSIGNALS"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DARK_BLUE, "SPBC_DARK_BLUE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PALE_GREEN, "SPBC_PALE_GREEN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PINK, "SPBC_PINK"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_YELLOW, "SPBC_YELLOW"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RED, "SPBC_RED"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LIGHT_BLUE, "SPBC_LIGHT_BLUE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_GREEN, "SPBC_GREEN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DARK_GREEN, "SPBC_DARK_GREEN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BLUE, "SPBC_BLUE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CREAM, "SPBC_CREAM"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MAUVE, "SPBC_MAUVE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PURPLE, "SPBC_PURPLE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ORANGE, "SPBC_ORANGE"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BROWN, "SPBC_BROWN"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_GREY, "SPBC_GREY"); + SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_WHITE, "SPBC_WHITE"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPage, "IsValidStoryPage", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPageElement, "IsValidStoryPageElement", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::New, "New", 3, ".i."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::NewElement, "NewElement", 5, ".iii."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::UpdateElement, "UpdateElement", 4, ".ii."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSortValue, "GetPageSortValue", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSortValue, "GetPageElementSortValue", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetCompany, "GetCompany", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetDate, "GetDate", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetDate, "SetDate", 3, ".ii"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetTitle, "SetTitle", 3, ".i."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Show, "Show", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Remove, "Remove", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::RemoveElement, "RemoveElement", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPage, "IsValidStoryPage", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPageElement, "IsValidStoryPageElement", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::New, "New", 3, ".i."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::NewElement, "NewElement", 5, ".iii."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::UpdateElement, "UpdateElement", 4, ".ii."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSortValue, "GetPageSortValue", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSortValue, "GetPageElementSortValue", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetCompany, "GetCompany", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetDate, "GetDate", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetDate, "SetDate", 3, ".ii"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetTitle, "SetTitle", 3, ".i."); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Show, "Show", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Remove, "Remove", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::RemoveElement, "RemoveElement", 2, ".i"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakePushButtonReference, "MakePushButtonReference", 3, ".ii"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakeTileButtonReference, "MakeTileButtonReference", 4, ".iii"); + SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakeVehicleButtonReference, "MakeVehicleButtonReference", 5, ".iiii"); SQGSStoryPage.PostRegister(engine); } diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index df8c663a03..69c4d971a5 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -17,6 +17,14 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li GSEventStoryPageButtonClick + * \li GSEventStoryPageTileSelect + * \li GSEventStoryPageVehicleSelect + * \li GSStoryPage::MakePushButtonReference + * \li GSStoryPage::MakeTileButtonReference + * \li GSStoryPage::MakeVehicleButtonReference + * * \b 1.10.0 * * API additions: diff --git a/src/script/api/script_event.hpp b/src/script/api/script_event.hpp index 886e4f1db8..8e8f181701 100644 --- a/src/script/api/script_event.hpp +++ b/src/script/api/script_event.hpp @@ -54,6 +54,9 @@ public: ET_EXCLUSIVE_TRANSPORT_RIGHTS, ET_ROAD_RECONSTRUCTION, ET_VEHICLE_AUTOREPLACED, + ET_STORYPAGE_BUTTON_CLICK, + ET_STORYPAGE_TILE_SELECT, + ET_STORYPAGE_VEHICLE_SELECT, }; /** diff --git a/src/script/api/script_event_types.hpp b/src/script/api/script_event_types.hpp index 98cca7f502..f0487f48a0 100644 --- a/src/script/api/script_event_types.hpp +++ b/src/script/api/script_event_types.hpp @@ -1098,4 +1098,136 @@ private: VehicleID new_id; ///< The vehicle that has been created in replacement. }; +/** + * Event StoryPageButtonClick, indicating a player clicked a push button on a storybook page. + * @api game + */ +class ScriptEventStoryPageButtonClick : public ScriptEvent { +public: + /** + * @param company_id Which company triggered the event. + * @param page_id Which page was the clicked button on. + * @param element_id Which button element was clicked. + */ + ScriptEventStoryPageButtonClick(CompanyID company_id, StoryPageID page_id, StoryPageElementID element_id) : + ScriptEvent(ET_STORYPAGE_BUTTON_CLICK), + company_id((ScriptCompany::CompanyID)company_id), + page_id(page_id), + element_id(element_id) + { } + + /** + * Convert an ScriptEvent to the real instance. + * @param instance The instance to convert. + * @return The converted instance. + */ + static ScriptEventStoryPageButtonClick *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageButtonClick *)instance; } + + /** Get the CompanyID of the player that selected a tile. */ + ScriptCompany::CompanyID GetCompanyID() { return this->company_id; } + + /** Get the StoryPageID of the storybook page the clicked button is located on. */ + StoryPageID GetStoryPageID() { return this->page_id; } + + /** Get the StoryPageElementID of the button element that was clicked. */ + StoryPageElementID GetElementID() { return this->element_id; } + +private: + ScriptCompany::CompanyID company_id; + StoryPageID page_id; + StoryPageElementID element_id; +}; + +/** + * Event StoryPageTileSelect, indicating a player clicked a tile selection button on a storybook page, and selected a tile. + * @api game + */ +class ScriptEventStoryPageTileSelect : public ScriptEvent { +public: + /** + * @param company_id Which company triggered the event. + * @param page_id Which page is the used selection button on. + * @param element_id Which button element was used to select the tile. + * @param tile_index Which tile was selected by the player. + */ + ScriptEventStoryPageTileSelect(CompanyID company_id, StoryPageID page_id, StoryPageElementID element_id, TileIndex tile_index) : + ScriptEvent(ET_STORYPAGE_TILE_SELECT), + company_id((ScriptCompany::CompanyID)company_id), + page_id(page_id), + element_id(element_id), + tile_index(tile_index) + { } + + /** + * Convert an ScriptEvent to the real instance. + * @param instance The instance to convert. + * @return The converted instance. + */ + static ScriptEventStoryPageTileSelect *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageTileSelect *)instance; } + + /** Get the CompanyID of the player that selected a tile. */ + ScriptCompany::CompanyID GetCompanyID() { return this->company_id; } + + /** Get the StoryPageID of the storybook page the used selection button is located on. */ + StoryPageID GetStoryPageID() { return this->page_id; } + + /** Get the StoryPageElementID of the selection button used to select the tile. */ + StoryPageElementID GetElementID() { return this->element_id; } + + /** Get the TileIndex of the tile the player selected */ + TileIndex GetTile() { return this->tile_index; } + +private: + ScriptCompany::CompanyID company_id; + StoryPageID page_id; + StoryPageElementID element_id; + TileIndex tile_index; +}; + +/** + * Event StoryPageTileSelect, indicating a player clicked a tile selection button on a storybook page, and selected a tile. + * @api game + */ +class ScriptEventStoryPageVehicleSelect : public ScriptEvent { +public: + /** + * @param company_id Which company triggered the event. + * @param page_id Which page is the used selection button on. + * @param element_id Which button element was used to select the tile. + * @param vehicle_id Which vehicle was selected by the player. + */ + ScriptEventStoryPageVehicleSelect(CompanyID company_id, StoryPageID page_id, StoryPageElementID element_id, VehicleID vehicle_id) : + ScriptEvent(ET_STORYPAGE_VEHICLE_SELECT), + company_id((ScriptCompany::CompanyID)company_id), + page_id(page_id), + element_id(element_id), + vehicle_id(vehicle_id) + { } + + /** + * Convert an ScriptEvent to the real instance. + * @param instance The instance to convert. + * @return The converted instance. + */ + static ScriptEventStoryPageVehicleSelect *Convert(ScriptEvent *instance) { return (ScriptEventStoryPageVehicleSelect *)instance; } + + /** Get the CompanyID of the player that selected a tile. */ + ScriptCompany::CompanyID GetCompanyID() { return this->company_id; } + + /** Get the StoryPageID of the storybook page the used selection button is located on. */ + StoryPageID GetStoryPageID() { return this->page_id; } + + /** Get the StoryPageElementID of the selection button used to select the vehicle. */ + StoryPageElementID GetElementID() { return this->element_id; } + + /** Get the VehicleID of the vehicle the player selected */ + VehicleID GetVehicleID() { return this->vehicle_id; } + +private: + ScriptCompany::CompanyID company_id; + StoryPageID page_id; + StoryPageElementID element_id; + VehicleID vehicle_id; +}; + #endif /* SCRIPT_EVENT_TYPES_HPP */ diff --git a/src/script/api/script_story_page.cpp b/src/script/api/script_story_page.cpp index 87b81268c1..39ae3d53ff 100644 --- a/src/script/api/script_story_page.cpp +++ b/src/script/api/script_story_page.cpp @@ -22,6 +22,11 @@ #include "../../safeguards.h" +static inline bool StoryPageElementTypeRequiresText(StoryPageElementType type) +{ + return type == SPET_TEXT || type == SPET_LOCATION || type == SPET_BUTTON_PUSH || type == SPET_BUTTON_TILE || type == SPET_BUTTON_VEHICLE; +} + /* static */ bool ScriptStoryPage::IsValidStoryPage(StoryPageID story_page_id) { return ::StoryPage::IsValidID(story_page_id); @@ -57,18 +62,34 @@ { CCountedPtr counter(text); + ::StoryPageElementType btype = static_cast<::StoryPageElementType>(type); + EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, ScriptObject::GetCompany() == OWNER_DEITY); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, IsValidStoryPage(story_page_id)); - EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, (type != SPET_TEXT && type != SPET_LOCATION) || (text != nullptr && !StrEmpty(text->GetEncodedText()))); + EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, !StoryPageElementTypeRequiresText(btype) || (text != nullptr && !StrEmpty(text->GetEncodedText()))); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, type != SPET_LOCATION || ::IsValidTile(reference)); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, type != SPET_GOAL || ScriptGoal::IsValidGoal((ScriptGoal::GoalID)reference)); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, type != SPET_GOAL || !(StoryPage::Get(story_page_id)->company == INVALID_COMPANY && Goal::Get(reference)->company != INVALID_COMPANY)); - if (!ScriptObject::DoCommand(type == SPET_LOCATION ? reference : 0, + uint32 refid = 0; + TileIndex reftile = 0; + switch (type) { + case SPET_LOCATION: + reftile = reference; + break; + case SPET_GOAL: + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: + refid = reference; + break; + } + + if (!ScriptObject::DoCommand(reftile, story_page_id + (type << 16), - type == SPET_GOAL ? reference : 0, + refid, CMD_CREATE_STORY_PAGE_ELEMENT, - type == SPET_TEXT || type == SPET_LOCATION ? text->GetEncodedText() : nullptr, + StoryPageElementTypeRequiresText(btype) ? text->GetEncodedText() : nullptr, &ScriptInstance::DoCommandReturnStoryPageElementID)) return STORY_PAGE_ELEMENT_INVALID; /* In case of test-mode, we return StoryPageElementID 0 */ @@ -86,16 +107,30 @@ StoryPage *p = StoryPage::Get(pe->page); ::StoryPageElementType type = pe->type; - EnforcePrecondition(false, (type != ::SPET_TEXT && type != ::SPET_LOCATION) || (text != nullptr && !StrEmpty(text->GetEncodedText()))); + EnforcePrecondition(false, !StoryPageElementTypeRequiresText(type) || (text != nullptr && !StrEmpty(text->GetEncodedText()))); EnforcePrecondition(false, type != ::SPET_LOCATION || ::IsValidTile(reference)); EnforcePrecondition(false, type != ::SPET_GOAL || ScriptGoal::IsValidGoal((ScriptGoal::GoalID)reference)); EnforcePrecondition(false, type != ::SPET_GOAL || !(p->company == INVALID_COMPANY && Goal::Get(reference)->company != INVALID_COMPANY)); - return ScriptObject::DoCommand(type == ::SPET_LOCATION ? reference : 0, + uint32 refid = 0; + TileIndex reftile = 0; + switch (type) { + case SPET_LOCATION: + reftile = reference; + break; + case SPET_GOAL: + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: + refid = reference; + break; + } + + return ScriptObject::DoCommand(reftile, story_page_element_id, - type == ::SPET_GOAL ? reference : 0, + refid, CMD_UPDATE_STORY_PAGE_ELEMENT, - type == ::SPET_TEXT || type == ::SPET_LOCATION ? text->GetEncodedText() : nullptr); + StoryPageElementTypeRequiresText(type) ? text->GetEncodedText() : nullptr); } /* static */ uint32 ScriptStoryPage::GetPageSortValue(StoryPageID story_page_id) @@ -173,3 +208,39 @@ return ScriptObject::DoCommand(0, story_page_element_id, 0, CMD_REMOVE_STORY_PAGE_ELEMENT); } +/* static */ ScriptStoryPage::StoryPageButtonFormatting ScriptStoryPage::MakePushButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags) +{ + StoryPageButtonData data; + data.SetColour((Colours)colour); + data.SetFlags((::StoryPageButtonFlags)flags); + if (!data.ValidateColour()) return UINT32_MAX; + if (!data.ValidateFlags()) return UINT32_MAX; + return data.referenced_id; +} + +/* static */ ScriptStoryPage::StoryPageButtonFormatting ScriptStoryPage::MakeTileButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags, StoryPageButtonCursor cursor) +{ + StoryPageButtonData data; + data.SetColour((Colours)colour); + data.SetFlags((::StoryPageButtonFlags)flags); + data.SetCursor((::StoryPageButtonCursor)cursor); + if (!data.ValidateColour()) return UINT32_MAX; + if (!data.ValidateFlags()) return UINT32_MAX; + if (!data.ValidateCursor()) return UINT32_MAX; + return data.referenced_id; +} + +/* static */ ScriptStoryPage::StoryPageButtonFormatting ScriptStoryPage::MakeVehicleButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags, StoryPageButtonCursor cursor, ScriptVehicle::VehicleType vehtype) +{ + StoryPageButtonData data; + data.SetColour((Colours)colour); + data.SetFlags((::StoryPageButtonFlags)flags); + data.SetCursor((::StoryPageButtonCursor)cursor); + data.SetVehicleType((::VehicleType)vehtype); + if (!data.ValidateColour()) return UINT32_MAX; + if (!data.ValidateFlags()) return UINT32_MAX; + if (!data.ValidateCursor()) return UINT32_MAX; + if (!data.ValidateVehicleType()) return UINT32_MAX; + return data.referenced_id; +} + diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp index d7e44fee49..23e4e03b14 100644 --- a/src/script/api/script_story_page.hpp +++ b/src/script/api/script_story_page.hpp @@ -12,6 +12,7 @@ #include "script_company.hpp" #include "script_date.hpp" +#include "script_vehicle.hpp" #include "../../story_type.h" #include "../../story_base.h" @@ -57,9 +58,111 @@ public: * Story page element types. */ enum StoryPageElementType { - SPET_TEXT = ::SPET_TEXT, ///< An element that displays a block of text. - SPET_LOCATION = ::SPET_LOCATION, ///< An element that displays a single line of text along with a button to view the referenced location. - SPET_GOAL = ::SPET_GOAL, ///< An element that displays a goal. + SPET_TEXT = ::SPET_TEXT, ///< An element that displays a block of text. + SPET_LOCATION = ::SPET_LOCATION, ///< An element that displays a single line of text along with a button to view the referenced location. + SPET_GOAL = ::SPET_GOAL, ///< An element that displays a goal. + SPET_BUTTON_PUSH = ::SPET_BUTTON_PUSH, ///< A push button that triggers an immediate event. + SPET_BUTTON_TILE = ::SPET_BUTTON_TILE, ///< A button that allows the player to select a tile, and triggers an event with the tile. + SPET_BUTTON_VEHICLE = ::SPET_BUTTON_VEHICLE, ///< A button that allows the player to select a vehicle, and triggers an event wih the vehicle. + }; + + /** + * Formatting data for button page elements. + */ + typedef uint32 StoryPageButtonFormatting; + + /** + * Formatting and layout flags for story page buttons. + * The SPBF_FLOAT_LEFT and SPBF_FLOAT_RIGHT flags can not be combined. + */ + enum StoryPageButtonFlags { + SPBF_NONE = ::SPBF_NONE, ///< No special formatting for button. + SPBF_FLOAT_LEFT = ::SPBF_FLOAT_LEFT, ///< Button is placed to the left of the following paragraph. + SPBF_FLOAT_RIGHT = ::SPBF_FLOAT_RIGHT, ///< Button is placed to the right of the following paragraph. + }; + + /** + * Mouse cursors usable by story page buttons. + */ + enum StoryPageButtonCursor { + SPBC_MOUSE = ::SPBC_MOUSE, + SPBC_ZZZ = ::SPBC_ZZZ, + SPBC_BUOY = ::SPBC_BUOY, + SPBC_QUERY = ::SPBC_QUERY, + SPBC_HQ = ::SPBC_HQ, + SPBC_SHIP_DEPOT = ::SPBC_SHIP_DEPOT, + SPBC_SIGN = ::SPBC_SIGN, + SPBC_TREE = ::SPBC_TREE, + SPBC_BUY_LAND = ::SPBC_BUY_LAND, + SPBC_LEVEL_LAND = ::SPBC_LEVEL_LAND, + SPBC_TOWN = ::SPBC_TOWN, + SPBC_INDUSTRY = ::SPBC_INDUSTRY, + SPBC_ROCKY_AREA = ::SPBC_ROCKY_AREA, + SPBC_DESERT = ::SPBC_DESERT, + SPBC_TRANSMITTER = ::SPBC_TRANSMITTER, + SPBC_AIRPORT = ::SPBC_AIRPORT, + SPBC_DOCK = ::SPBC_DOCK, + SPBC_CANAL = ::SPBC_CANAL, + SPBC_LOCK = ::SPBC_LOCK, + SPBC_RIVER = ::SPBC_RIVER, + SPBC_AQUEDUCT = ::SPBC_AQUEDUCT, + SPBC_BRIDGE = ::SPBC_BRIDGE, + SPBC_RAIL_STATION = ::SPBC_RAIL_STATION, + SPBC_TUNNEL_RAIL = ::SPBC_TUNNEL_RAIL, + SPBC_TUNNEL_ELRAIL = ::SPBC_TUNNEL_ELRAIL, + SPBC_TUNNEL_MONO = ::SPBC_TUNNEL_MONO, + SPBC_TUNNEL_MAGLEV = ::SPBC_TUNNEL_MAGLEV, + SPBC_AUTORAIL = ::SPBC_AUTORAIL, + SPBC_AUTOELRAIL = ::SPBC_AUTOELRAIL, + SPBC_AUTOMONO = ::SPBC_AUTOMONO, + SPBC_AUTOMAGLEV = ::SPBC_AUTOMAGLEV, + SPBC_WAYPOINT = ::SPBC_WAYPOINT, + SPBC_RAIL_DEPOT = ::SPBC_RAIL_DEPOT, + SPBC_ELRAIL_DEPOT = ::SPBC_ELRAIL_DEPOT, + SPBC_MONO_DEPOT = ::SPBC_MONO_DEPOT, + SPBC_MAGLEV_DEPOT = ::SPBC_MAGLEV_DEPOT, + SPBC_CONVERT_RAIL = ::SPBC_CONVERT_RAIL, + SPBC_CONVERT_ELRAIL = ::SPBC_CONVERT_ELRAIL, + SPBC_CONVERT_MONO = ::SPBC_CONVERT_MONO, + SPBC_CONVERT_MAGLEV = ::SPBC_CONVERT_MAGLEV, + SPBC_AUTOROAD = ::SPBC_AUTOROAD, + SPBC_AUTOTRAM = ::SPBC_AUTOTRAM, + SPBC_ROAD_DEPOT = ::SPBC_ROAD_DEPOT, + SPBC_BUS_STATION = ::SPBC_BUS_STATION, + SPBC_TRUCK_STATION = ::SPBC_TRUCK_STATION, + SPBC_ROAD_TUNNEL = ::SPBC_ROAD_TUNNEL, + SPBC_CLONE_TRAIN = ::SPBC_CLONE_TRAIN, + SPBC_CLONE_ROADVEH = ::SPBC_CLONE_ROADVEH, + SPBC_CLONE_SHIP = ::SPBC_CLONE_SHIP, + SPBC_CLONE_AIRPLANE = ::SPBC_CLONE_AIRPLANE, + SPBC_DEMOLISH = ::SPBC_DEMOLISH, + SPBC_LOWERLAND = ::SPBC_LOWERLAND, + SPBC_RAISELAND = ::SPBC_RAISELAND, + SPBC_PICKSTATION = ::SPBC_PICKSTATION, + SPBC_BUILDSIGNALS = ::SPBC_BUILDSIGNALS, + }; + + /** + * Colour codes usable for story page button elements. + * Place a colour value in the lowest 8 bits of the \c reference parameter to the button. + */ + enum StoryPageButtonColour { + SPBC_DARK_BLUE = ::COLOUR_DARK_BLUE, + SPBC_PALE_GREEN = ::COLOUR_PALE_GREEN, + SPBC_PINK = ::COLOUR_PINK, + SPBC_YELLOW = ::COLOUR_YELLOW, + SPBC_RED = ::COLOUR_RED, + SPBC_LIGHT_BLUE = ::COLOUR_LIGHT_BLUE, + SPBC_GREEN = ::COLOUR_GREEN, + SPBC_DARK_GREEN = ::COLOUR_DARK_GREEN, + SPBC_BLUE = ::COLOUR_BLUE, + SPBC_CREAM = ::COLOUR_CREAM, + SPBC_MAUVE = ::COLOUR_MAUVE, + SPBC_PURPLE = ::COLOUR_PURPLE, + SPBC_ORANGE = ::COLOUR_ORANGE, + SPBC_BROWN = ::COLOUR_BROWN, + SPBC_GREY = ::COLOUR_GREY, + SPBC_WHITE = ::COLOUR_WHITE, }; /** @@ -90,7 +193,11 @@ public: * Create a new story page element. * @param story_page_id The page id of the story page which the page element should be appended to. * @param type Which page element type to create. - * @param reference A reference value to the object that is referred to by some page element types. When type is SPET_GOAL, this is the goal ID. When type is SPET_LOCATION, this is the TileIndex. + * @param reference A reference value to the object that is referred to by some page element types. + * When type is SPET_GOAL, this is the goal ID. + * When type is SPET_LOCATION, this is the TileIndex. + * When type is a button, this is additional parameters for the button, + * use the #BuildPushButtonReference, #BuildTileButtonReference, or #BuildVehicleButtonReference functions to make the values. * @param text The body text of page elements that allow custom text. (SPET_TEXT and SPET_LOCATION) * @return The new StoryPageElementID, or STORY_PAGE_ELEMENT_INVALID if it failed. * @pre No ScriptCompanyMode may be in scope. @@ -204,6 +311,30 @@ public: * @pre IsValidStoryPageElement(story_page_element_id). */ static bool RemoveElement(StoryPageElementID story_page_element_id); + + /** + * Create a reference value for SPET_BUTTON_PUSH element parameters. + * @param colour The colour for the face of the button. + * @return A reference value usable with the #NewElement and #UpdateElement functions. + */ + static StoryPageButtonFormatting MakePushButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags); + + /** + * Create a reference value for SPET_BUTTON_TILE element parameters. + * @param colour The colour for the face of the button. + * @param cursor The mouse cursor to use when the player clicks the button and the game is ready for the player to select a tile. + * @return A reference value usable with the #NewElement and #UpdateElement functions. + */ + static StoryPageButtonFormatting MakeTileButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags, StoryPageButtonCursor cursor); + + /** + * Create a reference value for SPET_BUTTON_VEHICLE element parameters. + * @param colour The colour for the face of the button. + * @param cursor The mouse cursor to use when the player clicks the button and the game is ready for the player to select a vehicle. + * @param vehtype The type of vehicle that will be selectable, or \c VT_INVALID to allow all types. + * @return A reference value usable with the #NewElement and #UpdateElement functions. + */ + static StoryPageButtonFormatting MakeVehicleButtonReference(StoryPageButtonColour colour, StoryPageButtonFlags flags, StoryPageButtonCursor cursor, ScriptVehicle::VehicleType vehtype); }; #endif /* SCRIPT_STORY_HPP */ diff --git a/src/script/api/template/template_event_types.hpp.sq b/src/script/api/template/template_event_types.hpp.sq index 09cbe43f3f..4e82de63c7 100644 --- a/src/script/api/template/template_event_types.hpp.sq +++ b/src/script/api/template/template_event_types.hpp.sq @@ -273,3 +273,30 @@ namespace SQConvert { template <> inline const ScriptEventVehicleAutoReplaced &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleAutoReplaced *)instance; } template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleAutoReplaced *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventVehicleAutoReplaced", res, nullptr, DefSQDestructorCallback, true); return 1; } } // namespace SQConvert + +namespace SQConvert { + /* Allow ScriptEventStoryPageButtonClick to be used as Squirrel parameter */ + template <> inline ScriptEventStoryPageButtonClick *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageButtonClick *)instance; } + template <> inline ScriptEventStoryPageButtonClick &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageButtonClick *)instance; } + template <> inline const ScriptEventStoryPageButtonClick *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageButtonClick *)instance; } + template <> inline const ScriptEventStoryPageButtonClick &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageButtonClick *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptEventStoryPageButtonClick *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStoryPageButtonClick", res, nullptr, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert + +namespace SQConvert { + /* Allow ScriptEventStoryPageTileSelect to be used as Squirrel parameter */ + template <> inline ScriptEventStoryPageTileSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageTileSelect *)instance; } + template <> inline ScriptEventStoryPageTileSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageTileSelect *)instance; } + template <> inline const ScriptEventStoryPageTileSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageTileSelect *)instance; } + template <> inline const ScriptEventStoryPageTileSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageTileSelect *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptEventStoryPageTileSelect *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStoryPageTileSelect", res, nullptr, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert + +namespace SQConvert { + /* Allow ScriptEventStoryPageVehicleSelect to be used as Squirrel parameter */ + template <> inline ScriptEventStoryPageVehicleSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageVehicleSelect *)instance; } + template <> inline ScriptEventStoryPageVehicleSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageVehicleSelect *)instance; } + template <> inline const ScriptEventStoryPageVehicleSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageVehicleSelect *)instance; } + template <> inline const ScriptEventStoryPageVehicleSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageVehicleSelect *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptEventStoryPageVehicleSelect *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStoryPageVehicleSelect", res, nullptr, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert diff --git a/src/script/api/template/template_story_page.hpp.sq b/src/script/api/template/template_story_page.hpp.sq index 106f9a6238..f06d531385 100644 --- a/src/script/api/template/template_story_page.hpp.sq +++ b/src/script/api/template/template_story_page.hpp.sq @@ -17,6 +17,12 @@ namespace SQConvert { template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageElementID res) { sq_pushinteger(vm, (int32)res); return 1; } template <> inline ScriptStoryPage::StoryPageElementType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageElementType)tmp; } template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageElementType res) { sq_pushinteger(vm, (int32)res); return 1; } + template <> inline ScriptStoryPage::StoryPageButtonFlags GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageButtonFlags)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageButtonFlags res) { sq_pushinteger(vm, (int32)res); return 1; } + template <> inline ScriptStoryPage::StoryPageButtonCursor GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageButtonCursor)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageButtonCursor res) { sq_pushinteger(vm, (int32)res); return 1; } + template <> inline ScriptStoryPage::StoryPageButtonColour GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageButtonColour)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageButtonColour res) { sq_pushinteger(vm, (int32)res); return 1; } /* Allow ScriptStoryPage to be used as Squirrel parameter */ template <> inline ScriptStoryPage *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPage *)instance; } diff --git a/src/story.cpp b/src/story.cpp index 0d465fde85..e60c60a9fa 100644 --- a/src/story.cpp +++ b/src/story.cpp @@ -21,6 +21,10 @@ #include "goal_base.h" #include "window_func.h" #include "gui.h" +#include "vehicle_base.h" +#include "game/game.hpp" +#include "script/api/script_story_page.hpp" +#include "script/api/script_event_types.hpp" #include "safeguards.h" @@ -47,6 +51,8 @@ INSTANTIATE_POOL_METHODS(StoryPage) */ static bool VerifyElementContentParameters(StoryPageID page_id, StoryPageElementType type, TileIndex tile, uint32 reference, const char *text) { + StoryPageButtonData button_data{ reference }; + switch (type) { case SPET_TEXT: if (StrEmpty(text)) return false; @@ -60,6 +66,18 @@ static bool VerifyElementContentParameters(StoryPageID page_id, StoryPageElement /* Reject company specific goals on global pages */ if (StoryPage::Get(page_id)->company == INVALID_COMPANY && Goal::Get((GoalID)reference)->company != INVALID_COMPANY) return false; break; + case SPET_BUTTON_PUSH: + if (!button_data.ValidateColour()) return false; + return true; + case SPET_BUTTON_TILE: + if (!button_data.ValidateColour()) return false; + if (!button_data.ValidateCursor()) return false; + return true; + case SPET_BUTTON_VEHICLE: + if (!button_data.ValidateColour()) return false; + if (!button_data.ValidateCursor()) return false; + if (!button_data.ValidateVehicleType()) return false; + return true; default: return false; } @@ -88,10 +106,94 @@ static void UpdateElement(StoryPageElement &pe, TileIndex tile, uint32 reference case SPET_GOAL: pe.referenced_id = (GoalID)reference; break; + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: + pe.text = stredup(text); + pe.referenced_id = reference; + break; default: NOT_REACHED(); } } +/** Set the button background colour. */ +void StoryPageButtonData::SetColour(Colours button_colour) +{ + assert(button_colour < COLOUR_END); + SB(this->referenced_id, 0, 8, button_colour); +} + +void StoryPageButtonData::SetFlags(StoryPageButtonFlags flags) +{ + SB(this->referenced_id, 24, 8, flags); +} + +/** Set the mouse cursor used while waiting for input for the button. */ +void StoryPageButtonData::SetCursor(StoryPageButtonCursor cursor) +{ + assert(cursor < SPBC_END); + SB(this->referenced_id, 8, 8, cursor); +} + +/** Set the type of vehicles that are accepted by the button */ +void StoryPageButtonData::SetVehicleType(VehicleType vehtype) +{ + assert(vehtype == VEH_INVALID || vehtype < VEH_COMPANY_END); + SB(this->referenced_id, 16, 8, vehtype); +} + +/** Get the button background colour. */ +Colours StoryPageButtonData::GetColour() const +{ + return Extract(this->referenced_id); +} + +StoryPageButtonFlags StoryPageButtonData::GetFlags() const +{ + return (StoryPageButtonFlags)GB(this->referenced_id, 24, 8); +} + +/** Get the mouse cursor used while waiting for input for the button. */ +StoryPageButtonCursor StoryPageButtonData::GetCursor() const +{ + return Extract(this->referenced_id); +} + +/** Get the type of vehicles that are accepted by the button */ +VehicleType StoryPageButtonData::GetVehicleType() const +{ + return (VehicleType)GB(this->referenced_id, 16, 8); +} + +/** Verify that the data stored a valid Colour value */ +bool StoryPageButtonData::ValidateColour() const +{ + return GB(this->referenced_id, 0, 8) < COLOUR_END; +} + +bool StoryPageButtonData::ValidateFlags() const +{ + byte flags = GB(this->referenced_id, 24, 8); + /* Don't allow float left and right together */ + if ((flags & SPBF_FLOAT_LEFT) && (flags & SPBF_FLOAT_RIGHT)) return false; + /* Don't allow undefined flags */ + if (flags & ~(SPBF_FLOAT_LEFT | SPBF_FLOAT_RIGHT)) return false; + return true; +} + +/** Verify that the data stores a valid StoryPageButtonCursor value */ +bool StoryPageButtonData::ValidateCursor() const +{ + return GB(this->referenced_id, 8, 8) < SPBC_END; +} + +/** Verity that the data stored a valid VehicleType value */ +bool StoryPageButtonData::ValidateVehicleType() const +{ + byte vehtype = GB(this->referenced_id, 16, 8); + return vehtype == VEH_INVALID || vehtype < VEH_COMPANY_END; +} + /** * Create a new story page. * @param tile unused. @@ -358,3 +460,44 @@ CommandCost CmdRemoveStoryPageElement(TileIndex tile, DoCommandFlag flags, uint3 return CommandCost(); } +/** + * Clicked/used a button on a story page. + * @param tile Tile selected, for tile selection buttons, otherwise unused. + * @param flags Type of operation. + * @param p1 Bit 0..15 = story page element id of button. + * @param p2 ID of selected item for buttons that select an item (e.g. vehicle), otherwise unused. + * @param text Unused. + * @return The cost of the operation, or an error. + */ +CommandCost CmdStoryPageButton(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + StoryPageElementID page_element_id = (StoryPageElementID)GB(p1, 0, 16); + + if (!StoryPageElement::IsValidID(page_element_id)) return CMD_ERROR; + const StoryPageElement *const pe = StoryPageElement::Get(page_element_id); + + /* Check the player belongs to the company that owns the page. */ + const StoryPage *const sp = StoryPage::Get(pe->page); + if (sp->company != INVALID_COMPANY && sp->company != _current_company) return CMD_ERROR; + + switch (pe->type) { + case SPET_BUTTON_PUSH: + /* No validation required */ + if (flags & DC_EXEC) Game::NewEvent(new ScriptEventStoryPageButtonClick(_current_company, pe->page, page_element_id)); + break; + case SPET_BUTTON_TILE: + if (!IsValidTile(tile)) return CMD_ERROR; + if (flags & DC_EXEC) Game::NewEvent(new ScriptEventStoryPageTileSelect(_current_company, pe->page, page_element_id, tile)); + break; + case SPET_BUTTON_VEHICLE: + if (!Vehicle::IsValidID(p2)) return CMD_ERROR; + if (flags & DC_EXEC) Game::NewEvent(new ScriptEventStoryPageVehicleSelect(_current_company, pe->page, page_element_id, (VehicleID)p2)); + break; + default: + /* Invalid page element type, not a button. */ + return CMD_ERROR; + } + + return CommandCost(); +} + diff --git a/src/story_base.h b/src/story_base.h index e82b9d6964..e4d677cbf7 100644 --- a/src/story_base.h +++ b/src/story_base.h @@ -13,6 +13,8 @@ #include "company_type.h" #include "story_type.h" #include "date_type.h" +#include "gfx_type.h" +#include "vehicle_type.h" #include "core/pool_type.hpp" typedef Pool StoryPageElementPool; @@ -26,9 +28,12 @@ extern uint32 _story_page_next_sort_value; * Each story page element is one of these types. */ enum StoryPageElementType : byte { - SPET_TEXT = 0, ///< A text element. - SPET_LOCATION, ///< An element that references a tile along with a one-line text. - SPET_GOAL, ///< An element that references a goal. + SPET_TEXT = 0, ///< A text element. + SPET_LOCATION, ///< An element that references a tile along with a one-line text. + SPET_GOAL, ///< An element that references a goal. + SPET_BUTTON_PUSH, ///< A push button that triggers an immediate event. + SPET_BUTTON_TILE, ///< A button that allows the player to select a tile, and triggers an event with the tile. + SPET_BUTTON_VEHICLE, ///< A button that allows the player to select a vehicle, and triggers an event wih the vehicle. SPET_END, INVALID_SPET = 0xFF, }; @@ -36,18 +41,108 @@ enum StoryPageElementType : byte { /** Define basic enum properties */ template <> struct EnumPropsT : MakeEnumPropsT {}; +/** Flags available for buttons */ +enum StoryPageButtonFlags : byte { + SPBF_NONE = 0, + SPBF_FLOAT_LEFT = 1 << 0, + SPBF_FLOAT_RIGHT = 1 << 1, +}; +DECLARE_ENUM_AS_BIT_SET(StoryPageButtonFlags) + +/** Mouse cursors usable by story page buttons. */ +enum StoryPageButtonCursor : byte { + SPBC_MOUSE, + SPBC_ZZZ, + SPBC_BUOY, + SPBC_QUERY, + SPBC_HQ, + SPBC_SHIP_DEPOT, + SPBC_SIGN, + SPBC_TREE, + SPBC_BUY_LAND, + SPBC_LEVEL_LAND, + SPBC_TOWN, + SPBC_INDUSTRY, + SPBC_ROCKY_AREA, + SPBC_DESERT, + SPBC_TRANSMITTER, + SPBC_AIRPORT, + SPBC_DOCK, + SPBC_CANAL, + SPBC_LOCK, + SPBC_RIVER, + SPBC_AQUEDUCT, + SPBC_BRIDGE, + SPBC_RAIL_STATION, + SPBC_TUNNEL_RAIL, + SPBC_TUNNEL_ELRAIL, + SPBC_TUNNEL_MONO, + SPBC_TUNNEL_MAGLEV, + SPBC_AUTORAIL, + SPBC_AUTOELRAIL, + SPBC_AUTOMONO, + SPBC_AUTOMAGLEV, + SPBC_WAYPOINT, + SPBC_RAIL_DEPOT, + SPBC_ELRAIL_DEPOT, + SPBC_MONO_DEPOT, + SPBC_MAGLEV_DEPOT, + SPBC_CONVERT_RAIL, + SPBC_CONVERT_ELRAIL, + SPBC_CONVERT_MONO, + SPBC_CONVERT_MAGLEV, + SPBC_AUTOROAD, + SPBC_AUTOTRAM, + SPBC_ROAD_DEPOT, + SPBC_BUS_STATION, + SPBC_TRUCK_STATION, + SPBC_ROAD_TUNNEL, + SPBC_CLONE_TRAIN, + SPBC_CLONE_ROADVEH, + SPBC_CLONE_SHIP, + SPBC_CLONE_AIRPLANE, + SPBC_DEMOLISH, + SPBC_LOWERLAND, + SPBC_RAISELAND, + SPBC_PICKSTATION, + SPBC_BUILDSIGNALS, + SPBC_END, + INVALID_SPBC = 0xFF +}; + +/** Define basic enum properties */ +template <> struct EnumPropsT : MakeEnumPropsT {}; + +/** Helper to construct packed "id" values for button-type StoryPageElement */ +struct StoryPageButtonData { + uint32 referenced_id; + + void SetColour(Colours button_colour); + void SetFlags(StoryPageButtonFlags flags); + void SetCursor(StoryPageButtonCursor cursor); + void SetVehicleType(VehicleType vehtype); + Colours GetColour() const; + StoryPageButtonFlags GetFlags() const; + StoryPageButtonCursor GetCursor() const; + VehicleType GetVehicleType() const; + bool ValidateColour() const; + bool ValidateFlags() const; + bool ValidateCursor() const; + bool ValidateVehicleType() const; +}; + /** * Struct about story page elements. * Each StoryPage is composed of one or more page elements that provide * page content. Each element only contain one type of content. **/ struct StoryPageElement : StoryPageElementPool::PoolItem<&_story_page_element_pool> { - uint32 sort_value; ///< A number that increases for every created story page element. Used for sorting. The id of a story page element is the pool index. - StoryPageID page; ///< Id of the page which the page element belongs to + uint32 sort_value; ///< A number that increases for every created story page element. Used for sorting. The id of a story page element is the pool index. + StoryPageID page; ///< Id of the page which the page element belongs to StoryPageElementType type; ///< Type of page element - uint32 referenced_id; ///< Id of referenced object (location, goal etc.) - char *text; ///< Static content text of page element + uint32 referenced_id; ///< Id of referenced object (location, goal etc.) + char *text; ///< Static content text of page element /** * We need an (empty) constructor so struct isn't zeroed (as C++ standard states) diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 677d88bba8..96c411fe9c 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -23,26 +23,47 @@ #include "viewport_func.h" #include "window_func.h" #include "company_base.h" +#include "tilehighlight_func.h" +#include "vehicle_base.h" #include "widgets/story_widget.h" #include "table/strings.h" #include "table/sprites.h" +#include + #include "safeguards.h" +static CursorID TranslateStoryPageButtonCursor(StoryPageButtonCursor cursor); + typedef GUIList GUIStoryPageList; typedef GUIList GUIStoryPageElementList; struct StoryBookWindow : Window { protected: + struct LayoutCacheElement { + const StoryPageElement *pe; + Rect bounds; + }; + typedef std::vector LayoutCache; + + enum class ElementFloat { + None, + Left, + Right, + }; + Scrollbar *vscroll; ///< Scrollbar of the page text. + mutable LayoutCache layout_cache; ///< Cached element layout. GUIStoryPageList story_pages; ///< Sorted list of pages. GUIStoryPageElementList story_page_elements; ///< Sorted list of page elements that belong to the current page. StoryPageID selected_page_id; ///< Pool index of selected page. char selected_generic_title[255]; ///< If the selected page doesn't have a custom title, this buffer is used to store a generic page title. + StoryPageElementID active_button_id; ///< Which button element the player is currently using + static GUIStoryPageList::SortFunction * const page_sorter_funcs[]; static GUIStoryPageElementList::SortFunction * const page_element_sorter_funcs[]; @@ -91,6 +112,7 @@ protected: } this->story_page_elements.Sort(); + this->InvalidateStoryPageElementLayout(); } /** Sort story page elements by order value. */ @@ -174,6 +196,8 @@ protected: this->story_page_elements.ForceRebuild(); this->BuildStoryPageElementList(); + if (this->active_button_id != INVALID_STORY_PAGE_ELEMENT) ResetObjectToPlace(); + this->vscroll->SetCount(this->GetContentHeight()); this->SetWidgetDirty(WID_SB_SCROLLBAR); this->SetWidgetDirty(WID_SB_SEL_PAGE); @@ -251,9 +275,9 @@ protected: /** * Get the width available for displaying content on the page panel. */ - uint GetAvailablePageContentWidth() + uint GetAvailablePageContentWidth() const { - return this->GetWidget(WID_SB_PAGE_PANEL)->current_x - WD_FRAMETEXT_LEFT - WD_FRAMERECT_RIGHT; + return this->GetWidget(WID_SB_PAGE_PANEL)->current_x - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT - 1; } /** @@ -304,20 +328,26 @@ protected: * @param max_width Available width to display content. * @return the height in pixels. */ - uint GetPageElementHeight(const StoryPageElement &pe, int max_width) + uint GetPageElementHeight(const StoryPageElement &pe, int max_width) const { switch (pe.type) { case SPET_TEXT: SetDParamStr(0, pe.text); return GetStringHeight(STR_BLACK_RAW_STRING, max_width); - break; case SPET_GOAL: case SPET_LOCATION: { Dimension sprite_dim = GetSpriteSize(GetPageElementSprite(pe)); return sprite_dim.height; - break; } + + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: { + Dimension dim = GetStringBoundingBox(pe.text, FS_NORMAL); + return dim.height + WD_BEVEL_TOP + WD_BEVEL_BOTTOM + WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM; + } + default: NOT_REACHED(); } @@ -325,27 +355,161 @@ protected: } /** - * Get the total height of the content displayed - * in this window. + * Get the float style of a page element. + * @param pe The story page element. + * @return The float style. + */ + ElementFloat GetPageElementFloat(const StoryPageElement &pe) const + { + switch (pe.type) { + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: { + StoryPageButtonFlags flags = StoryPageButtonData{ pe.referenced_id }.GetFlags(); + if (flags & SPBF_FLOAT_LEFT) return ElementFloat::Left; + if (flags & SPBF_FLOAT_RIGHT) return ElementFloat::Right; + return ElementFloat::None; + } + + default: + return ElementFloat::None; + } + } + + /** + * Get the width a page element would use if it was floating left or right. + * @param pe The story page element. + * @return The calculated width of the element. + */ + int GetPageElementFloatWidth(const StoryPageElement &pe) const + { + switch (pe.type) { + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: { + Dimension dim = GetStringBoundingBox(pe.text, FS_NORMAL); + return dim.width + WD_BEVEL_LEFT + WD_BEVEL_RIGHT + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT; + } + + default: + NOT_REACHED(); // only buttons can float + } + } + + /** Invalidate the current page layout */ + void InvalidateStoryPageElementLayout() + { + this->layout_cache.clear(); + } + + /** Create the page layout if it is missing */ + void EnsureStoryPageElementLayout() const + { + /* Assume if the layout cache has contents it is valid */ + if (!this->layout_cache.empty()) return; + + StoryPage *page = this->GetSelPage(); + if (page == nullptr) return; + int max_width = GetAvailablePageContentWidth(); + int element_dist = FONT_HEIGHT_NORMAL; + + /* Make space for the header */ + int main_y = GetHeadHeight(max_width) + element_dist; + + /* Current bottom of left/right column */ + int left_y = main_y; + int right_y = main_y; + /* Current width of left/right column, 0 indicates no content in column */ + int left_width = 0; + int right_width = 0; + /* Indexes into element cache for yet unresolved floats */ + std::vector left_floats; + std::vector right_floats; + + /* Build layout */ + for (const StoryPageElement *pe : this->story_page_elements) { + ElementFloat fl = this->GetPageElementFloat(*pe); + + if (fl == ElementFloat::None) { + /* Verify available width */ + const int min_required_width = 10 * FONT_HEIGHT_NORMAL; + int left_offset = (left_width == 0) ? 0 : (left_width + element_dist); + int right_offset = (right_width == 0) ? 0 : (right_width + element_dist); + if (left_offset + right_offset + min_required_width >= max_width) { + /* Width of floats leave too little for main content, push down */ + main_y = max(main_y, left_y); + main_y = max(main_y, right_y); + left_width = right_width = 0; + left_offset = right_offset = 0; + /* Do not add element_dist here, to keep together elements which were supposed to float besides each other. */ + } + /* Determine height */ + const int available_width = max_width - left_offset - right_offset; + const int height = GetPageElementHeight(*pe, available_width); + /* Check for button that needs extra margin */ + if (left_offset == 0 && right_offset == 0) { + switch (pe->type) { + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: + left_offset = right_offset = available_width / 5; + break; + default: + break; + } + } + /* Position element in main column */ + LayoutCacheElement ce{ pe }; + ce.bounds.left = left_offset; + ce.bounds.right = max_width - right_offset; + ce.bounds.top = main_y; + main_y += height; + ce.bounds.bottom = main_y; + this->layout_cache.push_back(ce); + main_y += element_dist; + /* Clear all floats */ + left_width = right_width = 0; + left_y = right_y = main_y = max(main_y, max(left_y, right_y)); + left_floats.clear(); + right_floats.clear(); + } else { + /* Prepare references to correct column */ + int &cur_width = (fl == ElementFloat::Left) ? left_width : right_width; + int &cur_y = (fl == ElementFloat::Left) ? left_y : right_y; + std::vector &cur_floats = (fl == ElementFloat::Left) ? left_floats : right_floats; + /* Position element */ + cur_width = max(cur_width, this->GetPageElementFloatWidth(*pe)); + LayoutCacheElement ce{ pe }; + ce.bounds.left = (fl == ElementFloat::Left) ? 0 : (max_width - cur_width); + ce.bounds.right = (fl == ElementFloat::Left) ? cur_width : max_width; + ce.bounds.top = cur_y; + cur_y += GetPageElementHeight(*pe, cur_width); + ce.bounds.bottom = cur_y; + cur_floats.push_back(this->layout_cache.size()); + this->layout_cache.push_back(ce); + cur_y += element_dist; + /* Update floats in column to all have the same width */ + for (size_t index : cur_floats) { + LayoutCacheElement &ce = this->layout_cache[index]; + ce.bounds.left = (fl == ElementFloat::Left) ? 0 : (max_width - cur_width); + ce.bounds.right = (fl == ElementFloat::Left) ? cur_width : max_width; + } + } + } + } + + /** + * Get the total height of the content displayed in this window. * @return the height in pixels */ uint GetContentHeight() { - StoryPage *page = this->GetSelPage(); - if (page == nullptr) return 0; - int max_width = GetAvailablePageContentWidth(); - uint element_vertical_dist = FONT_HEIGHT_NORMAL; + this->EnsureStoryPageElementLayout(); - /* Head */ - uint height = GetHeadHeight(max_width); + /* The largest bottom coordinate of any element is the height of the content */ + uint max_y = std::accumulate(this->layout_cache.begin(), this->layout_cache.end(), 0, [](uint max_y, const LayoutCacheElement &ce) -> uint { return max(max_y, ce.bounds.bottom); }); - /* Body */ - for (const StoryPageElement *pe : this->story_page_elements) { - height += element_vertical_dist; - height += GetPageElementHeight(*pe, max_width); - } - - return height; + return max_y; } /** @@ -396,6 +560,39 @@ protected: ShowGoalsList((CompanyID)this->window_number); break; + case SPET_BUTTON_PUSH: + if (this->active_button_id != INVALID_STORY_PAGE_ELEMENT) ResetObjectToPlace(); + this->active_button_id = pe.index; + this->SetTimeout(); + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + + DoCommandP(0, pe.index, 0, CMD_STORY_PAGE_BUTTON); + break; + + case SPET_BUTTON_TILE: + if (this->active_button_id == pe.index) { + ResetObjectToPlace(); + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + } else { + CursorID cursor = TranslateStoryPageButtonCursor(StoryPageButtonData{ pe.referenced_id }.GetCursor()); + SetObjectToPlaceWnd(cursor, PAL_NONE, HT_RECT, this); + this->active_button_id = pe.index; + } + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + break; + + case SPET_BUTTON_VEHICLE: + if (this->active_button_id == pe.index) { + ResetObjectToPlace(); + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + } else { + CursorID cursor = TranslateStoryPageButtonCursor(StoryPageButtonData{ pe.referenced_id }.GetCursor()); + SetObjectToPlaceWnd(cursor, PAL_NONE, HT_VEHICLE, this); + this->active_button_id = pe.index; + } + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + break; + default: NOT_REACHED(); } @@ -422,6 +619,8 @@ public: this->selected_generic_title[0] = '\0'; this->selected_page_id = INVALID_STORY_PAGE; + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + this->OnInvalidateData(-1); } @@ -443,6 +642,8 @@ public: void SetSelectedPage(uint16 page_index) { if (this->selected_page_id != page_index) { + if (this->active_button_id) ResetObjectToPlace(); + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; this->selected_page_id = page_index; this->RefreshSelectedPage(); this->UpdatePrevNextDisabledState(); @@ -504,7 +705,8 @@ public: /* Draw content (now coordinates given to Draw** are local to the new clipping region). */ int line_height = FONT_HEIGHT_NORMAL; - int y_offset = - this->vscroll->GetPosition(); + const int scrollpos = this->vscroll->GetPosition(); + int y_offset = -scrollpos; /* Date */ if (page->date != INVALID_DATE) { @@ -518,28 +720,46 @@ public: y_offset = DrawStringMultiLine(0, right - x, y_offset, bottom - y, STR_STORY_BOOK_TITLE, TC_BLACK, SA_TOP | SA_HOR_CENTER); /* Page elements */ - for (const StoryPageElement *const pe : this->story_page_elements) { - y_offset += line_height; // margin to previous element - - switch (pe->type) { + this->EnsureStoryPageElementLayout(); + for (const LayoutCacheElement &ce : this->layout_cache) { + y_offset = ce.bounds.top - scrollpos; + switch (ce.pe->type) { case SPET_TEXT: - SetDParamStr(0, pe->text); - y_offset = DrawStringMultiLine(0, right - x, y_offset, bottom - y, STR_JUST_RAW_STRING, TC_BLACK, SA_TOP | SA_LEFT); + SetDParamStr(0, ce.pe->text); + y_offset = DrawStringMultiLine(ce.bounds.left, ce.bounds.right, ce.bounds.top - scrollpos, ce.bounds.bottom - scrollpos, STR_JUST_RAW_STRING, TC_BLACK, SA_TOP | SA_LEFT); break; case SPET_GOAL: { - Goal *g = Goal::Get((GoalID) pe->referenced_id); + Goal *g = Goal::Get((GoalID) ce.pe->referenced_id); StringID string_id = g == nullptr ? STR_STORY_BOOK_INVALID_GOAL_REF : STR_JUST_RAW_STRING; if (g != nullptr) SetDParamStr(0, g->text); - DrawActionElement(y_offset, right - x, line_height, GetPageElementSprite(*pe), string_id); + DrawActionElement(y_offset, ce.bounds.right - ce.bounds.left, line_height, GetPageElementSprite(*ce.pe), string_id); break; } case SPET_LOCATION: - SetDParamStr(0, pe->text); - DrawActionElement(y_offset, right - x, line_height, GetPageElementSprite(*pe)); + SetDParamStr(0, ce.pe->text); + DrawActionElement(y_offset, ce.bounds.right - ce.bounds.left, line_height, GetPageElementSprite(*ce.pe)); break; + case SPET_BUTTON_PUSH: + case SPET_BUTTON_TILE: + case SPET_BUTTON_VEHICLE: { + const int height = FONT_HEIGHT_NORMAL; + const int tmargin = WD_BEVEL_TOP + WD_FRAMETEXT_TOP; + const int bmargin = WD_BEVEL_BOTTOM + WD_FRAMETEXT_BOTTOM; + const int width = ce.bounds.right - ce.bounds.left; + const int hmargin = width / 5; + const FrameFlags frame = this->active_button_id == ce.pe->index ? FR_LOWERED : FR_NONE; + const Colours bgcolour = StoryPageButtonData{ ce.pe->referenced_id }.GetColour(); + + DrawFrameRect(ce.bounds.left, ce.bounds.top - scrollpos, ce.bounds.right, ce.bounds.bottom - scrollpos - 1, bgcolour, frame); + + SetDParamStr(0, ce.pe->text); + DrawString(ce.bounds.left + WD_BEVEL_LEFT, ce.bounds.right - WD_BEVEL_RIGHT, ce.bounds.top + tmargin - scrollpos, STR_JUST_RAW_STRING, TC_WHITE, SA_CENTER); + break; + } + default: NOT_REACHED(); } } @@ -593,6 +813,7 @@ public: void OnResize() override { + this->InvalidateStoryPageElementLayout(); this->vscroll->SetCapacityFromWidget(this, WID_SB_PAGE_PANEL, WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM); this->vscroll->SetCount(this->GetContentHeight()); } @@ -625,27 +846,14 @@ public: break; case WID_SB_PAGE_PANEL: { - uint clicked_y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SB_PAGE_PANEL, WD_FRAMETEXT_TOP); - uint max_width = GetAvailablePageContentWidth(); + int clicked_y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SB_PAGE_PANEL, WD_FRAMETEXT_TOP); + this->EnsureStoryPageElementLayout(); - /* Skip head rows. */ - uint head_height = this->GetHeadHeight(max_width); - if (clicked_y < head_height) return; - - /* Detect if a page element was clicked. */ - uint y = head_height; - uint element_vertical_dist = FONT_HEIGHT_NORMAL; - for (const StoryPageElement *const pe : this->story_page_elements) { - - y += element_vertical_dist; // margin row - - uint content_height = GetPageElementHeight(*pe, max_width); - if (clicked_y >= y && clicked_y < y + content_height) { - this->OnPageElementClick(*pe); + for (const LayoutCacheElement &ce : this->layout_cache) { + if (clicked_y >= ce.bounds.top && clicked_y < ce.bounds.bottom && pt.x >= ce.bounds.left && pt.x < ce.bounds.right) { + this->OnPageElementClick(*ce.pe); return; } - - y += content_height; } } } @@ -700,6 +908,52 @@ public: this->RefreshSelectedPage(); } } + + void OnTimeout() override + { + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + } + + void OnPlaceObject(Point pt, TileIndex tile) override + { + const StoryPageElement *const pe = StoryPageElement::GetIfValid(this->active_button_id); + if (pe == nullptr || pe->type != SPET_BUTTON_TILE) { + ResetObjectToPlace(); + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + return; + } + + DoCommandP(tile, pe->index, 0, CMD_STORY_PAGE_BUTTON); + ResetObjectToPlace(); + } + + bool OnVehicleSelect(const Vehicle *v) override + { + const StoryPageElement *const pe = StoryPageElement::GetIfValid(this->active_button_id); + if (pe == nullptr || pe->type != SPET_BUTTON_VEHICLE) { + ResetObjectToPlace(); + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + return false; + } + + /* Check that the vehicle matches the requested type */ + StoryPageButtonData data{ pe->referenced_id }; + VehicleType wanted_vehtype = data.GetVehicleType(); + if (wanted_vehtype != VEH_INVALID && wanted_vehtype != v->type) return false; + + DoCommandP(0, pe->index, v->index, CMD_STORY_PAGE_BUTTON); + ResetObjectToPlace(); + return true; + } + + void OnPlaceObjectAbort() override + { + this->active_button_id = INVALID_STORY_PAGE_ELEMENT; + this->SetWidgetDirty(WID_SB_PAGE_PANEL); + } }; GUIStoryPageList::SortFunction * const StoryBookWindow::page_sorter_funcs[] = { @@ -742,6 +996,68 @@ static WindowDesc _story_book_desc( _nested_story_book_widgets, lengthof(_nested_story_book_widgets) ); +static CursorID TranslateStoryPageButtonCursor(StoryPageButtonCursor cursor) +{ + switch (cursor) { + case SPBC_MOUSE: return SPR_CURSOR_MOUSE; + case SPBC_ZZZ: return SPR_CURSOR_ZZZ; + case SPBC_BUOY: return SPR_CURSOR_BUOY; + case SPBC_QUERY: return SPR_CURSOR_QUERY; + case SPBC_HQ: return SPR_CURSOR_HQ; + case SPBC_SHIP_DEPOT: return SPR_CURSOR_SHIP_DEPOT; + case SPBC_SIGN: return SPR_CURSOR_SIGN; + case SPBC_TREE: return SPR_CURSOR_TREE; + case SPBC_BUY_LAND: return SPR_CURSOR_BUY_LAND; + case SPBC_LEVEL_LAND: return SPR_CURSOR_LEVEL_LAND; + case SPBC_TOWN: return SPR_CURSOR_TOWN; + case SPBC_INDUSTRY: return SPR_CURSOR_INDUSTRY; + case SPBC_ROCKY_AREA: return SPR_CURSOR_ROCKY_AREA; + case SPBC_DESERT: return SPR_CURSOR_DESERT; + case SPBC_TRANSMITTER: return SPR_CURSOR_TRANSMITTER; + case SPBC_AIRPORT: return SPR_CURSOR_AIRPORT; + case SPBC_DOCK: return SPR_CURSOR_DOCK; + case SPBC_CANAL: return SPR_CURSOR_CANAL; + case SPBC_LOCK: return SPR_CURSOR_LOCK; + case SPBC_RIVER: return SPR_CURSOR_RIVER; + case SPBC_AQUEDUCT: return SPR_CURSOR_AQUEDUCT; + case SPBC_BRIDGE: return SPR_CURSOR_BRIDGE; + case SPBC_RAIL_STATION: return SPR_CURSOR_RAIL_STATION; + case SPBC_TUNNEL_RAIL: return SPR_CURSOR_TUNNEL_RAIL; + case SPBC_TUNNEL_ELRAIL: return SPR_CURSOR_TUNNEL_ELRAIL; + case SPBC_TUNNEL_MONO: return SPR_CURSOR_TUNNEL_MONO; + case SPBC_TUNNEL_MAGLEV: return SPR_CURSOR_TUNNEL_MAGLEV; + case SPBC_AUTORAIL: return SPR_CURSOR_AUTORAIL; + case SPBC_AUTOELRAIL: return SPR_CURSOR_AUTOELRAIL; + case SPBC_AUTOMONO: return SPR_CURSOR_AUTOMONO; + case SPBC_AUTOMAGLEV: return SPR_CURSOR_AUTOMAGLEV; + case SPBC_WAYPOINT: return SPR_CURSOR_WAYPOINT; + case SPBC_RAIL_DEPOT: return SPR_CURSOR_RAIL_DEPOT; + case SPBC_ELRAIL_DEPOT: return SPR_CURSOR_ELRAIL_DEPOT; + case SPBC_MONO_DEPOT: return SPR_CURSOR_MONO_DEPOT; + case SPBC_MAGLEV_DEPOT: return SPR_CURSOR_MAGLEV_DEPOT; + case SPBC_CONVERT_RAIL: return SPR_CURSOR_CONVERT_RAIL; + case SPBC_CONVERT_ELRAIL: return SPR_CURSOR_CONVERT_ELRAIL; + case SPBC_CONVERT_MONO: return SPR_CURSOR_CONVERT_MONO; + case SPBC_CONVERT_MAGLEV: return SPR_CURSOR_CONVERT_MAGLEV; + case SPBC_AUTOROAD: return SPR_CURSOR_AUTOROAD; + case SPBC_AUTOTRAM: return SPR_CURSOR_AUTOTRAM; + case SPBC_ROAD_DEPOT: return SPR_CURSOR_ROAD_DEPOT; + case SPBC_BUS_STATION: return SPR_CURSOR_BUS_STATION; + case SPBC_TRUCK_STATION: return SPR_CURSOR_TRUCK_STATION; + case SPBC_ROAD_TUNNEL: return SPR_CURSOR_ROAD_TUNNEL; + case SPBC_CLONE_TRAIN: return SPR_CURSOR_CLONE_TRAIN; + case SPBC_CLONE_ROADVEH: return SPR_CURSOR_CLONE_ROADVEH; + case SPBC_CLONE_SHIP: return SPR_CURSOR_CLONE_SHIP; + case SPBC_CLONE_AIRPLANE: return SPR_CURSOR_CLONE_AIRPLANE; + case SPBC_DEMOLISH: return ANIMCURSOR_DEMOLISH; + case SPBC_LOWERLAND: return ANIMCURSOR_LOWERLAND; + case SPBC_RAISELAND: return ANIMCURSOR_RAISELAND; + case SPBC_PICKSTATION: return ANIMCURSOR_PICKSTATION; + case SPBC_BUILDSIGNALS: return ANIMCURSOR_BUILDSIGNALS; + default: return SPR_CURSOR_QUERY; + } +} + /** * Raise or create the story book window for \a company, at page \a page_id. * @param company 'Owner' of the story book, may be #INVALID_COMPANY. From 2b2f60caf5f4b7db182940e3b9fbb5d2e8129032 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 26 May 2020 21:38:07 +0200 Subject: [PATCH 126/601] Fix: VS 2019 16.6 doesn't like newlines in --- projects/generate | 9 ++++++--- projects/generate.vbs | 11 ++++++++--- projects/settings_vs140.vcxproj | 4 +--- projects/settings_vs140.vcxproj.in | 4 +--- projects/settings_vs141.vcxproj | 4 +--- projects/settings_vs141.vcxproj.in | 4 +--- projects/settings_vs142.vcxproj | 4 +--- projects/settings_vs142.vcxproj.in | 4 +--- 8 files changed, 20 insertions(+), 24 deletions(-) diff --git a/projects/generate b/projects/generate index 2078809c88..d1316a2327 100755 --- a/projects/generate +++ b/projects/generate @@ -263,19 +263,22 @@ generate() { echo "Generating $2..." # Everything above the !!FILTERS!! marker cat "$ROOT_DIR/projects/$2".in | ${AWK} -v BINMODE=1 -v FILTERS="$3" -v FILES="$1" ' - { CR = (match($0, "\\r$") > 0 ? "\r" : "") } /^$/ { next } /!!FILTERS!!/ { split(FILTERS, filters, "\n"); for (i = 1; filters[i] != ""; i++) { - print filters[i] CR; + line = $0 + gsub(/!!FILTERS!!/, filters[i], line); + print line; } next; } /!!FILES!!/ { split(FILES, files, "\n"); for (i = 1; files[i] != ""; i++) { - print files[i] CR; + line = $0 + gsub(/!!FILES!!/, files[i], line); + print line; } next; } diff --git a/projects/generate.vbs b/projects/generate.vbs index 169f8b6890..daeb32b03e 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -321,21 +321,26 @@ Sub load_baseset_data(dir, langdir, ByRef vcxproj, ByRef files, ByRef langs) End Sub Sub generate(data, dest, data2) - Dim srcfile, destfile, line + Dim srcfile, destfile, line, regexp WScript.Echo "Generating " & FSO.GetFileName(dest) & "..." Set srcfile = FSO.OpenTextFile(dest & ".in", 1, 0, 0) Set destfile = FSO.CreateTextFile(dest, -1, 0) If Not IsNull(data2) Then ' Everything above the !!FILTERS!! marker + Set regexp = New RegExp + regexp.Pattern = "!!FILTERS!!" + regexp.Global = True + line = srcfile.ReadLine() - While line <> "!!FILTERS!!" + While Not regexp.Test(line) If len(line) > 0 Then destfile.WriteLine(line) line = srcfile.ReadLine() Wend ' Our generated content - destfile.WriteLine(data2) + line = regexp.Replace(line, data2) + destfile.WriteLine(line) End If ' Everything above the !!FILES!! marker diff --git a/projects/settings_vs140.vcxproj b/projects/settings_vs140.vcxproj index 9952df47bb..b5f5151821 100644 --- a/projects/settings_vs140.vcxproj +++ b/projects/settings_vs140.vcxproj @@ -23,9 +23,7 @@ - -..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - + ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini ..\objs\settings\table\ diff --git a/projects/settings_vs140.vcxproj.in b/projects/settings_vs140.vcxproj.in index 9bb0cc7f0b..dcbbfbd352 100644 --- a/projects/settings_vs140.vcxproj.in +++ b/projects/settings_vs140.vcxproj.in @@ -23,9 +23,7 @@ - -!!FILTERS!! - + !!FILTERS!! ..\objs\settings\table\ diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj index 9c20f1407e..b3f6871945 100644 --- a/projects/settings_vs141.vcxproj +++ b/projects/settings_vs141.vcxproj @@ -23,9 +23,7 @@ - -..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - + ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini ..\objs\settings\table\ diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in index 23e044cc17..1701c99f5f 100644 --- a/projects/settings_vs141.vcxproj.in +++ b/projects/settings_vs141.vcxproj.in @@ -23,9 +23,7 @@ - -!!FILTERS!! - + !!FILTERS!! ..\objs\settings\table\ diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj index a2dda134b5..e0ed933091 100644 --- a/projects/settings_vs142.vcxproj +++ b/projects/settings_vs142.vcxproj @@ -23,9 +23,7 @@ - -..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - + ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini ..\objs\settings\table\ diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in index 3e49b7ca02..4463c573d7 100644 --- a/projects/settings_vs142.vcxproj.in +++ b/projects/settings_vs142.vcxproj.in @@ -23,9 +23,7 @@ - -!!FILTERS!! - + !!FILTERS!! ..\objs\settings\table\ From bfa2e4edf001d617402da443a707a4445ee799b6 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 26 May 2020 21:38:07 +0200 Subject: [PATCH 127/601] Fix: Inconsistency in handling of SDL2 in source.list --- projects/generate | 2 ++ projects/generate.vbs | 1 + 2 files changed, 3 insertions(+) diff --git a/projects/generate b/projects/generate index d1316a2327..7d3c599654 100755 --- a/projects/generate +++ b/projects/generate @@ -69,6 +69,7 @@ fi # First, collect the list of Windows files allegro_config="" sdl_config="1" +sdl2_config="1" png_config="1" os="MSVC" enable_dedicated="0" @@ -123,6 +124,7 @@ load_main_data() { if ($0 == "ALLEGRO" && "'$allegro_config'" == "") { next; } if ($0 == "SDL" && "'$sdl_config'" == "") { next; } + if ($0 == "SDL2" && "'$sdl2_config'" == "") { next; } if ($0 == "PNG" && "'$png_config'" == "") { next; } if ($0 == "OSX" && "'$os'" != "OSX") { next; } if ($0 == "OS2" && "'$os'" != "OS2") { next; } diff --git a/projects/generate.vbs b/projects/generate.vbs index daeb32b03e..577dce9558 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -172,6 +172,7 @@ Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) line = Replace(line, "#if ", "") If deep = skip And ( _ line = "SDL" Or _ + line = "SDL2" Or _ line = "PNG" Or _ line = "WIN32" Or _ line = "MSVC" Or _ From 71e9c2a71b286fc7fc282398faee86eab401a047 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 27 May 2020 19:45:40 +0200 Subject: [PATCH 128/601] Update: Translations from eints chinese (traditional): 2 changes by ww9980 chinese (simplified): 1 change by ww9980 --- src/lang/simplified_chinese.txt | 1 + src/lang/traditional_chinese.txt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index ac0764838e..6d0161c314 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -935,6 +935,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :墨西哥比索 STR_GAME_OPTIONS_CURRENCY_NTD :新台币 (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :中国人民币 (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :港币 (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :印度卢布(INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}汽车行驶 diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 3aa84cc35a..17463264e4 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -470,6 +470,7 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :切換主控台 STR_ABOUT_MENU_AI_DEBUG :AI/遊戲腳本除錯 STR_ABOUT_MENU_SCREENSHOT :擷取畫面 +STR_ABOUT_MENU_SHOW_FRAMERATE :顯示幀率 STR_ABOUT_MENU_ABOUT_OPENTTD :關於「OpenTTD」 STR_ABOUT_MENU_SPRITE_ALIGNER :子畫面定位工具 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :切換邊界框 @@ -642,6 +643,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}沒有可用音樂 STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}「{STRING}」 STR_MUSIC_TRACK :{TINY_FONT}{BLACK}音軌 STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}標題 From f11cd8f2d07b69eeedb5c3d3dc7c9ade37151707 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 27 May 2020 21:09:31 +0100 Subject: [PATCH 129/601] Fix: Compilation warnings in story_gui and script_story_page See: #7896 --- src/script/api/script_story_page.cpp | 8 ++++++++ src/story_gui.cpp | 8 ++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/script/api/script_story_page.cpp b/src/script/api/script_story_page.cpp index 39ae3d53ff..8fda69e6f5 100644 --- a/src/script/api/script_story_page.cpp +++ b/src/script/api/script_story_page.cpp @@ -83,6 +83,10 @@ static inline bool StoryPageElementTypeRequiresText(StoryPageElementType type) case SPET_BUTTON_VEHICLE: refid = reference; break; + case SPET_TEXT: + break; + default: + NOT_REACHED(); } if (!ScriptObject::DoCommand(reftile, @@ -124,6 +128,10 @@ static inline bool StoryPageElementTypeRequiresText(StoryPageElementType type) case SPET_BUTTON_VEHICLE: refid = reference; break; + case SPET_TEXT: + break; + default: + NOT_REACHED(); } return ScriptObject::DoCommand(reftile, diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 96c411fe9c..2de96a1a52 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -459,7 +459,7 @@ protected: } } /* Position element in main column */ - LayoutCacheElement ce{ pe }; + LayoutCacheElement ce{ pe, {} }; ce.bounds.left = left_offset; ce.bounds.right = max_width - right_offset; ce.bounds.top = main_y; @@ -479,7 +479,7 @@ protected: std::vector &cur_floats = (fl == ElementFloat::Left) ? left_floats : right_floats; /* Position element */ cur_width = max(cur_width, this->GetPageElementFloatWidth(*pe)); - LayoutCacheElement ce{ pe }; + LayoutCacheElement ce{ pe, {} }; ce.bounds.left = (fl == ElementFloat::Left) ? 0 : (max_width - cur_width); ce.bounds.right = (fl == ElementFloat::Left) ? cur_width : max_width; ce.bounds.top = cur_y; @@ -745,11 +745,7 @@ public: case SPET_BUTTON_PUSH: case SPET_BUTTON_TILE: case SPET_BUTTON_VEHICLE: { - const int height = FONT_HEIGHT_NORMAL; const int tmargin = WD_BEVEL_TOP + WD_FRAMETEXT_TOP; - const int bmargin = WD_BEVEL_BOTTOM + WD_FRAMETEXT_BOTTOM; - const int width = ce.bounds.right - ce.bounds.left; - const int hmargin = width / 5; const FrameFlags frame = this->active_button_id == ce.pe->index ? FR_LOWERED : FR_NONE; const Colours bgcolour = StoryPageButtonData{ ce.pe->referenced_id }.GetColour(); From 16e5f610f77cccca097d3df735104578571b81ef Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Thu, 28 May 2020 15:15:59 +1200 Subject: [PATCH 130/601] Cleanup: Correct typographic errors in code comments. --- src/engine_base.h | 2 +- src/script/api/script_order.hpp | 2 +- src/station_base.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine_base.h b/src/engine_base.h index f388e894ba..2e434b589e 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -29,7 +29,7 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> { uint16 reliability_final; ///< Final reliability of the engine. uint16 duration_phase_1; ///< First reliability phase in months, increasing reliability from #reliability_start to #reliability_max. uint16 duration_phase_2; ///< Second reliability phase in months, keeping #reliability_max. - uint16 duration_phase_3; ///< Third reliability phase on months, decaying to #reliability_final. + uint16 duration_phase_3; ///< Third reliability phase in months, decaying to #reliability_final. byte flags; ///< Flags of the engine. @see EngineFlags CompanyMask preview_asked; ///< Bit for each company which has already been offered a preview. CompanyID preview_company; ///< Company which is currently being offered a preview \c INVALID_COMPANY means no company. diff --git a/src/script/api/script_order.hpp b/src/script/api/script_order.hpp index cce74fa5dc..0086e39ca2 100644 --- a/src/script/api/script_order.hpp +++ b/src/script/api/script_order.hpp @@ -29,7 +29,7 @@ public: /** No more space for orders */ ERR_ORDER_TOO_MANY, // [STR_ERROR_NO_MORE_SPACE_FOR_ORDERS] - /** Destination of new order is to far away from the previous order */ + /** Destination of new order is too far away from the previous order */ ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, // [STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION] /** Aircraft has not enough range to copy/share orders. */ diff --git a/src/station_base.h b/src/station_base.h index 75b1c1112f..4f16469766 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -42,7 +42,7 @@ public: /** * Invalid constructor. This can't be called as a FlowStat must not be * empty. However, the constructor must be defined and reachable for - * FlwoStat to be used in a std::map. + * FlowStat to be used in a std::map. */ inline FlowStat() {NOT_REACHED();} From 281d93f60052703b82394ab63fcb063ba700e004 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 30 May 2020 19:45:39 +0200 Subject: [PATCH 131/601] Update: Translations from eints croatian: 1 change by VoyagerOne --- src/lang/croatian.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 7f20426f48..0bf3fab71a 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1031,6 +1031,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksički Pesos STR_GAME_OPTIONS_CURRENCY_NTD :Novi Tajvanski Dolar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kineski Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkonški Dolar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indijska Rupija (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Cestovna vozila From a9b3312d1a4962d07a2e7976e8352c7113201a9e Mon Sep 17 00:00:00 2001 From: Yexo Date: Mon, 1 Jun 2020 10:19:47 +0200 Subject: [PATCH 132/601] Fix #8024: make online content gui more responsive while loading Previously the internal content list was invalidated and sorted for every new item added. Now the sorting is delayed until the GUI is drawn, which means we only sort once per GUI tick. Since the amount of incoming items per GUI tick is not controlled by the GUI but rather by network speed, we were previously doing a lot of duplicate work per tick, causing the mouse cursor to lag while the list was initialized. --- src/network/network_content_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 6083396eeb..dd87a4948b 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -951,7 +951,7 @@ public: { if (this->auto_select && !rci->IsSelected()) _network_content_client.ToggleSelectedState(rci); this->content.ForceRebuild(); - this->InvalidateData(); + this->InvalidateData(0, false); } void OnDownloadComplete(ContentID cid) override From f827bc8c1ae83ea4f71347da9c8cb0468f386452 Mon Sep 17 00:00:00 2001 From: Yexo Date: Mon, 1 Jun 2020 11:25:58 +0200 Subject: [PATCH 133/601] Fix #8166: don't crash on loading an invalid roadtype newgrf Initialization code for GRFFile::roadtype_map was copied from railtype_map. But while RailType is a byte-sized enum and could thus be initialized via memset, RoadType doesn't have a defined size. --- src/newgrf.cpp | 6 +++--- src/newgrf.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 6b5a2f9ce1..6f12fbbf9f 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8718,18 +8718,18 @@ GRFFile::GRFFile(const GRFConfig *config) } /* Initialise rail type map with default rail types */ - memset(this->railtype_map, INVALID_RAILTYPE, sizeof(this->railtype_map)); + std::fill(std::begin(this->railtype_map), std::end(this->railtype_map), INVALID_RAILTYPE); this->railtype_map[0] = RAILTYPE_RAIL; this->railtype_map[1] = RAILTYPE_ELECTRIC; this->railtype_map[2] = RAILTYPE_MONO; this->railtype_map[3] = RAILTYPE_MAGLEV; /* Initialise road type map with default road types */ - memset(this->roadtype_map, INVALID_ROADTYPE, sizeof(this->roadtype_map)); + std::fill(std::begin(this->roadtype_map), std::end(this->roadtype_map), INVALID_ROADTYPE); this->roadtype_map[0] = ROADTYPE_ROAD; /* Initialise tram type map with default tram types */ - memset(this->tramtype_map, INVALID_ROADTYPE, sizeof(this->tramtype_map)); + std::fill(std::begin(this->tramtype_map), std::end(this->tramtype_map), INVALID_ROADTYPE); this->tramtype_map[0] = ROADTYPE_TRAM; /* Copy the initial parameter list diff --git a/src/newgrf.h b/src/newgrf.h index 00394c681c..65df3698e4 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -132,7 +132,7 @@ struct GRFFile : ZeroedMemoryAllocator { std::vector roadtype_list; ///< Roadtype translation table (road) RoadType roadtype_map[ROADTYPE_END]; - std::vector tramtype_list; ///, Roadtype translation table (tram) + std::vector tramtype_list; ///< Roadtype translation table (tram) RoadType tramtype_map[ROADTYPE_END]; CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF From b5ca2161d93e634f9938af7d9ca1fb1ddab3d501 Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 29 May 2020 16:14:53 +0200 Subject: [PATCH 134/601] Fix #7970: [Win32] Disable event loop on crash to prevent recursive faults --- src/os/windows/crashlog_win.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index 9585bdf20f..7a1a524aa5 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -540,6 +540,9 @@ void *_safe_esp = nullptr; static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep) { + /* Disable our event loop. */ + SetWindowLongPtr(GetActiveWindow(), GWLP_WNDPROC, (LONG_PTR)&DefWindowProc); + if (CrashLogWindows::current != nullptr) { CrashLog::AfterCrashLogCleanup(); ExitProcess(2); From b3ddf2c9072b0dc0a81943acad9d97e5977ccd5e Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 29 May 2020 19:22:22 +0200 Subject: [PATCH 135/601] Fix: [Win32] Crash message not fitting in crash dialog --- src/os/windows/ottdres.rc.in | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index 8116de9035..a2f8c28f57 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -44,17 +44,17 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT // Dialog // -100 DIALOG DISCARDABLE 0, 0, 305, 99 +100 DIALOG DISCARDABLE 0, 0, 305, 101 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fatal Application Failure" FONT 8, "MS Sans Serif" BEGIN - PUSHBUTTON "&Close",12,7,80,50,14 - PUSHBUTTON "&Emergency save",13,155,80,68,14 - PUSHBUTTON "",15,243,80,55,14 - EDITTEXT 11,7,101,291,118,ES_MULTILINE | ES_READONLY | WS_VSCROLL | + PUSHBUTTON "&Close",12,7,82,60,14 + PUSHBUTTON "&Emergency save",13,158,82,60,14 + PUSHBUTTON "",15,238,82,60,14 + EDITTEXT 11,7,103,291,118,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_HSCROLL | NOT WS_TABSTOP - LTEXT "",10,36,7,262,65 + LTEXT "",10,36,5,262,72 ICON 100,IDC_STATIC,9,9,20,20 END From 764497206ab9457ab5dff3ea7851546da9259cc4 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 1 Jun 2020 19:26:23 +0200 Subject: [PATCH 136/601] Fix #8066: Try another fallback colourspace if first one fails --- src/video/cocoa/wnd_quartz.mm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index 8549100d90..edc9c50081 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -318,6 +318,8 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) [this->window setColorSpace:[NSColorSpace sRGBColorSpace]]; this->color_space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); + if (this->color_space == nullptr) this->color_space = CGColorSpaceCreateDeviceRGB(); + if (this->color_space == nullptr) error("Could not get a valid colour space for drawing."); bool ret = WindowResized(); this->UpdatePalette(0, 256); From 1c0ba07c3cb4f393b56063e2d631fbb2d73219b1 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 19 Apr 2020 00:53:30 +0200 Subject: [PATCH 137/601] Add: [Script] Native priority queue; useful e.g. for pathfinders. --- projects/openttd_vs140.vcxproj | 2 + projects/openttd_vs140.vcxproj.filters | 6 + projects/openttd_vs141.vcxproj | 2 + projects/openttd_vs141.vcxproj.filters | 6 + projects/openttd_vs142.vcxproj | 2 + projects/openttd_vs142.vcxproj.filters | 6 + source.list | 2 + src/ai/ai_instance.cpp | 2 + src/game/game_instance.cpp | 2 + src/script/api/ai/ai_priorityqueue.hpp.sq | 31 +++++ src/script/api/ai_changelog.hpp | 3 + src/script/api/game/game_priorityqueue.hpp.sq | 31 +++++ src/script/api/game_changelog.hpp | 1 + src/script/api/script_priorityqueue.cpp | 107 ++++++++++++++++++ src/script/api/script_priorityqueue.hpp | 94 +++++++++++++++ .../template/template_priorityqueue.hpp.sq | 19 ++++ src/script/script_instance.cpp | 8 ++ src/script/script_instance.hpp | 12 ++ 18 files changed, 336 insertions(+) create mode 100644 src/script/api/ai/ai_priorityqueue.hpp.sq create mode 100644 src/script/api/game/game_priorityqueue.hpp.sq create mode 100644 src/script/api/script_priorityqueue.cpp create mode 100644 src/script/api/script_priorityqueue.hpp create mode 100644 src/script/api/template/template_priorityqueue.hpp.sq diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 4e7f7b7c8d..20253a2065 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1096,6 +1096,7 @@ + @@ -1163,6 +1164,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index fd5c07157c..11e9821ffe 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -2379,6 +2379,9 @@ Script API + + Script API + Script API @@ -2580,6 +2583,9 @@ Script API Implementation + + Script API Implementation + Script API Implementation diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 4ab1ad85df..7b0da9569c 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1096,6 +1096,7 @@ + @@ -1163,6 +1164,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index fd5c07157c..11e9821ffe 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -2379,6 +2379,9 @@ Script API + + Script API + Script API @@ -2580,6 +2583,9 @@ Script API Implementation + + Script API Implementation + Script API Implementation diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 2539fe1d5f..db497537db 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -1096,6 +1096,7 @@ + @@ -1163,6 +1164,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index fd5c07157c..11e9821ffe 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -2379,6 +2379,9 @@ Script API + + Script API + Script API @@ -2580,6 +2583,9 @@ Script API Implementation + + Script API Implementation + Script API Implementation diff --git a/source.list b/source.list index cc9d10c998..b023b9ba4b 100644 --- a/source.list +++ b/source.list @@ -830,6 +830,7 @@ script/api/script_marine.hpp script/api/script_news.hpp script/api/script_object.hpp script/api/script_order.hpp +script/api/script_priorityqueue.hpp script/api/script_rail.hpp script/api/script_railtypelist.hpp script/api/script_road.hpp @@ -899,6 +900,7 @@ script/api/script_marine.cpp script/api/script_news.cpp script/api/script_object.cpp script/api/script_order.cpp +script/api/script_priorityqueue.cpp script/api/script_rail.cpp script/api/script_railtypelist.cpp script/api/script_road.cpp diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index a4d06763fa..49f8cff64d 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -57,6 +57,7 @@ #include "../script/api/ai/ai_map.hpp.sq" #include "../script/api/ai/ai_marine.hpp.sq" #include "../script/api/ai/ai_order.hpp.sq" +#include "../script/api/ai/ai_priorityqueue.hpp.sq" #include "../script/api/ai/ai_rail.hpp.sq" #include "../script/api/ai/ai_railtypelist.hpp.sq" #include "../script/api/ai/ai_road.hpp.sq" @@ -164,6 +165,7 @@ void AIInstance::RegisterAPI() SQAIMap_Register(this->engine); SQAIMarine_Register(this->engine); SQAIOrder_Register(this->engine); + SQAIPriorityQueue_Register(this->engine); SQAIRail_Register(this->engine); SQAIRailTypeList_Register(this->engine); SQAIRoad_Register(this->engine); diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 4424c801c6..47d51e28ee 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -59,6 +59,7 @@ #include "../script/api/game/game_marine.hpp.sq" #include "../script/api/game/game_news.hpp.sq" #include "../script/api/game/game_order.hpp.sq" +#include "../script/api/game/game_priorityqueue.hpp.sq" #include "../script/api/game/game_rail.hpp.sq" #include "../script/api/game/game_railtypelist.hpp.sq" #include "../script/api/game/game_road.hpp.sq" @@ -173,6 +174,7 @@ void GameInstance::RegisterAPI() SQGSMarine_Register(this->engine); SQGSNews_Register(this->engine); SQGSOrder_Register(this->engine); + SQGSPriorityQueue_Register(this->engine); SQGSRail_Register(this->engine); SQGSRailTypeList_Register(this->engine); SQGSRoad_Register(this->engine); diff --git a/src/script/api/ai/ai_priorityqueue.hpp.sq b/src/script/api/ai/ai_priorityqueue.hpp.sq new file mode 100644 index 0000000000..6e5fcf82e9 --- /dev/null +++ b/src/script/api/ai/ai_priorityqueue.hpp.sq @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_priorityqueue.hpp" +#include "../template/template_priorityqueue.hpp.sq" + + +template <> const char *GetClassName() { return "AIPriorityQueue"; } + +void SQAIPriorityQueue_Register(Squirrel *engine) +{ + DefSQClass SQAIPriorityQueue("AIPriorityQueue"); + SQAIPriorityQueue.PreRegister(engine); + SQAIPriorityQueue.AddConstructor(engine, "x"); + + SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Insert, "Insert"); + SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Pop, "Pop"); + SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Peek, "Peek"); + SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Exists, "Exists"); + SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Clear, "Clear"); + SQAIPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::IsEmpty, "IsEmpty", 1, "x"); + SQAIPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::Count, "Count", 1, "x"); + + SQAIPriorityQueue.PostRegister(engine); +} diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index bcb7df67f2..a579bb27bc 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -17,6 +17,9 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li AIPriorityQueue + * * \b 1.10.0 * * API additions: diff --git a/src/script/api/game/game_priorityqueue.hpp.sq b/src/script/api/game/game_priorityqueue.hpp.sq new file mode 100644 index 0000000000..fade5e2a1e --- /dev/null +++ b/src/script/api/game/game_priorityqueue.hpp.sq @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_priorityqueue.hpp" +#include "../template/template_priorityqueue.hpp.sq" + + +template <> const char *GetClassName() { return "GSPriorityQueue"; } + +void SQGSPriorityQueue_Register(Squirrel *engine) +{ + DefSQClass SQGSPriorityQueue("GSPriorityQueue"); + SQGSPriorityQueue.PreRegister(engine); + SQGSPriorityQueue.AddConstructor(engine, "x"); + + SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Insert, "Insert"); + SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Pop, "Pop"); + SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Peek, "Peek"); + SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Exists, "Exists"); + SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Clear, "Clear"); + SQGSPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::IsEmpty, "IsEmpty", 1, "x"); + SQGSPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::Count, "Count", 1, "x"); + + SQGSPriorityQueue.PostRegister(engine); +} diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 69c4d971a5..fc917a0120 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -24,6 +24,7 @@ * \li GSStoryPage::MakePushButtonReference * \li GSStoryPage::MakeTileButtonReference * \li GSStoryPage::MakeVehicleButtonReference + * \li GSPriorityQueue * * \b 1.10.0 * diff --git a/src/script/api/script_priorityqueue.cpp b/src/script/api/script_priorityqueue.cpp new file mode 100644 index 0000000000..3130084126 --- /dev/null +++ b/src/script/api/script_priorityqueue.cpp @@ -0,0 +1,107 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_priorityqueue.cpp Implementation of ScriptPriorityQueue. */ + +#include "../../stdafx.h" +#include "script_priorityqueue.hpp" +#include "script_error.hpp" +#include "../squirrel_helper.hpp" +#include "../script_instance.hpp" +#include "../../debug.h" +#include + +#include "../../safeguards.h" + + +static bool operator==(const ScriptPriorityQueue::PriorityItem &lhs, const HSQOBJECT &rhs) +{ + return lhs.second._type == rhs._type && lhs.second._unVal.raw == rhs._unVal.raw; +} + + +ScriptPriorityQueue::~ScriptPriorityQueue() +{ + /* Release reference to stored objects. */ + auto inst = ScriptObject::GetActiveInstance(); + if (!inst->InShutdown()) { + for (auto &i : this->queue) inst->ReleaseSQObject(const_cast(&i.second)); + } +} + +SQInteger ScriptPriorityQueue::Insert(HSQUIRRELVM vm) +{ + HSQOBJECT item; + int64 priority; + sq_resetobject(&item); + sq_getstackobj(vm, 2, &item); + sq_getinteger(vm, 3, &priority); + + sq_addref(vm, &item); // Keep object alive. + + this->queue.emplace_back(priority, item); + std::push_heap(this->queue.begin(), this->queue.end(), this->comp); + + return SQConvert::Return(vm, true); +} + +SQInteger ScriptPriorityQueue::Pop(HSQUIRRELVM vm) +{ + if (this->IsEmpty()) { + ScriptObject::SetLastError(ScriptError::ERR_PRECONDITION_FAILED); + sq_pushnull(vm); + return 1; + } + + HSQOBJECT item = this->queue.front().second; + std::pop_heap(this->queue.begin(), this->queue.end(), this->comp); + this->queue.pop_back(); + + /* Store the object on the Squirrel stack before releasing it to make sure the ref count can't drop to zero. */ + auto ret = SQConvert::Return(vm, item); + sq_release(vm, &item); + return ret; +} + +SQInteger ScriptPriorityQueue::Peek(HSQUIRRELVM vm) +{ + if (this->IsEmpty()) { + ScriptObject::SetLastError(ScriptError::ERR_PRECONDITION_FAILED); + sq_pushnull(vm); + return 1; + } + + return SQConvert::Return(vm, this->queue.front().second); +} + +SQInteger ScriptPriorityQueue::Exists(HSQUIRRELVM vm) +{ + HSQOBJECT item; + sq_resetobject(&item); + sq_getstackobj(vm, 2, &item); + + return SQConvert::Return(vm, std::find(this->queue.cbegin(), this->queue.cend(), item) != this->queue.cend()); +} + +SQInteger ScriptPriorityQueue::Clear(HSQUIRRELVM vm) +{ + /* Release reference to stored objects. */ + for (auto &i : this->queue) sq_release(vm, const_cast(&i.second)); + this->queue.clear(); + + return 0; +} + +bool ScriptPriorityQueue::IsEmpty() +{ + return this->queue.empty(); +} + +SQInteger ScriptPriorityQueue::Count() +{ + return (SQInteger)this->queue.size(); +} diff --git a/src/script/api/script_priorityqueue.hpp b/src/script/api/script_priorityqueue.hpp new file mode 100644 index 0000000000..5f8718e424 --- /dev/null +++ b/src/script/api/script_priorityqueue.hpp @@ -0,0 +1,94 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_priorityqueue.hpp A queue that keeps a list of items sorted by a priority. */ +/** @defgroup ScriptPriorityQueue Classes that create a priority queue of items. */ + +#ifndef SCRIPT_PRIORITYQUEUE_HPP +#define SCRIPT_PRIORITYQUEUE_HPP + +#include "script_object.hpp" +#include +#include + +/** + * Class that creates a queue which keeps its items ordered by an item priority. + * @api ai game + */ +class ScriptPriorityQueue : public ScriptObject { +public: + typedef std::pair PriorityItem; +private: + struct PriorityComparator { + bool operator()(const PriorityItem &lhs, const PriorityItem &rhs) const noexcept + { + return lhs.first > rhs.first; + } + }; + + PriorityComparator comp; + std::vector queue; ///< The priority list + +public: + ~ScriptPriorityQueue(); + +#ifdef DOXYGEN_API + /** + * Add a single item to the queue. + * @param item The item to add. Can be any Squirrel type. Should be unique, otherwise it is ignored. + * @param priority The priority to assign the item. + * @return True if the item was inserted, false if it was already in the queue. + */ + bool Insert(void *item, int64 priority); + + /** + * Remove and return the item with the lowest priority. + * @return The item with the lowest priority, removed from the queue. Returns null on an empty queue. + * @pre !IsEmpty() + */ + void *Pop(); + + /** + * Get the item with the lowest priority, keeping it in the queue. + * @return The item with the lowest priority. Returns null on an empty queue. + * @pre !IsEmpty() + */ + void *Peek(); + + /** + * Check if an items is already included in the queue. + * @return true if the items is already in the queue. + * @note Performance is O(n), use only when absolutely required. + */ + bool Exists(void *item); + + /** + * Clear the queue, making Count() returning 0 and IsEmpty() returning true. + */ + void Clear(); +#else + SQInteger Insert(HSQUIRRELVM vm); + SQInteger Pop(HSQUIRRELVM vm); + SQInteger Peek(HSQUIRRELVM vm); + SQInteger Exists(HSQUIRRELVM vm); + SQInteger Clear(HSQUIRRELVM vm); +#endif + + /** + * Check if the queue is empty. + * @return true if the queue is empty. + */ + bool IsEmpty(); + + /** + * Returns the amount of items in the queue. + * @return amount of items in the queue. + */ + SQInteger Count(); +}; + +#endif /* SCRIPT_PRIORITYQUEUE_HPP */ diff --git a/src/script/api/template/template_priorityqueue.hpp.sq b/src/script/api/template/template_priorityqueue.hpp.sq new file mode 100644 index 0000000000..14c63324fb --- /dev/null +++ b/src/script/api/template/template_priorityqueue.hpp.sq @@ -0,0 +1,19 @@ +/* + * 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 . + */ + +/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ + +#include "../script_priorityqueue.hpp" + +namespace SQConvert { + /* Allow ScriptPriorityQueue to be used as Squirrel parameter */ + template <> inline ScriptPriorityQueue *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptPriorityQueue *)instance; } + template <> inline ScriptPriorityQueue &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptPriorityQueue *)instance; } + template <> inline const ScriptPriorityQueue *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptPriorityQueue *)instance; } + template <> inline const ScriptPriorityQueue &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptPriorityQueue *)instance; } + template <> inline int Return(HSQUIRRELVM vm, ScriptPriorityQueue *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "PriorityQueue", res, nullptr, DefSQDestructorCallback, true); return 1; } +} // namespace SQConvert diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index a38a315ffc..81283cb772 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -58,6 +58,7 @@ ScriptInstance::ScriptInstance(const char *APIName) : is_save_data_on_stack(false), suspend(0), is_paused(false), + in_shutdown(false), callback(nullptr) { this->storage = new ScriptStorage(); @@ -136,6 +137,7 @@ bool ScriptInstance::LoadCompatibilityScripts(const char *api_version, Subdirect ScriptInstance::~ScriptInstance() { ScriptObject::ActiveInstance active(this); + this->in_shutdown = true; if (instance != nullptr) this->engine->ReleaseObject(this->instance); if (engine != nullptr) delete this->engine; @@ -154,6 +156,7 @@ void ScriptInstance::Died() { DEBUG(script, 0, "The script died unexpectedly."); this->is_dead = true; + this->in_shutdown = true; this->last_allocated_memory = this->GetAllocatedMemory(); // Update cache @@ -718,3 +721,8 @@ size_t ScriptInstance::GetAllocatedMemory() const if (this->engine == nullptr) return this->last_allocated_memory; return this->engine->GetAllocatedMemory(); } + +void ScriptInstance::ReleaseSQObject(HSQOBJECT *obj) +{ + if (!this->in_shutdown) this->engine->ReleaseObject(obj); +} diff --git a/src/script/script_instance.hpp b/src/script/script_instance.hpp index e5024c80bc..c097e0eb7b 100644 --- a/src/script/script_instance.hpp +++ b/src/script/script_instance.hpp @@ -200,6 +200,17 @@ public: size_t GetAllocatedMemory() const; + /** + * Indicate whether this instance is currently being destroyed. + */ + inline bool InShutdown() const { return this->in_shutdown; } + + /** + * Decrease the ref count of a squirrel object. + * @param obj The object to release. + **/ + void ReleaseSQObject(HSQOBJECT *obj); + protected: class Squirrel *engine; ///< A wrapper around the squirrel vm. const char *versionAPI; ///< Current API used by this script. @@ -242,6 +253,7 @@ private: bool is_save_data_on_stack; ///< Is the save data still on the squirrel stack? int suspend; ///< The amount of ticks to suspend this script before it's allowed to continue. bool is_paused; ///< Is the script paused? (a paused script will not be executed until unpaused) + bool in_shutdown; ///< Is this instance currently being destructed? Script_SuspendCallbackProc *callback; ///< Callback that should be called in the next tick the script runs. size_t last_allocated_memory; ///< Last known allocated memory value (for display for crashed scripts) From a82572d0f5a55a33df4163b429f891ea76ed92a7 Mon Sep 17 00:00:00 2001 From: Yexo Date: Fri, 29 May 2020 22:31:14 +0200 Subject: [PATCH 138/601] Codechange: remove has_newhouses global --- src/newgrf.cpp | 3 --- src/newgrf.h | 1 - src/newgrf_house.cpp | 4 ---- src/town_cmd.cpp | 6 ++---- 4 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 6f12fbbf9f..4429771e59 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2384,8 +2384,6 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt if (!CargoSpec::Get(housespec->accepts_cargo[2])->IsValid()) { housespec->cargo_acceptance[2] = 0; } - - _loaded_newgrf_features.has_newhouses = true; break; } @@ -8633,7 +8631,6 @@ void ResetNewGRFData() _loaded_newgrf_features.has_2CC = false; _loaded_newgrf_features.used_liveries = 1 << LS_DEFAULT; - _loaded_newgrf_features.has_newhouses = false; _loaded_newgrf_features.has_newindustries = false; _loaded_newgrf_features.shore = SHORE_REPLACE_NONE; _loaded_newgrf_features.tram = TRAMWAY_REPLACE_DEPOT_NONE; diff --git a/src/newgrf.h b/src/newgrf.h index 65df3698e4..20a178e1f9 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -174,7 +174,6 @@ enum TramReplacement { struct GRFLoadedFeatures { bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours). uint64 used_liveries; ///< Bitmask of #LiveryScheme used by the defined engines. - bool has_newhouses; ///< Set if there are any newhouses loaded. bool has_newindustries; ///< Set if there are any newindustries loaded. ShoreReplacement shore; ///< In which way shore sprites were replaced. TramReplacement tram; ///< In which way tram depots were replaced. diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index b585a682dc..544f346e04 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -108,8 +108,6 @@ void IncreaseBuildingCount(Town *t, HouseID house_id) { HouseClassID class_id = HouseSpec::Get(house_id)->class_id; - if (!_loaded_newgrf_features.has_newhouses) return; - t->cache.building_counts.id_count[house_id]++; _building_counts.id_count[house_id]++; @@ -129,8 +127,6 @@ void DecreaseBuildingCount(Town *t, HouseID house_id) { HouseClassID class_id = HouseSpec::Get(house_id)->class_id; - if (!_loaded_newgrf_features.has_newhouses) return; - if (t->cache.building_counts.id_count[house_id] > 0) t->cache.building_counts.id_count[house_id]--; if (_building_counts.id_count[house_id] > 0) _building_counts.id_count[house_id]--; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 9372d37111..39dfa7db17 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2492,8 +2492,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile) if (t->cache.building_counts.id_count[i] == UINT16_MAX) continue; } - /* Without NewHouses, all houses have probability '1' */ - uint cur_prob = (_loaded_newgrf_features.has_newhouses ? hs->probability : 1); + uint cur_prob = hs->probability; probability_max += cur_prob; probs[num] = cur_prob; houses[num++] = (HouseID)i; @@ -2526,8 +2525,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile) const HouseSpec *hs = HouseSpec::Get(house); - if (_loaded_newgrf_features.has_newhouses && !_generating_world && - _game_mode != GM_EDITOR && (hs->extra_flags & BUILDING_IS_HISTORICAL) != 0) { + if (!_generating_world && _game_mode != GM_EDITOR && (hs->extra_flags & BUILDING_IS_HISTORICAL) != 0) { continue; } From ce618bf7e96ddc92b1ceb7c82c821af822b3796d Mon Sep 17 00:00:00 2001 From: Yexo Date: Mon, 1 Jun 2020 00:43:47 +0200 Subject: [PATCH 139/601] Codechange: replace custom timer and OnGameTick() with OnHundrethTick() --- src/industry_gui.cpp | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index a5f03a2b94..c7ba3345c9 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -270,8 +270,6 @@ static WindowDesc _build_industry_desc( class BuildIndustryWindow : public Window { int selected_index; ///< index of the element in the matrix IndustryType selected_type; ///< industry corresponding to the above index - uint16 callback_timer; ///< timer counter for callback eventual verification - bool timer_enabled; ///< timer can be used uint16 count; ///< How many industries are loaded IndustryType index[NUM_INDUSTRYTYPES + 1]; ///< Type of industry, in the order it was loaded bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_PROBABILITY (if ever) @@ -295,7 +293,6 @@ class BuildIndustryWindow : public Window { this->index[this->count] = INVALID_INDUSTRYTYPE; this->enabled[this->count] = true; this->count++; - this->timer_enabled = false; } /* Fill the arrays with industries. * The tests performed after the enabled allow to load the industries @@ -387,13 +384,9 @@ class BuildIndustryWindow : public Window { public: BuildIndustryWindow() : Window(&_build_industry_desc) { - this->timer_enabled = _loaded_newgrf_features.has_newindustries; - this->selected_index = -1; this->selected_type = INVALID_INDUSTRYTYPE; - this->callback_timer = DAY_TICKS; - this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_DPI_SCROLLBAR); this->FinishInitNested(0); @@ -673,25 +666,19 @@ public: if (success && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } - void OnGameTick() override + void OnHundredthTick() override { - if (!this->timer_enabled) return; - if (--this->callback_timer == 0) { - /* We have just passed another day. - * See if we need to update availability of currently selected industry */ - this->callback_timer = DAY_TICKS; // restart counter + if (_game_mode == GM_EDITOR) return; + const IndustrySpec *indsp = GetIndustrySpec(this->selected_type); - const IndustrySpec *indsp = GetIndustrySpec(this->selected_type); + if (indsp->enabled) { + bool call_back_result = GetIndustryProbabilityCallback(this->selected_type, IACT_USERCREATION, 1) > 0; - if (indsp->enabled) { - bool call_back_result = GetIndustryProbabilityCallback(this->selected_type, IACT_USERCREATION, 1) > 0; - - /* Only if result does match the previous state would it require a redraw. */ - if (call_back_result != this->enabled[this->selected_index]) { - this->enabled[this->selected_index] = call_back_result; - this->SetButtons(); - this->SetDirty(); - } + /* Only if result does match the previous state would it require a redraw. */ + if (call_back_result != this->enabled[this->selected_index]) { + this->enabled[this->selected_index] = call_back_result; + this->SetButtons(); + this->SetDirty(); } } } From 1507902d0083b4983d59efdd3859dde0a9b19fa3 Mon Sep 17 00:00:00 2001 From: Yexo Date: Mon, 1 Jun 2020 00:44:11 +0200 Subject: [PATCH 140/601] Codechange: remove has_newindustries global --- src/industry_gui.cpp | 12 +++++++++--- src/newgrf.cpp | 2 -- src/newgrf.h | 1 - 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index c7ba3345c9..88cbc91d10 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -416,10 +416,11 @@ public: } case WID_DPI_INFOPANEL: { - /* Extra line for cost outside of editor + extra lines for 'extra' information for NewGRFs. */ - int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1) + (_loaded_newgrf_features.has_newindustries ? 4 : 0); + /* Extra line for cost outside of editor. */ + int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1); uint extra_lines_req = 0; uint extra_lines_prd = 0; + uint extra_lines_newgrf = 0; uint max_minwidth = FONT_HEIGHT_NORMAL * MAX_MINWIDTH_LINEHEIGHTS; Dimension d = {0, 0}; for (byte i = 0; i < this->count; i++) { @@ -447,10 +448,15 @@ public: strdim.width = max_minwidth; } d = maxdim(d, strdim); + + if (indsp->grf_prop.grffile != nullptr) { + /* Reserve a few extra lines for text from an industry NewGRF. */ + extra_lines_newgrf = 4; + } } /* Set it to something more sane :) */ - height += extra_lines_prd + extra_lines_req; + height += extra_lines_prd + extra_lines_req + extra_lines_newgrf; size->height = height * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; size->width = d.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; break; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4429771e59..4abbcb3b72 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8631,7 +8631,6 @@ void ResetNewGRFData() _loaded_newgrf_features.has_2CC = false; _loaded_newgrf_features.used_liveries = 1 << LS_DEFAULT; - _loaded_newgrf_features.has_newindustries = false; _loaded_newgrf_features.shore = SHORE_REPLACE_NONE; _loaded_newgrf_features.tram = TRAMWAY_REPLACE_DEPOT_NONE; @@ -9151,7 +9150,6 @@ static void FinaliseIndustriesArray() } _industry_mngr.SetEntitySpec(indsp); - _loaded_newgrf_features.has_newindustries = true; } } } diff --git a/src/newgrf.h b/src/newgrf.h index 20a178e1f9..d9c8a4da58 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -174,7 +174,6 @@ enum TramReplacement { struct GRFLoadedFeatures { bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours). uint64 used_liveries; ///< Bitmask of #LiveryScheme used by the defined engines. - bool has_newindustries; ///< Set if there are any newindustries loaded. ShoreReplacement shore; ///< In which way shore sprites were replaced. TramReplacement tram; ///< In which way tram depots were replaced. }; From cdd2892c49f0fa7b6a197a463cfa84ba0edcb20d Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Thu, 4 Jun 2020 18:23:57 +1200 Subject: [PATCH 141/601] Codechange: Realign SDL driver with SDL2 driver to ease maintenance and emphasise differences. --- src/video/sdl2_v.cpp | 4 +--- src/video/sdl_v.cpp | 29 ++++++++++++++++------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 0442a0e87a..0dff1af4c5 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -170,9 +170,7 @@ static void DrawSurfaceToScreen() } else { if (_sdl_surface != _sdl_realscreen) { for (int i = 0; i < n; i++) { - SDL_BlitSurface( - _sdl_surface, &_dirty_rects[i], - _sdl_realscreen, &_dirty_rects[i]); + SDL_BlitSurface(_sdl_surface, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]); } } diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index fba6166c9c..98777a87d5 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -31,7 +31,7 @@ static FVideoDriver_SDL iFVideoDriver_SDL; -static SDL_Surface *_sdl_screen; +static SDL_Surface *_sdl_surface; static SDL_Surface *_sdl_realscreen; static bool _all_modes; @@ -73,11 +73,11 @@ static void UpdatePalette(bool init = false) pal[i].unused = 0; } - SDL_SetColors(_sdl_screen, pal, _local_palette.first_dirty, _local_palette.count_dirty); + SDL_SetColors(_sdl_surface, pal, _local_palette.first_dirty, _local_palette.count_dirty); - if (_sdl_screen != _sdl_realscreen && init) { + if (_sdl_surface != _sdl_realscreen && init) { /* When using a shadow surface, also set our palette on the real screen. This lets SDL - * allocate as much colors (or approximations) as + * allocate as many colors (or approximations) as * possible, instead of using only the default SDL * palette. This allows us to get more colors exactly * right and might allow using better approximations for @@ -99,7 +99,7 @@ static void UpdatePalette(bool init = false) SDL_SetColors(_sdl_realscreen, pal, _local_palette.first_dirty, _local_palette.count_dirty); } - if (_sdl_screen != _sdl_realscreen && !init) { + if (_sdl_surface != _sdl_realscreen && !init) { /* We're not using real hardware palette, but are letting SDL * approximate the palette during shadow -> screen copy. To * change the palette, we need to recopy the entire screen. @@ -110,7 +110,7 @@ static void UpdatePalette(bool init = false) * best mapping of shadow palette colors to real palette * colors from scratch. */ - SDL_BlitSurface(_sdl_screen, nullptr, _sdl_realscreen, nullptr); + SDL_BlitSurface(_sdl_surface, nullptr, _sdl_realscreen, nullptr); SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); } } @@ -155,17 +155,20 @@ static void DrawSurfaceToScreen() if (n == 0) return; _num_dirty_rects = 0; + if (n > MAX_DIRTY_RECTS) { - if (_sdl_screen != _sdl_realscreen) { - SDL_BlitSurface(_sdl_screen, nullptr, _sdl_realscreen, nullptr); + if (_sdl_surface != _sdl_realscreen) { + SDL_BlitSurface(_sdl_surface, nullptr, _sdl_realscreen, nullptr); } + SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); } else { - if (_sdl_screen != _sdl_realscreen) { + if (_sdl_surface != _sdl_realscreen) { for (int i = 0; i < n; i++) { - SDL_BlitSurface(_sdl_screen, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]); + SDL_BlitSurface(_sdl_surface, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]); } } + SDL_UpdateRects(_sdl_realscreen, n, _dirty_rects); } } @@ -308,7 +311,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) if (want_hwpalette) DEBUG(driver, 1, "SDL: requesting hardware palette"); /* Free any previously allocated shadow surface */ - if (_sdl_screen != nullptr && _sdl_screen != _sdl_realscreen) SDL_FreeSurface(_sdl_screen); + if (_sdl_surface != nullptr && _sdl_surface != _sdl_realscreen) SDL_FreeSurface(_sdl_surface); if (_sdl_realscreen != nullptr) { if (_requested_hwpalette != want_hwpalette) { @@ -375,7 +378,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) _screen.height = newscreen->h; _screen.pitch = newscreen->pitch / (bpp / 8); _screen.dst_ptr = newscreen->pixels; - _sdl_screen = newscreen; + _sdl_surface = newscreen; /* When in full screen, we will always have the mouse cursor * within the window, even though SDL does not give us the @@ -610,7 +613,7 @@ const char *VideoDriver_SDL::Start(const StringList &parm) } else if (SDL_WasInit(SDL_INIT_VIDEO) == 0) { ret_code = SDL_InitSubSystem(SDL_INIT_VIDEO); } - if (ret_code == -1) return SDL_GetError(); + if (ret_code < 0) return SDL_GetError(); GetVideoModes(); if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) { From f246f8faef8d9f949e7d64a624a5a1628a857508 Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Fri, 5 Jun 2020 14:31:28 +1200 Subject: [PATCH 142/601] Cleanup: Fix typo in settings.h.preamble. --- src/table/settings.h.preamble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/table/settings.h.preamble b/src/table/settings.h.preamble index ddb9d2abfc..2b2257539b 100644 --- a/src/table/settings.h.preamble +++ b/src/table/settings.h.preamble @@ -28,7 +28,7 @@ static size_t ConvertLandscape(const char *value); * These are for client-only variables. Here the 'var' refers to an * entry inside _settings_client. * 3. SDT_something - * Thse are for members in the struct described by the current + * These are for members in the struct described by the current * #SettingDesc list / .ini file. Here, 'base' specifies type of the * struct while 'var' points out the member of the struct (the actual * struct to store it in is implicitly defined by the #SettingDesc From 012fea301d886534733ba5c7d70b8af4381ab260 Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Fri, 5 Jun 2020 14:32:26 +1200 Subject: [PATCH 143/601] Cleanup: Add note explaining how settings.h is generated from source. --- src/table/settings.h.preamble | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/table/settings.h.preamble b/src/table/settings.h.preamble index 2b2257539b..3d372c2452 100644 --- a/src/table/settings.h.preamble +++ b/src/table/settings.h.preamble @@ -13,7 +13,9 @@ static size_t ConvertLandscape(const char *value); /**************************** * OTTD specific INI stuff - ****************************/ + **************************** + * DO NOT edit this file. This file is automatically generated from the contents of /src/table/ + */ /** * Settings-macro usage: From 937b3665463fb9e5155199a9675e5e43c8760bbf Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Thu, 4 Jun 2020 23:07:19 +1200 Subject: [PATCH 144/601] Cleanup: StationCargoList::AreMergable doxygen comment references Vehicle instead of Station. --- src/cargopacket.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cargopacket.h b/src/cargopacket.h index c058bafdbb..e34298895c 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -538,8 +538,8 @@ public: uint Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge); /** - * Are two the two CargoPackets mergeable in the context of - * a list of CargoPackets for a Vehicle? + * Are the two CargoPackets mergeable in the context of + * a list of CargoPackets for a Station? * @param cp1 First CargoPacket. * @param cp2 Second CargoPacket. * @return True if they are mergeable. From eeed3a7613d375f66781f53b42e03729a4ca1c33 Mon Sep 17 00:00:00 2001 From: Marcus Calhoun-Lopez Date: Thu, 4 Jun 2020 14:49:40 +0200 Subject: [PATCH 145/601] Fix: unbreak building with ICU on macOS A symbol clash breaks building ICU on macOS, and although it isn't necessary, it might as well be possible. --- src/string.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/string.cpp b/src/string.cpp index bec7c8e926..d0de261e53 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -32,10 +32,6 @@ #include "os/windows/string_uniscribe.h" #endif -#if defined(WITH_COCOA) -#include "os/macosx/string_osx.h" -#endif - #ifdef WITH_ICU_I18N /* Required by strnatcmp. */ #include @@ -43,6 +39,10 @@ #include "gfx_func.h" #endif /* WITH_ICU_I18N */ +#if defined(WITH_COCOA) +#include "os/macosx/string_osx.h" +#endif + /* The function vsnprintf is used internally to perform the required formatting * tasks. As such this one must be allowed, and makes sure it's terminated. */ #include "safeguards.h" From 84b71f796220b382c2bf943a406234ffb18098b8 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 11:42:20 +0200 Subject: [PATCH 146/601] Remove: all existing project files This prepares for the switch to CMake, which takes over all current exisiting forms of project files. --- Makefile.bundle.in | 221 -- Makefile.grf.in | 116 - Makefile.in | 185 -- Makefile.lang.in | 87 - Makefile.msvc | 45 - Makefile.setting.in | 63 - Makefile.src.in | 295 -- config.lib | 3508 -------------------- configure | 169 - findversion.sh | 114 - projects/basesets_vs140.vcxproj | 99 - projects/basesets_vs140.vcxproj.filters | 40 - projects/basesets_vs140.vcxproj.filters.in | 11 - projects/basesets_vs140.vcxproj.in | 40 - projects/basesets_vs141.vcxproj | 99 - projects/basesets_vs141.vcxproj.filters | 40 - projects/basesets_vs141.vcxproj.filters.in | 11 - projects/basesets_vs141.vcxproj.in | 40 - projects/basesets_vs142.vcxproj | 99 - projects/basesets_vs142.vcxproj.filters | 40 - projects/basesets_vs142.vcxproj.filters.in | 11 - projects/basesets_vs142.vcxproj.in | 40 - projects/determineversion.vbs | 216 -- projects/dpi_aware.manifest | 29 - projects/gen-kdev4.sh | 201 -- projects/generate | 337 -- projects/generate.vbs | 414 --- projects/generate_vs140.vcxproj | 39 - projects/generate_vs141.vcxproj | 39 - projects/generate_vs142.vcxproj | 39 - projects/langs_vs140.vcxproj | 390 --- projects/langs_vs140.vcxproj.filters | 176 - projects/langs_vs140.vcxproj.filters.in | 12 - projects/langs_vs140.vcxproj.in | 61 - projects/langs_vs141.vcxproj | 390 --- projects/langs_vs141.vcxproj.filters | 176 - projects/langs_vs141.vcxproj.filters.in | 12 - projects/langs_vs141.vcxproj.in | 61 - projects/langs_vs142.vcxproj | 390 --- projects/langs_vs142.vcxproj.filters | 176 - projects/langs_vs142.vcxproj.filters.in | 12 - projects/langs_vs142.vcxproj.in | 61 - projects/openttd_vs140.sln | 103 - projects/openttd_vs140.vcxproj | 1387 -------- projects/openttd_vs140.vcxproj.filters | 3155 ------------------ projects/openttd_vs140.vcxproj.filters.in | 13 - projects/openttd_vs140.vcxproj.in | 374 --- projects/openttd_vs141.sln | 103 - projects/openttd_vs141.vcxproj | 1387 -------- projects/openttd_vs141.vcxproj.filters | 3155 ------------------ projects/openttd_vs141.vcxproj.filters.in | 13 - projects/openttd_vs141.vcxproj.in | 374 --- projects/openttd_vs142.sln | 105 - projects/openttd_vs142.vcxproj | 1387 -------- projects/openttd_vs142.vcxproj.filters | 3155 ------------------ projects/openttd_vs142.vcxproj.filters.in | 13 - projects/openttd_vs142.vcxproj.in | 374 --- projects/os_versions.manifest | 17 - projects/regression.bat | 6 - projects/regression_vs140.vcxproj | 41 - projects/regression_vs141.vcxproj | 41 - projects/regression_vs142.vcxproj | 41 - projects/settings_vs140.vcxproj | 58 - projects/settings_vs140.vcxproj.filters | 35 - projects/settings_vs140.vcxproj.filters.in | 15 - projects/settings_vs140.vcxproj.in | 52 - projects/settings_vs141.vcxproj | 58 - projects/settings_vs141.vcxproj.filters | 35 - projects/settings_vs141.vcxproj.filters.in | 15 - projects/settings_vs141.vcxproj.in | 52 - projects/settings_vs142.vcxproj | 58 - projects/settings_vs142.vcxproj.filters | 35 - projects/settings_vs142.vcxproj.filters.in | 15 - projects/settings_vs142.vcxproj.in | 52 - projects/settingsgen_vs140.vcxproj | 83 - projects/settingsgen_vs140.vcxproj.filters | 32 - projects/settingsgen_vs141.vcxproj | 83 - projects/settingsgen_vs141.vcxproj.filters | 32 - projects/settingsgen_vs142.vcxproj | 84 - projects/settingsgen_vs142.vcxproj.filters | 32 - projects/strgen_vs140.vcxproj | 95 - projects/strgen_vs140.vcxproj.filters | 35 - projects/strgen_vs141.vcxproj | 95 - projects/strgen_vs141.vcxproj.filters | 35 - projects/strgen_vs142.vcxproj | 95 - projects/strgen_vs142.vcxproj.filters | 35 - projects/version_vs140.vcxproj | 42 - projects/version_vs141.vcxproj | 42 - projects/version_vs142.vcxproj | 42 - source.list | 1191 ------- 90 files changed, 26381 deletions(-) delete mode 100644 Makefile.bundle.in delete mode 100644 Makefile.grf.in delete mode 100644 Makefile.in delete mode 100644 Makefile.lang.in delete mode 100644 Makefile.msvc delete mode 100644 Makefile.setting.in delete mode 100644 Makefile.src.in delete mode 100644 config.lib delete mode 100755 configure delete mode 100755 findversion.sh delete mode 100644 projects/basesets_vs140.vcxproj delete mode 100644 projects/basesets_vs140.vcxproj.filters delete mode 100644 projects/basesets_vs140.vcxproj.filters.in delete mode 100644 projects/basesets_vs140.vcxproj.in delete mode 100644 projects/basesets_vs141.vcxproj delete mode 100644 projects/basesets_vs141.vcxproj.filters delete mode 100644 projects/basesets_vs141.vcxproj.filters.in delete mode 100644 projects/basesets_vs141.vcxproj.in delete mode 100644 projects/basesets_vs142.vcxproj delete mode 100644 projects/basesets_vs142.vcxproj.filters delete mode 100644 projects/basesets_vs142.vcxproj.filters.in delete mode 100644 projects/basesets_vs142.vcxproj.in delete mode 100755 projects/determineversion.vbs delete mode 100644 projects/dpi_aware.manifest delete mode 100755 projects/gen-kdev4.sh delete mode 100755 projects/generate delete mode 100644 projects/generate.vbs delete mode 100644 projects/generate_vs140.vcxproj delete mode 100644 projects/generate_vs141.vcxproj delete mode 100644 projects/generate_vs142.vcxproj delete mode 100644 projects/langs_vs140.vcxproj delete mode 100644 projects/langs_vs140.vcxproj.filters delete mode 100644 projects/langs_vs140.vcxproj.filters.in delete mode 100644 projects/langs_vs140.vcxproj.in delete mode 100644 projects/langs_vs141.vcxproj delete mode 100644 projects/langs_vs141.vcxproj.filters delete mode 100644 projects/langs_vs141.vcxproj.filters.in delete mode 100644 projects/langs_vs141.vcxproj.in delete mode 100644 projects/langs_vs142.vcxproj delete mode 100644 projects/langs_vs142.vcxproj.filters delete mode 100644 projects/langs_vs142.vcxproj.filters.in delete mode 100644 projects/langs_vs142.vcxproj.in delete mode 100644 projects/openttd_vs140.sln delete mode 100644 projects/openttd_vs140.vcxproj delete mode 100644 projects/openttd_vs140.vcxproj.filters delete mode 100644 projects/openttd_vs140.vcxproj.filters.in delete mode 100644 projects/openttd_vs140.vcxproj.in delete mode 100644 projects/openttd_vs141.sln delete mode 100644 projects/openttd_vs141.vcxproj delete mode 100644 projects/openttd_vs141.vcxproj.filters delete mode 100644 projects/openttd_vs141.vcxproj.filters.in delete mode 100644 projects/openttd_vs141.vcxproj.in delete mode 100644 projects/openttd_vs142.sln delete mode 100644 projects/openttd_vs142.vcxproj delete mode 100644 projects/openttd_vs142.vcxproj.filters delete mode 100644 projects/openttd_vs142.vcxproj.filters.in delete mode 100644 projects/openttd_vs142.vcxproj.in delete mode 100644 projects/os_versions.manifest delete mode 100644 projects/regression.bat delete mode 100644 projects/regression_vs140.vcxproj delete mode 100644 projects/regression_vs141.vcxproj delete mode 100644 projects/regression_vs142.vcxproj delete mode 100644 projects/settings_vs140.vcxproj delete mode 100644 projects/settings_vs140.vcxproj.filters delete mode 100644 projects/settings_vs140.vcxproj.filters.in delete mode 100644 projects/settings_vs140.vcxproj.in delete mode 100644 projects/settings_vs141.vcxproj delete mode 100644 projects/settings_vs141.vcxproj.filters delete mode 100644 projects/settings_vs141.vcxproj.filters.in delete mode 100644 projects/settings_vs141.vcxproj.in delete mode 100644 projects/settings_vs142.vcxproj delete mode 100644 projects/settings_vs142.vcxproj.filters delete mode 100644 projects/settings_vs142.vcxproj.filters.in delete mode 100644 projects/settings_vs142.vcxproj.in delete mode 100644 projects/settingsgen_vs140.vcxproj delete mode 100644 projects/settingsgen_vs140.vcxproj.filters delete mode 100644 projects/settingsgen_vs141.vcxproj delete mode 100644 projects/settingsgen_vs141.vcxproj.filters delete mode 100644 projects/settingsgen_vs142.vcxproj delete mode 100644 projects/settingsgen_vs142.vcxproj.filters delete mode 100644 projects/strgen_vs140.vcxproj delete mode 100644 projects/strgen_vs140.vcxproj.filters delete mode 100644 projects/strgen_vs141.vcxproj delete mode 100644 projects/strgen_vs141.vcxproj.filters delete mode 100644 projects/strgen_vs142.vcxproj delete mode 100644 projects/strgen_vs142.vcxproj.filters delete mode 100644 projects/version_vs140.vcxproj delete mode 100644 projects/version_vs141.vcxproj delete mode 100644 projects/version_vs142.vcxproj delete mode 100644 source.list diff --git a/Makefile.bundle.in b/Makefile.bundle.in deleted file mode 100644 index 276307c33e..0000000000 --- a/Makefile.bundle.in +++ /dev/null @@ -1,221 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -# -# Creation of bundles -# - -# The revision is needed for the bundle name and creating an OSX application bundle. -# Detect the revision -VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") -VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') - -# Make sure we have something in VERSION -ifeq ($(VERSION),) -VERSION := norev000 -endif - -ifndef BUNDLE_NAME -BUNDLE_NAME = openttd-custom-$(VERSION)-$(OS) -endif - -# An OSX application bundle needs the data files, lang files and openttd executable in a different location. -ifdef OSXAPP -AI_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/ai -GAME_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/game -BASESET_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/baseset -LANG_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/lang -TTD_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/MacOS -else -AI_DIR = $(BUNDLE_DIR)/ai -GAME_DIR = $(BUNDLE_DIR)/game -BASESET_DIR = $(BUNDLE_DIR)/baseset -LANG_DIR = $(BUNDLE_DIR)/lang -TTD_DIR = $(BUNDLE_DIR) -endif - -bundle: all - @echo '[BUNDLE] Constructing bundle' - $(Q)rm -rf "$(BUNDLE_DIR)" - $(Q)mkdir -p "$(BUNDLE_DIR)" - $(Q)mkdir -p "$(BUNDLE_DIR)/docs" - $(Q)mkdir -p "$(BUNDLE_DIR)/media" - $(Q)mkdir -p "$(BUNDLE_DIR)/scripts" - $(Q)mkdir -p "$(TTD_DIR)" - $(Q)mkdir -p "$(AI_DIR)" - $(Q)mkdir -p "$(GAME_DIR)" - $(Q)mkdir -p "$(BASESET_DIR)" - $(Q)mkdir -p "$(LANG_DIR)" -ifdef OSXAPP - $(Q)mkdir -p "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources" - $(Q)echo "APPL????" > "$(BUNDLE_DIR)/$(OSXAPP)/Contents/PkgInfo" - $(Q)cp "$(ROOT_DIR)/os/macosx/openttd.icns" "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/openttd.icns" - $(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(VERSION)" - $(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(BASESET_DIR)" -endif -ifeq ($(OS),UNIX) - $(Q)cp "$(ROOT_DIR)/media/openttd.32.bmp" "$(BASESET_DIR)/" -endif - $(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/" - $(Q)cp "$(BIN_DIR)/ai/"compat_*.nut "$(AI_DIR)/" - $(Q)cp "$(BIN_DIR)/game/"compat_*.nut "$(GAME_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.grf "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.obg "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.obs "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/opntitle.dat" "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.obm "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/" - $(Q)cp "$(ROOT_DIR)/README.md" "$(BUNDLE_DIR)/" - $(Q)cp "$(ROOT_DIR)/COPYING.md" "$(BUNDLE_DIR)/" - $(Q)cp "$(ROOT_DIR)/known-bugs.txt" "$(BUNDLE_DIR)/" - $(Q)cp "$(ROOT_DIR)/docs/multiplayer.md" "$(BUNDLE_DIR)/docs/" - $(Q)cp "$(ROOT_DIR)/changelog.txt" "$(BUNDLE_DIR)/" -ifdef MAN_DIR - $(Q)mkdir -p "$(BUNDLE_DIR)/man/" - $(Q)cp "$(ROOT_DIR)/docs/openttd.6" "$(BUNDLE_DIR)/man/" - $(Q)gzip -9 "$(BUNDLE_DIR)/man/openttd.6" -endif - $(Q)cp "$(ROOT_DIR)/media/openttd.32.xpm" "$(BUNDLE_DIR)/media/" - $(Q)cp "$(ROOT_DIR)/media/openttd."*.png "$(BUNDLE_DIR)/media/" - $(Q)cp "$(BIN_DIR)/scripts/"* "$(BUNDLE_DIR)/scripts/" -ifdef MENU_DIR - $(Q)cp "$(ROOT_DIR)/media/openttd.desktop" "$(BUNDLE_DIR)/media/" - $(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | LC_ALL=C $(SORT) | $(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.filter.awk" >> "$(BUNDLE_DIR)/media/openttd.desktop" - $(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install" -endif -ifeq ($(TTD), openttd.exe) - $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/COPYING.md" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" -endif - -### Packing the current bundle into several compressed file formats ### -# -# Zips & dmgs do not contain a root folder, i.e. they have files in the root of the zip/dmg. -# gzip, bzip2 and lha archives have a root folder, with the same name as the bundle. -# -# One can supply a custom name by adding BUNDLE_NAME:= to the make command. -# -bundle_zip: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).zip' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)cd "$(BUNDLE_DIR)" && zip -r $(shell if test -z "$(VERBOSE)"; then echo '-q'; fi) "$(BUNDLES_DIR)/$(BUNDLE_NAME).zip" . - -bundle_7z: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).7z' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)cd "$(BUNDLE_DIR)" && 7z a "$(BUNDLES_DIR)/$(BUNDLE_NAME).7z" . - -bundle_gzip: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.gz' - $(Q)mkdir -p "$(BUNDLES_DIR)/.gzip/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.gzip/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.gzip" && tar -zc$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.gz" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.gzip" - -bundle_bzip2: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.bz2' - $(Q)mkdir -p "$(BUNDLES_DIR)/.bzip2/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.bzip2/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.bzip2" && tar -jc$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.bz2" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.bzip2" - -bundle_lzma: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.lzma' - $(Q)mkdir -p "$(BUNDLES_DIR)/.lzma/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.lzma/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.lzma" && tar --lzma -c$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.lzma" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.lzma" - -bundle_xz: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.xz' - $(Q)mkdir -p "$(BUNDLES_DIR)/.xz/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.xz/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.xz" && tar --xz -c$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.xz" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.xz" - -bundle_lha: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).lha' - $(Q)mkdir -p "$(BUNDLES_DIR)/.lha/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.lha/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.lha" && lha ao6 "$(BUNDLES_DIR)/$(BUNDLE_NAME).lha" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.lha" - -bundle_dmg: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).dmg' - $(Q)mkdir -p "$(BUNDLES_DIR)/OpenTTD $(VERSION)" - $(Q)cp -R "$(BUNDLE_DIR)/" "$(BUNDLES_DIR)/OpenTTD $(VERSION)" - $(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLES_DIR)/OpenTTD $(VERSION)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg" - $(Q)rm -fr "$(BUNDLES_DIR)/OpenTTD $(VERSION)" - -bundle_exe: all - @echo '[BUNDLE] Creating $(BUNDLE_NAME).exe' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)unix2dos "$(ROOT_DIR)/docs/"* "$(ROOT_DIR)/README.md" "$(ROOT_DIR)/COPYING.md" "$(ROOT_DIR)/changelog.txt" "$(ROOT_DIR)/known-bugs.txt" - $(Q)cd $(ROOT_DIR)/os/windows/installer && makensis.exe //DVERSION_INCLUDE=version_$(PLATFORM).txt install.nsi - $(Q)mv $(ROOT_DIR)/os/windows/installer/*$(PLATFORM).exe "$(BUNDLES_DIR)/$(BUNDLE_NAME).exe" - -ifdef OSXAPP -install: - @echo '[INSTALL] Cannot install the OSX Application Bundle' -else -install: bundle - @echo '[INSTALL] Installing OpenTTD' - $(Q)install -d "$(INSTALL_BINARY_DIR)" - $(Q)install -d "$(INSTALL_ICON_DIR)" - $(Q)install -d "$(INSTALL_DATA_DIR)/ai" - $(Q)install -d "$(INSTALL_DATA_DIR)/game" - $(Q)install -d "$(INSTALL_DATA_DIR)/baseset" - $(Q)install -d "$(INSTALL_DATA_DIR)/lang" - $(Q)install -d "$(INSTALL_DATA_DIR)/scripts" -ifeq ($(TTD), openttd.exe) - $(Q)install -m 755 "$(BUNDLE_DIR)/$(TTD)" "$(INSTALL_BINARY_DIR)/${BINARY_NAME}.exe" -else - $(Q)install -m 755 "$(BUNDLE_DIR)/$(TTD)" "$(INSTALL_BINARY_DIR)/${BINARY_NAME}" -endif - $(Q)install -m 644 "$(BUNDLE_DIR)/lang/"* "$(INSTALL_DATA_DIR)/lang" - $(Q)install -m 644 "$(BUNDLE_DIR)/ai/"* "$(INSTALL_DATA_DIR)/ai" - $(Q)install -m 644 "$(BUNDLE_DIR)/game/"* "$(INSTALL_DATA_DIR)/game" - $(Q)install -m 644 "$(BUNDLE_DIR)/baseset/"* "$(INSTALL_DATA_DIR)/baseset" - $(Q)install -m 644 "$(BUNDLE_DIR)/scripts/"* "$(INSTALL_DATA_DIR)/scripts" -ifndef DO_NOT_INSTALL_DOCS - $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/known-bugs.txt" "$(INSTALL_DOC_DIR)" -endif -ifndef DO_NOT_INSTALL_CHANGELOG - $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/changelog.txt" "$(INSTALL_DOC_DIR)" -endif -ifndef DO_NOT_INSTALL_LICENSE - $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/COPYING.md" "$(INSTALL_DOC_DIR)" -endif - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.32.xpm" "$(INSTALL_ICON_DIR)/${BINARY_NAME}.32.xpm" -ifdef ICON_THEME_DIR - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/16x16/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.16.png" "$(INSTALL_ICON_THEME_DIR)/16x16/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/32x32/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.32.png" "$(INSTALL_ICON_THEME_DIR)/32x32/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/48x48/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.48.png" "$(INSTALL_ICON_THEME_DIR)/48x48/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/64x64/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.64.png" "$(INSTALL_ICON_THEME_DIR)/64x64/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/128x128/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.128.png" "$(INSTALL_ICON_THEME_DIR)/128x128/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/256x256/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.256.png" "$(INSTALL_ICON_THEME_DIR)/256x256/apps/${BINARY_NAME}.png" -else - $(Q)install -m 644 "$(BUNDLE_DIR)/media/"*.png "$(INSTALL_ICON_DIR)" -endif -ifdef MAN_DIR -ifndef DO_NOT_INSTALL_MAN - $(Q)install -d "$(INSTALL_MAN_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/man/openttd.6.gz" "$(INSTALL_MAN_DIR)/${BINARY_NAME}.6.gz" -endif -endif -ifdef MENU_DIR - $(Q)install -d "$(INSTALL_MENU_DIR)" - $(Q)install -m 644 "$(ROOT_DIR)/media/openttd.desktop.install" "$(INSTALL_MENU_DIR)/${BINARY_NAME}.desktop" -endif -endif # OSXAPP diff --git a/Makefile.grf.in b/Makefile.grf.in deleted file mode 100644 index be382d708d..0000000000 --- a/Makefile.grf.in +++ /dev/null @@ -1,116 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . -# -# Building requires GRFCodec. -# -# Recent versions (including sources) can be found at: -# http://www.openttd.org/download-grfcodec -# -# The mercurial repository can be found at: -# http://hg.openttdcoop.org/grfcodec -# - - -ROOT_DIR = !!ROOT_DIR!! -GRF_DIR = $(ROOT_DIR)/media/extra_grf -BASESET_DIR = $(ROOT_DIR)/media/baseset -LANG_DIR = $(ROOT_DIR)/src/lang -BIN_DIR = !!BIN_DIR!!/baseset -OBJS_DIR = !!GRF_OBJS_DIR!! -OS = !!OS!! -STAGE = !!STAGE!! - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -GRFCODEC := !!GRFCODEC!! -NFORENUM := !!NFORENUM!! -CC_BUILD := !!CC_BUILD!! -MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum") - -# Some "should not be changed" settings. -NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo -PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png - -# List of target files. -OBT_FILES := $(BIN_DIR)/orig_dos.obg -OBT_FILES += $(BIN_DIR)/orig_dos_de.obg -OBT_FILES += $(BIN_DIR)/orig_win.obg -OBT_FILES += $(BIN_DIR)/orig_dos.obs -OBT_FILES += $(BIN_DIR)/orig_win.obs -OBT_FILES += $(BIN_DIR)/no_sound.obs -OBT_FILES += $(BIN_DIR)/orig_dos.obm -OBT_FILES += $(BIN_DIR)/orig_win.obm -OBT_FILES += $(BIN_DIR)/no_music.obm -OBT_FILES += $(BIN_DIR)/orig_tto.obm - -# Build the GRF. -all: $(OBT_FILES) -ifdef GRFCODEC -all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf -endif - -$(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt - $(E) '$(STAGE) Collecting baseset translations' - $(Q) cat $^ > $@ - -$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/orig_extra.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk - $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) sed 's/^ORIG_EXTRA.GRF = *[0-9a-f]*$$/ORIG_EXTRA.GRF = '`$(MD5SUM) $(BIN_DIR)/orig_extra.grf | sed 's@ .*@@'`'/' $< > $@.tmp - $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $@.tmp >$@ - $(Q) rm $@.tmp - -$(BIN_DIR)/%.obs: $(BASESET_DIR)/%.obs $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk - $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ - -$(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk - $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ - -# Guard against trying to run GRFCODEC/NFORENUM without either being set. -ifdef GRFCODEC -ifdef NFORENUM - -# Compile extra grf -$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk - $(E) '$(STAGE) Assembling openttd.nfo' - $(Q)-mkdir -p $(OBJS_DIR)/sprites - $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null - $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo - $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo - $(E) '$(STAGE) Compiling openttd.grf' - $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf - $(Q)cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf - -# The copy operation of PNG_FILES is duplicated from the target 'openttd.grf', thus those targets may not run in parallel. -$(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk | $(BIN_DIR)/openttd.grf - $(E) '$(STAGE) Assembling orig_extra.nfo' - $(Q)-mkdir -p $(OBJS_DIR)/sprites - $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null - $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/orig_extra.nfo > $(OBJS_DIR)/sprites/orig_extra.nfo - $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/orig_extra.nfo - $(E) '$(STAGE) Compiling orig_extra.grf' - $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf - $(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf - -endif -endif - -# Clean up temporary files. -clean: - $(Q)rm -f *.bak *.grf $(OBT_FILES) - -# Clean up temporary files -mrproper: clean - $(Q)rm -fr sprites - -.PHONY: all mrproper depend clean diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 38d7f53294..0000000000 --- a/Makefile.in +++ /dev/null @@ -1,185 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = -else - Q = @ -endif - -include Makefile.am - -CONFIG_CACHE_PWD = !!CONFIG_CACHE_PWD!! -CONFIG_CACHE_SOURCE_LIST = !!CONFIG_CACHE_SOURCE_LIST!! -BIN_DIR = !!BIN_DIR!! -ICON_THEME_DIR = !!ICON_THEME_DIR!! -MAN_DIR = !!MAN_DIR!! -MENU_DIR = !!MENU_DIR!! -SRC_DIR = !!SRC_DIR!! -ROOT_DIR = !!ROOT_DIR!! -BUNDLE_DIR = "$(ROOT_DIR)/bundle" -BUNDLES_DIR = "$(ROOT_DIR)/bundles" -INSTALL_DIR = !!INSTALL_DIR!! -INSTALL_BINARY_DIR = "$(INSTALL_DIR)/"!!BINARY_DIR!! -INSTALL_MAN_DIR = "$(INSTALL_DIR)/$(MAN_DIR)" -INSTALL_MENU_DIR = "$(INSTALL_DIR)/$(MENU_DIR)" -INSTALL_ICON_DIR = "$(INSTALL_DIR)/"!!ICON_DIR!! -INSTALL_ICON_THEME_DIR = "$(INSTALL_DIR)/$(ICON_THEME_DIR)" -INSTALL_DATA_DIR = "$(INSTALL_DIR)/"!!DATA_DIR!! -INSTALL_DOC_DIR = "$(INSTALL_DIR)/"!!DOC_DIR!! -SOURCE_LIST = !!SOURCE_LIST!! -CONFIGURE_FILES = !!CONFIGURE_FILES!! -BINARY_NAME = !!BINARY_NAME!! -STRIP = !!STRIP!! -TTD = !!TTD!! -TTDS = $(SRC_DIRS:%=%/$(TTD)) -OS = !!OS!! -OSXAPP = !!OSXAPP!! -LIPO = !!LIPO!! -AWK = !!AWK!! -SORT = !!SORT!! -DISTCC = !!DISTCC!! - -RES := $(shell if [ ! -f $(CONFIG_CACHE_PWD) ] || [ "`pwd`" != "`cat $(CONFIG_CACHE_PWD)`" ]; then echo "`pwd`" > $(CONFIG_CACHE_PWD); fi ) -RES := $(shell if [ ! -f $(CONFIG_CACHE_SOURCE_LIST) ] || [ -n "`cmp $(CONFIG_CACHE_SOURCE_LIST) $(SOURCE_LIST) 2>/dev/null`" ]; then cp $(SOURCE_LIST) $(CONFIG_CACHE_SOURCE_LIST); fi ) - -all: config.pwd config.cache -ifdef DISTCC - @if [ -z "`echo '$(MFLAGS)' | grep '\-j'`" ]; then echo; echo "WARNING: you enabled distcc support, but you don't seem to be using the -jN parameter"; echo; fi -endif - @for dir in $(DIRS); do \ - $(MAKE) -C $$dir all || exit 1; \ - done -ifdef LIPO -# Lipo is an OSX thing. If it is defined, it means we are building for universal, -# and so we have have to combine the binaries into one big binary - -# Remove the last binary made by the last compiled target - $(Q)rm -f $(BIN_DIR)/$(TTD) -# Make all the binaries into one - $(Q)$(LIPO) -create -output $(BIN_DIR)/$(TTD) $(TTDS) -endif - -help: - @echo "Available make commands:" - @echo "" - @echo "Compilation:" - @echo " all compile the executable and the lang files" - @echo " lang compile the lang files only" - @echo "Clean up:" - @echo " clean remove the files generated during compilation" - @echo " mrproper remove the files generated during configuration and compilation" - @echo "Run after compilation:" - @echo " run execute openttd after the compilation" - @echo " run-gdb execute openttd in debug mode after the compilation" - @echo " run-prof execute openttd in profiling mode after the compilation" - @echo "Installation:" - @echo " install install the compiled files and the data-files after the compilation" - @echo " bundle create the base for an installation bundle" - @echo " bundle_zip create the zip installation bundle" - @echo " bundle_gzip create the gzip installation bundle" - @echo " bundle_bzip2 create the bzip2 installation bundle" - @echo " bundle_lha create the lha installation bundle" - @echo " bundle_dmg create the dmg installation bundle" - -config.pwd: $(CONFIG_CACHE_PWD) - $(MAKE) reconfigure - -config.cache: $(CONFIG_CACHE_SOURCE_LIST) $(CONFIGURE_FILES) - $(MAKE) reconfigure - -reconfigure: -ifeq ($(shell if test -f config.cache; then echo 1; fi), 1) - @echo "----------------" - @echo "The system detected that source.list or any configure file is altered." - @echo " Going to reconfigure with last known settings..." - @echo "----------------" -# Make sure we don't lock config.cache - @$(shell cat config.cache | sed 's@\\ @\\\\ @g') || exit 1 - @echo "----------------" - @echo "Reconfig done. Please re-execute make." - @echo "----------------" -else - @echo "----------------" - @echo "Have not found a configuration, please run configure first." - @echo "----------------" - @exit 1 -endif - -clean: - @for dir in $(DIRS); do \ - $(MAKE) -C $$dir clean; \ - done - $(Q)rm -rf $(BUNDLE_TARGET) - -lang: - @for dir in $(LANG_DIRS); do \ - $(MAKE) -C $$dir all; \ - done - -mrproper: - @for dir in $(DIRS); do \ - $(MAKE) -C $$dir mrproper; \ - done -# Don't be tempted to merge these two for loops. Doing that breaks make -# --dry-run, since make has this "feature" that it always runs commands -# containing $(MAKE), even when --dry-run is passed. The objective is of -# course to also get a dry-run of submakes, but make is not smart enough -# to see that a for loop runs both a submake and an actual command. - @for dir in $(DIRS); do \ - rm -f $$dir/Makefile; \ - done - $(Q)rm -rf objs - $(Q)rm -f Makefile Makefile.am Makefile.bundle - $(Q)rm -f media/openttd.desktop media/openttd.desktop.install - $(Q)rm -f $(CONFIG_CACHE_SOURCE_LIST) config.cache config.pwd config.log $(CONFIG_CACHE_PWD) -# directories for bundle generation - $(Q)rm -rf $(BUNDLE_DIR) - $(Q)rm -rf $(BUNDLES_DIR) -# output of profiling - $(Q)rm -f $(BIN_DIR)/gmon.out -# output of generating 'API' documentation - $(Q)rm -rf $(ROOT_DIR)/docs/source - $(Q)rm -rf $(ROOT_DIR)/docs/aidocs - $(Q)rm -rf $(ROOT_DIR)/docs/gamedocs -# directories created by OpenTTD on regression testing - $(Q)rm -rf $(BIN_DIR)/ai/regression/content_download $(BIN_DIR)/ai/regression/save $(BIN_DIR)/ai/regression/scenario -distclean: mrproper - -maintainer-clean: distclean - $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/orig_extra.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm - -depend: - @for dir in $(SRC_DIRS); do \ - $(MAKE) -C $$dir depend; \ - done - -run: all - $(Q)cd !!BIN_DIR!! && ./!!TTD!! $(OPENTTD_ARGS) - -run-gdb: all - $(Q)cd !!BIN_DIR!! && gdb --ex run --args ./!!TTD!! $(OPENTTD_ARGS) - -run-prof: all - $(Q)cd !!BIN_DIR!! && ./!!TTD!! $(OPENTTD_ARGS) && gprof !!TTD!! | less - -regression: all - $(Q)cd !!BIN_DIR!! && sh ai/regression/run.sh -test: regression - -%.o: - @for dir in $(SRC_DIRS); do \ - $(MAKE) -C $$dir $(@:src/%=%); \ - done - -%.lng: - @for dir in $(LANG_DIRS); do \ - $(MAKE) -C $$dir $@; \ - done - -.PHONY: test distclean mrproper clean - -include Makefile.bundle diff --git a/Makefile.lang.in b/Makefile.lang.in deleted file mode 100644 index bce43b8466..0000000000 --- a/Makefile.lang.in +++ /dev/null @@ -1,87 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -STRGEN = !!STRGEN!! -SRC_DIR = !!SRC_DIR!! -LANG_DIR = !!LANG_DIR!! -BIN_DIR = !!BIN_DIR!! -LANGS_SRC = $(shell ls $(LANG_DIR)/*.txt) -LANGS = $(LANGS_SRC:$(LANG_DIR)/%.txt=%.lng) -CXX_BUILD = !!CXX_BUILD!! -CFLAGS_BUILD = !!CFLAGS_BUILD!! -CXXFLAGS_BUILD= !!CXXFLAGS_BUILD!! -LDFLAGS_BUILD = !!LDFLAGS_BUILD!! -STRGEN_FLAGS = !!STRGEN_FLAGS!! -STAGE = !!STAGE!! -LANG_SUPPRESS = !!LANG_SUPPRESS!! -LANG_OBJS_DIR = !!LANG_OBJS_DIR!! - -ifeq ($(LANG_SUPPRESS), yes) -LANG_ERRORS = >/dev/null 2>&1 -endif - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -RES := $(shell mkdir -p $(BIN_DIR)/lang ) - -all: table/strings.h $(LANGS) - -strgen_base.o: $(SRC_DIR)/strgen/strgen_base.cpp $(SRC_DIR)/strgen/strgen.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -strgen.o: $(SRC_DIR)/strgen/strgen.cpp $(SRC_DIR)/strgen/strgen.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -string.o: $(SRC_DIR)/string.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -lang/english.txt: $(LANG_DIR)/english.txt - $(Q)mkdir -p lang - $(Q)cp $(LANG_DIR)/english.txt lang/english.txt - -$(STRGEN): alloc_func.o string.o strgen_base.o strgen.o getoptdata.o - $(E) '$(STAGE) Compiling and Linking $@' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $^ -o $@ - -table/strings.h: lang/english.txt $(STRGEN) - $(E) '$(STAGE) Generating $@' - @mkdir -p table - $(Q)./$(STRGEN) -s $(LANG_DIR) -d table - -$(LANGS): %.lng: $(LANG_DIR)/%.txt $(STRGEN) lang/english.txt - $(E) '$(STAGE) Compiling language $(*F)' - $(Q)./$(STRGEN) $(STRGEN_FLAGS) -s $(LANG_DIR) -d $(LANG_OBJS_DIR) $< $(LANG_ERRORS) && cp $@ $(BIN_DIR)/lang || true # Do not fail all languages when one fails - -depend: - -clean: - $(E) '$(STAGE) Cleaning up language files' - $(Q)rm -f strgen_base.o strgen.o string.o alloc_func.o getoptdata.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* - -mrproper: clean - $(Q)rm -rf $(BIN_DIR)/lang - -%.lng: - @echo '$(STAGE) No such language: $(@:%.lng=%)' - -.PHONY: all mrproper depend clean diff --git a/Makefile.msvc b/Makefile.msvc deleted file mode 100644 index 8070062acf..0000000000 --- a/Makefile.msvc +++ /dev/null @@ -1,45 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -# -# Makefile for creating bundles of MSVC's binaries in the same way as we make -# the zip bundles for ALL other OSes. -# -# Usage: make -f Makefile.msvc PLATFORM=[Win32|x64] BUNDLE_NAME=openttd--win[32|64] -# or make -f Makefile.msvc PLATFORM=[Win32|x64] BUNDLE_NAME=OTTD-win[32|64]-nightly- -# - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = -else - Q = @ -endif - -AWK = "awk" -ROOT_DIR := $(shell pwd) -BIN_DIR = "$(ROOT_DIR)/bin" -SRC_DIR = "$(ROOT_DIR)/src" -BUNDLE_DIR = "$(ROOT_DIR)/bundle" -BUNDLES_DIR = "$(ROOT_DIR)/bundles" -TTD = openttd.exe -PDB = openttd.pdb -MODE = Release -TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@") - -all: - $(Q)cp objs/$(TARGET)/$(MODE)/$(TTD) $(BIN_DIR)/$(TTD) - -include Makefile.bundle.in - -bundle_pdb: - @echo '[BUNDLE] Creating $(BUNDLE_NAME).pdb.xz' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)cp objs/$(TARGET)/Release/$(PDB) $(BUNDLES_DIR)/$(BUNDLE_NAME).pdb - $(Q)xz -9 $(BUNDLES_DIR)/$(BUNDLE_NAME).pdb - -regression: all - $(Q)cp bin/$(TTD) bin/openttd - $(Q)cd bin && sh ai/regression/run.sh diff --git a/Makefile.setting.in b/Makefile.setting.in deleted file mode 100644 index 987a882db1..0000000000 --- a/Makefile.setting.in +++ /dev/null @@ -1,63 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -SETTINGSGEN = !!SETTINGSGEN!! -SRC_DIR = !!SRC_DIR!! -CXX_BUILD = !!CXX_BUILD!! -CFLAGS_BUILD = !!CFLAGS_BUILD!! -CXXFLAGS_BUILD = !!CXXFLAGS_BUILD!! -LDFLAGS_BUILD = !!LDFLAGS_BUILD!! -STAGE = !!STAGE!! -SETTING_OBJS_DIR = !!SETTING_OBJS_DIR!! - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -all: table/settings.h - -settingsgen.o: $(SRC_DIR)/settingsgen/settingsgen.cpp $(SRC_DIR)/string_func.h $(SRC_DIR)/strings_type.h $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/ini_type.h $(SRC_DIR)/core/smallvec_type.hpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -string.o: $(SRC_DIR)/string.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -ini_load.o: $(SRC_DIR)/ini_load.cpp $(SRC_DIR)/core/alloc_func.hpp $(SRC_DIR)/core/mem_func.hpp $(SRC_DIR)/ini_type.h $(SRC_DIR)/string_func.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -$(SETTINGSGEN): alloc_func.o string.o ini_load.o settingsgen.o getoptdata.o - $(E) '$(STAGE) Compiling and Linking $@' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $^ -o $@ - -table/settings.h: $(SETTINGSGEN) $(SRC_DIR)/table/settings.h.preamble $(SRC_DIR)/table/settings.h.postamble $(SRC_DIR)/table/*.ini - $(E) '$(STAGE) Generating $@' - @mkdir -p table - $(Q)./$(SETTINGSGEN) -o table/settings.h -b $(SRC_DIR)/table/settings.h.preamble -a $(SRC_DIR)/table/settings.h.postamble $(SRC_DIR)/table/*.ini - -depend: - -clean: - $(E) '$(STAGE) Cleaning up settings files' - $(Q)rm -f settingsgen.o alloc_func.o getoptdata.o string.o ini_load.o $(SETTINGSGEN) table/settings.h - -mrproper: clean - -.PHONY: all mrproper depend clean diff --git a/Makefile.src.in b/Makefile.src.in deleted file mode 100644 index 6b0fb94020..0000000000 --- a/Makefile.src.in +++ /dev/null @@ -1,295 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -CC_HOST = !!CC_HOST!! -CXX_HOST = !!CXX_HOST!! -CC_BUILD = !!CC_BUILD!! -CXX_BUILD = !!CXX_BUILD!! -WINDRES = !!WINDRES!! -STRIP = !!STRIP!! -CFLAGS = !!CFLAGS!! -CFLAGS_BUILD = !!CFLAGS_BUILD!! -CXXFLAGS = !!CXXFLAGS!! -CXXFLAGS_BUILD = !!CXXFLAGS_BUILD!! -LIBS = !!LIBS!! -LDFLAGS = !!LDFLAGS!! -LDFLAGS_BUILD = !!LDFLAGS_BUILD!! -ROOT_DIR = !!ROOT_DIR!! -BIN_DIR = !!BIN_DIR!! -LANG_DIR = !!LANG_DIR!! -SRC_OBJS_DIR = !!SRC_OBJS_DIR!! -LANG_OBJS_DIR = !!LANG_OBJS_DIR!! -SETTING_OBJS_DIR= !!SETTING_OBJS_DIR!! -SRC_DIR = !!SRC_DIR!! -SCRIPT_SRC_DIR = !!SCRIPT_SRC_DIR!! -MEDIA_DIR = !!MEDIA_DIR!! -TTD = !!TTD!! -STRGEN = !!STRGEN!! -DEPEND = !!DEPEND!! -OS = !!OS!! -STAGE = !!STAGE!! -MAKEDEPEND = !!MAKEDEPEND!! -CFLAGS_MAKEDEP = !!CFLAGS_MAKEDEP!! -SORT = !!SORT!! -AWK = !!AWK!! -CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!! -CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!! -CONFIG_CACHE_SOURCE = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_SOURCE!! -CONFIG_CACHE_VERSION = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_VERSION!! - -OBJS_C := !!OBJS_C!! -OBJS_CPP := !!OBJS_CPP!! -OBJS_MM := !!OBJS_MM!! -OBJS_RC := !!OBJS_RC!! -OBJS := $(OBJS_C) $(OBJS_CPP) $(OBJS_MM) $(OBJS_RC) -SRCS := !!SRCS!! - -# All C-files depend on those 3 files -FILE_DEP := $(CONFIG_CACHE_COMPILER) -# Create all dirs and subdirs -RES := $(shell mkdir -p $(BIN_DIR) $(sort $(dir $(OBJS)))) - -CFLAGS += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR) -CFLAGS_MAKEDEP += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR) -ifdef SCRIPT_SRC_DIR - CFLAGS_MAKEDEP += -I $(SCRIPT_SRC_DIR) -endif - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -# Our default target -all: $(BIN_DIR)/$(TTD) - -# This are 2 rules that are pointing back to STRGEN stuff. -# There is not really a need to have them here, but in case -# some weirdo wants to run 'make' in the 'src' dir and expects -# the languages to be recompiled, this catches that case and -# takes care of it nicely. -$(LANG_OBJS_DIR)/$(STRGEN): - $(MAKE) -C $(LANG_OBJS_DIR) $(STRGEN) - -$(LANG_OBJS_DIR)/table/strings.h: $(LANG_DIR)/english.txt $(LANG_OBJS_DIR)/$(STRGEN) - $(MAKE) -C $(LANG_OBJS_DIR) table/strings.h - -# Always run version detection, so we always have an accurate modified -# flag -VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") -MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') - -# Use autodetected revisions -VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') -ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') -GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ') -ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ') -ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ') -YEAR := $(shell echo "$(VERSIONS)" | cut -f 7 -d' ') - -# Make sure we have something in VERSION and ISODATE -ifeq ($(VERSION),) -VERSION := norev000 -endif -ifeq ($(ISODATE),) -ISODATE := 00000000 -endif - -# This helps to recompile if flags change -RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CFLAGS) $(CXXFLAGS)" ]; then echo "$(CFLAGS) $(CXXFLAGS)" > $(CONFIG_CACHE_COMPILER); fi ) -RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi ) - -# If there is a change in the source-file-list, make sure we recheck the deps -RES := $(shell if [ "`cat $(CONFIG_CACHE_SOURCE) 2>/dev/null`" != "$(SRCS)" ]; then echo "$(SRCS)" > $(CONFIG_CACHE_SOURCE); fi ) -# If there is a change in the revision, make sure we recompile rev.cpp -RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(VERSION) $(MODIFIED)" ]; then echo "$(VERSION) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi ) - -ifndef MAKEDEPEND -# The slow, but always correct, dep-check -DEP_MASK := %.d -DEPS := $(OBJS:%.o=%.d) - -# Only include the deps if we are compiling everything -ifeq ($(filter %.o clean mrproper, $(MAKECMDGOALS)),) --include $(DEPS) -else -# In case we want to compile a single target, include the .d file for it -ifneq ($(filter %.o, $(MAKECMDGOALS)),) -SINGLE_DEP := $(filter %.o, $(MAKECMDGOALS)) --include $(SINGLE_DEP:%.o=%.d) -endif -endif - -# Find the deps via GCC. Rarely wrong, but a bit slow - -$(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)' - $(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ - -$(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ - -$(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ - -$(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.rc=%.rc)' - $(Q)touch $@ - -else -# The much faster, but can be wrong, dep-check -DEP_MASK := -DEPS := Makefile.dep - -# Only include the deps if we are not cleaning -ifeq ($(filter depend clean mrproper, $(MAKECMDGOALS)),) --include Makefile.dep -endif - -ifeq ("$(SRC_OBJS_DIR)/$(DEPEND)","$(MAKEDEPEND)") -DEP := $(MAKEDEPEND) -$(SRC_OBJS_DIR)/$(DEPEND): $(SRC_DIR)/depend/depend.cpp - $(E) '$(STAGE) Compiling and linking $(DEPEND)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) -o $@ $< -endif - -# Macro for invoking a command on groups of 100 words at a time -# (analogous to xargs(1)). The macro invokes itself recursively -# until the list of words is depleted. -# -# Usage: $(call xargs,COMMAND,LIST) -# -# COMMAND should be a shell command to which the words will be -# appended as arguments in groups of 100. -define xargs -$(1) $(wordlist 1,100,$(2)) -$(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) -endef - -# Make sure that only 'make depend' ALWAYS triggers a recheck -ifeq ($(filter depend, $(MAKECMDGOALS)),) -Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) $(DEP) -else -Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(DEP) FORCE -endif - $(E) '$(STAGE) DEP CHECK (all files)' - $(Q)rm -f Makefile.dep.tmp - $(Q)touch Makefile.dep.tmp - -# Calculate the deps via makedepend - $(call xargs,$(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -a -- $(CFLAGS_MAKEDEP) -- 2>/dev/null,$(SRCS:%=$(SRC_DIR)/%)) - -# Remove all comments and includes that don't start with $(SRC_DIR) -# Remove $(SRC_DIR) from object-file-name - @$(AWK) ' \ - /^# DO NOT/ { print $$0 ; next} \ - /^#/ {next} \ - /: / { \ - left = NF - 1; \ - for (n = 2; n <= NF; n++) { \ - if (match($$n, "^$(ROOT_DIR)") == 0) { \ - $$n = ""; \ - left--; \ - } \ - } \ - gsub("$(SRC_DIR)/", "", $$1); \ - if (left > 0) { \ - print $$0; \ - $$1 = "Makefile.dep:"; \ - print $$0; \ - } \ - next \ - } \ - { \ - print $$0 \ - } \ - ' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | LC_ALL=C $(SORT) > Makefile.dep - - $(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak - -endif - -# Avoid problems with deps if a .h/.hpp/.hpp.sq file is deleted without the deps -# being updated. Now the Makefile continues, the deps are recreated -# and all will be fine. -%.h %.hpp %.hpp.sq: - @true - - -# Compile all the files according to the targets - -$(OBJS_C): %.o: $(SRC_DIR)/%.c $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.c=%.c)' - $(Q)$(CC_HOST) $(CFLAGS) -c -o $@ $< - -$(filter-out %sse2.o, $(filter-out %ssse3.o, $(filter-out %sse4.o, $(OBJS_CPP)))): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -o $@ $< - -$(filter %sse2.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -msse2 -o $@ $< - -$(filter %ssse3.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -mssse3 -o $@ $< - -$(filter %sse4.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -msse4.1 -o $@ $< - -$(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.mm=%.mm)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -o $@ $< - -$(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) - $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' - $(Q)$(WINDRES) -o $@ $< - -$(BIN_DIR)/$(TTD): $(TTD) - $(Q)cp $(TTD) $(BIN_DIR)/$(TTD) -ifeq ($(OS), UNIX) - $(Q)cp $(MEDIA_DIR)/openttd.32.bmp $(BIN_DIR)/baseset/ -endif -ifeq ($(OS), OSX) - $(Q)cp $(ROOT_DIR)/os/macosx/splash.png $(BIN_DIR)/baseset/ -endif - -$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER) - $(E) '$(STAGE) Linking $@' - $(Q)+$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ -ifdef STRIP - $(Q)$(STRIP) $@ -endif - -# Revision files - -$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/rev.cpp - -$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/os/windows/ottdres.rc - -FORCE: - -depend: $(DEPS) - -clean: - $(E) '$(STAGE) Cleaning up object files' - $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(DEPEND) $(TTD:%=$(BIN_DIR)/%) $(BIN_DIR)/baseset/openttd.32.bmp $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_SOURCE) - -mrproper: clean - $(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc - -%.o: - @echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|mm|rc]' - -.PHONY: all mrproper depend clean FORCE diff --git a/config.lib b/config.lib deleted file mode 100644 index 304b86e485..0000000000 --- a/config.lib +++ /dev/null @@ -1,3508 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -log() { - if [ $1 = "1" ]; then - shift - echo "$@" - else - shift - fi - echo "$@" >> $config_log -} - -set_default() { - ignore_extra_parameters="0" - # We set all kinds of defaults for params. Later on the user can override - # most of them; but if they don't, this default is used. - build="" - host="" - cc_build="" - cc_host="" - cxx_build="" - cxx_host="" - windres="" - strip="" - lipo="" - awk="awk" - pkg_config="pkg-config" - os="DETECT" - cpu_type="DETECT" - config_log="config.log" - prefix_dir="/usr/local" - binary_dir="games" - data_dir="share/games/openttd" - doc_dir="1" - icon_dir="share/pixmaps" - icon_theme_dir="1" - personal_dir="1" - shared_dir="1" - install_dir="/" - man_dir="1" - menu_dir="1" - menu_group="Game;" - menu_name="OpenTTD" - binary_name="openttd" - enable_debug="0" - enable_desync_debug="0" - enable_profiling="0" - enable_lto="0" - enable_dedicated="0" - enable_static="1" - enable_translator="0" - enable_unicode="1" - enable_console="1"; - enable_assert="1" - enable_strip="0" - enable_universal="0" - enable_osx_g5="0" - enable_cocoa_quartz="1" - with_osx_sysroot="1" - with_application_bundle="1" - with_menu_entry="1" - with_allegro="1" - with_sdl="1" - with_cocoa="1" - with_zlib="1" - with_lzma="1" - with_lzo2="1" - with_xdg_basedir="1" - with_png="1" - enable_builtin_depend="1" - with_makedepend="0" - with_direct_music="1" - with_xaudio2="1" - with_sort="1" - with_iconv="1" - with_midi="" - with_midi_arg="" - with_fluidsynth="1" - with_freetype="1" - with_fontconfig="1" - with_icu_layout="1" - with_icu_sort="1" - static_icu="0" - with_uniscribe="1" - with_threads="1" - with_distcc="1" - with_ccache="1" - with_nforenum="1" - with_grfcodec="1" - with_sse="1" - - save_params_array=" - build - host - cc_build - cc_host - cxx_build - cxx_host - windres - strip - lipo - awk - pkg_config - os - cpu_type - config_log - prefix_dir - binary_dir - data_dir - doc_dir - icon_dir - icon_theme_dir - man_dir - menu_dir - personal_dir - shared_dir - install_dir - menu_group - menu_name - binary_name - enable_debug - enable_desync_debug - enable_profiling - enable_lto - enable_dedicated - enable_static - enable_translator - enable_unicode - enable_console - enable_assert - enable_strip - enable_universal - enable_osx_g5 - enable_cocoa_quartz - with_osx_sysroot - with_application_bundle - with_allegro - with_sdl - with_cocoa - with_zlib - with_lzma - with_lzo2 - with_xdg_basedir - with_png - enable_builtin_depend - with_makedepend - with_direct_music - with_xaudio2 - with_sort - with_iconv - with_midi - with_midi_arg - with_fluidsynth - with_freetype - with_fontconfig - with_icu_layout - with_icu_sort - static_icu - with_uniscribe - with_threads - with_distcc - with_ccache - with_grfcodec - with_nforenum - with_sse - CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD PKG_CONFIG_PATH PKG_CONFIG_LIBDIR" -} - -detect_params() { - # Walk over all params from the user and override any default settings if - # needed. This also handles any invalid option. - for p in "$@"; do - if [ -n "$prev_p" ]; then - eval "$prev_p=\$p" - prev_p= - continue - fi - - optarg=`expr "x$p" : 'x[^=]*=\(.*\)'` - - case "$p" in - --help | -h | -\?) showhelp; exit 0;; - - --config-log) prev_p="config_log";; - --config-log=*) config_log="$optarg";; - - --build) prev_p="build";; - --build=*) build="$optarg";; - - --host) prev_p="host";; - --host=*) host="$optarg";; - - --os) prev_p="os";; - --os=*) os="$optarg";; - - --cpu-type) prev_p="cpu_type";; - --cpu-type=*) cpu_type="$optarg";; - - --cc-build) prev_p="cc_build";; - --cc-build=*) cc_build="$optarg";; - --cc-host) prev_p="cc_host";; - --cc-host=*) cc_host="$optarg";; - --cxx-build) prev_p="cxx_build";; - --cxx-build=*) cxx_build="$optarg";; - --cxx-host) prev_p="cxx_host";; - --cxx-host=*) cxx_host="$optarg";; - --windres) prev_p="windres";; - --windres=*) windres="$optarg";; - --awk) prev_p="awk";; - --awk=*) awk="$optarg";; - --pkg-config) prev_p="pkg_config";; - --pkg-config=*) pkg_config="$optarg";; - --strip) prev_p="strip";; - --strip=*) strip="$optarg";; - --lipo) prev_p="lipo";; - --lipo=*) lipo="$optarg";; - - - - # Alias --prefix with --prefix-dir, for compatibility with GNU autotools - --prefix-dir | --prefix) prev_p="prefix_dir";; - --prefix-dir=* | --prefix=*) prefix_dir="$optarg";; - - --binary-dir) prev_p="binary_dir";; - --binary-dir=*) binary_dir="$optarg";; - - --data-dir) prev_p="data_dir";; - --data-dir=*) data_dir="$optarg";; - - --doc-dir) prev_p="doc_dir";; - --doc-dir=*) doc_dir="$optarg";; - - --icon-dir) prev_p="icon_dir";; - --icon-dir=*) icon_dir="$optarg";; - - --icon-theme-dir) prev_p="icon_theme_dir";; - --icon-theme-dir=*) icon_theme_dir="$optarg";; - --without-icon-theme) icon_theme_dir="";; - - --menu-dir) prev_p="menu_dir";; - --menu-dir=*) menu_dir="$optarg";; - --without-menu-entry) menu_dir="";; - - --menu-name) prev_p="menu_name";; - --menu-name=*) menu_name="$optarg";; - - --binary-name) prev_p="binary_name";; - --binary-name=*) binary_name="$optarg";; - - --man-dir) prev_p="man_dir";; - --man-dir=*) man_dir="$optarg";; - - --personal-dir) prev_p="personal_dir";; - --personal-dir=*) personal_dir="$optarg";; - --without-personal-dir) personal_dir="";; - - --shared-dir) prev_p="shared_dir";; - --shared-dir=*) shared_dir="$optarg";; - --without-shared-dir) shared_dir="";; - - --install-dir) prev_p="install_dir";; - --install-dir=*) install_dir="$optarg";; - - - - --menu-group) prev_p="menu_group";; - --menu-group=*) menu_group="$optarg";; - - - - --enable-debug) enable_debug="1";; - --enable-debug=*) enable_debug="$optarg";; - --enable-desync-debug) enable_desync_debug="1";; - --enable-desync-debug=*) enable_desync_debug="$optarg";; - --enable-profiling) enable_profiling="1";; - --enable-profiling=*) enable_profiling="$optarg";; - --enable-lto) enable_lto="1";; - --enable-lto=*) enable_lto="$optarg";; - --enable-ipo) enable_lto="1";; - --enable-ipo=*) enable_lto="$optarg";; - --enable-dedicated) enable_dedicated="1";; - --enable-dedicated=*) enable_dedicated="$optarg";; - --disable-static) enable_static="0";; - --enable-static) enable_static="2";; - --enable-static=*) enable_static="$optarg";; - --disable-translator) enable_translator="0";; - --enable-translator) enable_translator="2";; - --enable-translator=*) enable_translator="$optarg";; - --disable-assert) enable_assert="0";; - --enable-assert) enable_assert="2";; - --enable-assert=*) enable_assert="$optarg";; - --disable-strip) enable_strip="0";; - --enable-strip) enable_strip="2";; - --enable-strip=*) enable_strip="$optarg";; - --disable-universal) enable_universal="0";; - --enable-universal) enable_universal="i386 ppc";; - --enable-universal=*) enable_universal="$optarg";; - --disable-osx-g5) enable_osx_g5="0";; - --enable-osx-g5) enable_osx_g5="2";; - --enable-osx-g5=*) enable_osx_g5="$optarg";; - --disable-unicode) enable_unicode="0";; - --enable-unicode) enable_unicode="2";; - --enable-unicode=*) enable_unicode="$optarg";; - --disable-console) enable_console="0";; - --enable-console) enable_console="2";; - --enable-console=*) enable_console="$optarg";; - - --disable-cocoa-quartz) enable_cocoa_quartz="0";; - --enable-cocoa-quartz) enable_cocoa_quartz="2";; - --enable-cocoa-quartz=*) enable_cocoa_quartz="$optarg";; - - --with-allegro) with_allegro="2";; - --without-allegro) with_allegro="0";; - --with-allegro=*) with_allegro="$optarg";; - - --with-sdl) with_sdl="2";; - --without-sdl) with_sdl="0";; - --with-sdl=*) with_sdl="$optarg";; - - --with-cocoa) with_cocoa="2";; - --without-cocoa) with_cocoa="0";; - --with-cocoa=*) with_cocoa="$optarg";; - - --with-zlib) with_zlib="2";; - --without-zlib) with_zlib="0";; - --with-zlib=*) with_zlib="$optarg";; - - --with-lzma) with_lzma="2";; - --without-lzma) with_lzma="0";; - --with-lzma=*) with_lzma="$optarg";; - --with-liblzma) with_lzma="2";; - --without-liblzma) with_lzma="0";; - --with-liblzma=*) with_lzma="$optarg";; - - --with-lzo2) with_lzo2="2";; - --without-lzo2) with_lzo2="0";; - --with-lzo2=*) with_lzo2="$optarg";; - --with-liblzo2) with_lzo2="2";; - --without-liblzo2) with_lzo2="0";; - --with-liblzo2=*) with_lzo2="$optarg";; - - --with-xdg-basedir) with_xdg_basedir="2";; - --without-xdg-basedir) with_xdg_basedir="0";; - --with-xdg-basedir=*) with_xdg_basedir="$optarg";; - --with-libxdg-basedir) with_xdg_basedir="2";; - --without-libxdg-basedir) with_xdg_basedir="0";; - --with-libxdg-basedir=*) with_xdg_basedir="$optarg";; - - --with-png) with_png="2";; - --without-png) with_png="0";; - --with-png=*) with_png="$optarg";; - --with-libpng) with_png="2";; - --without-libpng) with_png="0";; - --with-libpng=*) with_png="$optarg";; - - --with-fluidsynth) with_fluidsynth="2";; - --without-fluidsynth) with_fluidsynth="0";; - --with-fluidsynth=*) with_fluidsynth="$optarg";; - - --with-freetype) with_freetype="2";; - --without-freetype) with_freetype="0";; - --with-freetype=*) with_freetype="$optarg";; - --with-libfreetype) with_freetype="2";; - --without-libfreetype) with_freetype="0";; - --with-libfreetype=*) with_freetype="$optarg";; - - --with-fontconfig) with_fontconfig="2";; - --without-fontconfig) with_fontconfig="0";; - --with-fontconfig=*) with_fontconfig="$optarg";; - --with-libfontconfig) with_fontconfig="2";; - --without-libfontconfig) with_fontconfig="0";; - --with-libfontconfig=*) with_fontconfig="$optarg";; - - --with-icu) with_icu_layout="2";with_icu_sort="2";; - --without-icu) with_icu_layout="0";with_icu_sort="0";; - --with-icu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";; - --with-libicu) with_icu_layout="2";with_icu_sort="2";; - --without-libicu) with_icu_layout="0";with_icu_sort="0";; - --with-libicu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";; - --with-icu-layout) with_icu_layout="2";; - --without-icu-layout) with_icu_layout="0";; - --with-icu-layout=*) with_icu_layout="$optarg";; - --with-icu-sort) with_icu_sort="2";; - --without-icu-sort) with_icu_sort="0";; - --with-icu-sort=*) with_icu_sort="$optarg";; - --static-icu) static_icu="1";; - --static-icu=*) static_icu="$optarg";; - --static-libicu) static_icu="1";; - --static-libicu=*) static_icu="$optarg";; - - --with-uniscribe) with_uniscribe="2";; - --without-uniscribe) with_uniscribe="0";; - --with-uniscribe=*) with_uniscribe="$optarg";; - - --disable-builtin-depend) enable_builtin_depend="0";; - --enable-builtin-depend) enable_builtin_depend="2";; - --enable-builtin-depend=*) enable_builtin_depend="$optarg";; - - --with-makedepend) with_makedepend="2";; - --without-makedepend) with_makedepend="0";; - --with-makedepend=*) with_makedepend="$optarg";; - - --with-direct-music) with_direct_music="2";; - --without-direct-music) with_direct_music="0";; - --with-direct-music=*) with_direct_music="$optarg";; - - --with-xaudio2) with_xaudio2="2";; - --without-xaudio2) with_xaudio2="0";; - --with-xaudio2=*) with_xaudio2="$optarg";; - - --with-sort) with_sort="2";; - --without-sort) with_sort="0";; - --with-sort=*) with_sort="$optarg";; - - --with-iconv) with_iconv="2";; - --without-iconv) with_iconv="0";; - --with-iconv=*) with_iconv="$optarg";; - - --with-midi=*) with_midi="$optarg";; - --with-midi-arg=*) with_midi_arg="$optarg";; - - --without-distcc) with_distcc="0";; - --with-distcc) with_distcc="2";; - --with-distcc=*) with_distcc="$optarg";; - - --without-ccache) with_ccache="0";; - --with-ccache) with_ccache="2";; - --with-ccache=*) with_ccache="$optarg";; - - --without-nforenum) with_nforenum="0";; - --with-nforenum) with_nforenum="2";; - --with-nforenum=*) with_nforenum="$optarg";; - - --without-grfcodec) with_grfcodec="0";; - --with-grfcodec) with_grfcodec="2";; - --with-grfcodec=*) with_grfcodec="$optarg";; - - --without-osx-sysroot) with_osx_sysroot="0";; - --with-osx-sysroot) with_osx_sysroot="2";; - --with-osx-sysroot=*) with_osx_sysroot="$optarg";; - - --without-application-bundle) with_application_bundle="0";; - --with-application-bundle) with_application_bundle="1";; - --with-application-bundle=*) with_application_bundle="$optarg";; - - --without-threads) with_threads="0";; - --with-threads) with_threads="1";; - --with-threads=*) with_threads="$optarg";; - - --without-sse) with_sse="0";; - --with-sse) with_sse="1";; - --with-sse=*) with_sse="$optarg";; - - CC=* | --CC=*) CC="$optarg";; - CXX=* | --CXX=*) CXX="$optarg";; - CFLAGS=* | --CFLAGS=*) CFLAGS="$optarg";; - CXXFLAGS=* | --CXXFLAGS=*) CXXFLAGS="$optarg";; - LDFLAGS=* | --LDFLAGS=*) LDFLAGS="$optarg";; - CFLAGS_BUILD=* | --CFLAGS_BUILD=* | --CFLAGS-BUILD=*) CFLAGS_BUILD="$optarg";; - CXXFLAGS_BUILD=* | --CXXFLAGS_BUILD=* | --CXXFLAGS-BUILD=*) CXXFLAGS_BUILD="$optarg";; - LDFLAGS_BUILD=* | --LDFLAGS_BUILD=* | --LDFLAGS-BUILD=*) LDFLAGS_BUILD="$optarg";; - PKG_CONFIG_PATH=* | --PKG_CONFIG_PATH=* | --PKG-CONFIG-PATH=*) PKG_CONFIG_PATH="$optarg";; - PKG_CONFIG_LIBDIR=* | --PKG_CONFIG_LIBDIR=* | --PKG-CONFIG-LIBDIR=*) PKG_CONFIG_LIBDIR="$optarg";; - - --ignore-extra-parameters) ignore_extra_parameters="1";; - - --* | -*) - if [ "$ignore_extra_parameters" = "0" ]; then - log 1 "Unknown option $p" - exit 1 - else - log 1 "Unknown option $p ignored" - fi - ;; - esac - done - - if [ -n "$prev_p" ]; then - log 1 "configure: error: missing argument to --$prev_p" - exit 1 - fi - - # Clean the logfile - echo "" > $config_log - log 2 "Invocation: $0 $*" -} - -save_params() { - # Here we save all params, so we can later on do an exact redo of this - # configuration, without having the user to re-input stuff - - echo "Running configure with following options:" >> $config_log - echo "" >> $config_log - - configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters" - for p in $save_params_array; do - eval "v=\"\$$p\"" - p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'` - # Only save those params that aren't empty - configure="$configure --$p=\"$v\"" - done - - echo "$configure" >> $config_log - echo "$configure" > config.cache - echo "" >> $config_log -} - -# Export a variable so tools like pkg-config can see it when invoked. -# If the variable contains an empty string then unset it. -# $1 - name of the variable to export or unset -export_or_unset() { - eval local value=\$$1 - if [ -n "$value" ]; then - export $1; - log 2 "using $1=$value"; - else - unset $1; - log 2 "not using $1"; - fi -} - -check_params() { - # Some params want to be in full uppercase, else they might not work as - # expected.. fix that here - - os=`echo $os | tr '[a-z]' '[A-Z]'` - cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'` - - # Export some variables to be used by pkg-config - # - # PKG_CONFIG_LIBDIR variable mustn't be set if we are not willing to - # override the default pkg-config search path, it mustn't be an empty - # string. If the variable is empty (e.g. when an empty string comes - # from config.cache) then unset it. This way the "don't override" state - # will be properly preserved when (re)configuring. - export_or_unset PKG_CONFIG_PATH - export_or_unset PKG_CONFIG_LIBDIR - - # Check if all params have valid values - - # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, and OS2 - if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2)$'`" ]; then - log 1 "configure: error: invalid option --os=$os" - log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2]" - exit 1 - fi - # cpu_type can be either 32 or 64 - if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then - log 1 "configure: error: invalid option --cpu-type=$cpu_type" - log 1 " Available options are: --cpu-type[=DETECT|32|64]" - exit 1 - fi - # enable_debug should be between 0 and 4 - if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then - log 1 "configure: error: invalid option --enable-debug=$enable_debug" - log 1 " Available options are: --enable-debug[=0123]" - exit 1 - fi - - # enable_desync_debug should be between 0 and 3 - if [ -z "`echo $enable_desync_debug | egrep '^[012]$'`" ]; then - log 1 "configure: error: invalid option --enable-desync-debug=$enable_desync_debug" - log 1 " Available options are: --enable-desync-debug[=012]" - exit 1 - fi - - detect_awk - - detect_os - - check_build - check_host - - # Check for universal builds; they only make sense for OSX, so fail if enabled for another OS - if [ "$enable_universal" = "0" ]; then - log 1 "checking universal build... no" - else - if [ "$os" != "OSX" ]; then - log 1 "configure: error: --enable-universal only works on OSX" - exit 1 - fi - log 1 "checking universal build... yes, for: $enable_universal" - fi - - # Already detected by check_build - log 1 "checking build cc... $cc_build" - log 1 "checking host cc... $cc_host" - - check_cxx_build - check_cxx_host - check_windres - if [ "$enable_strip" != "0" ]; then - check_strip - else - log 1 "checking strip... disabled" - fi - check_lipo - - if [ "$enable_builtin_depend" != "0" ]; then - log 1 "checking builtin depend... yes" - makedepend="\$(SRC_OBJS_DIR)/\$(DEPEND)" - else - log 1 "checking builtin depend... no" - fi - - check_makedepend - detect_cputype - detect_sse_capable_architecture - - if [ "$enable_static" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - enable_static="2" - else - enable_static="0" - fi - fi - - if [ "$enable_static" != "0" ]; then - log 1 "checking static... yes" - - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ]; then - log 1 "WARNING: static is only known to work on Windows, and MacOSX" - log 1 "WARNING: use static at your own risk on this platform" - - sleep 5 - fi - else - log 1 "checking static... no" - fi - - if [ "$enable_unicode" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - enable_unicode="2" - else - enable_unicode="0" - fi - fi - - if [ "$enable_unicode" != "0" ]; then - log 1 "checking unicode... yes" - else - log 1 "checking unicode... no" - fi - - # Show what we configured - if [ "$enable_debug" = "0" ]; then - log 1 "using debug level... no" - elif [ "$enable_profiling" != "0" ]; then - log 1 "using debug level... profiling (debug level $enable_debug)" - else - log 1 "using debug level... level $enable_debug" - fi - - if [ "$enable_desync_debug" = "0" ]; then - log 1 "using desync debug level... no" - else - log 1 "using desync debug level... level $enable_desync_debug" - log 1 "WARNING: desync debug functions slow down the game considerably." - log 1 "WARNING: use only when you are instructed to do so" - log 1 " or when you know what you are doing." - - sleep 5 - fi - - if [ "$enable_lto" != "0" ]; then - # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}' - has_lto=`($cxx_build -dumpspecs 2>&1 | grep '\%{flto') || ($cxx_build -help ipo 2>&1 | grep '\-ipo')` - if [ -n "$has_lto" ]; then - log 1 "using link time optimization... yes" - else - enable_lto="0" - log 1 "using link time optimization... no" - log 1 "WARNING: you selected link time optimization but it is not found." - sleep 5 - fi - else - log 1 "using link time optimization... no" - fi - - - if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then - if [ "$with_osx_sysroot" = "1" ]; then - with_osx_sysroot="0" - - log 1 "checking OSX sysroot... not OSX, skipping" - else - log 1 "configure: error: --with-osx-sysroot only works if OSX is the target" - exit 1 - fi - fi - - if [ "$with_osx_sysroot" != "0" ]; then - if [ "$enable_universal" = "0" ] && [ "$with_osx_sysroot" != "1" ] && [ "$with_osx_sysroot" != "2" ]; then - # Sysroot manually specified? Check for usability - log 1 "checking OSX sysroot... $with_osx_sysroot" - if ! check_osx_sdk "$with_osx_sysroot"; then - log 1 "Passed sysroot not found/not functional" - exit 1 - fi - else - # If autodetect and no universal, use system default - if [ "$with_osx_sysroot" = "1" ] && [ "$enable_universal" = "0" ]; then - log 1 "checking OSX sysroot... no (use system default)" - else - log 1 "checking OSX sysroot... automatically" - detect_osx_sdk - fi - fi - - if [ -n "$osx_sdk_path" ]; then - if [ "$enable_universal" != "0" ]; then - if [ -z "$osx_sdk_104_path" ]; then - log 1 "WARNING: Could not find a usable 10.4u SDK, the resulting" - log 1 "WARNING: binary will only run on OSX 10.5 or later" - osx_sdk_104_path="$osx_sdk_path" - fi - OSX_SYSROOT="-isysroot $osx_sdk_104_path" - OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_104_path" - else - OSX_SYSROOT="-isysroot $osx_sdk_path" - OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_path" - fi - fi - else - if [ "$os" = "OSX" ]; then - log 1 "checking OSX sysroot... no (use system default)" - fi - fi - - detect_allegro - detect_sdl - detect_cocoa - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking GDI video driver... dedicated server, skipping" - log 1 "checking dedicated... found" - else - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - log 1 "checking GDI video driver... found" - else - log 1 "checking GDI video driver... not Windows, skipping" - fi - - if [ -z "$allegro_config" ] && [ -z "$sdl2_config" ] && [ -z "$sdl_config" ] && [ "$with_cocoa" = 0 ] && [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - log 1 "configure: error: no video driver development files found" - log 1 " If you want a dedicated server use --enable-dedicated as parameter" - exit 1 - else - log 1 "checking dedicated... not selected" - fi - fi - - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - log 1 "checking console application... not Windows, skipping" - elif [ "$enable_console" = "1" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "checking console application... dedicated server, enabled" - enable_console="2" - elif [ "$enable_console" = "1" ]; then - log 1 "checking console application... disabled (only used when forced)" - enable_console="0" - elif [ "$enable_console" = "0" ]; then - log 1 "checking console application... disabled" - else - log 1 "checking console application... enabled" - fi - - log 1 "checking squirrel... found" - SCRIPT_SRC_DIR="$ROOT_DIR/src/3rdparty/squirrel/include" - - if [ "$enable_translator" != "0" ]; then - log 1 "checking translator... debug" - # -t shows TODO items, normally they are muted - strgen_flags="-t" - else - log 1 "checking translator... no" - strgen_flags="" - fi - - if [ "$enable_assert" != "0" ]; then - log 1 "checking assert... enabled" - else - log 1 "checking assert... disabled" - fi - - pre_detect_with_zlib=$with_zlib - detect_zlib - - if [ "$with_zlib" = "0" ] || [ -z "$zlib_config" ]; then - log 1 "WARNING: zlib was not detected or disabled" - log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features" - log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps," - log 1 "WARNING: using PNG, or using fonts, ...) will be disabled." - if [ "$pre_detect_with_zlib" = "0" ]; then - log 1 "WARNING: We strongly suggest you to install zlib." - else - log 1 "configure: error: no zlib detected" - log 1 " If you want to compile without zlib use --without-zlib as parameter" - exit - fi - fi - - pre_detect_with_lzma=$with_lzma - detect_lzma - - if [ "$with_lzma" = "0" ] || [ -z "$lzma_config" ]; then - log 1 "WARNING: lzma was not detected or disabled" - log 1 "WARNING: OpenTTD doesn't require lzma, but it does mean that many features" - log 1 "WARNING: (like loading most savegames/scenarios and joining most servers)" - log 1 "WARNING: will be disabled." - if [ "$pre_detect_with_lzma" = "0" ]; then - log 1 "WARNING: We strongly suggest you to install liblzma." - log 1 "configure: error: no liblzma detected" - else - log 1 " If you want to compile without lzma use --without-lzma as parameter" - exit - fi - fi - - pre_detect_with_lzo2=$with_lzo2 - detect_lzo2 - - if [ "$with_lzo2" = "0" ] || [ -z "$lzo2" ]; then - log 1 "WARNING: liblzo2 was not detected or disabled" - log 1 "WARNING: OpenTTD doesn't require liblzo2, but it does mean that" - log 1 "WARNING: loading old savegames/scenarios will be disabled." - if [ "$pre_detect_with_lzo2" = "0" ]; then - log 1 "WARNING: We strongly suggest you to install liblzo2." - else - log 1 "configure: error: no liblzo2 detected" - log 1 " If you want to compile without liblzo2 use --without-liblzo2 as parameter" - exit - fi - fi - - if [ "$with_uniscribe" != "0" ]; then - if [ "$os" != "MINGW" ]; then - if [ "$with_uniscribe" != "1" ]; then - log 1 "configure: error: Uniscribe is only supported on native Win32 targets" - exit 1 - fi - with_uniscribe="0" - - log 1 "checking Uniscribe text layout... not Windows, skipping" - else - log 1 "checking Uniscribe text layout... found" - - # Don't use ICU unless forced. - if [ "$with_icu_layout" = "1" ]; then - with_icu_layout="0" - fi - if [ "$with_icu_sort" = "1" ]; then - with_icu_sort="0" - fi - fi - fi - - detect_xdg_basedir - detect_png - detect_freetype - detect_fontconfig - detect_icu_layout - detect_icu_sort - detect_fluidsynth - - if [ "$with_direct_music" != "0" ]; then - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$with_direct_music" != "1" ]; then - log 1 "configure: error: direct-music is only supported on Win32 targets" - exit 1 - fi - with_direct_music="0" - - log 1 "checking direct-music... not Windows, skipping" - else - check_direct_music - fi - fi - - if [ "$with_xaudio2" != "0" ]; then - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$with_xaudio2" != "1" ]; then - log 1 "configure: error: xaudio2 is only supported on Win32 targets" - exit 1 - fi - with_xaudio2="0" - - log 1 "checking xaudio2... not Windows, skipping" - else - check_xaudio2 - fi - fi - - detect_sort - - # Suppress language errors when there is a version defined, indicating a release - # It just isn't pretty if any release produces warnings in the languages. - if [ -f "$ROOT_DIR/version" ]; then - lang_suppress="yes" - log 1 "suppress language errors... yes" - else - lang_suppress="" - log 1 "suppress language errors... no" - fi - - if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then - if [ "$os" = "OSX" ]; then - strip_arg="" - elif [ "$os" = "OS2" ]; then - strip_arg="" - # OS2 uses strip via gcc, because it needs to be feed to emxbind - LDFLAGS="$LDFLAGS -s" - elif [ "$os" = "SUNOS" ]; then - # The GNU strip does know -s, the non-GNU doesn't - # So try to detect it (in a bit of an ugly way) - strip_arg="`$strip -s strip.test 2>/dev/null && echo \"-s\"`" - else - strip_arg="-s" - fi - - log 1 "checking stripping... $strip $strip_arg" - else - strip="" - log 1 "checking stripping... skipped" - fi - - if [ "$with_distcc" = "0" ]; then - log 1 "checking distcc... no" - elif [ "$with_distcc" = "1" ]; then - with_distcc="0" - - log 1 "checking distcc... no (only used when forced)" - elif [ "$with_distcc" = "2" ]; then - distcc="distcc" - else - distcc="$with_distcc" - fi - if [ "$with_distcc" != "0" ]; then - res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 1-6`" - if [ "$res" != "distcc" ]; then - distcc="" - log 1 "checking distcc... no" - if [ "$with_distcc" = "2" ]; then - log 1 "configure: error: no distcc detected, but was forced to be used" - exit 1 - fi - if [ "$with_distcc" != "1" ]; then - log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me" - exit 1 - fi - fi - - log 1 "checking distcc... $distcc" - fi - - if [ "$with_ccache" = "0" ]; then - log 1 "checking ccache... no" - elif [ "$with_ccache" = "1" ]; then - with_ccache="0" - - log 1 "checking ccache... no (only used when forced)" - elif [ "$with_ccache" = "2" ]; then - ccache="ccache" - else - ccache="$with_ccache" - fi - if [ "$with_ccache" != "0" ]; then - res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 1-6`" - if [ "$res" != "ccache" ]; then - ccache="" - log 1 "checking ccache... no" - if [ "$with_ccache" = "2" ]; then - log 1 "configure: error: no ccache detected, but was forced to be used" - exit 1 - fi - if [ "$with_ccache" != "1" ]; then - log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me" - exit 1 - fi - fi - - log 1 "checking ccache... $ccache" - fi - - detect_grfcodec - detect_nforenum - - if [ -z "$grfcodec" ] && [ -n "$nforenum" ]; then - log 1 "checking nforenum/grfcodec... nforenum needs grfcodec enabled, disabling nforenum" - nforenum="" - fi - - if [ -z "$nforenum" ] && [ -n "$grfcodec" ]; then - log 1 "checking nforenum/grfcodec... grfcodec needs nforenum enabled, disabling grfcodec" - grfcodec="" - fi - - if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then - if [ "$with_application_bundle" = "1" ]; then - with_application_bundle="0" - - log 1 "checking OSX application bundle... not OSX, skipping" - else - log 1 "configure: error: --with-application-bundle only works if OSX is the target" - exit 1 - fi - fi - - if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then - OSXAPP="OpenTTD.app" - else - OSXAPP="" - fi - - if [ "$os" = "OSX" ]; then - # Test on ppc970 (G5) - we can optimize there - - if [ "$enable_osx_g5" != "0" ]; then - log 1 "detecting ppc970 (G5)... yes (forced)" - else - # First, are we a real OSX system, else we can't detect it - native=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | grep darwin` - # If $host doesn't match $build , we are cross-compiling - if [ -n "$native" ] && [ "$build" = "$host" ]; then - $cxx_build $SRC_DIR/os/macosx/G5_detector.cpp -o G5_detector - res=`./G5_detector` - rm -f G5_detector - if [ -n "$res" ]; then - # This is G5, add flags for it - enable_osx_g5="2" - - log 1 "detecting ppc970 (G5)... yes" - else - enable_osx_g5="0" - - log 1 "detecting ppc970 (G5)... no" - fi - else - enable_osx_g5="0" - - log 1 "detecting ppc970 (G5)... no (cross-compiling)" - fi - fi - else - if [ "$enable_osx_g5" != "0" ]; then - log 1 "configure: error: ppc970 (OSX G5) selected, but not compiling for OSX" - log 1 "configure: error: either select OSX as OS, or deselect ppc970" - - exit 1 - fi - fi - - if { [ -d "$ROOT_DIR/.git" ] || [ -f "$ROOT_DIR/.git" ]; } && [ -n "`git help 2>/dev/null`" ]; then - log 1 "checking revision... git detection" - elif [ -f "$ROOT_DIR/.ottdrev" ]; then - log 1 "checking revision... source tarball" - else - log 1 "checking revision... no detection" - log 1 "WARNING: there is no means to determine the version." - log 1 "WARNING: please use a subversion, mercurial, or git checkout of OpenTTD." - log 1 "WARNING: you can only join game servers that have been compiled without" - log 1 "WARNING: version detection." - log 1 "WARNING: there is a great chance you desync." - log 1 "WARNING: USE WITH CAUTION!" - - sleep 5 - fi - - if [ "$doc_dir" = "1" ]; then - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then - doc_dir="share/doc/openttd" - else - doc_dir="$data_dir/docs" - fi - else - doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$icon_theme_dir" = "1" ]; then - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then - icon_theme_dir="share/icons/hicolor" - else - icon_theme_dir="" - fi - else - icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$personal_dir" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "HAIKU" ]; then - personal_dir="OpenTTD" - elif [ "$os" = "OSX" ]; then - personal_dir="Documents/OpenTTD" - else - personal_dir=".openttd" - fi - else - personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$shared_dir" = "1" ]; then - # we are using default values - if [ "$os" = "OSX" ]; then - shared_dir="/Library/Application\\\\ Support/OpenTTD" - else - shared_dir="" - fi - else - shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$man_dir" = "1" ]; then - # add manpage on UNIX systems - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OSX" ]; then - man_dir="share/man/man6" - else - man_dir="" - fi - else - man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$menu_dir" = "1" ]; then - # add a freedesktop menu item only for some UNIX systems - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then - menu_dir="share/applications" - else - menu_dir="" - fi - else - menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - detect_iconv - - if [ -n "$personal_dir" ] - then - log 1 "personal home directory... $personal_dir" - else - log 1 "personal home directory... none" - fi - - if [ -n "$shared_dir" ] - then - log 1 "shared data directory... $shared_dir" - else - log 1 "shared data directory... none" - fi - - if [ -n "$install_dir" ] - then - log 1 "installation directory... $install_dir" - else - log 1 "installation directory... none" - fi - - if [ -n "$icon_theme_dir" ] - then - log 1 "icon theme directory... $icon_theme_dir" - else - log 1 "icon theme directory... none" - fi - - if [ -n "$man_dir" ] - then - log 1 "manual page directory... $man_dir" - else - log 1 "manual page directory... none" - fi - - if [ -n "$menu_dir" ] - then - log 1 "menu item directory... $menu_dir" - else - log 1 "menu item directory... none" - fi -} - -make_compiler_cflags() { - # Params: - # $1 - compiler - # $2 - name of the cflags variable - # $3 - name of the cxxflags variable - # $4 - name of the ldflags variable - # $5 - name of the features variable - - # Get the compiler to tell us who it is - version_line="`$1 --version | head -n1`" - - eval eval "flags=\\\$$2" - eval eval "cxxflags=\\\$$3" - eval eval "ldflags=\\\$$4" - eval eval "features=\\\$$5" - - if [ `echo "$version_line" | cut -d' ' -f1` = "icc" ]; then - # Enable some things only for certain ICC versions - cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g` - - flags="$flags -rdynamic" - ldflags="$ldflags -rdynamic" - - if [ -z "$first_time_icc_check" ]; then - first_time_icc_check=no - if [ $cc_version -lt 90 ]; then - log 1 "WARNING: you seem to be using a very old version of ICC" - log 1 "WARNING: OpenTTD hasn't been tested with this version" - sleep 5 - elif [ $cc_version -lt 120 ]; then - log 1 "WARNING: you seem to be using an unsupported ICC version" - log 1 "WARNING: ICC older than 12.0 is known to fail to compile OpenTTD" - sleep 5 - fi - fi - - flags="$flags -Wall" - # remark #111: statement is unreachable - flags="$flags -wd111" - # remark #181: argument is incompatible with corresponding format string conversion - # ICC is very picky about signedness of operands, warnings provided by GCC are enough - flags="$flags -wd181" - # remark #271: trailing comma is nonstandard - flags="$flags -wd271" - # remark #280: selector expression is constant - flags="$flags -wd280" - # remark #304: access control not specified ("public" by default) - flags="$flags -wd304" - # remark #383: value copied to temporary, reference to temporary used - flags="$flags -wd383" - # remark #444: destructor for base class ... is not virtual - flags="$flags -wd444" - # remark #593: variable ... was set but never used - flags="$flags -wd593" - # warning #654: overloaded virtual function ... is only partially overridden in class ... - flags="$flags -wd654" - # remark #810: conversion from ... to ... may lose significant bits - flags="$flags -wd810" - # remark #869: parameter ... was never referenced - flags="$flags -wd869" - # warning #873: function ... ::operator new ... has no corresponding operator delete ... - flags="$flags -wd873" - # remark #981: operands are evaluated in unspecified order - flags="$flags -wd981" - # remark #1418: external function definition with no prior declaration - flags="$flags -wd1418" - # remark #1419: external declaration in primary source file - flags="$flags -wd1419" - # remark #1572: floating-point equality and inequality - flags="$flags -wd1572" - # remark #1599: declaration hides variable/parameter ... - flags="$flags -wd1599" - # remark #1720: function ... ::operator new ... has no corresponding member operator delete ... - flags="$flags -wd1720" - - if [ $cc_version -lt 110 ]; then - # warns about system headers with recent glibc: - # warning #1292: attribute "__nonnull__" ignored - flags="$flags -wd1292" - fi - - if [ $cc_version -ge 100 ]; then - # warning #1899: multicharacter character literal (potential portability problem) - flags="$flags -wd1899" - # vec report defaults to telling where it did loop vectorisation, which is not very important - flags="$flags -vec-report=0 " - fi - - if [ $cc_version -ge 110 ]; then - # remark #2259: non-pointer conversion from ... to ... may lose significant bits - flags="$flags -wd2259" - fi - - if [ "$enable_lto" != "0" ]; then - has_ipo=`$1 -help ipo | grep '\-ipo'` - if [ -n "$has_ipo" ]; then - # Use IPO (only if we see IPO exists and is requested) - flags="$flags -ipo" - features="$features lto" - fi - fi - elif echo "$version_line" | grep -q "clang"; then - # Enable some things only for certain clang versions - # Need to try really hard to get the version line, because OSX clang likes to hide its true version - cc_version="`$1 -v 2>&1 | grep -i version | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`" - - # aliasing rules are not held in openttd code - flags="$flags -fno-strict-aliasing" - - # -W alone doesn't enable all warnings enabled by -Wall; on the other hand, - # -Weverything enables too many useless warnings that can't be disabled (as of 3.0) - flags="$flags -Wall -W -Wextra" - - # warning: unused parameter '...' - flags="$flags -Wno-unused-parameter" - - # warning: expression result unused - flags="$flags -Wno-unused-value" - - # warning: multi-character character constant - flags="$flags -Wno-multichar" - - # warning: explicitly assigning a variable of type '...' to itself - # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro - flags="$flags -Wno-self-assign" - - # warning: is a C++11 extension - flags="$flags -Wno-c++11-extensions" - - if [ "$cc_version" -lt "30" ]; then - # warning: equality comparison with extraneous parentheses - flags="$flags -Wno-parentheses" - # warning: operands of ? are integers of different signs: 'unsigned int' and 'int' - flags="$flags -Wno-sign-compare" - fi - - if [ "$cc_version" -ge "30" ]; then - # warning: equality comparison with extraneous parentheses - # this warning could be useful, but it warns about code in squirrel - flags="$flags -Wno-parentheses-equality" - fi - - if [ "$with_ccache" != "0" -o "$with_distcc" != "0" ]; then - # ccache and distcc run separate preprocess and compile passes, - # both are fed with the same CFLAGS. Unfortunately, clang - # complains about -I when compiling preprocessed files: - # "clang: warning: argument unused during compilation: '-I /usr/include'" - flags="$flags -Qunused-arguments" - fi - - if [ "$enable_assert" -eq "0" ]; then - # do not warn about unused variables when building without asserts - flags="$flags -Wno-unused-variable" - fi - - # rdynamic is used to get useful stack traces from crash reports. - ldflags="$ldflags -rdynamic" - - # Assume gcc, since it just uses argv[0] in its --version output - else - # Enable some things only for certain GCC versions - # cc_version = major_version * 100 + minor_version - # For example: "3.3" -> 303, "4.9.2" -> 409, "6" -> 600, "23.5" -> 2305 - cc_version=`$1 -dumpversion | $awk -F . '{printf "%d%02d", $1, $2}'` - - if [ $cc_version -lt 303 ]; then - log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support" - exit 1 - fi - - flags="$flags -Wall -Wno-multichar -Wsign-compare -Wundef" - flags="$flags -Wwrite-strings -Wpointer-arith" - flags="$flags -W -Wno-unused-parameter -Wredundant-decls" - flags="$flags -Wformat=2 -Wformat-security" - - if [ $enable_assert -eq 0 ]; then - # Do not warn about unused variables when building without asserts - flags="$flags -Wno-unused-variable" - if [ $cc_version -ge 406 ]; then - # GCC 4.6 gives more warnings, disable them too - flags="$flags -Wno-unused-but-set-variable" - flags="$flags -Wno-unused-but-set-parameter" - fi - fi - - if [ $cc_version -ge 304 ]; then - # Warn when a variable is used to initialise itself: - # int a = a; - flags="$flags -Winit-self" - fi - - if [ $cc_version -ge 400 ]; then - # GCC 4.0+ complains about that we break strict-aliasing. - # On most places we don't see how to fix it, and it doesn't - # break anything. So disable strict-aliasing to make the - # compiler all happy. - flags="$flags -fno-strict-aliasing" - # Warn about casting-out 'const' with regular C-style cast. - # The preferred way is const_cast<>() which doesn't warn. - flags="$flags -Wcast-qual" - fi - - if [ $cc_version -ge 402 ]; then - # GCC 4.2+ automatically assumes that signed overflows do - # not occur in signed arithmetic, whereas we are not - # sure that they will not happen. It furthermore complains - # about its own optimized code in some places. - flags="$flags -fno-strict-overflow" - # GCC 4.2 no longer includes -Wnon-virtual-dtor in -Wall. - # Enable it in order to be consistent with older GCC versions. - flags="$flags -Wnon-virtual-dtor" - fi - - if [ $cc_version -eq 405 ]; then - # Prevent optimisation supposing enums are in a range specified by the standard - # For details, see http://gcc.gnu.org/PR43680 - flags="$flags -fno-tree-vrp" - fi - - if [ $cc_version -eq 407 ]; then - # Disable -Wnarrowing which gives many warnings, such as: - # warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing] - # They are valid according to the C++ standard, but useless. - cxxflags="$cxxflags -Wno-narrowing" - fi - - if [ $cc_version -ge 407 ]; then - # Disable bogus 'attempt to free a non-heap object' warning - flags="$flags -Wno-free-nonheap-object" - fi - - if [ $cc_version -ge 600 ]; then - # -flifetime-dse=2 (default since GCC 6) doesn't play - # well with our custom pool item allocator - cxxflags="$cxxflags -flifetime-dse=1" - fi - - if [ "$enable_lto" != "0" ]; then - # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}' - has_lto=`$1 -dumpspecs | grep '\%{flto'` - if [ -n "$has_lto" ]; then - # Use LTO only if we see LTO exists and is requested - if [ $cc_version -lt 406 ]; then - flags="$flags -flto" - else - flags="$flags -flto=jobserver" - fi - ldflags="$ldflags -fwhole-program" - features="$features lto" - fi - fi - - has_rdynamic=`$1 -dumpspecs | grep rdynamic` - if [ -n "$has_rdynamic" ]; then - # rdynamic is used to get useful stack traces from crash reports. - flags="$flags -rdynamic" - ldflags="$ldflags -rdynamic" - fi - fi - - eval "$2=\"$flags\"" - eval "$3=\"$cxxflags\"" - eval "$4=\"$ldflags\"" - eval "$5=\"$features\"" -} - -make_cflags_and_ldflags() { - # General CFlags for BUILD - CFLAGS_BUILD_ENV="$CFLAGS_BUILD" - CFLAGS_BUILD="" - # Special CXXFlags for BUILD - CXXFLAGS_BUILD_ENV="$CXXFLAGS_BUILD" - CXXFLAGS_BUILD="" - # LDFLAGS for BUILD - LDFLAGS_BUILD_ENV="$LDFLAGS_BUILD" - LDFLAGS_BUILD="" - # FEATURES for BUILD (lto) - FEATURES_BUILD="" - # General CFlags for HOST - CFLAGS_ENV="$CFLAGS" - CFLAGS="" - # Special CXXFlags for HOST - CXXFLAGS_ENV="$CXXFLAGS" - CXXFLAGS="" - # Libs to compile. In fact this is just LDFLAGS - LIBS="" - # LDFLAGS used for HOST - LDFLAGS_ENV="$LDFLAGS" - LDFLAGS="" - # FEATURES for HOST (lto) - FEATURES="" - - make_compiler_cflags "$cc_build" "CFLAGS_BUILD" "CXXFLAGS_BUILD" "LDFLAGS_BUILD" "FEATURES_BUILD" - make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES" - - CFLAGS="$CFLAGS -D$os" - CFLAGS_BUILD="$CFLAGS_BUILD -D$os" - CXXFLAGS="$CXXFLAGS -std=c++11" - CXXFLAGS_BUILD="$CXXFLAGS_BUILD -std=c++11" - - if [ "$enable_debug" = "0" ]; then - # No debug, add default stuff - OBJS_SUBDIR="release" - - if [ "$enable_profiling" = "0" ]; then - # -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible) - CFLAGS="-fomit-frame-pointer $CFLAGS" - fi - CFLAGS="-O2 $CFLAGS" - else - OBJS_SUBDIR="debug" - - # Each debug level reduces the optimization by a bit - if [ $enable_debug -ge 1 ]; then - CFLAGS="$CFLAGS -g -D_DEBUG" - fi - if [ $enable_debug -ge 2 ]; then - CFLAGS="$CFLAGS -fno-inline" - fi - if [ $enable_debug -ge 3 ]; then - CFLAGS="$CFLAGS -O0" - else - CFLAGS="$CFLAGS -O2" - fi - fi - - if [ $enable_debug -le 2 ]; then - cc_host_is_gcc=`basename "$cc_host" | grep "gcc" 2>/dev/null` - if [ -n "$cc_host_is_gcc" ]; then - # Define only when compiling with GCC. Some GLIBC versions use GNU - # 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 - - if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then - # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization, - # wrongly optimizing ^= in loops. This disables the failing optimisation. - CFLAGS="$CFLAGS -fno-expensive-optimizations" - fi - - if [ "$enable_profiling" != "0" ]; then - CFLAGS="$CFLAGS -pg" - LDFLAGS="$LDFLAGS -pg" - fi - - if [ "$with_threads" = "0" ]; then - CFLAGS="$CFLAGS -DNO_THREADS" - fi - if [ "$with_sse" = "1" ]; then - CFLAGS="$CFLAGS -DWITH_SSE" - fi - - if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then - if [ "$os" = "CYGWIN" ]; then - flags="$flags -mwin32" - LDFLAGS="$LDFLAGS -mwin32" - fi - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - if [ $cc_version -lt 406 ]; then - flags="$flags -mno-cygwin" - LDFLAGS="$LDFLAGS -mno-cygwin" - fi - - if [ "$enable_console" != "0" ]; then - LDFLAGS="$LDFLAGS -Wl,--subsystem,console" - else - LDFLAGS="$LDFLAGS -Wl,--subsystem,windows" - fi - - LIBS="$LIBS -lws2_32 -lwinmm -lusp10 -lgdi32 -ldxguid -lole32 -limm32" - - if [ $cc_version -ge 404 ]; then - LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++" - fi - if [ $cc_version -ge 407 ]; then - CFLAGS="$CFLAGS -mno-ms-bitfields" - fi - fi - fi - - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "OS2" ]; then - LIBS="$LIBS -lpthread" - fi - - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ]; then - LIBS="$LIBS -lc" - fi - - if [ "$os" = "OPENBSD" ]; then - LIBS="$LIBS -pthread" - fi - - if [ "$os" = "OSX" ]; then - LDFLAGS="$LDFLAGS -framework Cocoa" - - # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings. - CFLAGS="$CFLAGS -isystem/opt/local/include" - - if [ "$enable_universal" = "0" ]; then - # Universal builds set this elsewhere - CFLAGS="$OSX_SYSROOT $CFLAGS" - LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS" - fi - fi - - if [ "$os" = "HAIKU" ]; then - LIBS="$LIBS -lmidi -lbe" - fi - - # Most targets act like UNIX, just with some additions - if [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then - CFLAGS="$CFLAGS -DUNIX" - fi - # And others like Windows - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - CFLAGS="$CFLAGS -DWIN" - fi - - if [ -n "$allegro_config" ]; then - CFLAGS="$CFLAGS -DWITH_ALLEGRO" - CFLAGS="$CFLAGS `$allegro_config --cflags`" - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$allegro_config --static --libs`" - else - LIBS="$LIBS `$allegro_config --libs`" - fi - fi - fi - - if [ -n "$sdl2_config" ]; then - CFLAGS="$CFLAGS -DWITH_SDL2" - # SDL must not add _GNU_SOURCE as it breaks many platforms - CFLAGS="$CFLAGS `$sdl2_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$sdl2_config --static --libs`" - else - LIBS="$LIBS `$sdl2_config --libs`" - fi - elif [ -n "$sdl_config" ]; then - CFLAGS="$CFLAGS -DWITH_SDL" - # SDL must not add _GNU_SOURCE as it breaks many platforms - CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$sdl_config --static --libs`" - else - LIBS="$LIBS `$sdl_config --libs`" - fi - fi - - if [ "$with_cocoa" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_COCOA" - LIBS="$LIBS -F$osx_sdk_path/System/Library/Frameworks -framework Cocoa -framework AudioUnit -framework AudioToolbox" - - if [ "$enable_cocoa_quartz" != "0" ]; then - CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ" - fi - fi - - if [ "$with_zlib" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_ZLIB" - CFLAGS="$CFLAGS `$zlib_config --cflags | tr '\n\r' ' '`" - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$zlib_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$zlib_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$lzma_config" ]; then - CFLAGS="$CFLAGS -DWITH_LIBLZMA" - CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - CFLAGS="$CFLAGS -DLZMA_API_STATIC" - LIBS="$LIBS `$lzma_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$lzma_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ "$with_lzo2" != "0" ]; then - if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then - LIBS="$LIBS $lzo2" - else - LIBS="$LIBS -llzo2" - fi - CFLAGS="$CFLAGS -DWITH_LZO" - fi - - if [ -n "$xdg_basedir_config" ]; then - CFLAGS="$CFLAGS -DWITH_XDG_BASEDIR" - CFLAGS="$CFLAGS `$xdg_basedir_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$xdg_basedir_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$xdg_basedir_config --libs | tr '\n\r' ' '`" - fi - fi - - # 64bit machines need -D_SQ64 - if [ "$cpu_type" = "64" ] && [ "$enable_universal" = "0" ]; then - CFLAGS="$CFLAGS -D_SQ64" - fi - CFLAGS="$CFLAGS -I$SCRIPT_SRC_DIR" - - if [ -n "$png_config" ]; then - CFLAGS="$CFLAGS -DWITH_PNG" - CFLAGS="$CFLAGS `$png_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$png_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$png_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$fontconfig_config" ]; then - CFLAGS="$CFLAGS -DWITH_FONTCONFIG" - CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$freetype_config" ]; then - CFLAGS="$CFLAGS -DWITH_FREETYPE" - CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$freetype_config --libs --static | tr '\n\r' ' '` -lfreetype" - else - LIBS="$LIBS `$freetype_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$icu_layout_config" ]; then - CFLAGS="$CFLAGS -DWITH_ICU_LX" - CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' ' '`" - - if [ "$static_icu" != "0" ]; then - LIBS="$LIBS `$icu_layout_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`" - else - LIBS="$LIBS `$icu_layout_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$icu_sort_config" ]; then - CFLAGS="$CFLAGS -DWITH_ICU_I18N" - CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' ' '`" - - if [ "$static_icu" != "0" ]; then - LIBS="$LIBS `$icu_sort_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`" - else - LIBS="$LIBS `$icu_sort_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ "$with_uniscribe" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_UNISCRIBE" - LIBS="$LIBS -lusp10" - fi - - if [ "$with_direct_music" != "0" ]; then - CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT" - # GCC 4.0+ doesn't like the DirectX includes (gives tons of - # warnings on it we won't be able to fix). For now just - # suppress those warnings. - if [ $cc_version -ge 400 ]; then - CFLAGS="$CFLAGS -Wno-non-virtual-dtor" - fi - fi - - if [ "$with_xaudio2" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_XAUDIO2" - fi - - if [ -n "$fluidsynth" ]; then - LIBS="$LIBS -lfluidsynth" - CFLAGS="$CFLAGS -DFLUIDSYNTH" - fi - - if [ "$with_iconv" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_ICONV" - if [ "$link_to_iconv" = "yes" ]; then - LIBS="$LIBS -liconv" - if [ "$with_iconv" != "2" ]; then - CFLAGS="$CFLAGS -I$with_iconv/include" - LIBS="$LIBS -L$with_iconv/lib" - fi - fi - - if [ "$os" != "OSX" ] && [ "$have_non_const_iconv" != "no" ]; then - CFLAGS="$CFLAGS -DHAVE_NON_CONST_ICONV" - fi - fi - - if [ -n "$with_midi" ]; then - CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\"" - fi - if [ -n "$with_midi_arg" ]; then - CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\"" - fi - - if [ "$enable_dedicated" != "0" ]; then - CFLAGS="$CFLAGS -DDEDICATED" - fi - - if [ "$enable_unicode" != "0" ]; then - CFLAGS="$CFLAGS -DUNICODE -D_UNICODE" - fi - - if [ "$os" = "HAIKU" ]; then - LDFLAGS="$LDFLAGS -lnetwork" - fi - - if [ "$os" = "SUNOS" ]; then - LDFLAGS="$LDFLAGS -lnsl -lsocket" - fi - - if [ "$enable_static" != "0" ]; then - # OSX can't handle -static in LDFLAGS - if [ "$os" != "OSX" ]; then - LDFLAGS="$LDFLAGS -static" - fi - fi - - if [ "$enable_assert" = "0" ]; then - CFLAGS="$CFLAGS -DNDEBUG" - CFLAGS_BUILD="$CFLAGS_BUILD -DNDEBUG" - fi - - if [ "$enable_desync_debug" != "0" ]; then - CFLAGS="$CFLAGS -DRANDOM_DEBUG" - fi - - if [ "$enable_osx_g5" != "0" ]; then - CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" - fi - - if [ -n "$personal_dir" ]; then - CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\"" - fi - - if [ -n "$shared_dir" ]; then - CFLAGS="$CFLAGS -DWITH_SHARED_DIR -DSHARED_DIR=\\\\\"$shared_dir\\\\\"" - fi - - CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\"" - - if [ "$enable_lto" != "0" ]; then - lto_build=`echo "$FEATURES_BUILD" | grep "lto"` - lto_host=`echo "$FEATURES" | grep "lto"` - if [ -z "$lto_build$lto_host" ]; then - log 1 "WARNING: you enabled LTO/IPO, but neither build nor host compiler supports it" - log 1 "WARNING: LTO/IPO has been disabled" - fi - if [ -n "$lto_build" ]; then - LDFLAGS_BUILD="$LDFLAGS_BUILD $CFLAGS_BUILD $CXXFLAGS_BUILD" - fi - if [ -n "$lto_host" ]; then - LDFLAGS="$LDFLAGS $CFLAGS $CXXFLAGS" - fi - fi - - # All flags to be extended via the env - CFLAGS_BUILD="$CFLAGS_BUILD $CFLAGS_BUILD_ENV" - CXXFLAGS_BUILD="$CXXFLAGS_BUILD $CXXFLAGS_BUILD_ENV" - LDFLAGS_BUILD="$LDFLAGS_BUILD $LDFLAGS_BUILD_ENV" - CFLAGS="$CFLAGS $CFLAGS_ENV" - CXXFLAGS="$CXXFLAGS $CXXFLAGS_ENV" - LDFLAGS="$LDFLAGS $LDFLAGS_ENV" - - log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD" - log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD" - log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD" - log 1 "using CFLAGS... $CFLAGS" - log 1 "using CXXFLAGS... $CXXFLAGS" - log 1 "using LDFLAGS... $LIBS $LDFLAGS" - - # Makedepend doesn't like something like: -isysroot /OSX/blabla - # so convert it to: -isysroot -OSX/blabla. makedepend just ignores - # any - command it doesn't know, so we are pretty save. - # Lovely hackish, not? - # Btw, this almost always comes from outside the configure, so it is - # not something we can control. - # Also make makedepend aware of compiler's built-in defines. - if [ "$with_makedepend" != "0" ] || [ "$enable_builtin_depend" != "0" ]; then - # Append CXXFLAGS possibly containing -std=c++0x - cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`" - - # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations - cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g;s@[ ]*-[^D][^ ]*@@g'`" - else - makedepend="" - fi - - if [ "$with_distcc" != "0" ]; then - cc_host="$distcc $cc_host" - cxx_host="$distcc $cxx_host" - log 1 "" - log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc" - log 1 "" - fi - - if [ "$with_ccache" != "0" ]; then - cc_host="$ccache $cc_host" - cxx_host="$ccache $cxx_host" - fi -} - -check_compiler() { - # Params: - # $1 - Type for message (build / host) - # $2 - What to fill with the found compiler - # $3 - System to try - # $4 - Compiler to try - # $5 - Env-setting to try - # $6 - GCC alike to try - # $7 - CC alike to try - # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo - # $9 - What the command is to check for - - if [ -n "$4" ]; then - # Check for manual compiler - machine=`$4 $9 2>/dev/null` - ret=$? - eval "$2=\"$4\"" - - log 2 "executing $4 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $4 not found" - log 1 "the selected binary doesn't seem to be a $6 binary" - exit 1 - fi - elif [ -n "$3" ]; then - # Check for system - if [ -z "$6" ]; then - compiler="$3" - else - compiler="$3-$6" - fi - machine=`eval $compiler $9 2>/dev/null` - ret=$? - eval "$2=\"$compiler\"" - - log 2 "executing $compiler $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - if [ -z "$5" ]; then - log 1 "checking $1... $compiler not found" - log 1 "I couldn't detect any $6 binary for $3" - exit 1 - else - compiler="$3-$5" - fi - machine=`eval $compiler $9 2>/dev/null` - ret=$? - eval "$2=\"$compiler\"" - - log 2 "executing $compiler $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $compiler not found" - log 1 "I couldn't detect any $5 binary for $3" - exit 1 - fi - fi - - if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then - log 1 "checking $1... expected $3, found $machine" - log 1 "the compiler suggests it doesn't build code for the machine you specified" - exit 1 - fi - else - # Nothing given, autodetect - - if [ -n "$5" ]; then - machine=`$5 $9 2>/dev/null` - ret=$? - eval "$2=\"$5\"" - - log 2 "executing $5 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - # The user defined a GCC that doesn't reply to $9.. abort - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $5 unusable" - log 1 "the CC environment variable is set, but it doesn't seem to be a $6 binary" - log 1 "please redefine the CC/CXX environment to a $6 binary" - exit 1 - fi - else - log 2 "checking $1... CC/CXX not set (skipping)" - - # No $5, so try '$6' - machine=`$6 $9 2>/dev/null` - ret=$? - eval "$2=\"$6\"" - - log 2 "executing $6 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - # Maybe '$7'? - machine=`$7 $9 2>/dev/null` - ret=$? - eval "$2=\"$7\"" - - log 2 "executing $7 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - # All failed, abort - if [ -z "$machine" ]; then - log 1 "checking $1... $6 not found" - log 1 "I couldn't detect any $6 binary on your system" - log 1 "please define the CC/CXX environment to where it is located" - - exit 1 - fi - fi - fi - fi - - if [ "$8" != "0" ]; then - eval "res=\$$2" - log 1 "checking $1... $res" - else - log 1 "checking $1... $machine" - fi -} - -check_build() { - check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine" -} - -check_host() { - # By default the host is the build - if [ -z "$host" ]; then host="$build"; fi - check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine" -} - -check_cxx_build() { - check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "g++" "c++" 1 "-dumpmachine" -} - -check_cxx_host() { - # By default the host is the build - if [ -z "$host" ]; then host="$build"; fi - check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "g++" "c++" 1 "-dumpmachine" -} - -check_windres() { - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V" - fi -} - -check_strip() { - if [ "$os" = "OS2" ]; then - # OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly - log 1 "checking host strip... using gcc -s option" - elif [ "$os" = "OSX" ]; then - # Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something - echo "int main(int argc, char *argv[]) { }" > strip.test.c - $cxx_host strip.test.c -o strip.test - check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test" - rm -f strip.test.c strip.test - else - check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V" - fi -} - -check_lipo() { - if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then - echo "int main(int argc, char *argv[]) { }" > lipo.test.c - $cxx_host lipo.test.c -o lipo.test - check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test" - rm -f lipo.test.c lipo.test - fi -} - -check_osx_sdk() { - local sysroot="" - if [ -n "$1" ]; then - if echo "$1" | grep -q / ; then - # Seems to be a file system path - osx_sdk_path="$1" - else - osx_sdk_path="/Developer/SDKs/MacOSX$1.sdk" - fi - if [ ! -d "$osx_sdk_path" ]; then - # No directory, not present or garbage - return 1 - fi - - # Set minimum version to 10.4 as that's when kCGBitmapByteOrder32Host was introduced - sysroot="-isysroot $osx_sdk_path -Wl,-syslibroot,$osx_sdk_path -mmacosx-version-min=10.4" - fi - -cat > tmp.osx.mm << EOF -#include -int main() { - kCGBitmapByteOrder32Host; - return 0; -} -EOF - execute="$cxx_host $sysroot $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - rm -f tmp.osx.mm tmp.osx - return $ret -} - -check_direct_music() { - echo " - #include - #include - #include - int main(int argc, char *argv[]) { }" > direct_music.test.c - $cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null - res=$? - rm -f direct_music.test.c direct_music.test - - if [ "$res" != "0" ]; then - if [ "$with_direct_music" != "1" ]; then - log 1 "configure: error: direct-music is not available on this system" - exit 1 - fi - with_direct_music="0" - - log 1 "checking direct-music... not found" - else - log 1 "checking direct-music... found" - fi -} - -check_xaudio2() { - echo " - #include - - #undef NTDDI_VERSION - #undef _WIN32_WINNT - - #define NTDDI_VERSION NTDDI_WIN8 - #define _WIN32_WINNT _WIN32_WINNT_WIN8 - - #include - int main(int argc, char *argv[]) { }" > xaudio2.test.c - $cxx_host $CFLAGS xaudio2.test.c -o xaudio2.test 2> /dev/null - res=$? - rm -f xaudio2.test.c xaudio2.test - - if [ "$res" != "0" ]; then - if [ "$with_xaudio2" != "1" ]; then - log 1 "configure: error: xaudio2 is not available on this system" - exit 1 - fi - with_xaudio2="0" - - log 1 "checking xaudio2... not found" - else - log 1 "checking xaudio2... found" - fi -} - -check_makedepend() { - if [ "$enable_builtin_depend" != "0" ]; then - with_makedepend="0" - fi - - if [ "$with_makedepend" = "0" ]; then - log 1 "checking makedepend... disabled" - return - fi - - if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then - makedepend="makedepend" - else - makedepend="$with_makedepend" - fi - - rm -f makedepend.tmp - touch makedepend.tmp - res=`$makedepend -fmakedepend.tmp 2>/dev/null` - res=$? - log 2 "executing $makedepend -f makedepend.tmp" - log 2 " returned `cat makedepend.tmp`" - log 2 " exit code $ret" - - if [ ! -s makedepend.tmp ]; then - rm -f makedepend.tmp makedepend.tmp.bak - - if [ "$with_makedepend" = "2" ]; then - log 1 "checking makedepend... not found" - - log 1 "I couldn't detect any makedepend on your system" - log 1 "please locate it via --makedepend=[binary]" - - exit 1 - elif [ "$with_makedepend" != "1" ]; then - log 1 "checking makedepend... $makedepend not found" - - log 1 "the selected file doesn't seem to be a valid makedepend binary" - - exit 1 - else - log 1 "checking makedepend... not found" - - with_makedepend="0" - return - fi - fi - - rm -f makedepend.tmp makedepend.tmp.bak - - log 1 "checking makedepend... $makedepend" -} - -check_version() { - # $1 - requested version (major.minor) - # $2 - version we got (major.minor) - - if [ -z "$2" ]; then - return 0 - fi - - req_major=`echo $1 | cut -d. -f1` - got_major=`echo $2 | cut -d. -f1` - if [ $got_major -lt $req_major ]; then - return 0 - elif [ $got_major -gt $req_major ]; then - return 1 - fi - - req_minor=`echo $1 | cut -d. -f2` - got_minor=`echo $2 | cut -d. -f2` - if [ $got_minor -lt $req_minor ]; then - return 0 - fi - return 1 -} - -detect_awk() { - # Not all awks allow gsub(), so we test for that here! It is in fact all we need... - - # These awks are known to work. Test for them explicit - awks="gawk mawk nawk" - - awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | " - awk_param="' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", \$0); print \$0; }' 2>/dev/null" - awk_result="a.o b.o c.o " - log 2 "Detecing awk..." - - log 2 "Trying: $awk_prefix $awk $awk_param" - res=`eval $awk_prefix $awk $awk_param` - log 2 "Result: '$res'" - if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then - # User didn't supply his own awk, so try to detect some other known working names for an awk - for awk in $awks; do - log 2 "Trying: $awk_prefix $awk $awk_param" - res=`eval $awk_prefix $awk $awk_param` - log 2 "Result: '$res'" - if [ "$res" = "$awk_result" ]; then break; fi - done - - if [ "$res" != "$awk_result" ]; then - log 1 "checking awk... not found" - log 1 "configure: error: no awk found" - log 1 "configure: error: please install one of the following: $awks" - exit 1 - fi - fi - if [ "$res" != "$awk_result" ]; then - log 1 "checking awk... not found" - log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk" - exit 1 - fi - - log 1 "checking awk... $awk" -} - -detect_os() { - if [ "$os" = "DETECT" ]; then - # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, and OS2 - - # Try first via dumpmachine, then via uname - os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' - /linux/ { print "UNIX"; exit} - /darwin/ { print "OSX"; exit} - /freebsd/ { print "FREEBSD"; exit} - /dragonfly/ { print "DRAGONFLY"; exit} - /openbsd/ { print "OPENBSD"; exit} - /netbsd/ { print "NETBSD"; exit} - /hp-ux/ { print "HPUX"; exit} - /haiku/ { print "HAIKU"; exit} - /sunos/ { print "SUNOS"; exit} - /solaris/ { print "SUNOS"; exit} - /cygwin/ { print "CYGWIN"; exit} - /mingw/ { print "MINGW"; exit} - /os2/ { print "OS2"; exit} - '` - - if [ -z "$os" ]; then - os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk ' - /linux/ { print "UNIX"; exit} - /darwin/ { print "OSX"; exit} - /freebsd/ { print "FREEBSD"; exit} - /dragonfly/ { print "DRAGONFLY"; exit} - /openbsd/ { print "OPENBSD"; exit} - /netbsd/ { print "NETBSD"; exit} - /hp-ux/ { print "HPUX"; exit} - /haiku/ { print "HAIKU"; exit} - /sunos/ { print "SUNOS"; exit} - /cygwin/ { print "CYGWIN"; exit} - /mingw/ { print "MINGW"; exit} - /os\/2/ { print "OS2"; exit} - /gnu/ { print "UNIX"; exit} - '` - fi - - if [ -z "$os" ]; then - log 1 "detecting OS... none detected" - log 1 "I couldn't detect your OS. Please use --os=OS to force one" - log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, and OS2" - exit 1 - fi - - log 1 "detecting OS... $os" - else - log 1 "forcing OS... $os" - fi -} - -detect_allegro() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_allegro" = "0" ]; then - log 1 "checking Allegro... disabled" - - allegro_config="" - return 0 - fi - - if [ "$with_allegro" = "2" ] && [ "$with_cocoa" = "2" ]; then - log 1 "configure: error: it is impossible to compile both Allegro and COCOA" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$with_allegro" = "2" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "configure: error: it is impossible to compile a dedicated with Allegro" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking Allegro... dedicated server, skipping" - - allegro_config="" - return 0 - fi - - # By default on OSX we don't use Allegro. The rest is auto-detect - if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then - log 1 "checking Allegro... OSX, skipping" - - allegro_config="" - return 0 - fi - - detect_pkg_config "$with_allegro" "allegro" "allegro_config" "4.4" -} - - -detect_sdl() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_sdl" = "0" ]; then - log 1 "checking SDL... disabled" - - sdl_config="" - sdl2_config="" - return 0 - fi - - if [ "$with_sdl" != "1" ] && [ "$with_cocoa" = "2" ]; then - log 1 "configure: error: it is impossible to compile both SDL and COCOA" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$with_sdl" != "1" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "configure: error: it is impossible to compile a dedicated with SDL" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking SDL... dedicated server, skipping" - - sdl_config="" - sdl2_config="" - return 0 - fi - - # By default on OSX we don't use SDL. The rest is auto-detect - if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then - log 1 "checking SDL... OSX, skipping" - - sdl_config="" - return 0 - fi - - if [ "$os" = "OSX" ]; then - log 1 "WARNING: sdl is known to fail on some versions of Mac OS X" - log 1 "WARNING: with some hardware configurations. Use at own risk!" - sleep 5 - fi - - if [ $with_sdl = "sdl1" ]; then - detect_pkg_config "2" "sdl" "sdl_config" "1.2" - elif [ $with_sdl = "sdl2" ]; then - detect_pkg_config "2" "sdl2" "sdl2_config" "2.0" - else - sdl2_config="" - if [ -x "`which sdl2-config`" ]; then - detect_pkg_config "$with_sdl" "sdl2" "sdl2_config" "2.0" - fi - if [ -z "$sdl2_config" ]; then - detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2" - fi - fi -} - -detect_osx_sdk() { - # Try to find the best SDK available. For a normal build this - # is currently the 10.5 SDK as this is needed to compile all - # optional code. Because such an executable won't run on 10.4 - # or lower, also check for the 10.4u SDK when doing an universal - # build. - - # Check for the 10.5 SDK, but try 10.6 if that fails - check_osx_sdk "10.5" || check_osx_sdk "10.6" || osx_sdk_path="" - - if [ -z "$osx_sdk_path" ] || [ "$enable_universal" != "0" ]; then - # No better SDK or universal build enabled? Check 10.4u SDK as well - local old_sdk="$osx_sdk_path" - if check_osx_sdk "10.4u"; then - osx_sdk_104_path="$osx_sdk_path" - else - osx_sdk_104_path="" - fi - if [ -z "$old_sdk" ]; then - osx_sdk_path="$osx_sdk_104_path" - else - osx_sdk_path="$old_sdk" - fi - fi - - if [ -z "$osx_sdk_path" ]; then - log 1 "Your system SDK is probably too old" - log 1 "Please install/upgrade your Xcode to >= 2.5" - - exit 1 - fi -} - -detect_cocoa() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_cocoa" = "0" ]; then - log 1 "checking COCOA... disabled" - - return 0 - fi - - if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "configure: error: it is impossible to compile a dedicated with COCOA" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking COCOA... dedicated server, skipping" - - with_cocoa="0" - return 0 - fi - - # By default on OSX we use COCOA. The rest doesn't support it - if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then - log 1 "checking COCOA... not OSX, skipping" - - with_cocoa="0" - return 0 - fi - - if [ "$os" != "OSX" ]; then - log 1 "checking COCOA... not OSX" - - log 1 "configure: error: COCOA video driver is only supported for OSX" - exit 1 - fi - - log 1 "checking COCOA... found" - - - if [ "$enable_cocoa_quartz" != "0" ]; then - log 1 "checking whether to enable the Quartz window subdriver... yes" - else - log 1 "checking whether to enable the Quartz window subdriver... no" - fi -} - -detect_library() { - # $1 - config-param ($with_zlib value) - # $2 - library name ('zlib', sets $zlib) - # $3 - static library name (libz.a) - # $4 - header directory () - # $5 - header name (zlib.h) - # $6 - force static (if non-empty) - - if [ -n "$6" ]; then force_static="1"; fi - - # 0 means no, 1 is auto-detect, 2 is force - if [ "$1" = "0" ]; then - log 1 "checking $2... disabled" - - eval "$2=\"\"" - return 0 - fi - - log 2 "detecting $2" - - if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then - eval "$2=`ls -1 /usr/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/include/$4$5... no" - eval "$2=`ls -1 /usr/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/local/include/$4$5... no" - eval "$2=`ls -1 /mingw/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw/include/$4$5... no" - eval "$2=`ls -1 /mingw$cpu_type/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw$cpu_type/include/$4$5... no" - eval "$2=`ls -1 /opt/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /opt/local/include/$4$5... no" - fi - if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then - eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/pkg/include/$4$5... no" - fi - fi - if [ -z "$res" ] && [ "$os" = "HAIKU" ]; then - if [ -z "$includeDir" ]; then - includeDir=`finddir B_SYSTEM_HEADERS_DIRECTORY` - fi - eval "$2=`ls -1 $includeDir/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying $includeDir/$4$5... no" - fi - fi - - eval "res=\$$2" - if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then - eval "res=\$$2" - log 2 " trying $res... found" - # Now find the static lib, if needed - eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /lib/$3... no" - eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/lib/$3... no" - eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/local/lib/$3... no" - eval "$2=`ls /mingw/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw/lib/$3... no" - eval "$2=`ls /mingw$cpu_type/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw$cpu_type/lib/$3... no" - log 1 "configure: error: $2 couldn't be found" - log 1 "configure: error: you requested a static link, but I can't find $3" - - exit 1 - fi - fi - else - # Make sure it exists - if [ -f "$1" ]; then - eval "$2=`ls $1 2>/dev/null`" - else - eval "$2=`ls $1/$3 2>/dev/null`" - fi - fi - - eval "res=\$$2" - if [ -z "$res" ]; then - log 1 "checking $2... not found" - if [ "$1" = "2" ]; then - log 1 "configure: error: $2 couldn't be found" - - exit 1 - elif [ "$1" != "1" ]; then - log 1 "configure: error: $2 couldn't be found" - log 1 "configure: error: you supplied '$1', but it seems invalid" - - exit 1 - fi - - eval "with_$2=0" - - return 0 - fi - - eval "res=\$$2" - log 2 " trying $res... found" - - log 1 "checking $2... found" -} - -detect_zlib() { - detect_pkg_config "$with_zlib" "zlib" "zlib_config" "1.2" -} - -detect_lzo2() { - detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h" -} - -detect_fluidsynth() { - detect_library "$with_fluidsynth" "fluidsynth" "" "" "fluidsynth.h" -} - -detect_pkg_config() { - # $1 - config-param ($with_lzma value) - # $2 - package name ('liblzma') - # $3 - config name ('lzma_config', sets $lzma_config) - # $4 - minimum module version ('2.3') - # $5 - check for dedicated, 1 is "skif if dedicated" - - # 0 means no, 1 is auto-detect, 2 is force - if [ "$1" = "0" ]; then - log 1 "checking $2... disabled" - - eval "$3=\"\"" - return 0 - fi - - if [ "$5" = "1" ] && [ "$1" = "1" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "checking $2... dedicated server, skipping" - - eval "$3=\"\"" - return 0 - fi - - log 2 "detecting $2" - - if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then - pkg_config_call="$pkg_config $2" - else - pkg_config_call="$1" - fi - - version=`$pkg_config_call --modversion 2>/dev/null` - ret=$? - check_version "$4" "$version" - version_ok=$? - log 2 "executing $pkg_config_call --modversion" - log 2 " returned $version" - log 2 " exit code $ret" - - if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then - if [ -n "$version" ] && [ "$version_ok" != "1" ]; then - log 1 "checking $2... needs at least version $4, $2 NOT enabled" - else - log 1 "checking $2... not found" - fi - - # It was forced, so it should be found. - if [ "$1" != "1" ]; then - log 1 "configure: error: $pkg_config $2 couldn't be found" - log 1 "configure: error: you supplied '$1', but it seems invalid" - exit 1 - fi - - eval "$3=\"\"" - return 0 - fi - - eval "$3=\"$pkg_config_call\"" - log 1 "checking $2... found" -} - -detect_lzma() { - detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0" -} - -detect_xdg_basedir() { - detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2" -} - -detect_png() { - detect_pkg_config "$with_png" "libpng" "png_config" "1.2" -} - -detect_freetype() { - if [ "$with_freetype" = "1" ] && ([ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]); then - log 1 "checking freetype2... WIN32, skipping" - freetype_config="" - return 0 - fi - - detect_pkg_config "$with_freetype" "freetype2" "freetype_config" "2.2" "1" -} - -detect_fontconfig() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_fontconfig" = "0" ]; then - log 1 "checking libfontconfig... disabled" - - fontconfig_config="" - return 0 - fi - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - log 1 "checking libfontconfig... WIN32, skipping" - fontconfig_config="" - return 0 - fi - - if [ "$os" = "OSX" ]; then - log 1 "checking libfontconfig... OSX, skipping" - fontconfig_config="" - return 0 - fi - - detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1" -} - -detect_icu_layout() { - if [ "$with_cocoa" != "0" ] && [ "$with_icu_layout" = "1" ]; then - log 1 "checking icu-lx... OSX, skipping" - icu_layout_config="" - return 0 - fi - - detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1" -} - -detect_icu_sort() { - if [ "$with_cocoa" != "0" ] && [ "$with_icu_sort" = "1" ]; then - log 1 "checking icu-i18n... OSX, skipping" - icu_sort_config="" - return 0 - fi - - detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1" -} - -detect_iconv() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_iconv" = "0" ]; then - log 1 "checking iconv... disabled" - - return 0 - fi - - if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then - log 1 "checking iconv... not OSX, skipping" - with_iconv="0" - - return 0 - fi - - # Try to find iconv.h, seems to only thing to detect iconv with - - if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then - # Iterate over search paths - iconv="" - search_paths=`LC_ALL=C $cxx_host $OSX_SYSROOT $CFLAGS -E - -v &1 | \ - $awk '/#include <...> search starts here:/{flag=1;next}/End of search list./{flag=0}flag'` - for path in $search_paths; do - iconv=`ls -1 $path 2>/dev/null | grep "iconv.h"` - if [ -n "$iconv" ]; then - break - fi - done - else - # Make sure it exists - iconv=`ls $with_iconv/include/iconv.h 2>/dev/null` - fi - - if [ -z "$iconv" ]; then - log 1 "checking iconv... not found" - if [ "$with_iconv" = "2" ]; then - log 1 "configure: error: iconv couldn't be found" - - exit 1 - elif [ "$with_iconv" != "1" ]; then - log 1 "configure: error: iconv couldn't be found" - log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it" - - exit 1 - fi - - return 0 - fi - - if [ "$with_iconv" = "1" ]; then - with_iconv="2" - fi - - log 2 "found iconv in $iconv" - - log 1 "checking iconv... found" - - # There are different implementations of iconv. The older ones, - # e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g. - # IEEE 1003.1 (2004), pass a non-const pointer. - - cat > tmp.iconv.cpp << EOF -#include "src/stdafx.h" -#include -int main() { - static char buf[1024]; - iconv_t convd = 0; - const char *inbuf = ""; - char *outbuf = buf; - size_t outlen = 1023; - size_t inlen = 0; - return iconv(convd, &inbuf, &inlen, &outbuf, &outlen); -} -EOF - execute="$cxx_host $OSX_SYSROOT $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then have_non_const_iconv="no"; else have_non_const_iconv="yes"; fi - log 1 "checking if iconv has non-const inbuf... $have_non_const_iconv" - - cat > tmp.iconv.cpp << EOF -#include "src/stdafx.h" -#include -int main() { - static char buf[1024]; - iconv_t convd = 0; - char *inbuf = ""; - char *outbuf = buf; - size_t outlen = 1023; - size_t inlen = 0; - return iconv(convd, &inbuf, &inlen, &outbuf, &outlen); -} -EOF - execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then link_to_iconv="no"; else link_to_iconv="yes"; fi - log 1 "checking whether to link to iconv... $link_to_iconv" - rm -f tmp.iconv tmp.iconv.cpp -} - -_detect_sort() { - sort_test_in="d -a -c -b" - - sort_test_out="a -b -c -d" - - log 2 "running echo | $1" - - if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then - sort="$1" - log 2 " result was valid" - else - log 2 " result was invalid" - fi -} - -detect_sort() { - if [ "$with_sort" = "0" ]; then - log 1 "checking sort... disabled" - - return - fi - - if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then - _detect_sort "sort" - if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi - else - _detect_sort "$with_sort" - fi - - if [ -z "$sort" ]; then - if [ "$with_sort" = "2" ]; then - log 1 "checking sort... not found" - - log 1 "configure: error: couldn't detect sort on your system" - exit 1 - elif [ "$with_sort" != "1" ]; then - log 1 "checking sort... $with_sort not found" - - log 1 "configure: error: '$with_sort' doesn't look like a sort to me" - log 1 "configure: error: please verify its location and function and try again" - - exit 1 - else - log 1 "checking sort... not found" - fi - else - log 1 "checking sort... $sort" - fi -} - -detect_grfcodec() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_grfcodec" = "0" ]; then - log 1 "checking grfcodec... disabled" - - grfcodec="" - return 0 - fi - - if [ "$with_grfcodec" = "1" ] || [ "$with_grfcodec" = "" ] || [ "$with_grfcodec" = "2" ]; then - grfcodec="grfcodec" - else - grfcodec="$with_grfcodec" - fi - - version=`$grfcodec -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'` - ret=$? - log 2 "executing grfcodec -v" - log 2 " returned $version" - log 2 " exit code $ret" - - if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then - if [ -n "$version" ] && [ "$version" -lt "985" ]; then - log 1 "checking grfcodec... needs at least version 6.0.5 (r985), disabled" - else - log 1 "checking grfcodec... not found" - fi - - # It was forced, so it should be found. - if [ "$with_grfcodec" != "1" ]; then - log 1 "configure: error: grfcodec couldn't be found" - log 1 "configure: error: you supplied '$with_grfcodec', but it seems invalid" - exit 1 - fi - - grfcodec="" - return 0 - fi - - log 1 "checking grfcodec... found" -} - -detect_nforenum() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_nforenum" = "0" ]; then - log 1 "checking nforenum... disabled" - - nforenum="" - return 0 - fi - - if [ "$with_nforenum" = "1" ] || [ "$with_nforenum" = "" ] || [ "$with_nforenum" = "2" ]; then - nforenum="nforenum" - else - nforenum="$with_nforenum" - fi - - version=`$nforenum -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'` - ret=$? - log 2 "executing nforenum -v" - log 2 " returned $version" - log 2 " exit code $ret" - - if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then - if [ -n "$version" ] && [ "$version" -lt "985" ]; then - log 1 "checking nforenum... needs at least version 6.0.5 (r985), disabled" - else - log 1 "checking nforenum... not found" - fi - - # It was forced, so it should be found. - if [ "$with_nforenum" != "1" ]; then - log 1 "configure: error: nforenum couldn't be found" - log 1 "configure: error: you supplied '$with_nforenum', but it seems invalid" - exit 1 - fi - - nforenum="" - return 0 - fi - - log 1 "checking nforenum... found" -} - -detect_cputype() { - if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then - log 1 "forcing cpu-type... $cpu_type bits" - return; - fi - echo "#define _SQ64 1" > tmp.64bit.cpp - echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp - echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp - echo "int main() { return 0; }" >> tmp.64bit.cpp - execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1" - cpu_type="`eval $execute 2>/dev/null`" - ret=$? - log 2 "executing $execute" - log 2 " returned $cpu_type" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi - log 1 "detecting cpu-type... $cpu_type bits" - rm -f tmp.64bit tmp.64bit.cpp -} - -detect_sse_capable_architecture() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_sse" = "0" ]; then - log 1 "checking SSE... disabled" - return - fi - - echo "#define _SQ64 1" > tmp.sse.cpp - echo "#include " >> tmp.sse.cpp - echo "#include " >> tmp.sse.cpp - echo "#include " >> tmp.sse.cpp - echo "int main() { return 0; }" >> tmp.sse.cpp - execute="$cxx_host -msse4.1 $CFLAGS tmp.sse.cpp -o tmp.sse 2>&1" - sse="`eval $execute 2>/dev/null`" - ret=$? - log 2 "executing $execute" - log 2 " returned $sse" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then - log 1 "detecting SSE... found" - else - # It was forced, so it should be found. - if [ "$with_sse" != "1" ]; then - log 1 "configure: error: SSE couldn't be found" - log 1 "configure: error: you force enabled SSE, but it seems unavailable" - exit 1 - fi - - log 1 "detecting SSE... not found" - with_sse="0" - fi - rm -f tmp.sse tmp.exe tmp.sse.cpp -} - -make_sed() { - T_CFLAGS="$CFLAGS" - T_CXXFLAGS="$CXXFLAGS" - T_LDFLAGS="$LDFLAGS" - - SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR" - - # All the data needed to compile a single target - # Make sure if you compile multiple targets to - # use multiple OBJS_DIR, because all in-between - # binaries are stored in there, and nowhere else. - SRC_REPLACE=" - s@!!CC_HOST!!@$cc_host@g; - s@!!CXX_HOST!!@$cxx_host@g; - s@!!CC_BUILD!!@$cc_build@g; - s@!!CXX_BUILD!!@$cxx_build@g; - s@!!WINDRES!!@$windres@g; - s@!!STRIP!!@$strip $strip_arg@g; - s@!!LIPO!!@$lipo@g; - s@!!CFLAGS!!@$T_CFLAGS@g; - s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g; - s@!!CXXFLAGS!!@$T_CXXFLAGS@g; - s@!!CXXFLAGS_BUILD!!@$CXXFLAGS_BUILD@g; - s@!!STRGEN_FLAGS!!@$strgen_flags@g; - s@!!LIBS!!@$LIBS@g; - s@!!LDFLAGS!!@$T_LDFLAGS@g; - s@!!LDFLAGS_BUILD!!@$LDFLAGS_BUILD@g; - s@!!BIN_DIR!!@$BIN_DIR@g; - s@!!ROOT_DIR!!@$ROOT_DIR@g; - s@!!MEDIA_DIR!!@$MEDIA_DIR@g; - s@!!SOURCE_LIST!!@$SOURCE_LIST@g; - s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g; - s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g; - s@!!GRF_OBJS_DIR!!@$GRF_OBJS_DIR@g; - s@!!SETTING_OBJS_DIR!!@$SETTING_OBJS_DIR@g; - s@!!SRC_DIR!!@$SRC_DIR@g; - s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g; - s@!!OSXAPP!!@$OSXAPP@g; - s@!!LANG_DIR!!@$LANG_DIR@g; - s@!!TTD!!@$TTD@g; - s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g; - s@!!DATA_DIR!!@$prefix_dir/$data_dir@g; - s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g; - s@!!MAN_DIR!!@$prefix_dir/$man_dir@g; - s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g; - s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g; - s@!!PERSONAL_DIR!!@$personal_dir@g; - s@!!SHARED_DIR!!@$shared_dir@g; - s@!!INSTALL_DIR!!@$install_dir@g; - s@!!BINARY_NAME!!@$binary_name@g; - s@!!STRGEN!!@$STRGEN@g; - s@!!DEPEND!!@$DEPEND@g; - s@!!SETTINGSGEN!!@$SETTINGSGEN@g; - s@!!STAGE!!@$STAGE@g; - s@!!MAKEDEPEND!!@$makedepend@g; - s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g; - s@!!SORT!!@$sort@g; - s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g; - s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g; - s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g; - s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g; - s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g; - s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g; - s@!!LANG_SUPPRESS!!@$lang_suppress@g; - s@!!OBJS_C!!@$OBJS_C@g; - s@!!OBJS_CPP!!@$OBJS_CPP@g; - s@!!OBJS_MM!!@$OBJS_MM@g; - s@!!OBJS_RC!!@$OBJS_RC@g; - s@!!SRCS!!@$SRCS@g; - s@!!OS!!@$os@g; - s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g; - s@!!AWK!!@$awk@g; - s@!!DISTCC!!@$distcc@g; - s@!!NFORENUM!!@$nforenum@g; - s@!!GRFCODEC!!@$grfcodec@g; - " - - if [ "$icon_theme_dir" != "" ]; then - SRC_REPLACE="$SRC_REPLACE - s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g; - " - else - SRC_REPLACE="$SRC_REPLACE - s@!!ICON_THEME_DIR!!@@g; - " - fi - - if [ "$man_dir" != "" ]; then - SRC_REPLACE="$SRC_REPLACE - s@!!MAN_DIR!!@$prefix_dir/$man_dir@g; - " - else - SRC_REPLACE="$SRC_REPLACE - s@!!MAN_DIR!!@@g; - " - fi - - if [ "$menu_dir" != "" ]; then - SRC_REPLACE="$SRC_REPLACE - s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g; - " - else - SRC_REPLACE="$SRC_REPLACE - s@!!MENU_DIR!!@@g; - " - fi -} - -generate_menu_item() { - MENU_REPLACE=" - s@!!TTD!!@$TTD@g; - s@!!MENU_GROUP!!@$menu_group@g; - s@!!MENU_NAME!!@$menu_name@g - " - log 1 "Generating menu item..." - mkdir -p media - < $ROOT_DIR/media/openttd.desktop.in sed "$MENU_REPLACE" > media/openttd.desktop -} - -generate_main() { - STAGE="[MAIN]" - - make_sed - - # Create the main Makefile - log 1 "Generating Makefile..." - echo "# Auto-generated file from 'Makefile.in' -- DO NOT EDIT" > Makefile - < $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" >> Makefile - cp $ROOT_DIR/Makefile.bundle.in Makefile.bundle - echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am - echo >> Makefile.am - # Make the copy of the source-list, so we don't trigger an unwanted recompile - cp $SOURCE_LIST config.cache.source.list - # Add the current directory, so we don't trigger an unwanted recompile - echo "`pwd`" > config.cache.pwd - # Make sure config.cache is OLDER then config.cache.source.list - touch config.cache - touch config.pwd - - if [ "$menu_dir" != "" ]; then - generate_menu_item - fi -} - -generate_lang() { - STAGE="[LANG]" - - make_sed - - # Create the language file - mkdir -p $LANG_OBJS_DIR - - log 1 "Generating lang/Makefile..." - echo "# Auto-generated file from 'Makefile.lang.in' -- DO NOT EDIT" > $LANG_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" >> $LANG_OBJS_DIR/Makefile - echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am - echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am -} - -generate_settings() { - STAGE="[SETTING]" - - make_sed - - # Create the language file - mkdir -p $SETTING_OBJS_DIR - - log 1 "Generating setting/Makefile..." - echo "# Auto-generated file from 'Makefile.settings.in' -- DO NOT EDIT" > $SETTING_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.setting.in sed "$SRC_REPLACE" >> $SETTING_OBJS_DIR/Makefile - echo "DIRS += $SETTING_OBJS_DIR" >> Makefile.am -} - -generate_grf() { - STAGE="[BASESET]" - - make_sed - - # Create the language file - mkdir -p $GRF_OBJS_DIR - - log 1 "Generating grf/Makefile..." - echo "# Auto-generated file from 'Makefile.grf.in' -- DO NOT EDIT" > $GRF_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.grf.in sed "$SRC_REPLACE" >> $GRF_OBJS_DIR/Makefile - echo "DIRS += $GRF_OBJS_DIR" >> Makefile.am -} - -generate_src_normal() { - STAGE=$1 - - make_sed - - # Create the source file - mkdir -p $SRC_OBJS_DIR - - log 1 "Generating $2/Makefile..." - echo "# Auto-generated file from 'Makefile.src.in' -- DO NOT EDIT" > $SRC_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" >> $SRC_OBJS_DIR/Makefile - echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am - echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am -} - -generate_src_osx() { - cc_host_orig="$cc_host" - cxx_host_orig="$cxx_host" - CFLAGS_orig="$CFLAGS" - LDFLAGS_orig="$LDFLAGS" - - for type in $enable_universal; do - - if [ -n "$osx_sdk_104_path" ]; then - # Use 10.4 SDK for 32-bit targets - CFLAGS="-isysroot $osx_sdk_104_path $CFLAGS_orig" - LDFLAGS="-Wl,-syslibroot,$osx_sdk_104_path $LDFLAGS_orig" - fi - - # We don't want to duplicate the x86_64 stuff for each target, so do it once here - if [ "$type" = "ppc64" ] || [ "$type" = "x86_64" ]; then - # 64 bits is always 10.5 or higher. Furthermore it has a non const ICONV - # and they also removed support for QuickTime/QuickDraw - if [ -n "$osx_sdk_path" ]; then - CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig" - LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig" - fi - CFLAGS="$CFLAGS -D_SQ64" - fi - - case $type in - ppc) - BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc" - cc_host="$cc_host_orig -arch ppc -mmacosx-version-min=10.3" - cxx_host="$cxx_host_orig -arch ppc -mmacosx-version-min=10.3" - generate_src_normal "[ppc]" "objs/ppc";; - ppc970) - BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970" - cc_host="$cc_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" - cxx_host="$cxx_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" - generate_src_normal "[ppc970]" "objs/ppc970";; - i386) - BASE_SRC_OBJS_DIR="$OBJS_DIR/i386" - cc_host="$cc_host_orig -arch i386 -mmacosx-version-min=10.4" - cxx_host="$cxx_host_orig -arch i386 -mmacosx-version-min=10.4" - generate_src_normal "[i386]" "objs/i386";; - ppc64) - BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc64" - cc_host="$cc_host_orig -arch ppc64 -mmacosx-version-min=10.5" - cxx_host="$cxx_host_orig -arch ppc64 -mmacosx-version-min=10.5" - generate_src_normal "[ppc64]" "objs/ppc64";; - x86_64) - BASE_SRC_OBJS_DIR="$OBJS_DIR/x86_64" - cc_host="$cc_host_orig -arch x86_64 -mmacosx-version-min=10.5" - cxx_host="$cxx_host_orig -arch x86_64 -mmacosx-version-min=10.5" - generate_src_normal "[x86_64]" "objs/x86_64";; - *) log 1 "Unknown architecture requested for universal build: $type";; - esac - done -} - -generate_src() { - if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then - generate_src_osx - else - generate_src_normal "[SRC]" "objs" - fi -} - -showhelp() { - echo "'configure' configures OpenTTD." - echo "" - echo "Usage: $0 [OPTION]... [VAR=VALUE]..." - echo "" - echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as" - echo "VAR=VALUE. See below for descriptions of some of the useful variables." - echo "" - echo "Defaults for the options are specified in brackets." - echo "" - echo "Configuration:" - echo " -h, --help display this help and exit" - echo "" - echo "System types:" - echo " --build=BUILD configure for building on BUILD [guessed]" - echo " --host=HOST cross-compile to build programs to run" - echo " on HOST [BUILD]" - echo " --windres=WINDRES the windres to use [HOST-windres]" - echo " --strip=STRIP the strip to use [HOST-strip]" - echo " --awk=AWK the awk to use in configure [awk]" - echo " --pkg-config=PKG-CONFIG the pkg-config to use in configure [pkg-config]" - echo " --lipo=LIPO the lipo to use (OSX ONLY) [HOST-lipo]" - echo " --os=OS the OS we are compiling for [DETECT]" - echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/" - echo " NETBSD/HPUX/SUNOS/CYGWIN/" - echo " MINGW/OS2/HAIKU" - echo "" - echo "Paths:" - echo " --prefix-dir=dir specifies the prefix for all installed" - echo " files [/usr/local]" - echo " --binary-dir=dir location of the binary. Will be prefixed" - echo " with the prefix-dir [games]" - echo " --data-dir=dir location of data files (lang, data, gm)." - echo " Will be prefixed with the prefix-dir" - echo " [share/games/openttd]" - echo " --doc-dir=dir location of the doc files" - echo " Will be prefixed with the prefix-dir" - echo " [$doc_dir]" - echo " --icon-dir=dir location of icons. Will be prefixed" - echo " with the prefix-dir [share/pixmaps]" - echo " --icon-theme-dir=dir location of icon theme." - echo " Will be prefixed with the prefix-dir" - echo " and postfixed with size-dirs [$icon_theme_dir]" - echo " --man-dir=dir location of the manual page (UNIX only)" - echo " Will be prefixed with the prefix-dir" - echo " [$man_dir]" - echo " --menu-dir=dir location of the menu item. (UNIX only, except OSX)" - echo " Will be prefixed with the prefix-dir" - echo " [share/applications]" - echo " --personal-dir=dir location of the personal directory" - echo " [os-dependent default]" - echo " --shared-dir=dir location of shared data files" - echo " [os-dependent default]" - echo " --install-dir=dir specifies the root to install to." - echo " Useful to install into jails [/]" - echo " --binary-name the name used for the binary, icons," - echo " desktop file, etc. when installing [openttd]" - echo "" - echo "Features and packages:" - echo " --enable-debug[=LVL] enable debug-mode (LVL=[0123], 0 is release)" - echo " --enable-desync-debug=[LVL] enable desync debug options (LVL=[012], 0 is none" - echo " --enable-profiling enables profiling" - echo " --enable-lto enables GCC's Link Time Optimization (LTO)/ICC's" - echo " Interprocedural Optimization if available" - echo " --enable-dedicated compile a dedicated server (without video)" - echo " --enable-static enable static compile (doesn't work for" - echo " all HOSTs)" - echo " --enable-translator enable extra output for translators" - echo " --enable-universal[=ARCH] enable universal builds (OSX ONLY). Allowed is any combination" - echo " of architectures: i386 ppc ppc970 ppc64 x86_64" - echo " Default architectures are: i386 ppc" - echo " --enable-osx-g5 enables optimizations for ppc970 (G5) (OSX ONLY)" - echo " --disable-cocoa-quartz disable the quartz window mode driver for Cocoa (OSX ONLY)" - echo " --disable-unicode disable unicode support to build win9x" - echo " version (Win32 ONLY)" - echo " --enable-console compile as a console application instead of as a GUI application." - echo " If this setting is active, debug output will appear in the same" - echo " console instead of opening a new window. (Win32 ONLY)" - echo " --disable-assert disable asserts (continue on errors)" - echo " --enable-strip enable any possible stripping" - echo " --without-osx-sysroot disable the automatic adding of sysroot " - echo " (OSX ONLY)" - echo " --without-application-bundle disable generation of application bundle" - echo " (OSX ONLY)" - echo " --without-menu-entry Don't generate a menu item (Freedesktop based only)" - echo " --menu-group=group Category in which the menu item will be placed (Freedesktop based only)" - echo " --menu-name=name Name of the menu item when placed [OpenTTD]" - echo " --with-direct-music enable direct music support (Win32 ONLY)" - echo " --with-sort=sort define a non-default location for sort" - echo " --with-midi=midi define which midi-player to use" - echo " --with-midi-arg=arg define which args to use for the" - echo " midi-player" - echo " --with-fluidsynth enables fluidsynth support" - echo " --with-allegro[=\"pkg-config allegro\"]" - echo " enables Allegro video driver support" - echo " --with-cocoa enables COCOA video driver (OSX ONLY)" - echo " --with-sdl[=\"sdl1|sdl2\"] enables SDL video driver support" - echo " --with-zlib[=\"pkg-config zlib\"]" - echo " enables zlib support" - echo " --with-liblzma[=\"pkg-config liblzma\"]" - echo " enables liblzma support" - echo " --with-liblzo2[=liblzo2.a] enables liblzo2 support" - echo " --with-png[=\"pkg-config libpng\"]" - echo " enables libpng support" - echo " --with-freetype[=\"pkg-config freetype2\"]" - echo " enables libfreetype support" - echo " --with-fontconfig[=\"pkg-config fontconfig\"]" - echo " enables fontconfig support" - echo " --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]" - echo " enables XDG base directory support" - echo " --with-icu enables icu components for layout and sorting" - echo " --with-icu-layout[=\"pkg-config icu-lx\"]" - echo " enables icu components for layouting (right-to-left support)" - echo " --with-icu-sort[=\"pkg-config icu-i18n\"]" - echo " enables icu components for locale specific string sorting" - echo " --static-icu try to link statically (libsicu instead of" - echo " libicu; can fail as the new name is guessed)" - echo " --with-iconv[=iconv-path] enables iconv support" - echo " --disable-builtin-depend disable use of builtin deps finder" - echo " --with-makedepend[=makedepend] enables makedepend support" - echo " --with-ccache enables ccache support" - echo " --with-distcc enables distcc support" - echo " --without-grfcodec disable usage of grfcodec and re-generation of base sets" - echo " --without-threads disable threading support" - echo " --without-sse disable SSE support (x86/x86_64 only)" - echo "" - echo "Some influential environment variables:" - echo " CC C compiler command" - echo " CXX C++ compiler command" - echo " CFLAGS C compiler flags" - echo " CXXFLAGS C++ compiler flags" - echo " WINDRES windres command" - echo " LDFLAGS linker flags, e.g. -L if you" - echo " have libraries in a nonstandard" - echo " directory " - echo " CFLAGS_BUILD C compiler flags for build time tool generation" - echo " CXXFLAGS_BUILD C++ compiler flags for build time tool generation" - echo " LDFLAGS_BUILD linker flags for build time tool generation" - echo " PKG_CONFIG_PATH additional library search paths (see \"man pkg-config\")" - echo " PKG_CONFIG_LIBDIR replace the default library search path (see \"man pkg-config\")" - echo "" - echo "Use these variables to override the choices made by 'configure' or to help" - echo "it to find libraries and programs with nonstandard names/locations." -} diff --git a/configure b/configure deleted file mode 100755 index 991e8f1432..0000000000 --- a/configure +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/sh - -# 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 . - -check_path_characters() { - if [ -n "`echo $ROOT_DIR | grep '[^-_A-Za-z0-9\/\\\.:]'`" ]; then - echo "WARNING: The path contains a non-alphanumeric character that might cause" - echo " failures in subsequent build stages. Any failures with the build" - echo " will most likely be caused by this." - fi -} - -CONFIGURE_EXECUTABLE="$_" -# On *nix systems those two are equal when ./configure is done -if [ "$0" != "$CONFIGURE_EXECUTABLE" ]; then - # On some systems, when ./configure is triggered from 'make' - # the $_ is filled with 'make'. So if that is true, skip 'make' - # and use $0 (and hope that is correct ;)) - if [ -n "`echo $CONFIGURE_EXECUTABLE | grep make`" ]; then - CONFIGURE_EXECUTABLE="$0" - else - CONFIGURE_EXECUTABLE="$CONFIGURE_EXECUTABLE $0" - fi -fi -# Find out where configure is (in what dir) -ROOT_DIR="`dirname $0`" -# For MSYS/MinGW we want to know the FULL path. This as that path is generated -# once you call an outside binary. Having the same path for the rest is needed -# for dependency checking. -# pwd -W returns said FULL path, but doesn't exist on others so fall back. -ROOT_DIR="`cd $ROOT_DIR && (pwd -W 2>/dev/null || pwd 2>/dev/null)`" - -check_path_characters - -# Same here as for the ROOT_DIR above -PWD="`pwd -W 2>/dev/null || pwd 2>/dev/null`" -PREFIX="$PWD/bin" - -. $ROOT_DIR/config.lib - -# Set default dirs -OBJS_DIR="$PWD/objs" -BASE_SRC_OBJS_DIR="$OBJS_DIR" -LANG_OBJS_DIR="$OBJS_DIR/lang" -GRF_OBJS_DIR="$OBJS_DIR/extra_grf" -SETTING_OBJS_DIR="$OBJS_DIR/setting" -BIN_DIR="$PREFIX" -SRC_DIR="$ROOT_DIR/src" -LANG_DIR="$SRC_DIR/lang" -MEDIA_DIR="$ROOT_DIR/media" -SOURCE_LIST="$ROOT_DIR/source.list" - -if [ "$1" = "--reconfig" ] || [ "$1" = "--reconfigure" ]; then - if [ ! -f "config.cache" ]; then - echo "can't reconfigure, because never configured before" - exit 1 - fi - # Make sure we don't lock config.cache - cat config.cache | sed 's@\\ @\\\\ @g' > cache.tmp - sh cache.tmp - RET=$? - rm -f cache.tmp - exit $RET -fi - -set_default -detect_params "$@" -check_params -save_params -make_cflags_and_ldflags - -EXE="" -if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ]; then - EXE=".exe" -fi - -TTD="openttd$EXE" -STRGEN="strgen$EXE" -DEPEND="depend$EXE" -SETTINGSGEN="settings_gen$EXE" - -if [ -z "$sort" ]; then - PIPE_SORT="sed s@a@a@" -else - PIPE_SORT="$sort" -fi - -if [ ! -f "$LANG_DIR/english.txt" ]; then - echo "Languages not found in $LANG_DIR. Can't continue without it." - echo "Please make sure the dir exists and contains at least english.txt" -fi - -# Read the source.list and process it -AWKCOMMAND=' - { } - /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; } - /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; } - /^( *)#if/ { - gsub(" ", "", $0); - gsub("^#if ", "", $0); - - if (deep != skip) { deep += 1; next; } - - deep += 1; - - if ($0 == "ALLEGRO" && "'$allegro_config'" == "") { next; } - if ($0 == "SDL" && "'$sdl_config'" == "") { next; } - if ($0 == "SDL2" && "'$sdl2_config'" == "") { next; } - if ($0 == "PNG" && "'$png_config'" == "") { next; } - if ($0 == "OSX" && "'$os'" != "OSX") { next; } - if ($0 == "OS2" && "'$os'" != "OS2") { next; } - if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } - if ($0 == "AI" && "'$enable_ai'" == "0") { next; } - if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } - if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } - if ($0 == "WIN32" && "'$os'" != "MINGW" && - "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } - if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } - if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } - if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } - if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; } - if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } - if ($0 == "USE_SSE" && "'$with_sse'" != "1") { next; } - - skip += 1; - - next; - } - /^( *)#/ { next } - /^$/ { next } - /\.h$/ { next } - /\.hpp$/ { next } - { - if (deep == skip) { - gsub(" ", "", $0); - print $0; - } - } -' - -# Read the source.list and process it -# Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations -SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | LC_ALL=C $PIPE_SORT`" - -OBJS_C="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", $0); print $0; }'`" -OBJS_CPP="`echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.cpp$/ { gsub(\".cpp$\", \".o\", $0); print $0; }'`" -OBJS_MM="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.mm$/ { gsub(\".mm$\", \".o\", $0); print $0; }'`" -OBJS_RC="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.rc$/ { gsub(\".rc$\", \".o\", $0); print $0; }'`" -SRCS="` echo \"$SRCS\" | $awk ' { ORS = \" \" } { print $0; }'`" - -# In makefiles, we always use -u for sort -if [ -z "$sort" ]; then - sort="sed s@a@a@" -else - sort="$sort -u" -fi - -CONFIGURE_FILES="$ROOT_DIR/configure $ROOT_DIR/config.lib $ROOT_DIR/Makefile.in $ROOT_DIR/Makefile.grf.in $ROOT_DIR/Makefile.lang.in $ROOT_DIR/Makefile.src.in $ROOT_DIR/Makefile.bundle.in $ROOT_DIR/Makefile.setting.in" - -generate_main -generate_lang -generate_settings -generate_grf -generate_src - -check_path_characters diff --git a/findversion.sh b/findversion.sh deleted file mode 100755 index 28fcc121f7..0000000000 --- a/findversion.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/sh - -# 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 . - - -# Arguments given? Show help text. -if [ "$#" != "0" ]; then - cat <\t\t\t -VERSION - a string describing what version of the code the current checkout is - based on. - This also includes the commit date, an indication of whether the checkout - was modified and which branch was checked out. This value is not - guaranteed to be sortable, but is mainly meant for identifying the - revision and user display. - - If no revision identifier could be found, this is left empty. -ISODATE - the commit date of the revision this checkout is based on. - The commit date may differ from the author date. - This can be used to decide upon the age of the source. - - If no timestamp could be found, this is left empty. -MODIFIED - Whether (the src directory of) this checkout is modified or not. A - value of 0 means not modified, a value of 2 means it was modified. - - A value of 1 means that the modified status is unknown, because this - is not an git checkout for example. - -HASH - the git revision hash - -By setting the AWK environment variable, a caller can determine which -version of "awk" is used. If nothing is set, this script defaults to -"awk". -EOF -exit 1; -fi - -# Allow awk to be provided by the caller. -if [ -z "$AWK" ]; then - AWK=awk -fi - -# Find out some dirs -cd `dirname "$0"` -ROOT_DIR=`pwd` - -# Determine if we are using a modified version -# Assume the dir is not modified -MODIFIED="0" -if [ -d "$ROOT_DIR/.git" ] || [ -f "$ROOT_DIR/.git" ]; then - # We are a git checkout - # Refresh the index to make sure file stat info is in sync, then look for modifications - git update-index --refresh >/dev/null - if [ -n "`git diff-index HEAD`" ]; then - MODIFIED="2" - fi - HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` - SHORTHASH=`echo ${HASH} | cut -c1-10` - ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'` - YEAR=`echo ${ISODATE} | cut -c1-4` - BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`" - TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`" - - if [ "$MODIFIED" -eq "0" ]; then - hashprefix="-g" - elif [ "$MODIFIED" -eq "2" ]; then - hashprefix="-m" - else - hashprefix="-u" - fi - - if [ -n "$TAG" ]; then - VERSION="${TAG}" - ISTAG="1" - if [ -n "`echo \"${TAG}\" | grep \"^[0-9.]*$\"`" ]; then - ISSTABLETAG="1" - else - ISSTABLETAG="0" - fi - else - VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}" - ISTAG="0" - ISSTABLETAG="0" - fi - -elif [ -f "$ROOT_DIR/.ottdrev" ]; then - # We are an exported source bundle - cat $ROOT_DIR/.ottdrev - exit -else - # We don't know - MODIFIED="1" - HASH="" - SHORTHASH="" - BRANCH="" - ISODATE="" - YEAR="" - TAG="" - VERSION="" - ISTAG="0" - ISSTABLETAG="0" -fi - -echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG $YEAR" diff --git a/projects/basesets_vs140.vcxproj b/projects/basesets_vs140.vcxproj deleted file mode 100644 index 4e5ed52c4a..0000000000 --- a/projects/basesets_vs140.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v140 - - - - - - - - - ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt - - - ..\bin\baseset\ - ..\objs\baseset\ - - - - Generating no_music.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_music.obm;%(Outputs) - - - Generating no_sound.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_sound.obs;%(Outputs) - - - Generating orig_dos.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obg;%(Outputs) - - - Generating orig_dos.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obm;%(Outputs) - - - Generating orig_dos.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obs;%(Outputs) - - - Generating orig_dos_de.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos_de.obg;%(Outputs) - - - Generating orig_tto.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_tto.obm;%(Outputs) - - - Generating orig_win.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obg;%(Outputs) - - - Generating orig_win.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obm;%(Outputs) - - - Generating orig_win.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obs;%(Outputs) - - - - - - diff --git a/projects/basesets_vs140.vcxproj.filters b/projects/basesets_vs140.vcxproj.filters deleted file mode 100644 index aa555f3fc3..0000000000 --- a/projects/basesets_vs140.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - diff --git a/projects/basesets_vs140.vcxproj.filters.in b/projects/basesets_vs140.vcxproj.filters.in deleted file mode 100644 index 07bff4542f..0000000000 --- a/projects/basesets_vs140.vcxproj.filters.in +++ /dev/null @@ -1,11 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - -!!FILES!! - - diff --git a/projects/basesets_vs140.vcxproj.in b/projects/basesets_vs140.vcxproj.in deleted file mode 100644 index 0471100a3e..0000000000 --- a/projects/basesets_vs140.vcxproj.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v140 - - - - - - - - -!!FILTERS!! - - - ..\bin\baseset\ - ..\objs\baseset\ - - -!!FILES!! - - - - - diff --git a/projects/basesets_vs141.vcxproj b/projects/basesets_vs141.vcxproj deleted file mode 100644 index a01f24989b..0000000000 --- a/projects/basesets_vs141.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v141 - - - - - - - - - ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt - - - ..\bin\baseset\ - ..\objs\baseset\ - - - - Generating no_music.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_music.obm;%(Outputs) - - - Generating no_sound.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_sound.obs;%(Outputs) - - - Generating orig_dos.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obg;%(Outputs) - - - Generating orig_dos.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obm;%(Outputs) - - - Generating orig_dos.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obs;%(Outputs) - - - Generating orig_dos_de.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos_de.obg;%(Outputs) - - - Generating orig_tto.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_tto.obm;%(Outputs) - - - Generating orig_win.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obg;%(Outputs) - - - Generating orig_win.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obm;%(Outputs) - - - Generating orig_win.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obs;%(Outputs) - - - - - - diff --git a/projects/basesets_vs141.vcxproj.filters b/projects/basesets_vs141.vcxproj.filters deleted file mode 100644 index aa555f3fc3..0000000000 --- a/projects/basesets_vs141.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - diff --git a/projects/basesets_vs141.vcxproj.filters.in b/projects/basesets_vs141.vcxproj.filters.in deleted file mode 100644 index 07bff4542f..0000000000 --- a/projects/basesets_vs141.vcxproj.filters.in +++ /dev/null @@ -1,11 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - -!!FILES!! - - diff --git a/projects/basesets_vs141.vcxproj.in b/projects/basesets_vs141.vcxproj.in deleted file mode 100644 index 69dbd2e078..0000000000 --- a/projects/basesets_vs141.vcxproj.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v141 - - - - - - - - -!!FILTERS!! - - - ..\bin\baseset\ - ..\objs\baseset\ - - -!!FILES!! - - - - - diff --git a/projects/basesets_vs142.vcxproj b/projects/basesets_vs142.vcxproj deleted file mode 100644 index d483708aa7..0000000000 --- a/projects/basesets_vs142.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v142 - - - - - - - - - ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt - - - ..\bin\baseset\ - ..\objs\baseset\ - - - - Generating no_music.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_music.obm;%(Outputs) - - - Generating no_sound.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_sound.obs;%(Outputs) - - - Generating orig_dos.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obg;%(Outputs) - - - Generating orig_dos.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obm;%(Outputs) - - - Generating orig_dos.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obs;%(Outputs) - - - Generating orig_dos_de.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos_de.obg;%(Outputs) - - - Generating orig_tto.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_tto.obm;%(Outputs) - - - Generating orig_win.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obg;%(Outputs) - - - Generating orig_win.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obm;%(Outputs) - - - Generating orig_win.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obs;%(Outputs) - - - - - - diff --git a/projects/basesets_vs142.vcxproj.filters b/projects/basesets_vs142.vcxproj.filters deleted file mode 100644 index aa555f3fc3..0000000000 --- a/projects/basesets_vs142.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - diff --git a/projects/basesets_vs142.vcxproj.filters.in b/projects/basesets_vs142.vcxproj.filters.in deleted file mode 100644 index 07bff4542f..0000000000 --- a/projects/basesets_vs142.vcxproj.filters.in +++ /dev/null @@ -1,11 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - -!!FILES!! - - diff --git a/projects/basesets_vs142.vcxproj.in b/projects/basesets_vs142.vcxproj.in deleted file mode 100644 index 9743d83e7a..0000000000 --- a/projects/basesets_vs142.vcxproj.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v142 - - - - - - - - -!!FILTERS!! - - - ..\bin\baseset\ - ..\objs\baseset\ - - -!!FILES!! - - - - - diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs deleted file mode 100755 index b70bcdf67c..0000000000 --- a/projects/determineversion.vbs +++ /dev/null @@ -1,216 +0,0 @@ -Option Explicit - -' 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 . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -Sub FindReplaceInFile(filename, to_find, replacement) - Dim file, data - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - data = file.ReadAll - file.Close - data = Replace(data, to_find, replacement) - Set file = FSO.CreateTextFile(filename, -1, 0) - file.Write data - file.Close -End Sub - -Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, year, filename) - FSO.CopyFile filename & ".in", filename - FindReplaceInFile filename, "!!MODIFIED!!", modified - FindReplaceInFile filename, "!!ISODATE!!", isodate - FindReplaceInFile filename, "!!VERSION!!", version - FindReplaceInFile filename, "!!DATE!!", cur_date - FindReplaceInFile filename, "!!GITHASH!!", githash - FindReplaceInFile filename, "!!ISTAG!!", istag - FindReplaceInFile filename, "!!ISSTABLETAG!!", isstabletag - FindReplaceInFile filename, "!!YEAR!!", year -End Sub - -Sub UpdateFiles(version) - Dim modified, isodate, cur_date, githash, istag, isstabletag, year - cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) - - If InStr(version, Chr(9)) Then - ' Split string into field with tails - isodate = Mid(version, InStr(version, Chr(9)) + 1) - modified = Mid(isodate, InStr(isodate, Chr(9)) + 1) - githash = Mid(modified, InStr(modified, Chr(9)) + 1) - istag = Mid(githash, InStr(githash, Chr(9)) + 1) - isstabletag = Mid(istag, InStr(istag, Chr(9)) + 1) - year = Mid(isstabletag, InStr(isstabletag, Chr(9)) + 1) - ' Remove tails from fields - version = Mid(version, 1, InStr(version, Chr(9)) - 1) - isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) - modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) - githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1) - istag = Mid(istag, 1, InStr(istag, Chr(9)) - 1) - isstabletag = Mid(isstabletag, 1, InStr(isstabletag, Chr(9)) - 1) - Else - isodate = 0 - modified = 1 - githash = "" - istag = 0 - isstabletag = 0 - year = "" - End If - - UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, year, "../src/rev.cpp" - UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, year, "../src/os/windows/ottdres.rc" -End Sub - -Function DetermineVersion() - Dim WshShell, branch, tag, modified, isodate, oExec, line, hash, shorthash, year - Set WshShell = CreateObject("WScript.Shell") - On Error Resume Next - - modified = 0 - hash = "" - shorthash = "" - branch = "" - isodate = "" - tag = "" - year = "" - - ' Set the environment to english - WshShell.Environment("PROCESS")("LANG") = "en" - - Set oExec = WshShell.Exec("git rev-parse --verify HEAD") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - - If oExec.ExitCode = 0 Then - hash = oExec.StdOut.ReadLine() - shorthash = Mid(hash, 1, 10) - ' Make sure index is in sync with disk - Set oExec = WshShell.Exec("git update-index --refresh") - If Err.Number = 0 Then - ' StdOut and StdErr share a 4kB buffer so prevent it from filling up as we don't care about the output - oExec.StdOut.Close - oExec.StdErr.Close - ' Wait till the application is finished ... - Do While oExec.Status = 0 - WScript.Sleep 10 - Loop - End If - Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - - If oExec.ExitCode = 1 Then - modified = 2 - End If ' oExec.ExitCode = 1 - - Set oExec = WshShell.Exec("git show -s --pretty=format:%ci") - if Err.Number = 0 Then - isodate = Mid(oExec.StdOut.ReadLine(), 1, 10) - isodate = Replace(isodate, "-", "") - year = Mid(isodate, 1, 4) - End If ' Err.Number = 0 - - ' Check branch - Err.Clear - Set oExec = WshShell.Exec("git symbolic-ref HEAD") - If Err.Number = 0 Then - line = oExec.StdOut.ReadLine() - branch = Mid(line, InStrRev(line, "/") + 1) - End If ' Err.Number = 0 - - ' Check if a tag is currently checked out - Err.Clear - Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - If oExec.ExitCode = 0 Then - tag = oExec.StdOut.ReadLine() - If Right(tag, 2) = "^0" Then - tag = Left(tag, Len(tag) - 2) - End If - End If ' oExec.ExitCode = 0 - End If ' Err.Number = 0 - End If ' Err.Number = 0 - End If ' oExec.ExitCode = 0 - End If ' Err.Number = 0 - - If hash = "" And FSO.FileExists("../.ottdrev") Then - Dim rev_file - Set rev_file = FSO.OpenTextFile("../.ottdrev", 1, True, 0) - DetermineVersion = rev_file.ReadLine() - rev_file.Close() - ElseIf hash = "" Then - DetermineVersion = "norev000" - modified = 1 - Else - Dim version, hashprefix, istag, isstabletag - If modified = 0 Then - hashprefix = "-g" - ElseIf modified = 2 Then - hashprefix = "-m" - Else - hashprefix = "-u" - End If - - If tag <> "" Then - version = tag - istag = 1 - - Set stable_regexp = New RegExp - stable_regexp.Pattern = "^[0-9.]*$" - If stable_regexp.Test(tag) Then - isstabletag = 1 - Else - isstabletag = 0 - End If - Else - version = isodate & "-" & branch & hashprefix & shorthash - istag = 0 - isstabletag = 0 - End If - - DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag & Chr(9) & year - End If -End Function - -Function IsCachedVersion(ByVal version) - Dim cache_file, cached_version - cached_version = "" - Set cache_file = FSO.OpenTextFile("../config.cache.version", 1, True, 0) - If Not cache_file.atEndOfStream Then - cached_version = cache_file.ReadLine() - End If - cache_file.Close - - If InStr(version, Chr(9)) Then - version = Mid(version, 1, Instr(version, Chr(9)) - 1) - End If - - If version <> cached_version Then - Set cache_file = fso.CreateTextFile("../config.cache.version", True) - cache_file.WriteLine(version) - cache_file.Close - IsCachedVersion = False - Else - IsCachedVersion = True - End If -End Function - -Function CheckFile(filename) - CheckFile = FSO.FileExists(filename) - If CheckFile Then CheckFile = (FSO.GetFile(filename).DateLastModified >= FSO.GetFile(filename & ".in").DateLastModified) -End Function - -Dim version -version = DetermineVersion -If Not (IsCachedVersion(version) And CheckFile("../src/rev.cpp") And CheckFile("../src/os/windows/ottdres.rc")) Then - UpdateFiles version -End If diff --git a/projects/dpi_aware.manifest b/projects/dpi_aware.manifest deleted file mode 100644 index ee1c7ea224..0000000000 --- a/projects/dpi_aware.manifest +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - True/PM - - - - - - - - - - - - - - - - - diff --git a/projects/gen-kdev4.sh b/projects/gen-kdev4.sh deleted file mode 100755 index 2062d9686a..0000000000 --- a/projects/gen-kdev4.sh +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/sh - -# 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 . - -# echo without interpretation of backslash escapes and without -# adding newline at the end - just the string as it is -rawprint() -{ - printf '%s' "$@" -} - -encode_dword() -{ - printf '\x%02x' \ - `expr $1 / 16777216 % 256` \ - `expr $1 / 65536 % 256` \ - `expr $1 / 256 % 256` \ - `expr $1 % 256` -} - -encode_string() -{ - # turn string into UTF-16 and hexdump it - hex_utf16=`rawprint "$1" | iconv -t UTF-16BE | od -t x1 -A n | tr -d -c '[:xdigit:]'`; - - encode_dword `rawprint "$hex_utf16" | wc -m | xargs -I {} expr {} / 2` # length = num hex digits / 2 - rawprint "$hex_utf16" | sed 's/../\\x&/g' # put '\x' prefix before every pair of digits -} - -encode_single_define() -{ - encode_string `rawprint "$1" | grep -o '^[^=]*'` # everything before '=' - rawprint '\x00\x00\x00\n\x00' - encode_string `rawprint "$1" | sed 's/^[^=]*=\?//'` # everything after '=' -} - -# $1 - newline-separated list of defines -encode_defines() -{ - # add some fixed defines and discard empty lines from the tail - defines=`printf 'va_list\nva_args\n%s' "$1"` - - # count lines (no newline at the end so add one) - encode_dword `printf '%s\n' "$defines" | wc -l` - - while [ -n "$defines" ]; do - encode_single_define `rawprint "$defines" | head -n 1` - defines=`rawprint "$defines" | tail -n +2` - done -} - -encode_includes() -{ - encode_dword 3 # number of custom includes - encode_string "$1/src/stdafx.h" - encode_string "$1/objs/lang" - encode_string "$1/objs/setting" -} - -# escape with a backslash (\) characters special to the sed replace string: \ & -# also escape our custom filed separator that we will be using in sed: @ -escape_sed_special() -{ - sed -e 's/[\&@]/\\&/g' -} - - - -PROJECT_DIR=`pwd` -DIR_NAME=`pwd | xargs -0 basename` - -USAGE_TEXT='Usage: - - projects/gen-kdev4 [PROJECT_NAME|-h|--help] - -PROJECT_NAME is the name of the project that will be displayed in KDevelop. -Before executing, cd into OpenTTD folder and run ./configure script. - --h, --help - print help and exit' - -case "$# $1" in - '1 -h' | '1 --help') printf 'Generate OpenTTD project files for KDevelop 4+\n\n%s\n' "$USAGE_TEXT"; exit 0;; - 1*) PROJECT_NAME="$1";; - 0*) PROJECT_NAME="$DIR_NAME";; - *) printf 'Wrong arguments given. %s\n' "$USAGE_TEXT" >&2; exit 1;; -esac - -CFLAGS=`grep '^using CFLAGS\.\.\.' config.log 2>/dev/null` -if [ -z "$CFLAGS" ]; then - echo "OpenTTD config.log not found" >&2 - echo "cd into OpenTTD first and run 'configure'" >&2 - exit 1 -fi -DEFINES=`eval "printf '%s\n' $CFLAGS" | grep '^\-D' | cut -c3-` - -PROJECT_NAME_SED=s@!!PROJECT_NAME!!@`rawprint "$PROJECT_NAME" | escape_sed_special`@g -PROJECT_DIR_SED=s@!!PROJECT_DIR!!@`rawprint "$PROJECT_DIR" | escape_sed_special`@g -CUSTOM_DEFINES_SED=s@!!CUSTOM_DEFINES!!@`encode_defines "$DEFINES" | escape_sed_special`@g -CUSTOM_INCLUDES_SED=s@!!CUSTOM_INCLUDES!!@`encode_includes "$PROJECT_DIR" | escape_sed_special`@g - -mkdir -p .kdev4 - -sed -e "$PROJECT_NAME_SED" \ - >"$PROJECT_DIR/$DIR_NAME.kdev4" \ - << "EOF" -[Project] -Manager=KDevCustomMakeManager -Name=!!PROJECT_NAME!! -EOF - -sed -e "$PROJECT_DIR_SED" -e "$CUSTOM_DEFINES_SED" -e "$CUSTOM_INCLUDES_SED" \ - >"$PROJECT_DIR/.kdev4/$DIR_NAME.kdev4" \ - << "EOF" -[CustomDefinesAndIncludes][ProjectPath0] -Defines=!!CUSTOM_DEFINES!! -Includes=!!CUSTOM_INCLUDES!! -Path=. - -[Defines And Includes][Compiler] -Name=GCC -Path=gcc -Type=GCC - -[Filters] -size=10 - -[Filters][0] -inclusive=0 -pattern=.* -targets=3 - -[Filters][1] -inclusive=0 -pattern=.svn -targets=2 - -[Filters][2] -inclusive=0 -pattern=.hg -targets=2 - -[Filters][3] -inclusive=0 -pattern=.git -targets=2 - -[Filters][4] -inclusive=0 -pattern=*.rej -targets=1 - -[Filters][5] -inclusive=0 -pattern=*.orig -targets=1 - -[Filters][6] -inclusive=0 -pattern=*~ -targets=1 - -[Filters][7] -inclusive=0 -pattern=.*.kate-swp -targets=1 - -[Filters][8] -inclusive=0 -pattern=.*.swp -targets=1 - -[Filters][9] -inclusive=0 -pattern=/objs -targets=2 - -[Launch] -Launch Configurations=Launch Configuration 0 - -[Launch][Launch Configuration 0] -Configured Launch Modes=execute -Configured Launchers=nativeAppLauncher -Name=Launch OpenTTD\s -Type=Native Application - -[Launch][Launch Configuration 0][Data] -Arguments=-d 1 -Dependencies=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x00) -Dependency Action=Nothing -EnvironmentGroup= -Executable=file://!!PROJECT_DIR!!/bin/openttd -External Terminal=konsole --noclose --workdir %workdir -e %exe -Project Target= -Use External Terminal=false -Working Directory=file://!!PROJECT_DIR!!/bin -isExecutable=true -EOF diff --git a/projects/generate b/projects/generate deleted file mode 100755 index 7d3c599654..0000000000 --- a/projects/generate +++ /dev/null @@ -1,337 +0,0 @@ -#!/bin/bash - -# 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 . - -# This file generates all project files based on sources.list, so everyone who -# can start a bash process, can update the project files. - -# Set neutral locale so sort behaves the same everywhere -LC_ALL=C -export LC_ALL - -# We really need gawk for this! -AWK=gawk - -${AWK} --version > /dev/null 2> /dev/null -if [ "$?" != "0" ]; then - echo "This script needs gawk to run properly" - exit 1 -fi - -ROOT_DIR="`pwd`/.." -if ! [ -e "$ROOT_DIR/source.list" ] -then - ROOT_DIR="`pwd`" -fi -if ! [ -e "$ROOT_DIR/source.list" ] -then - echo "Can't find source.list, needed in order to make this run. Please go to either" - echo " the project dir, or the root dir of a clean SVN checkout." - exit 1 -fi - -# openttd_vs142.sln is for MSVC 2019 -# openttd_vs142.vcxproj is for MSVC 2019 -# openttd_vs142.vcxproj.filters is for MSVC 2019 -# langs_vs142.vcxproj is for MSVC 2019 -# strgen_vs142.vcxproj is for MSVC 2019 -# strgen_vs142.vcxproj.filters is for MSVC 2019 -# generate_vs142.vcxproj is for MSVC 2019 -# version_vs142.vcxproj is for MSVC 2019 -# basesets_vs142.vcxproj is for MSVC 2019 - -# openttd_vs141.sln is for MSVC 2017 -# openttd_vs141.vcxproj is for MSVC 2017 -# openttd_vs141.vcxproj.filters is for MSVC 2017 -# langs_vs141.vcxproj is for MSVC 2017 -# strgen_vs141.vcxproj is for MSVC 2017 -# strgen_vs141.vcxproj.filters is for MSVC 2017 -# generate_vs141.vcxproj is for MSVC 2017 -# version_vs141.vcxproj is for MSVC 2017 -# basesets_vs141.vcxproj is for MSVC 2017 - -# openttd_vs140.sln is for MSVC 2015 -# openttd_vs140.vcxproj is for MSVC 2015 -# openttd_vs140.vcxproj.filters is for MSVC 2015 -# langs_vs140.vcxproj is for MSVC 2015 -# strgen_vs140.vcxproj is for MSVC 2015 -# strgen_vs140.vcxproj.filters is for MSVC 2015 -# generate_vs140.vcxproj is for MSVC 2015 -# version_vs140.vcxproj is for MSVC 2015 -# basesets_vs140.vcxproj is for MSVC 2015 - - - - -# First, collect the list of Windows files -allegro_config="" -sdl_config="1" -sdl2_config="1" -png_config="1" -os="MSVC" -enable_dedicated="0" -enable_ai="1" -with_cocoa="0" -enable_directmusic="1" -enable_fluidsynth="0" -with_threads="1" -file_prefix="..\\\\\\\\src\\\\\\\\" - -safety_check() { - li="" - for i in `cat $1 | grep -v "#\|ottdres.rc\|win32.cpp\|win32_v.cpp" | xargs -n 1 basename | sort`; do - if [ "$li" = "$i" ]; then - echo " !! ERROR !!" - echo "" - echo "The filename '$i' is already used in this project." - echo "Because MSVC uses one single directory for all object files, it" - echo "cannot handle filenames with the same name inside the same project." - echo "Please rename either one of the file and try generating again." - echo "" - echo " !! ERROR !!" - exit 1 - fi - li="$i" - done -} - -grep '\.h' "$ROOT_DIR/source.list" | grep -v '../objs/langs/table/strings.h\|../objs/settings/table/settings.h' | sed 's/ //g' | sort > tmp.headers.source.list -find "$ROOT_DIR/src" \( -iname "*.h" -or -iname "*.hpp" \) -and -not -ipath "*/.svn/*" | sed "s~$ROOT_DIR/src/~~" | sort > tmp.headers.src -if [ -n "`diff tmp.headers.source.list tmp.headers.src`" ]; then - echo "The following headers are missing in source.list and not in /src/ or vice versa." - diff tmp.headers.source.list tmp.headers.src | grep '[<>]' | sort - echo "" -fi -rm tmp.headers.* - -load_main_data() { - # Read the source.list and process it - RES="`cat $1 | ${AWK} -v BINMODE=1 ' - { gsub("\\r", "", $0); } - /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; } - /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; } - /^( *)#if/ { - gsub(" ", "", $0); - gsub("^#if", "", $0); - gsub("^ ", "", $0); - - if (deep != skip) { deep += 1; next; } - - deep += 1; - - if ($0 == "ALLEGRO" && "'$allegro_config'" == "") { next; } - if ($0 == "SDL" && "'$sdl_config'" == "") { next; } - if ($0 == "SDL2" && "'$sdl2_config'" == "") { next; } - if ($0 == "PNG" && "'$png_config'" == "") { next; } - if ($0 == "OSX" && "'$os'" != "OSX") { next; } - if ($0 == "OS2" && "'$os'" != "OS2") { next; } - if ($0 == "DOS" && "'$os'" != "DOS") { next; } - if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } - if ($0 == "AI" && "'$enable_ai'" == "0") { next; } - if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } - if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } - if ($0 == "WIN32" && "'$os'" != "MINGW" && - "'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; } - if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } - if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; } - if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; } - if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; } - if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } - - skip += 1; - - next; - } - /^( *)#/ { - if (deep == skip) { - gsub(" ", "", $0); - gsub("^#", "", $0); - gsub("^ ", "", $0); - filter = $0; - print "#3 "; - printf "#3 {c76ff9f1-1e62-46d8-8d55-%012d}\n", i; - print "#3 "; - i += 1; - } - - next; - } - /^$/ { next } - { - if (deep == skip) { - gsub(" ", "", $0); - gsub("/", "\\\\\\\\", $0); - split($0, file, "."); - cltype = "ClInclude" - if (file[2] == "cpp") cltype = "ClCompile"; - if (file[2] == "rc") cltype = "ResourceCompile"; - print "#2 <"cltype" Include=\\"'$file_prefix'"$0"\\" />"; - print "#4 <"cltype" Include=\\"'$file_prefix'"$0"\\">"; - print "#4 "filter""; - print "#4 "; - } - } - '`" - - eval "$2=\"\$RES\"" -} - -load_lang_data() { - RES="" - # Windows Folder sort and Linux Folder sort are slightly different. - # By removing the extension and sorting it on Linux, they are the same. - for i in `ls $1 | sed s~.txt$~~g | sort` - do - i=`basename $i` - if [ "$i" == "english" ] - then - continue - fi - RES="$RES -#2 -#2 Generating "$i" language file -#2 ..\\\\objs\\\\strgen\\\\strgen.exe -s ..\\\\src\\\\lang -d ..\\\\bin\\\\lang \"%(FullPath)\" -#2 ..\\\\src\\\\lang\\\\english.txt;..\\\\objs\\\\strgen\\\\strgen.exe;%(AdditionalInputs) -#2 ..\\\\bin\\\\lang\\\\"$i".lng;%(Outputs) -#2 -#3 -#3 Translations -#3 " - done - - eval "$2=\"\$RES\"" -} - -load_settings_data() { - RES="" - RES2=" -#3..\\\\objs\\\\settings\\\\settings_gen.exe -o ..\\\\objs\\\\settings\\\\table\\\\settings.h -b ..\\\\src\\\\table\\\\settings.h.preamble -a ..\\\\src\\\\table\\\\settings.h.postamble" - for i in `ls $1` - do - i=`basename $i` - RES="$RES -#2 -#4 -#4 INI -#4 " - RES2="$RES2 ..\\\\src\\\\table\\\\"$i - done - - eval "$2=\"\$RES\$RES2\"" -} - -load_baseset_data() { - FIRST="" - RES="" - RES2=" -#4 " - # Windows Folder sort and Linux Folder sort are slightly different. - # By removing the extension and sorting it on Linux, they are the same. - for i in `ls $2 | sed s~.txt$~~g | sort` - do - if [ "$FIRST" != "" ]; then - RES2="$RES2;" - else - FIRST=1 - fi - i=`basename $i` - RES2="$RES2..\\\\src\\\\lang\\\\$i.txt" - done - RES2="$RES2" - # Windows Folder sort and Linux Folder sort are slightly different. - # By fiddling with the extension and sorting it on Linux, they are the same. - for i in `ls $1 | sed s~\\\.~000~g | sort | sed s~000~.~g` - do - i=`basename $i` - RES="$RES -#2 -#2 Generating "$i" baseset metadata file -#2 cscript //nologo ..\\\\media\\\\baseset\\\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\\\src\\\\lang ..\\\\bin\\\\baseset\\\\orig_extra.grf -#2 \$(Langs);..\\\\bin\\\\baseset\\\\orig_extra.grf;%(AdditionalInputs) -#2 ..\\\\bin\\\\baseset\\\\"$i";%(Outputs) -#2 -#3 -#3 Baseset Metadata -#3 " - done - - eval "$3=\"\$RES\$RES2\"" -} - -generate() { - echo "Generating $2..." - # Everything above the !!FILTERS!! marker - cat "$ROOT_DIR/projects/$2".in | ${AWK} -v BINMODE=1 -v FILTERS="$3" -v FILES="$1" ' - /^$/ { next } - /!!FILTERS!!/ { - split(FILTERS, filters, "\n"); - for (i = 1; filters[i] != ""; i++) { - line = $0 - gsub(/!!FILTERS!!/, filters[i], line); - print line; - } - next; - } - /!!FILES!!/ { - split(FILES, files, "\n"); - for (i = 1; files[i] != ""; i++) { - line = $0 - gsub(/!!FILES!!/, files[i], line); - print line; - } - next; - } - { - print $0; - } - ' > "$ROOT_DIR/projects/$2" -} - -safety_check "$ROOT_DIR/source.list" - -load_main_data "$ROOT_DIR/source.list" openttd -openttdfiles=`echo "$openttd" | grep "^#4" | sed "s~#4~~g"` -openttdfilters=`echo "$openttd" | grep "^#3" | sed "s~#3~~g"` -openttdvcxproj=`echo "$openttd" | grep "^#2" | sed "s~#2~~g"` - -load_lang_data "$ROOT_DIR/src/lang/*.txt" lang -langfiles=`echo "$lang" | grep "^#3" | sed "s~#3~~g"` -langvcxproj=`echo "$lang" | grep "^#2" | sed "s~#2~~g"` - -load_settings_data "$ROOT_DIR/src/table/*.ini" settings -settingsfiles=`echo "$settings" | grep "^#4" | sed "s~#4~~g"` -settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"` -settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"` - -load_baseset_data "$ROOT_DIR/media/baseset/*.ob?" "$ROOT_DIR/src/lang/*.txt" baseset -basesetfiles=`echo "$baseset" | grep "^#3" | sed "s-#3--g"` -basesetvcxproj=`echo "$baseset" | grep "^#2" | sed "s~#2~~g"` -basesetlangs=`echo "$baseset" | grep "^#4" | sed "s~#4~~g"` - -generate "$openttdvcxproj" "openttd_vs140.vcxproj" -generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters" -generate "$openttdvcxproj" "openttd_vs141.vcxproj" -generate "$openttdfiles" "openttd_vs141.vcxproj.filters" "$openttdfilters" -generate "$openttdvcxproj" "openttd_vs142.vcxproj" -generate "$openttdfiles" "openttd_vs142.vcxproj.filters" "$openttdfilters" -generate "$langvcxproj" "langs_vs140.vcxproj" -generate "$langfiles" "langs_vs140.vcxproj.filters" -generate "$langvcxproj" "langs_vs141.vcxproj" -generate "$langfiles" "langs_vs141.vcxproj.filters" -generate "$langvcxproj" "langs_vs142.vcxproj" -generate "$langfiles" "langs_vs142.vcxproj.filters" -generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs140.vcxproj.filters" -generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs141.vcxproj.filters" -generate "$settingsvcxproj" "settings_vs142.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs142.vcxproj.filters" -generate "$basesetvcxproj" "basesets_vs140.vcxproj" "$basesetlangs" -generate "$basesetfiles" "basesets_vs140.vcxproj.filters" -generate "$basesetvcxproj" "basesets_vs141.vcxproj" "$basesetlangs" -generate "$basesetfiles" "basesets_vs141.vcxproj.filters" -generate "$basesetvcxproj" "basesets_vs142.vcxproj" "$basesetlangs" -generate "$basesetfiles" "basesets_vs142.vcxproj.filters" diff --git a/projects/generate.vbs b/projects/generate.vbs deleted file mode 100644 index 577dce9558..0000000000 --- a/projects/generate.vbs +++ /dev/null @@ -1,414 +0,0 @@ -Option Explicit - -' 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 . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -' openttd_vs142.sln is for MSVC 2019 -' openttd_vs142.vcxproj is for MSVC 2019 -' openttd_vs142.vcxproj.filters is for MSVC 2019 -' langs_vs142.vcxproj is for MSVC 2019 -' strgen_vs142.vcxproj is for MSVC 2019 -' strgen_vs142.vcxproj.filters is for MSVC 2019 -' generate_vs142.vcxproj is for MSVC 2019 -' version_vs142.vcxproj is for MSVC 2019 -' basesets_vs142.vcxproj is for MSVC 2019 - -' openttd_vs141.sln is for MSVC 2017 -' openttd_vs141.vcxproj is for MSVC 2017 -' openttd_vs141.vcxproj.filters is for MSVC 2017 -' langs_vs141.vcxproj is for MSVC 2017 -' strgen_vs141.vcxproj is for MSVC 2017 -' strgen_vs141.vcxproj.filters is for MSVC 2017 -' generate_vs141.vcxproj is for MSVC 2017 -' version_vs141.vcxproj is for MSVC 2017 -' basesets_vs141.vcxproj is for MSVC 2017 - -' openttd_vs140.sln is for MSVC 2015 -' openttd_vs140.vcxproj is for MSVC 2015 -' openttd_vs140.vcxproj.filters is for MSVC 2015 -' langs_vs140.vcxproj is for MSVC 2015 -' strgen_vs140.vcxproj is for MSVC 2015 -' strgen_vs140.vcxproj.filters is for MSVC 2015 -' generate_vs140.vcxproj is for MSVC 2015 -' version_vs140.vcxproj is for MSVC 2015 -' basesets_vs140.vcxproj is for MSVC 2015 - -Sub safety_check(filename) - Dim file, line, regexp, list - - ' Define regexp - Set regexp = New RegExp - regexp.Pattern = "#|ottdres.rc|win32.cpp|win32_v.cpp" - regexp.Global = True - - ' We use a dictionary to check duplicates - Set list = CreateObject("Scripting.Dictionary") - - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - While Not file.AtEndOfStream - line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs - If Len(line) > 0 And Not regexp.Test(line) Then - line = FSO.GetFileName(line) - if list.Exists(line) Then - WScript.Echo " !! ERROR !!" _ - & vbCrLf & "" _ - & vbCrLf & "The filename '" & line & "' is already used in this project." _ - & vbCrLf & "Because MSVC uses one single directory for all object files, it" _ - & vbCrLf & "cannot handle filenames with the same name inside the same project." _ - & vbCrLf & "Please rename either one of the file and try generating again." _ - & vbCrLf & "" _ - & vbCrLf & " !! ERROR !!" - WScript.Quit(1) - End If - list.Add line, line - End If - Wend - file.Close -End Sub - -Sub get_files(srcdir, dir, list) - Dim file, filename - Dim rekeep, reskip - - ' pattern for files to keep - Set rekeep = New RegExp - rekeep.Pattern = "\.h(pp)?$" - rekeep.Global = True - - ' pattern for files to exclude - Set reskip = New RegExp - reskip.Pattern = "\.svn" - reskip.Global = True - - For Each file in dir.Files - filename = Replace(file.path, srcdir, "") ' Remove */src/ - filename = Replace(filename, "\", "/") ' Replace separators - If rekeep.Test(filename) And Not reskip.Test(filename) Then - list.Add filename, filename - End If - Next -End Sub - -Sub get_dir_files(srcdir, dir, list) - Dim folder - ' Get files - get_files srcdir, dir, list - - ' Recurse in subfolders - For Each folder in dir.SubFolders - get_dir_files srcdir, folder, list - Next -End Sub - -Sub headers_check(filename, dir) - Dim source_list_headers, src_dir_headers, regexp, line, file, str - - ' Define regexp for source.list parsing - Set regexp = New RegExp - regexp.Pattern = "\.h" - regexp.Global = True - - ' Parse source.list and store headers in a dictionary - Set source_list_headers = CreateObject("Scripting.Dictionary") - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - While Not file.AtEndOfStream - line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs - If Len(line) > 0 And regexp.Test(line) And line <> "../objs/langs/table/strings.h" And line <> "../objs/settings/table/settings.h" Then - source_list_headers.Add line, line - End If - Wend - file.Close() - - ' Get header files in /src/ - Set src_dir_headers = CreateObject("Scripting.Dictionary") - get_dir_files dir, FSO.GetFolder(dir), src_dir_headers - - ' Finding files in source.list but not in /src/ - For Each line In source_list_headers - If Not src_dir_headers.Exists(line) Then - str = str & "< " & line & vbCrLf - End If - Next - - ' Finding files in /src/ but not in source.list - For Each line In src_dir_headers - If Not source_list_headers.Exists(line) Then - str = str & "> " & line & vbCrLf - End If - Next - - ' Display the missing files if any - If str <> "" Then - str = "The following headers are missing in source.list and not in /src/ or vice versa." _ - & vbCrLf & str - WScript.Echo str - End If -End Sub - -Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) - Dim file, line, deep, skip, first_filter, first_file, filter, cltype, index - index = 0 - ' Read the source.list and process it - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - While Not file.AtEndOfStream - line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs - If Len(line) > 0 Then - Select Case Split(line, " ")(0) - Case "#end" - If deep = skip Then skip = skip - 1 - deep = deep - 1 - Case "#else" - If deep = skip Then - skip = skip - 1 - ElseIf deep - 1 = skip Then - skip = skip + 1 - End If - Case "#if" - line = Replace(line, "#if ", "") - If deep = skip And ( _ - line = "SDL" Or _ - line = "SDL2" Or _ - line = "PNG" Or _ - line = "WIN32" Or _ - line = "MSVC" Or _ - line = "DIRECTMUSIC" Or _ - line = "AI" Or _ - line = "USE_SSE" Or _ - line = "USE_XAUDIO2" Or _ - line = "USE_THREADS" _ - ) Then skip = skip + 1 - deep = deep + 1 - Case "#" - if deep = skip Then - line = Replace(line, "# ", "") - if first_filter <> 0 Then - filters = filters & vbCrLf - Else - first_filter = 1 - End If - filter = line - filters = filters & _ - " " & vbCrLf & _ - " {c76ff9f1-1e62-46d8-8d55-" & String(12 - Len(CStr(index)), "0") & index & "}" & vbCrLf & _ - " " - index = index + 1 - End If - Case Else - If deep = skip Then - line = Replace(line, "/" ,"\") - if first_file <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_file = 1 - End If - Select Case Split(Line, ".")(1) - Case "cpp" - cltype = "ClCompile" - Case "rc" - cltype = "ResourceCompile" - Case Else - cltype = "ClInclude" - End Select - vcxproj = vcxproj & " <" & cltype & " Include="& Chr(34) & "..\src\" & line & Chr(34) & " />" - files = files & _ - " <" & cltype & " Include="& Chr(34) & "..\src\" & line & Chr(34) & ">" & vbCrLf & _ - " " & filter & "" & vbCrLf & _ - " " - End If - End Select - End If - Wend - file.Close() -End Sub - -Sub load_lang_data(dir, ByRef vcxproj, ByRef files) - Dim folder, file, first_time - Set folder = FSO.GetFolder(dir) - For Each file In folder.Files - file = FSO.GetFileName(file) - If file <> "english.txt" And FSO.GetExtensionName(file) = "txt" Then - file = Left(file, Len(file) - 4) - If first_time <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_time = 1 - End If - vcxproj = vcxproj & _ - " " & vbCrLf & _ - " Generating " & file & " language file" & vbCrLf & _ - " ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang " & Chr(34) & "%(FullPath)" & Chr(34) & "" & vbCrLf & _ - " ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)" & vbCrLf & _ - " ..\bin\lang\" & file & ".lng;%(Outputs)" & vbCrLf & _ - " " - files = files & _ - " " & vbCrLf & _ - " Translations" & vbCrLf & _ - " " - End If - Next -End Sub - -Sub load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) - Dim folder, file, first_time - command = "..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble" - Set folder = FSO.GetFolder(dir) - For Each file In folder.Files - file = FSO.GetFileName(file) - If FSO.GetExtensionName(file) = "ini" Then - if first_time <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_time = 1 - End If - vcxproj = vcxproj & _ - " " - command = command & " ..\src\table\" & file - files = files & _ - " " & vbCrLf & _ - " INI" & vbCrLf & _ - " " - End If - Next -End Sub - -Sub load_baseset_data(dir, langdir, ByRef vcxproj, ByRef files, ByRef langs) - Dim folder, file, ext, first_time - Set folder = FSO.GetFolder(langdir) - langs = " " - For Each file In folder.Files - If first_time <> 0 Then - langs = langs & ";" - Else - first_time = 1 - End If - file = FSO.GetFileName(file) - ext = FSO.GetExtensionName(file) - langs = langs & "..\src\lang\" & file - Next - langs = langs & "" - first_time = 0 - Set folder = FSO.GetFolder(dir) - For Each file In folder.Files - file = FSO.GetFileName(file) - ext = FSO.GetExtensionName(file) - If ext = "obm" Or ext = "obg" Or ext = "obs" Then - If first_time <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_time = 1 - End If - vcxproj = vcxproj & _ - " " & vbCrLf & _ - " Generating " & file & " baseset metadata file" & vbCrLf & _ - " cscript //nologo ..\media\baseset\translations.vbs " & Chr(34) & "%(FullPath)" & Chr(34) & " " & Chr(34) & "$(OutputPath)" & file & Chr(34) & " ..\src\lang ..\bin\baseset\orig_extra.grf" & vbCrLf & _ - " $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)" & vbCrLf & _ - " ..\bin\baseset\" & file & ";%(Outputs)" & vbCrLf & _ - " " - files = files & _ - " " & vbCrLf & _ - " Baseset Metadata" & vbCrLf & _ - " " - End If - Next -End Sub - -Sub generate(data, dest, data2) - Dim srcfile, destfile, line, regexp - WScript.Echo "Generating " & FSO.GetFileName(dest) & "..." - Set srcfile = FSO.OpenTextFile(dest & ".in", 1, 0, 0) - Set destfile = FSO.CreateTextFile(dest, -1, 0) - - If Not IsNull(data2) Then - ' Everything above the !!FILTERS!! marker - Set regexp = New RegExp - regexp.Pattern = "!!FILTERS!!" - regexp.Global = True - - line = srcfile.ReadLine() - While Not regexp.Test(line) - If len(line) > 0 Then destfile.WriteLine(line) - line = srcfile.ReadLine() - Wend - - ' Our generated content - line = regexp.Replace(line, data2) - destfile.WriteLine(line) - End If - - ' Everything above the !!FILES!! marker - line = srcfile.ReadLine() - While line <> "!!FILES!!" - If len(line) > 0 Then destfile.WriteLine(line) - line = srcfile.ReadLine() - Wend - - ' Our generated content - destfile.WriteLine(data) - - ' Everything below the !!FILES!! marker - While Not srcfile.AtEndOfStream - line = srcfile.ReadLine() - If len(line) > 0 Then destfile.WriteLine(line) - Wend - srcfile.Close() - destfile.Close() -End Sub - -Dim ROOT_DIR -ROOT_DIR = FSO.GetFolder("..").Path -If Not FSO.FileExists(ROOT_DIR & "/source.list") Then - ROOT_DIR = FSO.GetFolder(".").Path -End If -If Not FSO.FileExists(ROOT_DIR & "/source.list") Then - WScript.Echo "Can't find source.list, needed in order to make this run." _ - & vbCrLf & "Please go to either the project dir, or the root dir of a clean SVN checkout." - WScript.Quit(1) -End If - -safety_check ROOT_DIR & "/source.list" -headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed for DoFiles - -Dim openttdvcxproj, openttdfilters, openttdfiles -load_main_data ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", openttdfilters -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs142.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs142.vcxproj.filters", openttdfilters - -Dim langvcxproj, langfiles -load_lang_data ROOT_DIR & "/src/lang", langvcxproj, langfiles -generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null -generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null -generate langvcxproj, ROOT_DIR & "/projects/langs_vs142.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs142.vcxproj.filters", Null - -Dim settingsvcxproj, settingscommand, settingsfiles -load_settings_data ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs141.vcxproj.filters", Null -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs142.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs142.vcxproj.filters", Null - -Dim basesetvcxproj, basesetfiles, basesetlangs -load_baseset_data ROOT_DIR & "/media/baseset", ROOT_DIR & "/src/lang", basesetvcxproj, basesetfiles, basesetlangs -generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetlangs -generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null -generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs -generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null -generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", basesetlangs -generate basesetfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null diff --git a/projects/generate_vs140.vcxproj b/projects/generate_vs140.vcxproj deleted file mode 100644 index b17142050b..0000000000 --- a/projects/generate_vs140.vcxproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - v140 - - - - - - - - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - - - - - - diff --git a/projects/generate_vs141.vcxproj b/projects/generate_vs141.vcxproj deleted file mode 100644 index d7a877db17..0000000000 --- a/projects/generate_vs141.vcxproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - v141 - - - - - - - - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - - - - - - diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj deleted file mode 100644 index 7230676cb5..0000000000 --- a/projects/generate_vs142.vcxproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - v142 - - - - - - - - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - - - - - - diff --git a/projects/langs_vs140.vcxproj b/projects/langs_vs140.vcxproj deleted file mode 100644 index 25e7160bfb..0000000000 --- a/projects/langs_vs140.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v140 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs140.vcxproj.filters b/projects/langs_vs140.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs140.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs140.vcxproj.filters.in b/projects/langs_vs140.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs140.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs140.vcxproj.in b/projects/langs_vs140.vcxproj.in deleted file mode 100644 index 3271fecffa..0000000000 --- a/projects/langs_vs140.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v140 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs141.vcxproj b/projects/langs_vs141.vcxproj deleted file mode 100644 index c554c6e378..0000000000 --- a/projects/langs_vs141.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v141 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs141.vcxproj.filters b/projects/langs_vs141.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs141.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs141.vcxproj.filters.in b/projects/langs_vs141.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs141.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs141.vcxproj.in b/projects/langs_vs141.vcxproj.in deleted file mode 100644 index b73d52c5c9..0000000000 --- a/projects/langs_vs141.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v141 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs142.vcxproj b/projects/langs_vs142.vcxproj deleted file mode 100644 index 0a11156bb0..0000000000 --- a/projects/langs_vs142.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v142 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs142.vcxproj.filters b/projects/langs_vs142.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs142.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs142.vcxproj.filters.in b/projects/langs_vs142.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs142.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs142.vcxproj.in b/projects/langs_vs142.vcxproj.in deleted file mode 100644 index f24c7cad78..0000000000 --- a/projects/langs_vs142.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v142 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln deleted file mode 100644 index e2b7632f7e..0000000000 --- a/projects/openttd_vs140.sln +++ /dev/null @@ -1,103 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs140.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs140.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs140.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs140.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs140.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs140.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs140.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs140.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs140.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj deleted file mode 100644 index 20253a2065..0000000000 --- a/projects/openttd_vs140.vcxproj +++ /dev/null @@ -1,1387 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v140 - - - Application - false - Unicode - true - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - true - v140 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters deleted file mode 100644 index 11e9821ffe..0000000000 --- a/projects/openttd_vs140.vcxproj.filters +++ /dev/null @@ -1,3155 +0,0 @@ - - - - - {c76ff9f1-1e62-46d8-8d55-000000000000} - - - {c76ff9f1-1e62-46d8-8d55-000000000001} - - - {c76ff9f1-1e62-46d8-8d55-000000000002} - - - {c76ff9f1-1e62-46d8-8d55-000000000003} - - - {c76ff9f1-1e62-46d8-8d55-000000000004} - - - {c76ff9f1-1e62-46d8-8d55-000000000005} - - - {c76ff9f1-1e62-46d8-8d55-000000000006} - - - {c76ff9f1-1e62-46d8-8d55-000000000007} - - - {c76ff9f1-1e62-46d8-8d55-000000000008} - - - {c76ff9f1-1e62-46d8-8d55-000000000009} - - - {c76ff9f1-1e62-46d8-8d55-000000000010} - - - {c76ff9f1-1e62-46d8-8d55-000000000011} - - - {c76ff9f1-1e62-46d8-8d55-000000000012} - - - {c76ff9f1-1e62-46d8-8d55-000000000013} - - - {c76ff9f1-1e62-46d8-8d55-000000000014} - - - {c76ff9f1-1e62-46d8-8d55-000000000015} - - - {c76ff9f1-1e62-46d8-8d55-000000000016} - - - {c76ff9f1-1e62-46d8-8d55-000000000017} - - - {c76ff9f1-1e62-46d8-8d55-000000000018} - - - {c76ff9f1-1e62-46d8-8d55-000000000019} - - - {c76ff9f1-1e62-46d8-8d55-000000000020} - - - {c76ff9f1-1e62-46d8-8d55-000000000021} - - - {c76ff9f1-1e62-46d8-8d55-000000000022} - - - {c76ff9f1-1e62-46d8-8d55-000000000023} - - - {c76ff9f1-1e62-46d8-8d55-000000000024} - - - {c76ff9f1-1e62-46d8-8d55-000000000025} - - - {c76ff9f1-1e62-46d8-8d55-000000000026} - - - {c76ff9f1-1e62-46d8-8d55-000000000027} - - - {c76ff9f1-1e62-46d8-8d55-000000000028} - - - {c76ff9f1-1e62-46d8-8d55-000000000029} - - - {c76ff9f1-1e62-46d8-8d55-000000000030} - - - {c76ff9f1-1e62-46d8-8d55-000000000031} - - - {c76ff9f1-1e62-46d8-8d55-000000000032} - - - {c76ff9f1-1e62-46d8-8d55-000000000033} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - MD5 - - - MD5 - - - Compat - - - Compat - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI API - - - Game API - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Drivers - - - Drivers - - - Drivers - - - Sprite loaders - - - Sprite loaders - - - Sprite loaders - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - Video - - - Video - - - Video - - - Video - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - - - - - diff --git a/projects/openttd_vs140.vcxproj.filters.in b/projects/openttd_vs140.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs140.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in deleted file mode 100644 index b5628a23d3..0000000000 --- a/projects/openttd_vs140.vcxproj.in +++ /dev/null @@ -1,374 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v140 - - - Application - false - Unicode - true - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - true - v140 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln deleted file mode 100644 index 6e328ba764..0000000000 --- a/projects/openttd_vs141.sln +++ /dev/null @@ -1,103 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs141.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs141.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs141.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs141.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs141.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs141.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj deleted file mode 100644 index 7b0da9569c..0000000000 --- a/projects/openttd_vs141.vcxproj +++ /dev/null @@ -1,1387 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v141 - - - Application - false - Unicode - true - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - true - v141 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters deleted file mode 100644 index 11e9821ffe..0000000000 --- a/projects/openttd_vs141.vcxproj.filters +++ /dev/null @@ -1,3155 +0,0 @@ - - - - - {c76ff9f1-1e62-46d8-8d55-000000000000} - - - {c76ff9f1-1e62-46d8-8d55-000000000001} - - - {c76ff9f1-1e62-46d8-8d55-000000000002} - - - {c76ff9f1-1e62-46d8-8d55-000000000003} - - - {c76ff9f1-1e62-46d8-8d55-000000000004} - - - {c76ff9f1-1e62-46d8-8d55-000000000005} - - - {c76ff9f1-1e62-46d8-8d55-000000000006} - - - {c76ff9f1-1e62-46d8-8d55-000000000007} - - - {c76ff9f1-1e62-46d8-8d55-000000000008} - - - {c76ff9f1-1e62-46d8-8d55-000000000009} - - - {c76ff9f1-1e62-46d8-8d55-000000000010} - - - {c76ff9f1-1e62-46d8-8d55-000000000011} - - - {c76ff9f1-1e62-46d8-8d55-000000000012} - - - {c76ff9f1-1e62-46d8-8d55-000000000013} - - - {c76ff9f1-1e62-46d8-8d55-000000000014} - - - {c76ff9f1-1e62-46d8-8d55-000000000015} - - - {c76ff9f1-1e62-46d8-8d55-000000000016} - - - {c76ff9f1-1e62-46d8-8d55-000000000017} - - - {c76ff9f1-1e62-46d8-8d55-000000000018} - - - {c76ff9f1-1e62-46d8-8d55-000000000019} - - - {c76ff9f1-1e62-46d8-8d55-000000000020} - - - {c76ff9f1-1e62-46d8-8d55-000000000021} - - - {c76ff9f1-1e62-46d8-8d55-000000000022} - - - {c76ff9f1-1e62-46d8-8d55-000000000023} - - - {c76ff9f1-1e62-46d8-8d55-000000000024} - - - {c76ff9f1-1e62-46d8-8d55-000000000025} - - - {c76ff9f1-1e62-46d8-8d55-000000000026} - - - {c76ff9f1-1e62-46d8-8d55-000000000027} - - - {c76ff9f1-1e62-46d8-8d55-000000000028} - - - {c76ff9f1-1e62-46d8-8d55-000000000029} - - - {c76ff9f1-1e62-46d8-8d55-000000000030} - - - {c76ff9f1-1e62-46d8-8d55-000000000031} - - - {c76ff9f1-1e62-46d8-8d55-000000000032} - - - {c76ff9f1-1e62-46d8-8d55-000000000033} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - MD5 - - - MD5 - - - Compat - - - Compat - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI API - - - Game API - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Drivers - - - Drivers - - - Drivers - - - Sprite loaders - - - Sprite loaders - - - Sprite loaders - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - Video - - - Video - - - Video - - - Video - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - - - - - diff --git a/projects/openttd_vs141.vcxproj.filters.in b/projects/openttd_vs141.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs141.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in deleted file mode 100644 index 015c23d3c5..0000000000 --- a/projects/openttd_vs141.vcxproj.in +++ /dev/null @@ -1,374 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v141 - - - Application - false - Unicode - true - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - true - v141 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln deleted file mode 100644 index 15cd430168..0000000000 --- a/projects/openttd_vs142.sln +++ /dev/null @@ -1,105 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28516.95 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs142.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs142.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs142.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs142.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs142.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs142.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs142.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs142.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1DE4D2BD-DBC4-4304-907E-34994EEAA4C1} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj deleted file mode 100644 index db497537db..0000000000 --- a/projects/openttd_vs142.vcxproj +++ /dev/null @@ -1,1387 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v142 - - - Application - false - Unicode - true - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - true - v142 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters deleted file mode 100644 index 11e9821ffe..0000000000 --- a/projects/openttd_vs142.vcxproj.filters +++ /dev/null @@ -1,3155 +0,0 @@ - - - - - {c76ff9f1-1e62-46d8-8d55-000000000000} - - - {c76ff9f1-1e62-46d8-8d55-000000000001} - - - {c76ff9f1-1e62-46d8-8d55-000000000002} - - - {c76ff9f1-1e62-46d8-8d55-000000000003} - - - {c76ff9f1-1e62-46d8-8d55-000000000004} - - - {c76ff9f1-1e62-46d8-8d55-000000000005} - - - {c76ff9f1-1e62-46d8-8d55-000000000006} - - - {c76ff9f1-1e62-46d8-8d55-000000000007} - - - {c76ff9f1-1e62-46d8-8d55-000000000008} - - - {c76ff9f1-1e62-46d8-8d55-000000000009} - - - {c76ff9f1-1e62-46d8-8d55-000000000010} - - - {c76ff9f1-1e62-46d8-8d55-000000000011} - - - {c76ff9f1-1e62-46d8-8d55-000000000012} - - - {c76ff9f1-1e62-46d8-8d55-000000000013} - - - {c76ff9f1-1e62-46d8-8d55-000000000014} - - - {c76ff9f1-1e62-46d8-8d55-000000000015} - - - {c76ff9f1-1e62-46d8-8d55-000000000016} - - - {c76ff9f1-1e62-46d8-8d55-000000000017} - - - {c76ff9f1-1e62-46d8-8d55-000000000018} - - - {c76ff9f1-1e62-46d8-8d55-000000000019} - - - {c76ff9f1-1e62-46d8-8d55-000000000020} - - - {c76ff9f1-1e62-46d8-8d55-000000000021} - - - {c76ff9f1-1e62-46d8-8d55-000000000022} - - - {c76ff9f1-1e62-46d8-8d55-000000000023} - - - {c76ff9f1-1e62-46d8-8d55-000000000024} - - - {c76ff9f1-1e62-46d8-8d55-000000000025} - - - {c76ff9f1-1e62-46d8-8d55-000000000026} - - - {c76ff9f1-1e62-46d8-8d55-000000000027} - - - {c76ff9f1-1e62-46d8-8d55-000000000028} - - - {c76ff9f1-1e62-46d8-8d55-000000000029} - - - {c76ff9f1-1e62-46d8-8d55-000000000030} - - - {c76ff9f1-1e62-46d8-8d55-000000000031} - - - {c76ff9f1-1e62-46d8-8d55-000000000032} - - - {c76ff9f1-1e62-46d8-8d55-000000000033} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - MD5 - - - MD5 - - - Compat - - - Compat - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI API - - - Game API - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Drivers - - - Drivers - - - Drivers - - - Sprite loaders - - - Sprite loaders - - - Sprite loaders - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - Video - - - Video - - - Video - - - Video - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - - - - - diff --git a/projects/openttd_vs142.vcxproj.filters.in b/projects/openttd_vs142.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs142.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in deleted file mode 100644 index 6941b3450b..0000000000 --- a/projects/openttd_vs142.vcxproj.in +++ /dev/null @@ -1,374 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v142 - - - Application - false - Unicode - true - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - true - v142 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest deleted file mode 100644 index c7905ee709..0000000000 --- a/projects/os_versions.manifest +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/regression.bat b/projects/regression.bat deleted file mode 100644 index db373c371b..0000000000 --- a/projects/regression.bat +++ /dev/null @@ -1,6 +0,0 @@ -cd ..\bin -editbin /nologo /subsystem:console openttd.exe -cscript /nologo ai\regression\run.vbs -set RESULT=%ERRORLEVEL% -editbin /nologo /subsystem:windows openttd.exe -exit %RESULT% diff --git a/projects/regression_vs140.vcxproj b/projects/regression_vs140.vcxproj deleted file mode 100644 index b1c9f4930a..0000000000 --- a/projects/regression_vs140.vcxproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Debug - Win32 - - - - {4712B013-437D-42CE-947F-DEBABA15261F} - regression - regression - - - - Makefile - v140 - - - - - - - - - - - - call regression.bat - call regression.bat - del ..\bin\tmp.regression - - - - {668328a0-b40e-4cdb-bd72-d0064424414a} - - - - - - diff --git a/projects/regression_vs141.vcxproj b/projects/regression_vs141.vcxproj deleted file mode 100644 index fda3f3312d..0000000000 --- a/projects/regression_vs141.vcxproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Debug - Win32 - - - - {4712B013-437D-42CE-947F-DEBABA15261F} - regression - regression - - - - Makefile - v141 - - - - - - - - - - - - call regression.bat - call regression.bat - del ..\bin\tmp.regression - - - - {668328a0-b40e-4cdb-bd72-d0064424414a} - - - - - - diff --git a/projects/regression_vs142.vcxproj b/projects/regression_vs142.vcxproj deleted file mode 100644 index 3ddcc6f37a..0000000000 --- a/projects/regression_vs142.vcxproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Debug - Win32 - - - - {4712B013-437D-42CE-947F-DEBABA15261F} - regression - regression - - - - Makefile - v142 - - - - - - - - - - - - call regression.bat - call regression.bat - del ..\bin\tmp.regression - - - - {668328a0-b40e-4cdb-bd72-d0064424414a} - - - - - - diff --git a/projects/settings_vs140.vcxproj b/projects/settings_vs140.vcxproj deleted file mode 100644 index b5f5151821..0000000000 --- a/projects/settings_vs140.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v140 - - - - - - - - - ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs140.vcxproj.filters b/projects/settings_vs140.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs140.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs140.vcxproj.filters.in b/projects/settings_vs140.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs140.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs140.vcxproj.in b/projects/settings_vs140.vcxproj.in deleted file mode 100644 index dcbbfbd352..0000000000 --- a/projects/settings_vs140.vcxproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v140 - - - - - - - - - !!FILTERS!! - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj deleted file mode 100644 index b3f6871945..0000000000 --- a/projects/settings_vs141.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v141 - - - - - - - - - ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs141.vcxproj.filters b/projects/settings_vs141.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs141.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs141.vcxproj.filters.in b/projects/settings_vs141.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs141.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in deleted file mode 100644 index 1701c99f5f..0000000000 --- a/projects/settings_vs141.vcxproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v141 - - - - - - - - - !!FILTERS!! - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj deleted file mode 100644 index e0ed933091..0000000000 --- a/projects/settings_vs142.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v142 - - - - - - - - - ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs142.vcxproj.filters b/projects/settings_vs142.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs142.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs142.vcxproj.filters.in b/projects/settings_vs142.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs142.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in deleted file mode 100644 index 4463c573d7..0000000000 --- a/projects/settings_vs142.vcxproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v142 - - - - - - - - - !!FILTERS!! - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settingsgen_vs140.vcxproj b/projects/settingsgen_vs140.vcxproj deleted file mode 100644 index 12ce280f3a..0000000000 --- a/projects/settingsgen_vs140.vcxproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - v140 - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - 5.01 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs140.vcxproj.filters b/projects/settingsgen_vs140.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs140.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs141.vcxproj b/projects/settingsgen_vs141.vcxproj deleted file mode 100644 index 2b356f2eab..0000000000 --- a/projects/settingsgen_vs141.vcxproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - v141 - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - 5.01 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs141.vcxproj.filters b/projects/settingsgen_vs141.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs141.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj deleted file mode 100644 index fb2f7a731e..0000000000 --- a/projects/settingsgen_vs142.vcxproj +++ /dev/null @@ -1,84 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - v142 - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - /std:c++latest /Zc:__cplusplus %(AdditionalOptions) - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - 5.01 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs142.vcxproj.filters b/projects/settingsgen_vs142.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs142.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/strgen_vs140.vcxproj b/projects/strgen_vs140.vcxproj deleted file mode 100644 index b972d873eb..0000000000 --- a/projects/strgen_vs140.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - v140 - - - - - - - - - - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - AllRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - 5.01 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs140.vcxproj.filters b/projects/strgen_vs140.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs140.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs141.vcxproj b/projects/strgen_vs141.vcxproj deleted file mode 100644 index addc6f10a5..0000000000 --- a/projects/strgen_vs141.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - v141 - - - - - - - - - - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - AllRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - 5.01 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs141.vcxproj.filters b/projects/strgen_vs141.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs141.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj deleted file mode 100644 index 554109b045..0000000000 --- a/projects/strgen_vs142.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - v142 - - - - - - - - - - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - NativeMinimumRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - 5.01 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs142.vcxproj.filters b/projects/strgen_vs142.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs142.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/version_vs140.vcxproj b/projects/version_vs140.vcxproj deleted file mode 100644 index 6e71a88201..0000000000 --- a/projects/version_vs140.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - v140 - - - - - - - - - - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/projects/version_vs141.vcxproj b/projects/version_vs141.vcxproj deleted file mode 100644 index 5d8ee8c74f..0000000000 --- a/projects/version_vs141.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - v141 - - - - - - - - - - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/projects/version_vs142.vcxproj b/projects/version_vs142.vcxproj deleted file mode 100644 index 31971e35c9..0000000000 --- a/projects/version_vs142.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - v142 - - - - - - - - - - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/source.list b/source.list deleted file mode 100644 index b023b9ba4b..0000000000 --- a/source.list +++ /dev/null @@ -1,1191 +0,0 @@ -# Source Files -airport.cpp -animated_tile.cpp -articulated_vehicles.cpp -autoreplace.cpp -bmp.cpp -cargoaction.cpp -cargomonitor.cpp -cargopacket.cpp -cargotype.cpp -cheat.cpp -command.cpp -console.cpp -console_cmds.cpp -cpu.cpp -crashlog.cpp -currency.cpp -date.cpp -debug.cpp -dedicated.cpp -depot.cpp -disaster_vehicle.cpp -driver.cpp -economy.cpp -effectvehicle.cpp -elrail.cpp -engine.cpp -fileio.cpp -fios.cpp -fontcache.cpp -fontdetection.cpp -base_consist.cpp -gamelog.cpp -genworld.cpp -gfx.cpp -gfxinit.cpp -gfx_layout.cpp -goal.cpp -ground_vehicle.cpp -heightmap.cpp -highscore.cpp -hotkeys.cpp -ini.cpp -ini_load.cpp -landscape.cpp -linkgraph/demands.cpp -linkgraph/flowmapper.cpp -linkgraph/linkgraph.cpp -linkgraph/linkgraphjob.cpp -linkgraph/linkgraphschedule.cpp -linkgraph/mcf.cpp -linkgraph/refresh.cpp -map.cpp -misc.cpp -mixer.cpp -music.cpp -network/network.cpp -network/network_admin.cpp -network/network_client.cpp -network/network_command.cpp -network/network_content.cpp -network/network_gamelist.cpp -network/network_server.cpp -network/network_udp.cpp -openttd.cpp -order_backup.cpp -pbs.cpp -progress.cpp -rail.cpp -rev.cpp -road.cpp -roadstop.cpp -screenshot_gui.cpp -screenshot.cpp -settings.cpp -signal.cpp -signs.cpp -sound.cpp -sprite.cpp -spritecache.cpp -station.cpp -strgen/strgen_base.cpp -string.cpp -stringfilter.cpp -strings.cpp -story.cpp -subsidy.cpp -textbuf.cpp -texteff.cpp -tgp.cpp -tile_map.cpp -tilearea.cpp -townname.cpp -#if WIN32 -#else - #if OS2 - os/os2/os2.cpp - 3rdparty/os2/getaddrinfo.c - 3rdparty/os2/getaddrinfo.h - 3rdparty/os2/getnameinfo.c - 3rdparty/os2/getnameinfo.h - #else - #if OSX - os/macosx/crashlog_osx.cpp - #else - os/unix/crashlog_unix.cpp - #end - os/unix/unix.cpp - #end -#end -vehicle.cpp -vehiclelist.cpp -viewport.cpp -#if USE_SSE - viewport_sprite_sorter_sse4.cpp -#end -waypoint.cpp -widget.cpp -window.cpp - -# Header Files -#if ALLEGRO - music/allegro_m.h - sound/allegro_s.h - video/allegro_v.h -#end -aircraft.h -airport.h -animated_tile_func.h -articulated_vehicles.h -autoreplace_base.h -autoreplace_func.h -autoreplace_gui.h -autoreplace_type.h -autoslope.h -base_media_base.h -base_media_func.h -base_station_base.h -bitmap_type.h -bmp.h -bridge.h -cargo_type.h -cargoaction.h -cargomonitor.h -cargopacket.h -cargotype.h -cheat_func.h -cheat_type.h -clear_func.h -cmd_helper.h -command_func.h -command_type.h -company_base.h -company_func.h -company_gui.h -company_manager_face.h -company_type.h -console_func.h -console_gui.h -console_internal.h -console_type.h -cpu.h -crashlog.h -currency.h -date_func.h -date_gui.h -date_type.h -debug.h -video/dedicated_v.h -depot_base.h -depot_func.h -depot_map.h -depot_type.h -direction_func.h -direction_type.h -disaster_vehicle.h -music/dmusic.h -driver.h -economy_base.h -economy_func.h -economy_type.h -effectvehicle_base.h -effectvehicle_func.h -elrail_func.h -engine_base.h -engine_func.h -engine_gui.h -engine_type.h -error.h -fileio_func.h -fileio_type.h -fios.h -fontcache.h -fontdetection.h -framerate_type.h -base_consist.h -gamelog.h -gamelog_internal.h -genworld.h -gfx_func.h -gfx_layout.h -gfx_type.h -gfxinit.h -goal_base.h -goal_type.h -graph_gui.h -ground_vehicle.hpp -group.h -group_gui.h -group_type.h -gui.h -guitimer_func.h -heightmap.h -highscore.h -hotkeys.h -house.h -house_type.h -industry.h -industry_type.h -industrytype.h -ini_type.h -landscape.h -landscape_type.h -language.h -linkgraph/demands.h -linkgraph/flowmapper.h -linkgraph/init.h -linkgraph/linkgraph.h -linkgraph/linkgraph_base.h -linkgraph/linkgraph_gui.h -linkgraph/linkgraph_type.h -linkgraph/linkgraphjob.h -linkgraph/linkgraphjob_base.h -linkgraph/linkgraphschedule.h -linkgraph/mcf.h -linkgraph/refresh.h -livery.h -map_func.h -map_type.h -mixer.h -network/network.h -network/network_admin.h -network/network_base.h -network/network_client.h -network/network_content.h -network/network_content_gui.h -network/network_func.h -network/network_gamelist.h -network/network_gui.h -network/network_internal.h -network/network_server.h -network/network_type.h -network/network_udp.h -newgrf.h -newgrf_airport.h -newgrf_airporttiles.h -newgrf_animation_base.h -newgrf_animation_type.h -newgrf_callbacks.h -newgrf_canal.h -newgrf_cargo.h -newgrf_class.h -newgrf_class_func.h -newgrf_commons.h -newgrf_config.h -newgrf_debug.h -newgrf_engine.h -newgrf_generic.h -newgrf_house.h -newgrf_industries.h -newgrf_industrytiles.h -newgrf_object.h -newgrf_profiling.h -newgrf_properties.h -newgrf_railtype.h -newgrf_roadtype.h -newgrf_sound.h -newgrf_spritegroup.h -newgrf_station.h -newgrf_storage.h -newgrf_text.h -newgrf_town.h -newgrf_townname.h -news_func.h -news_gui.h -news_type.h -music/midi.h -music/midifile.hpp -music/null_m.h -sound/null_s.h -video/null_v.h -object.h -object_base.h -object_type.h -openttd.h -order_backup.h -order_base.h -order_func.h -order_type.h -pbs.h -progress.h -querystring_gui.h -rail.h -rail_gui.h -rail_type.h -rev.h -road.h -road_cmd.h -road_func.h -road_gui.h -road_internal.h -road_type.h -roadstop_base.h -roadveh.h -safeguards.h -screenshot.h -screenshot_gui.h -sound/sdl_s.h -video/sdl_v.h -video/sdl2_v.h -settings_func.h -settings_gui.h -settings_internal.h -settings_type.h -ship.h -signal_func.h -signal_type.h -signs_base.h -signs_func.h -signs_type.h -slope_func.h -slope_type.h -smallmap_gui.h -sortlist_type.h -sound_func.h -sound_type.h -sprite.h -spritecache.h -station_base.h -station_func.h -station_gui.h -station_kdtree.h -station_type.h -statusbar_gui.h -stdafx.h -story_base.h -story_type.h -strgen/strgen.h -string_base.h -string_func.h -string_type.h -os/windows/string_uniscribe.h -stringfilter_type.h -strings_func.h -strings_type.h -subsidy_base.h -subsidy_func.h -subsidy_type.h -tar_type.h -terraform_gui.h -textbuf_gui.h -textbuf_type.h -texteff.hpp -textfile_gui.h -textfile_type.h -tgp.h -tile_cmd.h -tile_type.h -tilearea_type.h -tilehighlight_func.h -tilehighlight_type.h -tilematrix_type.hpp -timetable.h -toolbar_gui.h -town.h -town_type.h -town_kdtree.h -townname_func.h -townname_type.h -track_func.h -track_type.h -train.h -transparency.h -transparency_gui.h -transport_type.h -tunnelbridge.h -vehicle_base.h -vehicle_func.h -vehicle_gui.h -vehicle_gui_base.h -vehicle_type.h -vehiclelist.h -viewport_func.h -viewport_kdtree.h -viewport_sprite_sorter.h -viewport_type.h -water.h -waypoint_base.h -waypoint_func.h -widget_type.h -os/windows/win32.h -music/win32_m.h -sound/win32_s.h -video/win32_v.h -window_func.h -window_gui.h -window_type.h -sound/xaudio2_s.h -zoom_func.h -zoom_type.h -#if WIN32 -#else - music/bemidi.h - music/cocoa_m.h - music/extmidi.h - music/fluidsynth.h - music/os2_m.h - os/macosx/macos.h - os/macosx/osx_stdafx.h - os/macosx/splash.h - os/macosx/string_osx.h - sound/cocoa_s.h - video/cocoa/cocoa_keys.h - video/cocoa/cocoa_v.h -#end - -# Core Source Code -core/alloc_func.cpp -core/alloc_func.hpp -core/alloc_type.hpp -core/backup_type.hpp -core/bitmath_func.cpp -core/bitmath_func.hpp -core/endian_func.hpp -core/endian_type.hpp -core/enum_type.hpp -core/geometry_func.cpp -core/geometry_func.hpp -core/geometry_type.hpp -core/kdtree.hpp -core/math_func.cpp -core/math_func.hpp -core/mem_func.hpp -core/multimap.hpp -core/overflowsafe_type.hpp -core/pool_func.cpp -core/pool_func.hpp -core/pool_type.hpp -core/random_func.cpp -core/random_func.hpp -core/smallmap_type.hpp -core/smallmatrix_type.hpp -core/smallstack_type.hpp -core/smallvec_type.hpp -core/string_compare_type.hpp - -# GUI Source Code -aircraft_gui.cpp -airport_gui.cpp -autoreplace_gui.cpp -bootstrap_gui.cpp -bridge_gui.cpp -build_vehicle_gui.cpp -cheat_gui.cpp -company_gui.cpp -console_gui.cpp -date_gui.cpp -depot_gui.cpp -dock_gui.cpp -engine_gui.cpp -error_gui.cpp -fios_gui.cpp -framerate_gui.cpp -genworld_gui.cpp -goal_gui.cpp -graph_gui.cpp -group_gui.cpp -highscore_gui.cpp -industry_gui.cpp -intro_gui.cpp -linkgraph/linkgraph_gui.cpp -main_gui.cpp -misc_gui.cpp -music_gui.cpp -network/network_chat_gui.cpp -network/network_content_gui.cpp -network/network_gui.cpp -newgrf_debug_gui.cpp -newgrf_gui.cpp -news_gui.cpp -object_gui.cpp -order_gui.cpp -osk_gui.cpp -rail_gui.cpp -road_gui.cpp -roadveh_gui.cpp -settings_gui.cpp -ship_gui.cpp -signs_gui.cpp -smallmap_gui.cpp -station_gui.cpp -statusbar_gui.cpp -story_gui.cpp -subsidy_gui.cpp -terraform_gui.cpp -textfile_gui.cpp -timetable_gui.cpp -toolbar_gui.cpp -town_gui.cpp -train_gui.cpp -transparency_gui.cpp -tree_gui.cpp -vehicle_gui.cpp -viewport_gui.cpp -waypoint_gui.cpp - -# Widgets -widgets/airport_widget.h -widgets/ai_widget.h -widgets/autoreplace_widget.h -widgets/bootstrap_widget.h -widgets/bridge_widget.h -widgets/build_vehicle_widget.h -widgets/cheat_widget.h -widgets/company_widget.h -widgets/console_widget.h -widgets/date_widget.h -widgets/depot_widget.h -widgets/dock_widget.h -widgets/dropdown.cpp -widgets/dropdown_func.h -widgets/dropdown_type.h -widgets/dropdown_widget.h -widgets/engine_widget.h -widgets/error_widget.h -widgets/fios_widget.h -widgets/framerate_widget.h -widgets/genworld_widget.h -widgets/goal_widget.h -widgets/graph_widget.h -widgets/group_widget.h -widgets/highscore_widget.h -widgets/industry_widget.h -widgets/intro_widget.h -widgets/link_graph_legend_widget.h -widgets/main_widget.h -widgets/misc_widget.h -widgets/music_widget.h -widgets/network_chat_widget.h -widgets/network_content_widget.h -widgets/network_widget.h -widgets/newgrf_debug_widget.h -widgets/newgrf_widget.h -widgets/news_widget.h -widgets/object_widget.h -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 -widgets/station_widget.h -widgets/statusbar_widget.h -widgets/story_widget.h -widgets/subsidy_widget.h -widgets/terraform_widget.h -widgets/timetable_widget.h -widgets/toolbar_widget.h -widgets/town_widget.h -widgets/transparency_widget.h -widgets/tree_widget.h -widgets/vehicle_widget.h -widgets/viewport_widget.h -widgets/waypoint_widget.h - -# Command handlers -aircraft_cmd.cpp -autoreplace_cmd.cpp -clear_cmd.cpp -company_cmd.cpp -depot_cmd.cpp -group_cmd.cpp -industry_cmd.cpp -misc_cmd.cpp -object_cmd.cpp -order_cmd.cpp -rail_cmd.cpp -road_cmd.cpp -roadveh_cmd.cpp -ship_cmd.cpp -signs_cmd.cpp -station_cmd.cpp -terraform_cmd.cpp -timetable_cmd.cpp -town_cmd.cpp -train_cmd.cpp -tree_cmd.cpp -tunnelbridge_cmd.cpp -vehicle_cmd.cpp -void_cmd.cpp -water_cmd.cpp -waypoint_cmd.cpp - -# Save/Load handlers -saveload/afterload.cpp -saveload/ai_sl.cpp -saveload/airport_sl.cpp -saveload/animated_tile_sl.cpp -saveload/autoreplace_sl.cpp -saveload/cargomonitor_sl.cpp -saveload/cargopacket_sl.cpp -saveload/cheat_sl.cpp -saveload/company_sl.cpp -saveload/depot_sl.cpp -saveload/economy_sl.cpp -saveload/engine_sl.cpp -saveload/game_sl.cpp -saveload/gamelog_sl.cpp -saveload/goal_sl.cpp -saveload/group_sl.cpp -saveload/industry_sl.cpp -saveload/labelmaps_sl.cpp -saveload/linkgraph_sl.cpp -saveload/map_sl.cpp -saveload/misc_sl.cpp -saveload/newgrf_sl.cpp -saveload/newgrf_sl.h -saveload/object_sl.cpp -saveload/oldloader.cpp -saveload/oldloader.h -saveload/oldloader_sl.cpp -saveload/order_sl.cpp -saveload/saveload.cpp -saveload/saveload.h -saveload/saveload_filter.h -saveload/saveload_internal.h -saveload/signs_sl.cpp -saveload/station_sl.cpp -saveload/storage_sl.cpp -saveload/strings_sl.cpp -saveload/story_sl.cpp -saveload/subsidy_sl.cpp -saveload/town_sl.cpp -saveload/vehicle_sl.cpp -saveload/waypoint_sl.cpp - -# Tables -table/airport_defaults.h -table/airport_movement.h -table/airporttile_ids.h -table/airporttiles.h -table/animcursors.h -table/autorail.h -table/bridge_land.h -table/build_industry.h -table/cargo_const.h -table/clear_land.h -table/control_codes.h -table/elrail_data.h -table/engines.h -table/genland.h -table/heightmap_colours.h -table/industry_land.h -table/landscape_sprite.h -table/newgrf_debug_data.h -table/object_land.h -table/palette_convert.h -table/palettes.h -table/pricebase.h -table/railtypes.h -table/road_land.h -table/roadveh_movement.h -table/roadtypes.h -../objs/settings/table/settings.h -table/sprites.h -table/station_land.h -table/strgen_tables.h -table/string_colours.h -../objs/langs/table/strings.h -table/town_land.h -table/townname.h -table/track_land.h -table/train_cmd.h -table/tree_land.h -table/unicode.h -table/water_land.h - -# MD5 -3rdparty/md5/md5.cpp -3rdparty/md5/md5.h - -# Compat -3rdparty/optional/optional.hpp -3rdparty/optional/ottd_optional.h - -# Script -script/script_config.cpp -script/script_config.hpp -script/script_fatalerror.hpp -script/script_info.cpp -script/script_info.hpp -script/script_info_dummy.cpp -script/script_instance.cpp -script/script_instance.hpp -script/script_scanner.cpp -script/script_scanner.hpp -script/script_storage.hpp -script/script_suspend.hpp -script/squirrel.cpp -script/squirrel.hpp -script/squirrel_class.hpp -script/squirrel_helper.hpp -script/squirrel_helper_type.hpp -script/squirrel_std.cpp -script/squirrel_std.hpp - -# Squirrel -3rdparty/squirrel/squirrel/sqapi.cpp -3rdparty/squirrel/squirrel/sqbaselib.cpp -3rdparty/squirrel/squirrel/sqclass.cpp -3rdparty/squirrel/squirrel/sqcompiler.cpp -3rdparty/squirrel/squirrel/sqdebug.cpp -3rdparty/squirrel/squirrel/sqfuncstate.cpp -3rdparty/squirrel/squirrel/sqlexer.cpp -3rdparty/squirrel/squirrel/sqmem.cpp -3rdparty/squirrel/squirrel/sqobject.cpp -3rdparty/squirrel/squirrel/sqstate.cpp -3rdparty/squirrel/sqstdlib/sqstdaux.cpp -3rdparty/squirrel/sqstdlib/sqstdmath.cpp -3rdparty/squirrel/squirrel/sqtable.cpp -3rdparty/squirrel/squirrel/sqvm.cpp - -# Squirrel headers -3rdparty/squirrel/squirrel/sqarray.h -3rdparty/squirrel/squirrel/sqclass.h -3rdparty/squirrel/squirrel/sqclosure.h -3rdparty/squirrel/squirrel/sqcompiler.h -3rdparty/squirrel/squirrel/sqfuncproto.h -3rdparty/squirrel/squirrel/sqfuncstate.h -3rdparty/squirrel/squirrel/sqlexer.h -3rdparty/squirrel/squirrel/sqobject.h -3rdparty/squirrel/squirrel/sqopcodes.h -3rdparty/squirrel/squirrel/sqpcheader.h -3rdparty/squirrel/squirrel/sqstate.h -3rdparty/squirrel/include/sqstdaux.h -3rdparty/squirrel/include/sqstdmath.h -3rdparty/squirrel/include/sqstdstring.h -3rdparty/squirrel/squirrel/sqstring.h -3rdparty/squirrel/squirrel/sqtable.h -3rdparty/squirrel/include/squirrel.h -3rdparty/squirrel/squirrel/squserdata.h -3rdparty/squirrel/squirrel/squtils.h -3rdparty/squirrel/squirrel/sqvm.h - -# AI Core -ai/ai.hpp -ai/ai_config.cpp -ai/ai_config.hpp -ai/ai_core.cpp -ai/ai_gui.cpp -ai/ai_gui.hpp -ai/ai_info.cpp -ai/ai_info.hpp -ai/ai_instance.cpp -ai/ai_instance.hpp -ai/ai_scanner.cpp -ai/ai_scanner.hpp - -# AI API -script/api/ai_changelog.hpp - -# Game API -script/api/game_changelog.hpp - -# Game Core -game/game.hpp -game/game_config.cpp -game/game_config.hpp -game/game_core.cpp -game/game_info.cpp -game/game_info.hpp -game/game_instance.cpp -game/game_instance.hpp -game/game_scanner.cpp -game/game_scanner.hpp -game/game_text.cpp -game/game_text.hpp - -# Script API -script/api/script_accounting.hpp -script/api/script_admin.hpp -script/api/script_airport.hpp -script/api/script_base.hpp -script/api/script_basestation.hpp -script/api/script_bridge.hpp -script/api/script_bridgelist.hpp -script/api/script_cargo.hpp -script/api/script_cargolist.hpp -script/api/script_cargomonitor.hpp -script/api/script_client.hpp -script/api/script_clientlist.hpp -script/api/script_company.hpp -script/api/script_companymode.hpp -script/api/script_controller.hpp -script/api/script_date.hpp -script/api/script_depotlist.hpp -script/api/script_engine.hpp -script/api/script_enginelist.hpp -script/api/script_error.hpp -script/api/script_event.hpp -script/api/script_event_types.hpp -script/api/script_execmode.hpp -script/api/script_game.hpp -script/api/script_gamesettings.hpp -script/api/script_goal.hpp -script/api/script_group.hpp -script/api/script_grouplist.hpp -script/api/script_industry.hpp -script/api/script_industrylist.hpp -script/api/script_industrytype.hpp -script/api/script_industrytypelist.hpp -script/api/script_info_docs.hpp -script/api/script_infrastructure.hpp -script/api/script_list.hpp -script/api/script_log.hpp -script/api/script_map.hpp -script/api/script_marine.hpp -script/api/script_news.hpp -script/api/script_object.hpp -script/api/script_order.hpp -script/api/script_priorityqueue.hpp -script/api/script_rail.hpp -script/api/script_railtypelist.hpp -script/api/script_road.hpp -script/api/script_roadtypelist.hpp -script/api/script_sign.hpp -script/api/script_signlist.hpp -script/api/script_station.hpp -script/api/script_stationlist.hpp -script/api/script_story_page.hpp -script/api/script_storypagelist.hpp -script/api/script_storypageelementlist.hpp -script/api/script_subsidy.hpp -script/api/script_subsidylist.hpp -script/api/script_testmode.hpp -script/api/script_text.hpp -script/api/script_tile.hpp -script/api/script_tilelist.hpp -script/api/script_town.hpp -script/api/script_townlist.hpp -script/api/script_tunnel.hpp -script/api/script_types.hpp -script/api/script_vehicle.hpp -script/api/script_vehiclelist.hpp -script/api/script_viewport.hpp -script/api/script_waypoint.hpp -script/api/script_waypointlist.hpp -script/api/script_window.hpp - -# Script API Implementation -script/api/script_accounting.cpp -script/api/script_admin.cpp -script/api/script_airport.cpp -script/api/script_base.cpp -script/api/script_basestation.cpp -script/api/script_bridge.cpp -script/api/script_bridgelist.cpp -script/api/script_cargo.cpp -script/api/script_cargolist.cpp -script/api/script_cargomonitor.cpp -script/api/script_client.cpp -script/api/script_clientlist.cpp -script/api/script_company.cpp -script/api/script_companymode.cpp -script/api/script_controller.cpp -script/api/script_date.cpp -script/api/script_depotlist.cpp -script/api/script_engine.cpp -script/api/script_enginelist.cpp -script/api/script_error.cpp -script/api/script_event.cpp -script/api/script_event_types.cpp -script/api/script_execmode.cpp -script/api/script_game.cpp -script/api/script_gamesettings.cpp -script/api/script_goal.cpp -script/api/script_group.cpp -script/api/script_grouplist.cpp -script/api/script_industry.cpp -script/api/script_industrylist.cpp -script/api/script_industrytype.cpp -script/api/script_industrytypelist.cpp -script/api/script_infrastructure.cpp -script/api/script_list.cpp -script/api/script_log.cpp -script/api/script_map.cpp -script/api/script_marine.cpp -script/api/script_news.cpp -script/api/script_object.cpp -script/api/script_order.cpp -script/api/script_priorityqueue.cpp -script/api/script_rail.cpp -script/api/script_railtypelist.cpp -script/api/script_road.cpp -script/api/script_roadtypelist.cpp -script/api/script_sign.cpp -script/api/script_signlist.cpp -script/api/script_station.cpp -script/api/script_stationlist.cpp -script/api/script_story_page.cpp -script/api/script_storypagelist.cpp -script/api/script_storypageelementlist.cpp -script/api/script_subsidy.cpp -script/api/script_subsidylist.cpp -script/api/script_testmode.cpp -script/api/script_text.cpp -script/api/script_tile.cpp -script/api/script_tilelist.cpp -script/api/script_town.cpp -script/api/script_townlist.cpp -script/api/script_tunnel.cpp -script/api/script_vehicle.cpp -script/api/script_vehiclelist.cpp -script/api/script_viewport.cpp -script/api/script_waypoint.cpp -script/api/script_waypointlist.cpp -script/api/script_window.cpp - -# Blitters -#if DEDICATED -#else - blitter/32bpp_anim.cpp - blitter/32bpp_anim.hpp - #if USE_SSE - blitter/32bpp_anim_sse2.cpp - blitter/32bpp_anim_sse2.hpp - blitter/32bpp_anim_sse4.cpp - blitter/32bpp_anim_sse4.hpp - #end - blitter/32bpp_base.cpp - blitter/32bpp_base.hpp - blitter/32bpp_optimized.cpp - blitter/32bpp_optimized.hpp - blitter/32bpp_simple.cpp - blitter/32bpp_simple.hpp - #if USE_SSE - blitter/32bpp_sse_func.hpp - blitter/32bpp_sse_type.h - blitter/32bpp_sse2.cpp - blitter/32bpp_sse2.hpp - blitter/32bpp_sse4.cpp - blitter/32bpp_sse4.hpp - blitter/32bpp_ssse3.cpp - blitter/32bpp_ssse3.hpp - #end - blitter/8bpp_base.cpp - blitter/8bpp_base.hpp - blitter/8bpp_optimized.cpp - blitter/8bpp_optimized.hpp - blitter/8bpp_simple.cpp - blitter/8bpp_simple.hpp -#end -blitter/base.hpp -blitter/common.hpp -blitter/factory.hpp -blitter/null.cpp -blitter/null.hpp - -# Drivers -music/music_driver.hpp -sound/sound_driver.hpp -video/video_driver.hpp - -# Sprite loaders -spriteloader/grf.cpp -spriteloader/grf.hpp -spriteloader/spriteloader.hpp - -# NewGRF -newgrf.cpp -newgrf_airport.cpp -newgrf_airporttiles.cpp -newgrf_canal.cpp -newgrf_cargo.cpp -newgrf_commons.cpp -newgrf_config.cpp -newgrf_engine.cpp -newgrf_generic.cpp -newgrf_house.cpp -newgrf_industries.cpp -newgrf_industrytiles.cpp -newgrf_object.cpp -newgrf_profiling.cpp -newgrf_railtype.cpp -newgrf_roadtype.cpp -newgrf_sound.cpp -newgrf_spritegroup.cpp -newgrf_station.cpp -newgrf_storage.cpp -newgrf_text.cpp -newgrf_town.cpp -newgrf_townname.cpp - -# Map Accessors -bridge_map.cpp -bridge_map.h -clear_map.h -industry_map.h -object_map.h -rail_map.h -road_map.cpp -road_map.h -station_map.h -tile_map.h -town_map.h -tree_map.h -tunnel_map.cpp -tunnel_map.h -tunnelbridge_map.h -void_map.h -water_map.h - -# Misc -misc/array.hpp -misc/binaryheap.hpp -misc/blob.hpp -misc/countedobj.cpp -misc/countedptr.hpp -misc/dbg_helpers.cpp -misc/dbg_helpers.h -misc/fixedsizearray.hpp -misc/getoptdata.cpp -misc/getoptdata.h -misc/hashtable.hpp -misc/str.hpp - -# Network Core -network/core/address.cpp -network/core/address.h -network/core/config.h -network/core/core.cpp -network/core/core.h -network/core/game.h -network/core/host.cpp -network/core/host.h -network/core/os_abstraction.h -network/core/packet.cpp -network/core/packet.h -network/core/tcp.cpp -network/core/tcp.h -network/core/tcp_admin.cpp -network/core/tcp_admin.h -network/core/tcp_connect.cpp -network/core/tcp_content.cpp -network/core/tcp_content.h -network/core/tcp_game.cpp -network/core/tcp_game.h -network/core/tcp_http.cpp -network/core/tcp_http.h -network/core/tcp_listen.h -network/core/udp.cpp -network/core/udp.h - -# Pathfinder -pathfinder/follow_track.hpp -pathfinder/pathfinder_func.h -pathfinder/pathfinder_type.h -pathfinder/pf_performance_timer.hpp - -# NPF -pathfinder/npf/aystar.cpp -pathfinder/npf/aystar.h -pathfinder/npf/npf.cpp -pathfinder/npf/npf_func.h -pathfinder/npf/queue.cpp -pathfinder/npf/queue.h - -# YAPF -pathfinder/yapf/nodelist.hpp -pathfinder/yapf/yapf.h -pathfinder/yapf/yapf.hpp -pathfinder/yapf/yapf_base.hpp -pathfinder/yapf/yapf_cache.h -pathfinder/yapf/yapf_common.hpp -pathfinder/yapf/yapf_costbase.hpp -pathfinder/yapf/yapf_costcache.hpp -pathfinder/yapf/yapf_costrail.hpp -pathfinder/yapf/yapf_destrail.hpp -pathfinder/yapf/yapf_node.hpp -pathfinder/yapf/yapf_node_rail.hpp -pathfinder/yapf/yapf_node_road.hpp -pathfinder/yapf/yapf_node_ship.hpp -pathfinder/yapf/yapf_rail.cpp -pathfinder/yapf/yapf_road.cpp -pathfinder/yapf/yapf_ship.cpp -pathfinder/yapf/yapf_type.hpp - -# Video -video/dedicated_v.cpp -video/null_v.cpp -#if DEDICATED -#else - #if ALLEGRO - video/allegro_v.cpp - #end - #if SDL - video/sdl_v.cpp - #end - #if SDL2 - video/sdl2_v.cpp - #end - #if WIN32 - video/win32_v.cpp - #end -#end - -# Music -#if DEDICATED -#else - #if ALLEGRO - music/allegro_m.cpp - #end - #if DIRECTMUSIC - music/dmusic.cpp - #end -#end -music/null_m.cpp -music/midifile.cpp -#if DEDICATED -#else - #if WIN32 - music/win32_m.cpp - #else - music/extmidi.cpp - #end - #if HAIKU - music/bemidi.cpp - #end - #if FLUIDSYNTH - music/fluidsynth.cpp - #end -#end - -# Sound -sound/null_s.cpp -#if DEDICATED -#else - #if ALLEGRO - sound/allegro_s.cpp - #end - #if SDL - sound/sdl_s.cpp - #end - #if SDL2 - sound/sdl2_s.cpp - #end - #if WIN32 - sound/win32_s.cpp - #if USE_XAUDIO2 - sound/xaudio2_s.cpp - #end - #end -#end - -#if OSX -# OSX Files - os/macosx/macos.mm - - #if COCOA - video/cocoa/cocoa_v.mm - video/cocoa/event.mm - video/cocoa/wnd_quartz.mm - music/cocoa_m.cpp - sound/cocoa_s.cpp - os/macosx/splash.cpp - os/macosx/string_osx.cpp - #end -#end - -# Windows files -#if WIN32 - os/windows/crashlog_win.cpp - os/windows/ottdres.rc - os/windows/string_uniscribe.cpp - os/windows/win32.cpp -#end - -# Threading -thread.h From 203a77c1dc722df677302e84c6d5c0d4cb06d8ee Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 11:45:52 +0200 Subject: [PATCH 147/601] Codechange: move regression outside of bin and make it work via CMake script The tst_stationlist savegame had to be changed to start the correct AI. In the old setup, all regression AIs had the same name, which made it impossible to run both regressions in parallel. With the new setup this is possible. Although all files are available to run the regression, it won't really work till CMake is introduced (which will happen in a few commits from here) --- bin/ai/regression/completeness.sh | 67 -------- bin/ai/regression/run.sh | 69 -------- bin/ai/regression/run.vbs | 152 ------------------ bin/ai/regression/tst_stationlist/test.sav | Bin 94348 -> 0 bytes cmake/scripts/Regression.cmake | 97 +++++++++++ .../regression => regression}/regression.cfg | 0 .../regression/info.nut | 0 .../regression}/main.nut | 0 .../regression}/require.nut | 0 .../regression}/result.txt | 0 .../regression/test.sav | Bin regression/stationlist/info.nut | 13 ++ .../stationlist}/main.nut | 30 ++-- .../stationlist}/result.txt | 0 regression/stationlist/test.sav | Bin 0 -> 94728 bytes 15 files changed, 125 insertions(+), 303 deletions(-) delete mode 100755 bin/ai/regression/completeness.sh delete mode 100755 bin/ai/regression/run.sh delete mode 100644 bin/ai/regression/run.vbs delete mode 100644 bin/ai/regression/tst_stationlist/test.sav create mode 100644 cmake/scripts/Regression.cmake rename {bin/ai/regression => regression}/regression.cfg (100%) rename bin/ai/regression/regression_info.nut => regression/regression/info.nut (100%) rename {bin/ai/regression/tst_regression => regression/regression}/main.nut (100%) rename {bin/ai/regression/tst_regression => regression/regression}/require.nut (100%) rename {bin/ai/regression/tst_regression => regression/regression}/result.txt (100%) rename bin/ai/regression/empty.sav => regression/regression/test.sav (100%) create mode 100644 regression/stationlist/info.nut rename {bin/ai/regression/tst_stationlist => regression/stationlist}/main.nut (89%) rename {bin/ai/regression/tst_stationlist => regression/stationlist}/result.txt (100%) create mode 100644 regression/stationlist/test.sav diff --git a/bin/ai/regression/completeness.sh b/bin/ai/regression/completeness.sh deleted file mode 100755 index 46cee4ed3e..0000000000 --- a/bin/ai/regression/completeness.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -if ! [ -f ai/regression/completeness.sh ]; then - echo "Make sure you are in the root of OpenTTD before starting this script." - exit 1 -fi - -cat ai/regression/tst_*/main.nut | tr ';' '\n' | awk ' -/^function/ { - for (local in locals) { - delete locals[local] - } - if (match($0, "function Regression::Start") || match($0, "function Regression::Stop")) next - locals["this"] = "AIControllerSquirrel" -} - -/local/ { - gsub(".*local", "local") - if (match($4, "^AI")) { - sub("\\(.*", "", $4) - locals[$2] = $4 - } -} - -/Valuate/ { - gsub(".*Valuate\\(", "") - gsub("\\).*", "") - gsub(",.*", "") - gsub("\\.", "::") - print $0 -} - -/\./ { - for (local in locals) { - if (match($0, local ".")) { - fname = substr($0, index($0, local ".")) - sub("\\(.*", "", fname) - sub("\\.", "::", fname) - sub(local, locals[local], fname) - print fname - if (match(locals[local], "List")) { - sub(locals[local], "AIAbstractList", fname) - print fname - } - } - } - # We want to remove everything before the FIRST occurrence of AI. - # If we do not remove any other occurrences of AI from the string - # we will remove everything before the LAST occurrence of AI, so - # do some little magic to make it work the way we want. - sub("AI", "AXXXXY") - gsub("AI", "AXXXXX") - sub(".*AXXXXY", "AI") - if (match($0, "^AI") && match($0, ".")) { - sub("\\(.*", "", $0) - sub("\\.", "::", $0) - print $0 - } -} -' | sed 's/ //g' | sort | uniq > tmp.in_regression - -grep 'DefSQ.*Method' ../src/script/api/ai/*.hpp.sq | grep -v 'AIError::' | grep -v 'AIAbstractList::Valuate' | grep -v '::GetClassName' | sed 's/^[^,]*, &//g;s/,[^,]*//g' | sort > tmp.in_api - -diff -u tmp.in_regression tmp.in_api | grep -v '^+++' | grep '^+' | sed 's/^+//' - -rm -f tmp.in_regression tmp.in_api - diff --git a/bin/ai/regression/run.sh b/bin/ai/regression/run.sh deleted file mode 100755 index 7574b0b388..0000000000 --- a/bin/ai/regression/run.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh - -if ! [ -f ai/regression/run.sh ]; then - echo "Make sure you are in the root of OpenTTD before starting this script." - exit 1 -fi - -if [ -f scripts/game_start.scr ]; then - mv scripts/game_start.scr scripts/game_start.scr.regression -fi - -params="" -gdb="" -if [ "$1" != "-r" ]; then - params="-snull -mnull -vnull:ticks=30000" -fi -if [ "$1" = "-g" ]; then - gdb="gdb --ex run --args " -fi - -if [ -d "ai/regression/tst_$1" ]; then - tests="ai/regression/tst_$1" -elif [ -d "ai/regression/tst_$2" ]; then - tests="ai/regression/tst_$2" -else - tests=ai/regression/tst_* -fi - -ret=0 -for tst in $tests; do - echo -n "Running $tst... " - - # Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused. - cp ai/regression/regression_info.nut $tst/info.nut - - sav=$tst/test.sav - if ! [ -f $sav ]; then - sav=ai/regression/empty.sav - fi - - if [ -n "$gdb" ]; then - $gdb ./openttd -x -c ai/regression/regression.cfg $params -g $sav - else - ./openttd -x -c ai/regression/regression.cfg $params -g $sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > $tst/tmp.regression - fi - - if [ -z "$gdb" ]; then - res="`diff -ub $tst/result.txt $tst/tmp.regression`" - if [ -z "$res" ]; then - echo "passed!" - else - echo "failed! Difference:" - echo "$res" - ret=1 - fi - fi - - rm $tst/info.nut - - if [ "$1" != "-k" ]; then - rm -f $tst/tmp.regression - fi -done - -if [ -f scripts/game_start.scr.regression ]; then - mv scripts/game_start.scr.regression scripts/game_start.scr -fi - -exit $ret diff --git a/bin/ai/regression/run.vbs b/bin/ai/regression/run.vbs deleted file mode 100644 index b4bdef4c17..0000000000 --- a/bin/ai/regression/run.vbs +++ /dev/null @@ -1,152 +0,0 @@ -Option Explicit - -' 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 . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -Function GetTestList() - Dim retests, i, tests, dir - Set retests = New RegExp - Set GetTestList = CreateObject("Scripting.Dictionary") - - retests.Pattern = "ai/regression/tst_*" - retests.Global = True - For i = 0 To WScript.Arguments.Count - 1 - Dim test - test = "ai/regression/tst_" & WScript.Arguments.Item(i) - If FSO.FolderExists(test) Then - retests.Pattern = test - Exit For - End If - Next - - For Each dir In FSO.GetFolder("ai/regression/").SubFolders - Dim name - name = "ai/regression/" & dir.Name - If retests.Test(name) Then - GetTestList.Add name, name - End If - Next -End Function - -Function GetParams() - GetParams = "-snull -mnull -vnull:ticks=30000" - If WScript.Arguments.Count = 0 Then Exit Function - If WScript.Arguments.Item(0) <> "-r" Then Exit Function - GetParams = "" -End Function - -Sub FilterFile(filename) - Dim lines, filter, file - - Set file = FSO.OpenTextFile(filename, 1) - If Not file.AtEndOfStream Then - lines = file.ReadAll - End If - file.Close - - Set filter = New RegExp - filter.Global = True - filter.Multiline = True - filter.Pattern = "0x(\(nil\)|0+)(x0)?" - lines = filter.Replace(lines, "0x00000000") - filter.Pattern = "^dbg: \[script\]" - lines = filter.Replace(lines, "") - filter.Pattern = "^ " - lines = filter.Replace(lines, "ERROR: ") - filter.Pattern = "ERROR: \[1\] \[P\] " - lines = filter.Replace(lines, "") - filter.Pattern = "^dbg: .*\r\n" - lines = filter.Replace(lines, "") - - Set file = FSO.OpenTextFile(filename, 2) - file.Write lines - file.Close -End Sub - -Function CompareFiles(filename1, filename2) - Dim file, lines1, lines2 - Set file = FSO.OpenTextFile(filename1, 1) - If Not file.AtEndOfStream Then - lines1 = file.ReadAll - End IF - file.Close - Set file = FSO.OpenTextFile(filename2, 1) - If Not file.AtEndOfStream Then - lines2 = file.ReadAll - End IF - file.Close - CompareFiles = (lines1 = lines2) -End Function - -Function RunTest(test, params, ret) - Dim WshShell, oExec, sav, command - Set WshShell = CreateObject("WScript.Shell") - - ' Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused. - FSO.CopyFile "ai/regression/regression_info.nut", test & "/info.nut" - - sav = test & "/test.sav" - If Not FSO.FileExists(sav) Then - sav = "ai/regression/empty.sav" - End If - - command = ".\openttd -x -c ai/regression/regression.cfg " & params & " -g " & sav & " -d script=2 -d misc=9" - ' 2>&1 must be after >tmp.regression, else stderr is not redirected to the file - WshShell.Run "cmd /c " & command & " >"& test & "/tmp.regression 2>&1", 0, True - - FilterFile test & "/tmp.regression" - - If CompareFiles(test & "/result.txt", test & "/tmp.regression") Then - RunTest = "passed!" - Else - RunTest = "failed!" - ret = 1 - End If - - FSO.DeleteFile test & "/info.nut" - - If WScript.Arguments.Count > 0 Then - If WScript.Arguments.Item(0) = "-k" Then - Exit Function - End If - End If - - FSO.DeleteFile test & "/tmp.regression" -End Function - -On Error Resume Next -WScript.StdOut.WriteLine "" -If Err.Number <> 0 Then - WScript.Echo "This script must be started with cscript." - WScript.Quit 1 -End If -On Error Goto 0 - -If Not FSO.FileExists("ai/regression/run.vbs") Then - WScript.Echo "Make sure you are in the root of OpenTTD before starting this script." - WScript.Quit 1 -End If - -If FSO.FileExists("scripts/game_start.scr") Then - FSO.MoveFile "scripts/game_start.scr", "scripts/game_start.scr.regression" -End If - -Dim params, test, ret -params = GetParams() -ret = 0 - -For Each test in GetTestList() - WScript.StdOut.Write "Running " & test & "... " - WScript.StdOut.WriteLine RunTest(test, params, ret) -Next - -If FSO.FileExists("scripts/game_start.scr.regression") Then - FSO.MoveFile "scripts/game_start.scr.regression", "scripts/game_start.scr" -End If - -WScript.Quit ret diff --git a/bin/ai/regression/tst_stationlist/test.sav b/bin/ai/regression/tst_stationlist/test.sav deleted file mode 100644 index ef551c74ff8f74202cb30e88b6c063442b44ed78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94348 zcmeYd35j4h$iVQ|yecA!fq^ko>7E%AgCe640|SHdj&_}Ann~~f#WE;QW>aLF^XPL8 zLq`b9TyLihlet`GSH9nVPbhxQNdx0T-Iq(>M16R*qvLswc&fF+d*5A?8E;76zrTMi z!>uc4E6V=faQ`P2e&y`-H8Q{U&I$H;b>GjVTj_%xi}|JQyKZYFWZnkOJy3rsLDM4X zV~_a6Nlyzn3U4ic)49EDd5M#!s;+Um^%IjnQ~o8q`15=E>!VX8HEZ=Qm_>Hm{Qk6w z;f7LArDnTd+wAV+eMeh%xUedwy(w-Fx!gS|-0Vzjh2(k0Ek8Hf|8HvKiWRk1vJMZ^ z-an6DZA1Lh1H#s;7)~T|Dli1+_)&zx}ovu~# zfIHwrS?uhv$8)cTo^n+C#93zdMr&>O>3JJ{(>BMReykS}C|Ra*%YA9i-!leNGhb)- zBnp`-bmZ7Pd45*8w!ZVn{LL+Y@01j>pGfVPTV?ZL;;L^SMETw0C&+TWy<}D}%x~rP?tysrtAI~DP&9`XB#61kkt^TJ>baL*;rhatrypfgs zQfgODpW&poGcWkA&6HK{JD8{3>sxvI@`Y<^0v-OUcb;3FnV#KN?Kcms2;MC%aPy{5=J5y5V}DC8+qqMTPqF{5 z`m4S7x#C2B$H%5k_~|ZrVCIJqC&Rkm*}oW{m%d=DuDSLu{9tUEI*V(Z^1^pIcMf=n z%$#las_<2*O|ti=m0P$kKh1LLWc6|3U3heXq`&2>DyM%}r04CF|C+UY*DRsAGgGGM zH2Xwv44FK2zUi_Bk4}|lU#mZR>|^o5V6Q)wjBifAkzhYJDQ!pjtiHC_y@$4czx{A$ zWFXrSL!BKrep+&6yg#?>zU9wDU+ymoD(8RhuvPE#mWAHZ&vG98H(KRer|Rxq<>_H| zHeF$V)~uTsQgdfbsaM%!{cIQKUNLu0CHPC~2`8 zo_BlNz7N`t`!x18t(CfcA^q9DPiy;~XDo5K(W$jiF=Nr$i1qE+Dj{ioY}yLP)?{+` zp1d`Ap>n|8dGpsrmUU%6ztMln=ufF$nYEF8R{q(ex6c0J-0}7N>5K)c@v)VqTz)Sv zoDgiUI(~~WZ|Ar08Y|~^mRx7o6+vdw(fsFU_C~gKHDo-nxaRmlxG#&xIKfx^Z{G2P zGewW}em9tC_0CRX!aCk>)7Hm-c@(;@tl#nFjmMT3KV+FCeW-XK_0eS4`8u=q&8-lP=z? zU#{TU{w))lmhIO)v!GhX`d7y64O@=5|Kk)4Sm%G2L+VuvKQn93M#}#cG2$H??o9l-UX|@SaTjt@tG{7A|dsu zu_}j!V^hK0ik=5{tSi>p{@!Kq>-L+h->j;)r1lwV<%e(|TJa}NDscPG$!|0N&t#3d ze`0mg=7`iEm$qqje4TqiI4VH)|61qoERPB%FdV&Y`E_%OZm)7}#B9?Gi)UQ@R^*`N z5hE#k@`rXSXUFUnv5y(7{)Y4C#QyQKdR`mASZC^eR@ic?l=r#oJ49yvi@NmNR)Jep zd4Gn`rL+9rB~sq{c{*?TX6c%Ar3NP6bF$JreBpt@BagB*@s>Y0zSa7D<7!%P#&xdz zzeSu+Q%bE&v?qqoh+ZAE*kt3jWfN-SJ1{`>&|X(|4_w^IWM~89ZBO{uD>A3vrnrQ}kMbazDH-3sPMD zbA_P0Z*zw#&&oq)Rnr%~Ir-y}x3fn|*Os+6TkT-O1l2pT7KQ#l|gJ zv8#J}=;@W`zRfteePiWjk+09wQm5I}2K|id(8&6|RnaOl_1X&?_Ib%)|NRd9wq@!* zmU*VTUa-i^F&o(NzMFY>z4emVjDK7IgxdeTk$u@}b?lkmKCj=`j8o?D)!Z!Rtz@*l zk?Hbp{-O7K4^~`!B64GOM&ybE^`&aIhnP0CE7#h*`M03TY5sTnhiT^FzU<=H_wJmg zsGVP|Kf%Q#Q2%U7e6F^NFVAcb#?x(TEsMG&>}On4`)-=W^k>V@sJhEak`=svg*~fm z&xYxX%n_So7RK|TVuopWX0>^%jZ$6nA+7MjyZ>hHa6ir#r@OM|!lJ#C6xnCgnm=J^ zRdDQWc)nNrvNKgL7v zza`fnsSSH`N9>YA_Zd@;@bihuH}A7ZTL?0pUH__}Y@y4yL-Fs`a`iW}99~l)zTwD* zO@H}11Xmfy+eXN9^6$5`I8>Ywgnwi=zXGyVBHm+EgQ4*U=_+i~i#dxFif?&7Z($S>BP zlk)GOSibn*!er6h3su{<>78%a_{SK$DURiPz-Qm0{~T)`J+Pc?;(J}U@z&Xi@6$bc zXUHxt6u-In!!*+gHQDCLC!9@EEpnE|n967QFKCuBS{C`~d9nHa$`2tn){Ghdm~7iv zK1$!=Sg11pQu+0i(?ZeTXTIfK5V!yP#w5>ES#^&eWqeKlAT7&wLba9UQEWH2ezxl; zuX}5+EA8+5obs%tD9!hF#OFUVetI^rXXkk<zi}!UGQmJgh_Gu4OP|& z$;+c6PR0bO$^5y)^1@y^Z2A89ts<9VQxXIIh1d#hTQglq?{`yXla0X9%@>Orx7WI{ zPd3}&TKINJ-bC%x+7LU7w|ZUtOJ1L6=vCf6bHO5qh5b{0q=-B1JC`R|_gLoZjmYT| zqBoW(FUWXz^uG0hdD}i-v=x3DGTpj1qLg z!MoQ@J}=ktFl%u@WsJ9|q>3XW#wW zsadEIE+N{tTa$0v&Gb5vvUsyNulrg(aot7cvWvDoJ$ZIM+i^XgknQ599#utHuJku_ ztrvQ?pd8CB#cC5@}ju9xXZL&=I#qg$_B)=T1*nTv-rj{eAa@%4dq( zxmurZQO$DeOP*LI{3K%66@|G{_A@Su)}OQ}z2_Eu&Hnl6>|I_n`K{$&0d=Tj}2{XsvQRxGOZTy&{6uKT1 zE!WF$ZwV7kz9pLP$}ToXA^A7E;{!d;tuHiuOnx!^2$P<|k#|blm!*zna#xY<F6e896(bC0I3ywS0Y$5L|lEw&uIDgxj7_6 zcfq@)h#MX`JS@ryiLvJ_R)nmPE!SQ9V$s(LlF7EGg2; zdz;+@56%3in(tnk=HXnhIr+Qy?)HF4??bw39#Sjo<4;b1H}}ZRL!Ke!$p>nWWqycw zv~EWEX@Pmw?`{jJJ=0kIFyy80#gf<`vUk;ZAM-PX^RPX(Xgg!|&+6?yn`FnW^3(6L zOi`HUwu@t_UrPG|vyaCTFDAvNEz)a!9r5@6%O4l6Ojz`xO11a)nf=lCMdM!7Gf6G) za{e?!bmdWtop0Ejo~8c!koZ+*&a`VeyB@LWG9I-2$iNmof6=9d2jdwN=f?Ui|G~WJ z`>&+^Yj*gkrC&Lnr!;Zz`payJsX}rJ!g?_&C&PmJc-9`9cEIQ9##I8&^TMt*TQNOa zpCZQ?Va^rX&NOSIkO9xT<^wen=YH|n-qIJ|IpLLH)Qjevtdj>19c(%Oeg>Adq-B`P;u75~~KJdHa^ql80!8cP9i==MK z9Dll8hk-qD-NB4HfVp7f-$X{@p}|$@ygt|DI?wF00)hQ&8M?Vj|PssR0_&l?hFmK}$7muvPe; z6r7NIcZIK+eo%D#!iSuG<=^rq30S>#yQ73sTQ(-JEcE z$1Bf|d3#cd?r3U+AJ1Q0^|mWRw;xP=cyLK%lqd7|4Lfvs&KQ?`?B#Tjx&6fKP@h$F_uD{*yA_x1{Xm(if+*_lu^iN!Hj@XK}Yz zw|wEVoF}HwUOn(GFK=M$I`01C{S1>$2W)rWf4*|ps*7><^815CQW}G{3$EJ7djHYX z^7mERZ+a>PzZCe&{kFC(6@M=G;!(O1F zzIc7zbJlcsN$oQW=ly${d|kh4{BSq@_;RyFBIAoA<^2Yx%L|?7d7Sxm$n>!I$ z-Y`v;DWM5A*Ao?YPT5;)yf#DZmg(By1Np|bN=0v1%FFg$6n?}}&&YZB8gu0DkjABt z&30Aj%W8?WtUt{avz6)K?GIL^W$cQcPelv({6x(PAH~KP%=mLPq2Q9o5|JpWfQR01 zD#ZIgTwbK0AGInu#eD4=(Wbj+)Q^VOd}Q4rvz_k=*W)Dx*FR6}5Ai>3J?&~unSfZ{<@%hAUW__0{TxWU2gH5>8r~8CXdHwTha-r$3lQyfD=C%I1yycGA zjYD1y`?p+bJ6OItvPoh$-|5Lm8H0CT*>QSK)Yd1y{6>F@A712$s)>2M)#IE=-11+N zM#+p3zaELJ-#wBzCxf?O;qtrL>~%Ye*M6UWN7w1$6;2;%)62@|w4^sL+dJo%V2G^A zsu1&+zyHlFVl>+$s9ZVYaKu3ck%b96Ra({l9V~DN+2fGyb@0C6M(H&RvszsQCpRx! z5+3SwO{80{C}@G^tfqAmdcU6dD?Y#WKQd^iLOHkfrTuLSezW{*`PjP0<)hKo{od?B znwitXg{Ri~Hk|Xn922CZ$kG$Ef??@qtAnmGn?%D?j<4Uz*$_5sZh7~7!A+GloNlr) z6Su_gi4gi4&ozHp<7+9M%$WUew`)t6+`-2bWRvK-x#b4@obSnBDaS9=_8C`5#<{;aZW)k*2+ewRa3_n-V?ZyyqB zdVFGPYSKB^r9%2mmOM@8I!g}devR*6UcGz%N8YoJKUQve=fU;<^wrCYHb;LcdVaa< z)XjxEwr>gXJ7D$rvew77;?C_`RAm;)H72w@*z)3<=yRQbld;+F_BXB;Oo}h7KCUU6 z%*>@ccj*a+)v?RY$owyKnY(JM#6hK&u8hqu_nEEcTpq&5^S573Jx<=g`tIX)-6d8V<|Q86y?07put4(f4?zZ%<}+oD&RChP_I){hGxsy=W&cDo zx5jd$KPwmG4Yip1=RsTg)_64^{x__j8)7aVcbS{XsIQ`YWTE*|r8B2qi{JbB;c&($ z>E`h7Gp-!@7=PMnQJu5?B!<@&OH^K|?!CM2S9a3W-7hb`v(3p~^kU7Fz25x6-+Nm% z^xZ0UJJ(;Xie&##H?2VGlI%pQNl%MAV+snI+22pUTN$$G>~i_VwQPkpS9OKHvTxH( z-&EXDI6Jyi@5RD%8n-K+zTa}{8~Xy?O$!@OE-6#yKDy>V?@NLHn!H0k3>V7g2c|JS zd-7*%?&23;pVn{i-t{zJ=-x8X(3u@S-X5KM@%OK%MM=}rLXB+y?P;x@*2cK*qD=av z-6f6&Cu{6Kd};WQ?6!WP`E9_1B z1IC@VwAFKx__n-O59hkIeHj*hSzWW_ z!=BFjsw_{V)?I(SJB>|n7hBBTr5iFiCiJz>c=K&Z!|9sjP}|K5uAeEqyvndA^O>qm z_cF!F9T}D07Sm-4Bg9s=GfkIF-nnAJ+_{cQ%j#VJ-QTvnQ9fb==hrjWc@mCiso8p3 zl|HWR^1i6}MCIH5whT>)eXD=x`(IAa>+H?-7muyll4)ML<}K5Nrae|IOKzRBTz0R? zq;sA~%X4Na{Z~b^kBKjlnq=crAAD-rk4lyt(GA)@GiD2Jep>k9m~Hzyp>%Q2D*q+2 zzByA{?#+CEHIjSLnH}}*8#jqGx((_EC6%=#ljY4y@qQMG6MOXv)c0^j;B(;xMce)Jm&Jy^SRej<(>bn*>*`+G<``d|eYM!t^LIeGO@rWzm|y>N zCR|+p>TeVCHKvUxTe>Qv%9$dWYo8sLU8?%Qazc=i_NU|Vw&hAY%QD|CSXI1Oa@oPu zg4O$dh0?yQ{cEt@B!03~zsKzQxsIIu&t4__#&NbbvkB^M^5Cm)_HE#-m?fg$x-4;S z)gex+4HbTFbq;ZBZ#!{K+@y3Yal`&v8-;)A8~&E>TCsESuiq&_vY&mTvQ5@py*1%) zUwM85!=vR1uD#O_8C>3NR%Ot(Z|j|{wNrfmEpQEqd${Y+b;kOvZCrT;>ALDbFRl zBmGT}tn=Ud-OGP^ydGnf>%7IkSC;&Bc*HBI_h)(4&LdBAcbqXSy!v#LsD`A)+)t-k zz7)OJO0D;PwUXl{_s>Ait_s!K3A-0^ZLmLcxMPLj_MVW}>PEc(t$bd`aGM*e&zyer zkn<1oW~=<&CGnw83fZ{jS1N85lsSQ(+|&$JS^Y@%#;-`jhPM0eaVKJ>AEX@&w9&7RH42{2FJ3V(u=Avdz4-LX z%Fc5PaZ5HlOI^V9>T{r(*2KobxepC>zOP^0ROE9olwURAqu$|7a|3>hD09T$?fJ$s z@uc5!lY1xsnf_7jJ+_C*YW;5U-wUKt@64IBYJT^^M;^i}G@Tk{KlN$wO`9ylZJITq zx}li$k|C3%oUWvI#v{26@%Ag!dz~GUdBU4!gm?z+kZM`D_zUBfO3(MV zW~&+{T|KGbmTjpx*&`_a=54{&EwckIf0z4wx+1!!`-emE&BK!eTYEJ9UmX-Wad%0H z;p2DOM+8l`?Yp(`@jK1$w_^-ezM1g1(W?95^AJl2;i*Djj0_C}0~LiB={el2%yI-fW?l{;toOw(xY3*D{9vezXr zGC$kI*SYh}`r4<$EHb}79#%R~x%kL*lSak^wr@^+e*b^%Z|10Pzvu08+i8BzUW9qM z=1=iSr&iqOXi~lDVY>I>dSSyk8%rBCGz!Fcn%n-kE(rTQXaA{FhgSW`FRbf|`trK* zm$ccj4$WEjo(LE;aBZF@DSg4G_GQ)16X#ps99Y)F>6kp_Kku2+ohyV(lIxf=%-iO_ z-`4Pd&zg{}xBlqeKEh^}se1O^)oT_a$;T~s{Z93srFp$$x$N^Z{LdZNE<7di@%aI- zi>W-Vl9F8Rn@z477yCJPmYPSZo%bsX4$LnrnVkIgrpUIJHLNoZEnVGhnCgGrp8Z12 zI|l8AHcU3Y2Uw3AX{g8=IiJ;j;TxgqHu??rRR15+iQ{Nvd(RUmJ-#wC*kuYit+`#(=D%n6oqE3bV?Z-P?;zI?W87NMe zeru`Ojz=fv+Li@x$XsY4wyIXf_e@0S*%_h#9yWhkfBKZhu332#zFiT}U_7^@{HoVX zss8uZ-iRkvPdYPe{;NfKtSsumfp-^s@3IxhD7eUO>!HgcBht|l69!rh< zmz4bcQE7E(k|5Wbb3C)BH~1@SPIo%$!$qbMu;mBNa8}ic)M_Y;>z?r_A{9D0ppCM$?t<+*Q#!5l$JZqJj%wNR?}z zn~~WT<7GS}`ddc&jBMxI+ePG-gs{(dYCOv=@F{DS`>&h&J2pO#vA=Uu#`kII@_f7J z^|D$MzJ{6Cx-~285!|A$aBd^V>wK?Jd;f~NjXf8+KMB~~ulZzTxr<#hajV6oh>zAM zSDC(_HAz`FyTrJTf4i!B z>!Kr4zoY(p1wNjp=vDXa?$dW#2QKhTt7kZRtWxi}+l8&KU)fJ;6-wjx-Df29e$kEB zF%s!l=bT#lW_wz}fho7XD~H+Nttb`rTCq>oKt-K({cG8vmOtCB?MN43mdTV4{SX%< zesqh=et{T!xsQjp-gvLavTjA;^*Hx$;jf?XzIu4^;ax1Ht?NwLXI)sf>CBd5OW*2! zhSQ#N?RN}TxgXx0u_MKG{S2iU-Pb}wm%rXAfBbAnz$s6z9-Um_lXY`l>$$e9coZsc zcJNX1_w*}A8hgH4w=FoW>}~1v`JjyI2mc6NjaIA0XAdpg{r1_Z_Dhio8=~3{F6ojy zx8Tmhmp2Ysyga`7!ToZH-ILhNqnbQEH3?|e%@A34@ZwpnTa2sc&#qe)eRWE#=_|?i zEwMACmf3yh_0DJhm|6WnyL}S3HuJJ~Imhh-e>}gubB=OWqH)`~>(#;&7HSR)3#5Zi5e_olM~mul{vh-lD4o- zq|n!duaDOP`XvakMKu*;_L=0v6WVso6|ru?Y(7TRSh zd~TXs-xqD)gP)o$&(GoS{{G9!HGkDpy@NvE{A)YbraWm|buUDplR>3C)-~ziv^#P7 z3r?=J4m%s@dZ*x~ltl)A^tPH~wFfUB(>1dD<$L0#M&^d*y&=1_B&3p$ZBxJ1&+5tM zp56RMy{&kK)w^RZvH6|$FS+Emu3c*&8tjw0{F(iN^@*~}Ti&aMf#9JK5HnclJr zL$8UUuimwqTQXT@#_o42+;BWuz+-OZ6mO#gUo@|A9o4kBv_s;-6StjDoD9Vxv)isj z?=oS~o>=!Zeu3;vg}!4YX0i7z=T5Ko_Xx^4YU0=<^?B*O^zH_}f9wDLJUe-odA9A8 zn#voRj_2*;{_vOPx4EURKlPbiQ&s%WA~Qb5H9DsC)~-!oBbn#S(;yXV9oJLLN8;MJOxnSU2cd@^N9)A{_%xBFn~InMvjMc;OP zUGaX=OXDq_H@BqTyJj`>>4K*ljop--me+a2w=dA?yXfcGpE>zz(XzOu=R4cjfq(r>im)Ds@;x|rwe@!N>^WBJx=cTU^?l5i{WUhMaU{n7)5 zsJQ?A*FUW)FpZUd?i=L%{!H=j&sX-@Y?%M0_{^N`&V5!#Y&IRyU;g!Z${U5-$}QxK5nzf zv3arA*>!t-jCH$j&M4}2G1zhb{hKzK4!>1qQm-GqaQyQoo1gLDv`Jr@UY^=jX#Qlg z@Bi8BtHm$LblEpDO^EY+z{p%{al-6S_d4B0Zu%-yh1Q7sww!0!tf>&zE1-B~p2!~l z(t8beFYqmPH0^o)<~oZa!@Q^O4}4%fb<%51uqn4#@c-%k2j$NyhxN-c9L+14AMT+Z z;QX@A=fRzYf7y9-9wcy7ZJZrmvgNammiR`Ijja4VkA5bJ&sko4@V-;zwl3kRGaRNa zIk>)<;cw-Qr#CyEH+*l*{CPu_!QIl#X~X-F79oy69q$tbe_p?u*Ai&DJaehm&KEMT zZ|}c*dg5bMG5_52lgsvM_@AEs;cP=d^g``sp{=b6wtqx^ite3ZJf(AE`>q)te1Cr) zpRp#nWnbm-a7M)tHaA8owRL|zu13BQt9dd%_89x&jHRdDC)Wn3G%#gGzNk3-qyDO2 z)vAg`Vu=|_yh4{$_vVA!(&Y36tcFN57sI-3*=8)Dh{;Y@YkA>Q3Il58^XLeT8D@p6%z~ zFV!(`jmH7CHF0e(TV-d=jyV(l>4MSf>V1k$)xoFpe4C@GyS?BIvS~IzwzfW~<-|D^Ahh{bedVSAyG1P8I>qBvlP^D6C|>nXYulfBU2F%~F1pQU^4)Rod56t}?7LZu&QG!aeuUd_ z-@fn0n^y)dWxdCp*3-1=*GFqN@4HRX>le;`9^-uCctnD3j#Wop<-yGl-d)$eGqXd= zvQO!}!;AlyPS~k!aF`f@t&XBli_xp86E~hJs!10X{j)vzMQJ>n!G~Jz7Yjcx zneMUcA=9jdYv0|e)wunuSEc)lU(~jZfgw3x{j6`LA3o2T5St?@`=;QJ*(@~^DbY9o z8*E?yvwNG=HHVqSdOdIHnR4#e%w63J?^xL`(OvibouItSlN%nBPn)&LD}LWI<(QyT za1K}7gdQJ1p_7h`oEtRWt<0LbbN2NYlaA!yzo7V$?WkVZsV0e^8zwwFlV6p?cdmES z{fmbmo4Ys7h*dMIeSGPR(TC((kF$}hovt43dKKfMSoYi9;QhzR&(@XoMgG0?+TVi3 z$R@1z?v}mF_6yH=EGTOCP-C{vk85g0O|d;wt~19KWi;*YX<)RHUKlFTSfruT^Y5GQ zNA~t>vvz&|aZWsM;_u&=xw;R3dmk*^q+V~zzuc2h+P(;N84xV zq*j*kR{lO+v*M%6j(>-APj-7t^z6~Jxf8BdclM#jscVG~b~X6zYx!pJyOukk@{!it za#!AYjC$NJd6Q#3TOBR(m34SuZ&AFX|FN6DKI_W4ji2V9`Z?*t6`Sn`S)YBD%kM8# zyVLqTJabx7f#Tku1spRY*3QUbPn&3>mdYJG(`LfY&2OS#da>D?Jn8?%SkdV?;j3;f zR{-mZN8d{g*X+za;3>m+SFwOIk(KjOsoF6Xjra8hZmVBwJT|y?;^5ujqPn2+yD68L zRNWd`4=GtNa?H-Huv>de<;A`~Y;WG5)ZQ>Do!@3g+;xN8-7l(Vv(+-4_Ep{!BfNj= zi5ydj@7u!eoDUb=sp6@UZ^X0u09VwW>c0;U2c|#U#Ie!nvG8^8`V0T&8vW?E;CZ3Q zXY*P3^Eeh}|yIoW(DNyuUdv(bx#ape~ z`I~oCt`z!G?DVp=g-3jM(&95U3EJujt*f7zEv#+rJ~3zaMY#>?&g-*W)E)^wHBM<2 zVx8=MPb4AWq3QlLo!>q0-YVZR!P%5S^R%!j*p;9X2k#k`E4!Mj!y^g>AoDzJVeLu@)$jD%uG9_Tve4DA(OlNsC#e0|K zoeN2jULt;2jqh^NbKwQudFPCeIdxU?#)Q7LWp6T?Jh3pl<Q>yI^i@9*sRVp~>WX@7Rgb1r4ma_iLY&&uT7=PSVOL~-MiCqI$_%$!R>EyY95(=kCBjbE}U82=$!1t zn;WP+*XN6MVD*jkse%q7mi9cHpC(%z*mZ7N&Bmyg4As+p_+mveQ{P?95SRbTzpMZH zn|&@59C=+DwmI)R%KpG3V(#<|&6==4mvv?fZ!Y*`#eS80)t=0q zPlk)zIeVU6?gh!4dM5GLl-C@p)YCq-_Vxp(#bN9-{_hO*yUo7({oI3`cegtU>zm1^ zl&Z!4l-sL(^(s}Wd`(m6&QDNcof8|qqZ+mMt1^79HTy%5(QgB|? zWM6P>{O;IuOXf~Coc{0Co-?)G*S(!mrFEtr{`o?F?yWCTnLlh;6YQTayQA|~Y7I~K z=A1U!nbQ(qeReMu@@!X9ZEY|0iP-zXt76ZKxP$NCC^E>t3Y~q4b$jda{d@E-89d&o z`O@#tPX5%kM@BsP9wmt$e_pNDcJVf5%RBZk^~2qSplAFw9BWqYx_N7FoqTyl_Yawk z>Mq7lZ}IL)+QR!iq9=S$UvdAd zyH(cWzL$$xLRLjq)f(}wwLS9Rcq@m$u}4sANufesRp@g^juhhtwpV9_qBC1vJVt) zKI~9c;kvS@-`DKRpYu(|(=Ih%syHFpYTN8rAno>j<%?o&#=9x^UMbznI%?rKi)o$M zp^MBNaf{kr-k+E*;(jomNaTHLb)Lebz_XyP)c;jm^(l$P)-z%!Eu3D>xL5l9V+R)*_sq)p>HV(v#M35b^S_Wk&$DE6dv*BRTfVtPb6$Py_@P|* zqu6RC-=)pZ7oPpx{(pDrM}5X)&$5s>_}OAH8=d(gOxOOdf_U*TyXs8=_`w(w**)HF$;i*hv z8Q$ii)3g=+{>w+S9gMv&ckfZFNsL#8S8kqrO@7L@4%6A4FII&G3U2<`rnQM9;Pu6K zMH+?kMI`c*xw;C>gaX-GLs#gpw{0)?dJ=!`o>AeM#z<$M6>_G^%TD*~*qx=u7t3^- zSx6;9M;52nOS(wcKjFfO5F>LR}iyU#nH9O-i7 zf92lF`tz<(BFmE7msmvKq-44l&f%Pwlb9!+>UF1MHs@rU-#0ESI(=!|vMulPsuwO% z6p1)>lcA*g{AGqeoi2MG13-or7_LFze%Gs4*vZ6ohXqWWN z=QXdyRi0d$IbW*bz}!o$3m#T=Eni;lQvY>@j^E<&m3~GRLW^FWyEgg9q5T|(`6YY4 zNX%syzc#D?^;7@Z{Ke%hkFwd;rr!@0e6b?<9IL~cc+*sAW8t9K%d$2zmPcjiMYAf2SZ?b#OjFN87Ka`rSF>%AGUhq8~yj!YBz=KKArkqW%~~f9o8vlo-bod4{zFE ze=i`H`$M}(M%n;j7=KcFNE?ox*m-U zIQUd8H>)-A)aiASFKs5No7Y&n2YbH#HqXli{X8ChbIXNrPFd}vYM%`je9r1D(nvb6^ZJ^;pYB|rc)sf&-YxRE>dK~j zt9#~5+jZrN@Ir~>ufH~&VM>~_VVk0#Q%(5M|9j=WO+9zDW!BEVB{RRWMnBqEo<8&0 zTEXf#-P5nl9U7xlovR#LuJrdAOJzTMv&hl*=()3BFI%>o1U%k|5w??LsQ@W->ab=_0>q=V)M`T<9y3mt3Doh;*uQuTKCYsH;JNIuYc;~MeN?c z|K$FZ?9Q1djvh5DJhYwb!~6X|-zY?hewi1kb3M9Z&9-{mzxTHspWo~nEV9ov(W&;J z;FJfxlJQ@JeOVJkq-`PfPOI^^?APPg-BO>od(FB&lKb z4%M_z?nbK)ABtFV?n8&As^{7L)>cjmN0shx_iH+?&} z!K`by$qCQ6h%1XXGF|6**r<8*Uqq0N?TrNID~HWhSgeg~(gaT3KO3FM^!I0YJ>x0w zR*#9TS`B)>uPzkV%&IAAwh%FxBvq~aZjRgf$?pwBpBHY;aG3XVUf$Pdjll+Iam$`deT2sZ;Cn1lQ~3 z>hd^QJH>h>WoCFQcNI;yt*@|p6Lvc1xPidIhjoh^lKFQrpWZ&*{!vr3@+S9!Di!_^ zzhhq&6y+1RkJz!JIm>Rc&F!`A_a0xGd!tcLruBH9gX!9em-|~K7pP9w zkK=yznRyrg+4XhKx`vAGTOULPe-C`1mYV$X&aXRNCrJ^q~a#C13&Fj{ZGk5*<9ZNQB+pv&9N$||mgI!0z*G#y}_<37W`y<=c_2I`BrG==p z$jv=HMOLV8+0^FifswuSiPjYs1}!!Q$2XX;^8VOArz!GRLEhsKwp(}EjbBa3=n2gf z3e%5?D&@c2?b=z;tiB|5#l4%E(-ZDzrUsS7zh+bYYplehZLA~j`FNqzq>WeKZoaU4 zT18Nr*#h-Fm-p6ezWSqPadT|Qrk=YpyDqS1qwx99wng*V$gv z+p~WwDJX7L_u6$RW8>Y6R%Z_$tCRHHFqPSHRbPV29U8O%uv_7rkdQ!2OWr}{Qtj09V@YJI(KsJO-@>#Ab zvh8YL`pYY_)xJyc(X74NzhvZg9e$+8{yR9LtIsb?Pvwp&^M)T^owKHKn7uw@QYH22 z;qqfsJIbd2D$kw${d+u9n#qF=%lB=xbletN)05K9clTvE|Endx=Gbg{b#|?#?Ypgx zGrVt~+sIJi{@zhPoYR)@|{JG>?P#?%)U)@rQDFU|L;rf)7P2L3WQiV=cAF)8_1Fb&8!k)Z_8g|v!`USTzM*Ssqo=c;%+bI5PHU>s2SyGFi&bLrOQMdYexK3& z@c6g?^I!Sh@m_1KILmD>_bv7)<|Mbp%WDrtt6gKrJZ@HaF|U4xfx(SSKPE>5wW}{Q*E0PvbT~I*f;6L7`2XD9ETxxP12^4z#x1S5^E+==anyDt z6{UYxQ^ZTP9=z$4DQB3~Rkh&NIM)}kJm!D(-_L0qt2Xl+_8d(4W3eJ?h6TF`N1wSZ*KbLq zi8YMU4kE&@J$B4_YkFdN@9lf$1)5<->vuLx`8~^dLgb#zR88e0jXzBF)rzpS`KB^`c?TAso>Ytxc`kkBg@s?0e~FCc~vr zH0z`F?bnHw$Mvp=hKZ!!TtDrEuuXE3htN~)u)Xs#b{H`#3r5e^wl_>>R8@(2_eItH ze30~J{*(n;#|yfr+x9a$-(TG3Ei&WpZd2FG=3oA=TlTDUSEcc-Ua|Y@W_Dz}FBO@Z zl_LI^q4&SmshYxYfZYu+m*FS{*(8H)&Gf8P!s?E z;L5e^owc!s8ZRSTC0W*Z$L`Zwo#?qf_=Jvbp6*>?1s-&4 z&ocqbw2by0C98_;4_)f6Gq}9Wo3A`+b7SL+XA}N!nY<-V;QYt<3@Pr-SEp5+-STUm z)*^=$zAR$xHf!Vc+)h2lBd6Xx)ts=o3JIPIAtrG z4zzqkgmJ9eF4CDWd|RCx7oh6Oe8xoVy{Yvc};2t2qXcd}mmROYEYW!XLX z-=8d&yr4gI@?P<{{<;nNQx?A!#Er1k^NbHt;#NB`UuR`M#@q*0P z9{ein6**Rhi+>B)GE4YHvt8D?%|6|agl%6+vu{k?G*$Du(;qhD6>4Xkn;0XX6wJQA z`_$QW@xfEl&6~okDkZlpG%gEufBt>mbDjs0%-QpoWz7rYon06w9{!s}_XbnS7UzGD zKD=(I(Yu@+Ug^Sa?*8(|>VGTqKN#6}l`%h=@PeiO?AAuz%45P`OZoDa+Ah%fkmLI! zY=vYj$1#sZ_tsWF{&sdg)87Ya5d4=>C1HjvtixF1AAY;)C_qUH4kYy_*qn&QSXQjwD%4*|j;sDru*F*Ui1C zv-o9;3g7!cX90(msa*Gyj@6yla#75k@k#f>lT-D6hO*u=N_}%K|GIkl;IgUbRcaj< zt%%)wqrv1_?^8c@nLjHXUTj-EnJb5T<3zRTCifP*`YjIQ`g>)5r?r^#$`G+%>kizR z&6mu(gmpP{@S}gKM%C9R)P459950ZYkP`fGh2fj*;A^tEJ3Iar+!7Wr{U@@_?DGxj z9SXjOHU1`Y@>?&y`}~V;sPt^>%RM@ieoK3wJ?QgI>CqQHH@Vc{pWp8KZ&Qw!n(r(& zT~t>6Tat^U>+SE39#%8;9?tv5Rv zZtP+3KkJt$TRktCD_LJ*!_M4w@7Hh_n+ES)x=`|+(HlE~EoEBq%+1329|K;jzdVt1 zzpvlTxY;5{5~>bcwRW?brX4-VowoeuDwl67i&q@@e@DKN?YfbK#H5|VJC9~4I(+=L zzS6MdthvFuEq~Jl)aPud`z~m#(v!C=TP^=W)RTqI`~LZ!wOCufli{J@inH&cW9=_7 zZhNr!$hyVq^$naqHg9xacDj!9cZ4Lr^N*HSY}->gLtJYotGWp?8KrDF!`>_}bj>C} zef!xHoXS==T069S9W1+)t1}+@nlPSk|0v~9o3d2ahV?<&W)9KdZ`MwoqO*Vd$2U1x zD~Q!c>`$(~Jf~YdV9$a1m*hW(FFbqe&-rsLm4XYuWri}97c@!mh04u%e3<>m@k`gk zJ}Ko$IZpDf_FO2U<#lQO`CSoSv*Qb<)n`6EH?!<^?2?FyI|4&b)x40OFhAt{i`!D& zE+PS+1q>s2jy+n?{!xTcA(?H9fO!4yHKrAj8S7qt`P3x1kJH2IL`AvA94Wnt70o8W z6YVRw(&uIzSl$})e(Ik;N7^Ot`n5mZlkIotL+_VgHad_U$%;gfI6E|&<{)--QEug1RMWzqjxGgA-bIjmubvbigt`f2s< zZ@<3o$=h{W_*7|=_+cmAbwB2)yB0R||I4|iIOEUJ3m4Bi+$(AJzW#is^UQOddQ(nm zJ@j26J$YW9l9c-Y#@)Mr#Kom0Y8>)Cymq0zj>MjR{ubN!EKk+Mk4_7j6l1sWQqz-X zGt$Ks{tG6{XW6ZOEk5hRL;374Q-4f7#Ou20VsSkSL)F3T|BHP3fB3(@63F=>iqo~{ z(l>QOrz;U^$@^d3?9E->rf}YsYt>ZN(z|m@%WVpme*J!JZ`Hm+woj*Ja}F*P^sII8 zY1T7s7MJBIebM-Ehc3tBt9c^E%RI$4i8dM>E~+%Y@8s5_{lC0q)3MEY2e>Qr6*VXO zTnq}|EX#iX;?;MK*K!nPd&)I;xM%Zu(4i}jFcgxI-ZEf6AC2pRp=F6qPvTAQ1zuJRk^?&27IHRx3Ug0d(EV#NRQ(=Cm z-{f=BcLH8VmF>6c_#L$=*7D!k{EWX_Ppp|{{!jfcYjTI(2`gEBtKvO={PFx(uJVT2 z91FT$b@2Kf%@03bd2jmABpt{QurB)QU9bFGdQW!S?AZ1=Ay~riVtBSlHYI4!DZPyESStW_xV^_f1~*beu$H|NI=F&Qo>V@#n4U3m&#eIJPjA?ySB3=e}U?6iL%1 ztExoLt4!u)d8gx2aXlz`#g|L}g90Wup5u8FYwJ<7BO&?PEJyD*TX@g0c2C~yyZO`E zNH$)9)@@(7b06`z&5Qrn;`TL@S>;|^m9%hC`~G)6%@1~cZ`oHov7m1KytSdmDwcs-}0{``P4kzG9qrKYg5C`{izMQpoZ0prcQ0a-DV`|Csb> zxBAb#u>S>Rdcym&nVDK=OD%nFW5vg>^;LPcUeF%rBThFLE?aO$_0Z4nl3G4*-YfVA zKW=oJ(;wQFxUYF$*zJAqGsJJI{4HLWUJs8gOf18e(b?q+iyKA^vUbS_%mAHZZl4J8WaO=zXopnlMoTKJ*cLm$Cq&vk$kKe89 zpV71~;7^A5#_yLO9AK`|Q_C=V_&(Y0s)E81=e{MnyS{$okrdO3{iL1uM94RBcEIcx zq3741G13j*%=$#l-zA7Es^ZO(<6kPP7A>98I(yHL`Kvz$FFh3ds9dCMM@2#c|BY&~ z25r?D_m^FLWbr6#eqdx@&BneJu2U|}J8PKzq*DDy?j_p^c3Qo&y$(+JIe{_%^lv|A z`G$qZx0QY08}?_T);((%cJKMK3=eL7uHmC(5uDb*-u>;U@lv+YcT27osx%h8yqk8Aj8(n&(GnNMzU7RdY#xT5zZ2*P2b~)}rhm zI9y%j9IS7CG?g#Al3lj%*|CVgkAJ?onimR9oWb!Z@!W5oT0Zl%Ox>p|OsyT)q?n&+ zaMRl4B<*tg)1}S)-;VazrSDIj@T1jHR!yM1U~5|0a)u?$in%|xHEi6$%D<`Fz5e>z zpl?-%XFjb7*(0=!@#{F7c{A1=g*$D>pbxc-1Yw*i>=rz7FjH^G4x~g z<^R5vqvF!O%gfZ3cNElEY`*g+iEm5KvYrz)6D>3Jdx{jjJiiwPB-Q(SU6MFeJfpXA(*oPli&d}vGUKu%LmpbV z?d1IB<$q#pnqrP(c<-h>lfAlgwYN84=>1ey;y-;;h`?Wg7p@`Bt2b>qV)t>AKyCXX z{cOqO51u}s)O99#vfD?_j^??4^b;?fdwf#$cEy2h&nMqXz1wOkupmR_PzaleV0hV& z!&CRHWSiJxShwr_3vce(b`uZiGfwERd{i_k`t6r#VJ5< z++fLM*F|M9bF{+*GFODXELh5=e)Y`qgR?4kYka<2&6oMBJb_o_U=<%@{pMfmoDCw= zI<*g1mHa=Fw<1F?i&L*_zf_ut!I52up3c?Xx&N4&@cDQ}2JLAn0atYcnzz>P-6yzd zZ}GQGK{Lm@S-iPPQ-#^5>Ia=Vxc#nS{r+>J+;a*SI7X+Zs08-0^i(V`x7O=__^QN9 z(^A0I};MKUxbnG-TXt-nH}cO_dp!Soc2g zW&abdA-l40Z~xkYzRIK8a8E!b}6PkL!4@G4a1%O(DNk9nV5KbG50?s_AWYu~pj ze)p7XEbKW)7rmKwxk6mYr*OeL&U^RftzYwVuh6SxNxr~)c0XgbF+94w?uo_@!#kHb zIJRD!<5~a3I%Hy7-{oC-RXuWC=hRjvNl#dNY;*VNuk$8Ku6#XV;>`r1m&s?6pQU)7 zQQf!QDd>CPt(}u4r~mtG+}hLZtJw4J!HgXlE`R2~m>lO}{MRN-_u1~7OfH+g-*UBF zsu9Q9aXr@J)0-d-l~qd^L(OsoT?;;4lL&hCv3y=opYBQu3P;7?@#Z{z((HO z?5$T4yB9NVEqy!p+PrIaEdEcXAA7S;K>hy9`GyXn4VjncrXA;1;1KrbJiEW?jN9p~ zU#os^*6~{qG3|7%(X6?0B{6Ga1v%obDt}*^#JN%ryJD zzu>NQxmO-omB>zVrRy*5xsFs$@YQ8r6zGl(E&VT2Uj&C(g*?WE3mPz$lA52$P1fP+#=PuYO z)Noz*$Dw&@CCNJftR5)XiyNm2AKtd&JBM}gmW`Ls&R6ZxyU%MS9r>&00ne+2LA@*V z%zZm{ePjAtq9D(_JmJK$wOx1Sgv}Q%d;NC%x|O@VVXQaJbJMCEP>HEhQN5?Up-6XsI#SZN%pE$XslV(e>w-;*~Uv?(JCnFMMLrjjYJY`==J=A31*ZXY|U(3icJ5HGL9^ zCjZ4fd+V<@YdS1B8Iff$M=-A1C~8J*%5&z&cTaF=+gMH9=WsGkS#EhEul9tf3Fnn} zS#MI{Ty{f7%kj*yOFO(RHut^#dq-er-T9#4b;1HtES#FWPjiEl&z^emRYG!})BTLe zx-4>^lg_!xvCsRR`{ZTf^QGT*)G(h~w$~!{XW-*sx0okov~KKfIP3K4@59(Rtj)qN zZ|r&XpnRt7--TTf+>Kl^C7CRbnOrMab_(zPSew1|eu_z3#RG$=x2w*obj~x+j@rQ! zks+8NZYMA^HuwB_C8v;C7kej9+17sXR$KUrmu+g#K7G6X=W@QqyJPkIs-Lv(<(&L^ z)+TWCs}EQAJng;~wSHg94DFe6TM}LGzk4uI|9D>AR3)i)_B-*f78dI+vt|^m<%$R? zOj4M#GHAo>LX)KzsyrmSb_Z1&EB+Qvv}`H4tUa~up|c|Q9Pf%%+KWA;ADqoN*3Hup z$WXm4{-fO<-Sl{U4YMnPHk;nh5f1k|!v5urv~}4><5nT5yEYqt+3YC|KPSO&y}U)m zDWoOpNZIj%bO+NO@n;hfwL%$BKh3b3+bZp?y=w3Nx{2v?jcZRHsc2J@S{j#T`*-CT z_XCTU>#ot`o4PQ7{~Jf+C6=)JMvqxjQ#Dh6vj2VK_2KdQ;A8vrC;a;a+II+gkw+p<7vM>AN-YGb1nG6U3bgC8&g+qO*~f3ecOF&m%uLl6_$5z zuW_H}nO!%v&c^)B3&kHtu2jXk@b^vrn7yWhfwl2a+f`$+>Bcv8ulKz>#AfvHqw);l z)$3;&eBG|feAMyHopm1)U-{qVdNsi%lH)JCg6YcMSobsepA*)sj#5$k+Zkt&Dra-& z6MI#Iub}POW&h;F{WfgwSku+P=xMx3j`Q_;j-M+Rp1n9Px#{H38w;cN`mj8e;_X<; zYhCD;Al&I3mUkp-<^7n~+_Ni7zxy4x`{9%kBXKXKVAUG$1j&U)@3M2`c>b&JR%t$P zf^nzY(m5JVEwViK-(6pEQ2biw~78Psz`ZW?=b!ZtKQqgV}~<)t=VAuAZ-jwmo${ z;hYfm{(xKwMr=2Evx2Ee~aOY^TKPwD`qeLJ^j5+!Z}ONb7JL5 z3>`cZ|Hp=Gd6cy3^z+VydXBA{H=3F6ipcHIQ8>@c)GlRqQrM(@?)1WPD`WSRttSG+ zBo)>^O|JaCvP$($^|uNsyZU~9wWIEdpCvrkUc1C}HSP7KU%u(lhkDg?{jT*DTz!8v z%c<6{@VB%Mi)Pu@d&$>y6C~!P^-0g3&fT`$x#YD{~p~!ud7!9QvZ+cx3t=i31audTnKE?|9{ZE3shwAvWo@-lZvWyz?4#8E>V| z+_&N8-e#e_i#ejod5R9yUK5*DTrpjuHRRe`{qh|X9ZoyGlIlyCed1SPa9~Gdxy%}u zqj|HUs;){N_I!PO&#px4Ppf8Z-}52uZg#A=%G(z~C0UI#^q2g5nJwPcd*C?7o5zAb z&d*&jX;!eb+S-@$7GG=?{WtYC`M>=7{DIt;7XltjRxA`O-f_pY)^vp%XW8j5%$Lg; zx3AX@(X(5a9Jw+r#BRAw)hp#COn-ybUM}O~3llim;~W|_K`P_?$EgJm4w;8K?2mnJ zq0rp6{*5&Y+a3NuHG9+Pp3{EIcUnCV%~)JMvvx-Gx9D2In(ft@wT;C;9rQO|kj#*` z{r%j3?%CQ)?_QMT`~KP)DfQ`<%ptZ->!1Hh_Y9k;!TGm>uT?~R+0h4?_AhUia;-~P zX0>8cpr+kg3pbw^5l^p4x!z%a{QX33+l1HgvrVr=drtIZjr*zZup_&c=~1xq+i6MN zS_TjL6(`*<^47k0c%hzjZ{TO^`DZ`gt!~ImN&BmLWnS$4^@X>dE1RVqzOcdkzgJ;p z$D_DI$qk(AmsHQKedwRPX4=*#rrC!3uXS50KJ#kxsj+@~Tys+S)xM|AReCCHg1P+a zFO;I}{|WJ@+1}G%lajDOziF>nU>WOzg}gyKldryE<6ZyRA)-t^(#?Oy0>}M_g>0_p z?2dN3`Z*@!{{G~7du~@Q-hKZzUupQyL-TF*vvPk|S|47*QvCQ??H}O?3r`nL52qLV zUDcm#;<#d?-^zY<^@~*9z{iWqs(81r%c$EvE1G42(Knat2Q_kCqbKGUtLl6X(+<8S zt*w-N)i^|@UF~iDvzFjo>C!FDJHJMDD+ef5KI&uG^zg;PWiz%eITceOf1>EiyiKn- zmT&P`a?mh(X~JsZM-whwQ7m6#C0EB9;u|z!!X>jr$II8^R$dhm7uGI*qa?+bRQjmS zruxUXhDBY6JG0IRyFHLxp>KP5a@7NGjB^dkHwMOCmrr=JhTF09;{ETMhmuxk|60)f zVJf$K*RO3;kDY4n(>LGZt2R&7L^X8j<*4%ttACy|x$Z5*&k}$0>9@XD90$1P-?(pH zCYp8NYp-tU`y&Pqri3N+_9{A>Xh>T#8*ETMl$3o}0B+c!@3)o6J!_p7tWMZXuX zy}hRA-=BO!_3{SBTP>XB#e&M`4}Y87aJlB9((K4jPk)$|94|dJpTi_~u}49a^?`(f zh@}c!f)+Sbr98dpoGWpS?dZlWdO!b|OaH#4E+fHqjBQQ5sZa#_Jl$#63_iLFoGoy@ zuJ*f!$8fpKBa7&Ue(@{UuWBDL%-A0TzKGJ zNcn2UYgJDTy0)IWnbDemooUInZ!W!@!6!KOTs)P(IzQ#4@RbakHo+QRz4T?%XMNrL zc;{P&7}b;CPg5%CImUHi-=xod`hF(z>4cv@ zW=G9yVZ7v&W@Q}eIdl3wBUTaF6Or*Bj`h8c;=DRjsRNl?KO}P2MfKj3Som#c#>x3J`7`E)L`JSSVH#iL zcthEB^Gkz&yYG0hbje;>YWIBB9N|q7uJ>1^K0op5b@>#H@HI{T{WbGiz8mkJ=+E`{ z=01t~^@pzZc*|N9&odUZ6kjX!WA(?y1`&m#7m|B|9UC*eL>JjTQ$2E8cB#m`Gx}LF z83I2oRD_piDLS7nxX#Mm{x<8j%La$cwH)VfrA*ZS8!p;o@qaSUb!&%eb{(z_i+bm0 z9!Nc?yfHqzS$z53T(J$y9=#LJT)JK@T73KS`Rd`B&Z0lgq)s?{)QWp=*t^}QKAn4Y zd;2c4D?;q^*q4}0++`NsZ?92!dXX6C%vq1ue0XqBx>F_ecD1J1?!}w9jMK%8b(rSX zD=kv0Em@Q`hp*oyKJtJ^<6Y*I&qXo;r}-Tvb%a@R#rzhW^DMCTTARA?(pg!z-TDve zR(yK<=5AN6$QJ2~Jh^RmShgBQ2WG52+R(6_b7hzmQ%sk$l-?=c&*}c+@#obp7oTzv zaPV_v=yfuhJ#)vMYQYmB@*n3N^cGU``_;H#(sb7P+DFUo9;|0BxKTLEV+PS;%=s!tatrJ{1Tt2+Y-exC0zW3ceGw#5?`wdSDFD2f4 zJE3yxu1R9*Z?-Pm&#B7x`P|MW>a3yZ4?CvakVCz{x@xxFHiK;?0D$2F6x87oAa>^Go@SCT8S%5y*_%` zB=6Cgs^+g%w@g22m*_s0`E{}|A1Jr5n!u@$ZrTQwYjtmL zuk16pTF<=DL8JHhqqU-aNgZLEm)n+z>{;{V?9XCT`DGjSpP#Mu-0_!)PN=;AOHjd@ z4Y3a#geNtLShyJ^e|@2KUvA#jP*jy~lX3=;Xa^K~bx_ziChCIeSX?*g}aj za_<^UEn;Ovju?F@|K?H>$}fRxm5z=dA19~246;AE z!2EmeqAG<$GnuvPYYd)kUU1>`=6`p@`L_7A*39^PGB3*Pzi_eKWA7DqMVA(D9FRS%!xUhGF*9%99O%ntJil_t(ftevo-q_7fIds!adI}99C#bV^}DD z&wuOeH{#l>*9FaX3Y)*CTK#y6ef1h~lfoQ!o)&~0avs|xkuUqi& zW6{sDmqlH@pUzCUAYbx>YvPrHzkU5?7j~}6Y;@VbCGwMm_Eg8E+I$AqZ;z?wHEEr4 zPw38xiQAFIsujZAwfde%Pf^60g=%6^H`hM8CaQNb@M_%o4@J4*E8ci`C2vxnFy-{PS-rSG76^`dQ? z+UMI}z4|ofl%V|9_S;gkZ!Hn}9yBxOY|5WGAMCb1(uH}B9<`KE=|8w6WVQVncHXtx zvdJZX-{r3KJ+$BLV(s0QR<@l#wEZ_|H5~l&>e9CKzyKA~oGs-JGJd zd!pdSAK_uypD&esldJes!NK?In)j2bs>k1W%sUao@NAXgq91FWc^1sxIbq5=ji2T( z8FJ?x+`Ub-@7>}TH9K_v&E3$f>$FwlmC&Ni=FaC=-qJZz6Pl=XC*b#z?RJ_GvtwMV z7Vc`w+Pbs;@JpYE5mRpOw%c6sTT#b#i#o5T%7#f>$}?-_zIfX{JLvJ-swmH z*XemJG1JthOJ{`}x3e63AD-VD(A?AIzNUBA9S-}XBkNM)-v*zrvFpMBw`Z!P5! z%Ku7NX9V-_*7ZmW3p}S3>DJf0_m8`4>~XWq|I0nYpIL;Tcpf#E<+rUGlnob=&H5y}`G9!p_v}5Xw0GXr*%fHDj0M zW*2qh1s?x@uKwzA_>qR)?6bNP_4$uEPJZHiBd=9VJ@@-MCjPY=t3Ri7q^(V9mN!*d zz2w~7{rB(ByFc@>&$6<0k`sQ)9W!H}T=hwV{no{K6*CJA%~t#6f*L^uCVC*XMHKEQb z;`_z7kHqIcS)EZVXYkS_VBrqQ(+fm=jvtwox&7QkHige+Njt16T)zfrA7ALqs(mrW zHmOk5PWhkM?e8X&H)Lt7HvVCnad+13-LoFZy!d@-SDS6d6#E6DUo$PUrpyc3c+qXn z=1r-A&llG5MV$!iDKeN^xpYqAfun0{t$$ytFh999?gf8Z(v&x>St6-7_>|kvJa_$6 zYW*qey5xnoUHY~9cGp8Dw$|VCtz8-Zx24tDT*u?0V)r_G1t#{rHBXB|*~_oh%l?V^ z`?u#xlt9F-y8;U%BEmP?uY0j~!ijZHw*Qx1x<=kP^sieu zpY{i(I`6Nkzp4wDx_kMSobmBVRo{b>wlG@Fc-F4Jd!egm(z|tMH@7YzW=|!us9d{+EvW8J_`$#zxRs9HUu&4Jf|KcBe(aa zc4u{iT)oq?JvUq0M3*Z#TE{y4D4+FtPwcVo6= zcz@i%=_nWT?h>xIw>ZUCzn%J)U7)7=njfQQYT8x7=VrF7i*617VN`F{uK-4U>P zP|j;C{>rZ+EM&cD(%l1HLT3cjggV}KX(vuM&#ZKljg9qpUTb)sZ6Zs7gVBQ}*9v1V zF1N7QQp-3)3$3 zh_9-hwlAQx^VUV~eI3jK@$)bD9^$pSm-fd;$v0}L;~bCB<;4w8=I`}gV_6qh!RS>U z@7fv|ASk-NKPG1PMsscVm=yVg9QP`1rXNd_oS-ZE^qOGk$$Kd!GgJ2VWFCrLeQBfo zGq>5<;`2NnaBKPND@=^+e82be=a0+vr`lhYnD64gx|QEs>&SJ5F&(Pe|{m&?d;j6W6gNWp=p9|M-S|gsf(o}7EFO$cnh>T{HaOG;hP5-mkzO9Yu z{#YUx5z=s#quxzPYr5$ZySpmp>-P2h|FL4yoHtW@Z{=olJrDK{i%I1p;QJtK4|-)-i`)Fwd-f zLR`t-LuCSYr`x78WlVb*+n^x6>8yPsujJa=A03&sQ~16o$FODX*Ven5*B-gNBVrLMhiqDe~pAK_d6A?XrA^S$g4JRz26w zGWy-dzy;4XuYLWGGf?s8tj8UDTsY;nB~)~seRAfP%QNX2k6-DY`<~Kad|I6+dUbN# zR<8|yi4q$mS=PCPO5RoM5-ObbQX;56L;sIt=GBO!cM~?2pJVmzoaV}JtmT3A zdp2F(%USsH%epPOU-(?+^Qw90x=!Uf@a%WR;)9=moV+7_`{S2heb&p17Cf__V6ttt zo6;F}E(@uQ7d6ttP2%S}Wz43g?vz%L308U9ZT-IRqWwm}+3Lzuy5^o{dZfuZ?Tgp+ zrO7iVd}j1l6=FQ;cx}Uqua1}3FZ7dFV_Kpe))$l~@kt^41g9qBg^zmq|2TiF-`f<` z#bd9yytA++KbVWtw$H9^%)0CyR;MJr{O8OlNw#A)GnX7Ld-V6{?tW$N+%5H- zoxbWeJ!gO4uV4OzkweE-sja-~;XK`G8yNByRU{PNJ^VEH&3Wq_P3Fejb@MfkxH6dU zSMYNG_?+p7{@G`WABEZW=I?kE=OfbeBQ z>auU25;sqsHM#k*8jHRw`{7+}=YGr*e`C+De){C@+Wph*yh39lAN{|>>KR;nd$*D2 zl?zitb!)13DE#|=#v$WgmZuO$z3Q5(peftzKBxK|KX5xa=Z8nrT9&qu2#e-TT|ZHMfSZwv_w1cH3`u8AoOHqGP6V zYvXhHb>-fl*}ql4RxnLV?&pbBA~Di?Te9TWW35 zeH>ZI+sZDj-|#kX;@m&mnl8VrU;S{ZO47T34Ym8i12lS0Z;rb1Qukf`@psK3%csOM zw6@0wa8EPcwK`(Gx}oMFJB!~{&bmtN2gRILDH;C#UZ(Kr?TW-ra~2=@`0@Cjob_Md ze4perL-1FPf}hS(lfzOQw!B|@X?DotYnvD8b>2wSz9A&7kgpTJdftKs&kVh8t_-yl zd^72G_WV`PmJ2zuEo{nJ-?F^pFW;l%Vrw6|Yzo}oE4;L_sEV~;e|5z+w}D+R}6c8 zJ`ZKKKHR!D+Cpx<)57Cz$`iXU&R=`(y<=EVll&|n>!0zwJr-VFa$OrwxXrtv{ywoWC@6{#M1m zSrylAKTFTAKRD!w}Th0{jDG7hWswGPQ z{T5t)SHFGL-2AxYQ~h`N&tF^<|FG)SN98S52Jb$c++*0OxxYxMX0EN)y%%}`0ZXb+ z{8f6qZ?$c5L1oEJ(fnB@dZ(-7AHQ30D$nfNDv$3uRy#dyXO>U<9sG>%;+>7>{Fi!! zeMrc^v!;<-Jfh%v$>Gwb zY0v-5>3f$-3W@QDZ#T?XXmXSMV9*# zi!S?aT{h=WAEK{^hq^WFTl;%yrRWFK{)G$Y1u%Y5v)nti>F1O?eoMa`y4H1eX?wWf zj=Uo(LA*7w29t%}TmGChgOk4}BxB#TH`^E9GTZI_@bcmpGt3LC18X#xnQyZyxVG!E zPMkmc{F$KrS!>8Asww*2~eOts)hkpJn$cAm=^rnh#<`o->H`fRP8F2U7$Nphxi%j4XlWp5^H z#<(8P;aTRusg;{*|I9k6tmw`3m``peJdR1t_;&xxVUb$3pX~{42X>v<&zv;l&Ycrq zbN(^}G{w#M>g{&1_uzRZwh1=Xx_Zx77l8+@D8yM#!ljwvu+=%`Uu# zmp$h5*>$3qtCGUCMBdvuI5V){UaFT;t=-VRP}0r3#^U2Lo$!fj&r_f987D8F6!-3~ zj*MgT+^ZEy?<#%ITQbiuSUqd)={>LgW4_nDZ{5CAdbhqaXP@DlX=*q5{HJ8i7JX&s z@gdMCdUk@c*Fo-wzjGqjB^T~$E}av5GFkL;UTX3R=a`BQv5T+qGOxM+^!S=(5)U`` zUVNo?cIqp>kp8t_Vw;X!ef?3pXp*~7j{c4>`)0Vkp5~}it;8VZb6j#}X}IH0zW)Jy z72iB03{LUosYqNZC`z>bHQDxo2(L_J<%;j0TTV7En)v$8zEcw~9%x_NsHf{Xb(sri z>0YV*_3nFiiPg47#WQ^VzVD}uZd1+q zb!rbbx1Pw(>zLuQB)Zz~*|#YyJNh%~Hyto3U~$#_JEv3VTyURf}IJ86*Ue#rdO*=>P~oz|>c{EH*+!o_b~IkI_tk>w@87aJL|;C6>1^-o%U|{J3nB}nu!Z#=Nk0*T$<#m)6AZ?qNi}b zk@ga1rgs9{Z(o{e{q4HgJeeEw7EWIhEbDkvUUoyW@E;Y+Fs3JMg0}($!js-E&%d_m zqRWl8tM2(1PG2rr@Pq$?2;$&Z&S{e6u)w}0h4R{m$zKJvbMVBW8^=iCKPY^QSfTu!juZ1doe z;(^biX+M8mpJdWA+s1a~f%eem_dT^IAKsAQY@Xuz;|%lVgcDExG3dU$;`g9GNlMrD z)A{i2Cg0Cp@_2u<%ba0N=aYL~B|J*|8g54R1Qap4?fkWG=ea*Nw--0cDc}2Te9U>< zmZN5$8rB?&tn4^-?({d^xgy-WwN-n5S#(T{$q{+{JKSXcM3DwjeF32-W-aM=&t3h( z3pvF*#n>@}IkEAsr_EWzyiK3hvfU}PPx7m~pd`r? z+pzw~Qpr7&b|-}O?T9+NM(0khW98LC*R}31r~b*gD7E6|u60V2S$Bq=WPUh(TYd6u zra4z5H>En3O+VK3G}b;OtTIA9RH6L!?bS~t-c-&k3H!D(u_McQ=8js`JFA@=Y`D(U zJH%c7%bla|nc9)V9O{zyVPEHh$b6Q+2jiM+8m;SW%uj!O8JfE!Nxym0(d~!C%QpSr zsJd2sR)0yr>95L@E4eQ||FEdLS-ZK!_V1bGQ}dFAPp&lf;r~|jdc9O!NqoGY%jcx8 z{p=+jvkNpQB!2drt@3*<7hhb;e5qZMhj+N}p7o3GfBLiHPu>y%)8ENGeOukzS0vTj zSih`#n-{!zf$zs4Bg^dmeQrlf1D+LkRz}R+Y?}B};?}K~o>Tu@yglo2+Hlh|_Xf-C z5HXL;vrm@#r(d+^l{oDw@N9BP`@K)D@-xo#&-CH!Df8G_zv_D9j_s-$QESgcc6l(` zy$Dp9Iju}Pw(7da-j_~(uSJw@&RHXJa;Dy^2Xhx+;nQ=RVVuxsz~7wr&%kZvqmLG5 z%f9iMTuj=><#kFeQSAnIN)m$(!{pa#wYs{!FJ5Q9*p^jz`IJDJ;yJzLUzGGe_WYc- zO61|gM}+~_&GV#oSwlwNdQbn>#YZb={L#GXwMF6O zlov_IW%ux{2!6(6sW;#H^R}NavmZD(r(Ccv{xz-t^t|4i%R}nDbmUxStQ0UmoVlyQ z-LHAQ#y`cfy`^tfx_X9BJi7OU6Px5ikIR#-Wxl4_RPA_8@i-vnpEhA>62gkT1xeqeC>?-v%DZX?OA2Ro&&zG ziXP0;KkXB~Hs9oz+tiIaRR7Pqc;vLVru`g|p1t-jHy&G9ecSMKC4YGJjTMW2U5KsP z8muvOKV#(E>R<2TG?(p@*GN~_6L@B{&gx{}3>}4qeGStV6k1PxR3NcI_MW|-%;C9P z(khp}E1tY&rJdqB?TGtca~G?e*ORx_n`gT@`%mhz$EyDn&U_I(9TkvOZo+c-a-wRS zkK|5Yl_I;xqUG-rR>{`>{^z?tm&vtegG8(Rt~VW4PoI2Q?HX-<-Y!P1Bju+1;-VLy zzR8)Hm+wjtH@L9v&s|aVkD8tbPF%Iqxe^w3p4YMQ17n4z#MH~T+jux9uy{;alk!|? z@73KoGh6MH11@{3@3ngNZtvgA8lI7+$1n5!KCyd_b#-%onB3|sXm#JZfec0E|TvSX9RaDc2xXsEOV@gWX9G_1^>I&{%^h1 z8Q;D5Hixs=)c7ccTaRZ4*t3|QP?i4pa&OX}DkqJ``uf*v@(PaSt-AOjT76#PynrLS zo*t6Qe_w0-R3v=2(<)kLldq zD{?*QSGV*m(DUQViYzb|YEwGj|C9N07t1r(lR*hb;?;lHyl9b9+^M2;T|oJ~>YTcOX|K`}-?@?-Nq$cqe-T2a0y^}9jGGDP}`OOP=>VN98t$tD- zalDjc*2jN8uCDkil~(rcqv_@x{^T^H0Aukvkvn(w9qRn>;#rx{ob#W)v%05Tnq#y? z!G`g=eT%t#{8g>f=QF>HAFP}%bgv?4(}#Z7g)@)t;AirYto(7JVugj~v3k9fdsQz4 z_B^&+ZMB|HcI^YE$c8XGgMvkpS2pCzt+l_C`+Ud2X`58L_}_X?n)^?5VJyS5<5ydj z=>LwN9`-?H`L`Ld^V^?({55sKoJUWmE}kbLo|Exluev=~6u+)f`zj}QZ6)U@zP$%J zUj9%yc5*%H$I&stYI3l!2hSU zckxf*rEKqPQuE69l$_YUt998Xvw+sC{xyHCIm^p0$5`)+Xnh*<+SD@R1! z@pRZ%$3foH+OCM!d9SmI>q+h3VLg@~B-`^z> zriDg<&v{?msd-rY@^Gc)x>Z*NkK3zPz2eV#S3A)!VeUDeDS^`qymtIJf1I;<@(wMA zWy{`kSU1_Iaf(cJdN}3#&bBZA?$%dtD2ibL&-*{L=|iPi@|wHF{SN{x5sd?5#V`eK=i^*KcvL=eVBy z9WIyu=i=*Uw=%xJ^faN{@JsyRCrWL7p&KeT+8O^z&1p?M?D6=`a_@qeyNni6>ykYC z893JltmP|xWgxL+uE<;&{zHEjpSbBz z*SKQ1;qA?tCj8U>y7a%+=(aF>Y`e-TReRSt?k&q#OkXUu&tXS^N)M#@7rDCUv`3oky*KPBO$`*eul+SL~5WDB#;*}FG&YX04hZLvs z11_P`kiH8gZsu%vT07$Yz6}1a)4}_&WyY!S?&lI0W~sB*oqn)H%l7sIwO6pKgWsalVlE5j_+quIZzLY7| zm|wI#GbNrw42xZ_O0;`=VcuoTuN4dHhe0$&AR-V?duPnvNv{`Yu#TdSH+RI#iVXg zj*7G0iy}57cQuZ?%6&$^t;|-m808p;@+upcv7Y)PGyl}e&h*gA?UiS{WW-(f?R~@+ z`S{YIWKGuZ&D}Bj^Pe%#+Il)OBRVVh*MYCM7QAi~tgZgIFsS;x&&~^~FJ3VQdfzuc zdQpUF*TwCQYi@iwsnNb;iP6FTI^~~^Ypm^NV)H{)xA2 z`}}^|sXhE=fmi1SaeZDVQDVe6Gyct&e;-ZUZ$}Hgr847w?WH;C6buT9*E{H_m$(RG(K4xvQHdxjo~RbFRk5bjGPO83Jx* z@R`gF*?Z$^f9UP(*)FTRw7%Yr$rKFnvljEJn5y(sBUG>J@_wTo6Blh-d}s2-?}=*f ztwLgttl97S?vRbn*Y`Y2O%6Ptw)9-B@sp%&`Tu9CNJp>9%iX1UN8!}TeHV3~eLv>A zrv1HsjJME+-+{Nj>^oy}Jh;a6m>27oXPeHQ4_qk|=+?fg`|SSxzgh2fMX-crSBI{% z&YfqMd1&?K9xHoM-W~E%OoygRYXv`Te=@ zWr3&J4#%r^88cRSH?(qm?$dm;y*}JxPT17SqG{VimUiFXch+ROx7ZI&>EFDwmSJVH zo$}x8BiT{B2ahf}&UCRMx8sf}o3A(r$AoC_1-uhJb$zinO&8dueP2i>N&A7@Z_igr zZ@0#<9&cK`BP~_ZNY!-Df}0Dz$-P_GBV)Vs&%BA-l`CwOo$XbQJXBwqzGB6dWp|Al zSNczUWqe?VuE85I?ztw4fi~p>;%jTEzRnu2=PK~|i{gLg`H}Q$v z1HvktinpmMyZ8QKtXjd8dZJ3S-LZmqWmBZR!1nLUc3ga+yJ# zfo7Pdj$mhk#?32RHl4KJb>(i^O5J{B{Cu5?&Jx_FZLDo9S*CWCCfBv z=Qr0icO#{IBBkaBNo9QRZnv0O-?jV1ThC*QokgS1g{A*?vh8tXFqoHQdXSf)V2ky{ zpPN%6UW%@H6QdFIVp+iZ7aQ$^6H0w76=YO)R%vXS-|SQ|`DMtC1Lt>@C$2d0CznHM zrqSE4TzW?J5wF`y5&<*&3dyVI~*)H-h6sG`CMdfz1o%KS9;R&JFYx43`_f( zRVI9*>&QF-B^mrr({H{AW(#?|DBLg>BN^nEX0_lGJvSsa9In(M$U-W*vDUoS@Jh z7tQqUij+ZQ+{@!vs!SP}f|+{FzD+AFKJ->o?!lD``TS4+w0&l`A5Hpl?cOEH_cbSX zSDy9gJKUUJk7JF+>qqC zX8p?jfg+#2fv*0V6}v^!KKr-|9n-QDnXfATK6k%I(pL|$haa|U@U2e~*uLVT<$jSj zL3^Xle7uo)-zVOB!_lzRuaQ;Llp}feKDs#Rjo7o_yoWE8JjjaV`Pe4od{J3s{j*nh zUUE!bIQ_?i=DuCslZ;Q8{rK@;$f;weYcOZ$#s!Pl^&czDSYE0*SErk=aAni2jkmvD zXm*QS?AGkT)s=8+gS*40#8n4pFSsYTT`D5{;-Q&;nr*-EY`(jz|Ki`3E4o4sa9=E0 zdH=WVrz?WSUo`hGlQw4x{^h%aqlznB`%gvb2acqo4csqZFA`LZl+8Q(FE}FgQqk(U zXN7L72s|LJ@$_4%l!EM3A_9L9xJ+fV)hGL z)y$tv@583LtaR*%Xg<7=HQ#)5Ue4sM!;3H8qvkK+No8dH z9$9+CpE>Bml&MvBn}a1Lu)mwgzh=!WSM##!Efs0bZ=z;oa+xLGm=<2C%0A0$MM2b8 z`?}>S>I&>>^Cnuc`F%0E6w~)q>A8r)G@G7_-uo7CJ9sjh&$(O^zh2=|?1!+Q>vpwp zf4A=aG2QJ%Z1S~PbNhanyKv;0d!=v$cL=8%yxyd8ey+^#$BApFmNXoRDY9q3we(!~ z!~2cuPv<;e(#)8^8IJ;zrhf#*AI^zYlIUf}HZTWuftasrT`F=23 zL-W%MhYJ!tMf-EA-8pCXe0VZpgD-Q@zS`i2;XaQ4#Wb%7U5Lul_BiJIe#4m!u7+o3 zpa1mt#i?KayG}g4m^8=JF-@{?M)Hw&Nz7sMwWjpl<@kN;{su?IGyh-gxl!8jcw(H; zgVOG#_y>zVSDqCUt!DGAKf>NAG5@0ICH`N}vdZEvhz9ZRU^9K$@Fz0Sb5VGo`ziH{ zVrISY%hB)@9h6u zYd=ZP^eyKip@y!QyYLk~| zs+pcsGfIwg0{dC}y+b8*5YR?gX-u^Q?Z@|O3WF^}h*Cn$52ZPSnY zVR^C)iCOn%U#`fW$@OKPlD=;5{OSO%cAZqclCDeutZte-Nha!7+)=R>@E3G6#MAe_jlSA>W2AK-fUm;dKK@- zt`}=da%0?YZcjcPac^_;tWRfIGKCdF7cGCy++Xa)pT)8JiD<&%ekIoJOFS881gb^f zPo4Sb{I8F$_rGnr8g3Ak=V7*7ZrKU`Z&qtR6$@>ceR*|o($O0%-`aZKatdDRsPf|H zWO>6dqv+MIo5uH>A6Ps(Bj@b*Sf6iKLW|adzh7mie2TCMmR_0Vtwd09@r^DRiRRNRE97{RU_+2H>PwU&HjMP)*h)w9Zfk{!Zn>vivzc&zr%Sj^9p{^@<}O#bvIZ%x08^K{t$e9hLfWmyFC z>Pw#4ix1w~cGt`P_PW1+7g&6o^3hQx@-5qJZH)!F9-_@D`pK48V`T4rxmtTL$hR(Jj09WTWs0xnw$ zEn(1^bf+s}$D|6cV558NDf8#MJv!8?J@0PHYBkf}&R?g68SI<=Zr(l9HxD!A`xhIW zFs)x?oNr_+cZ2oPCcE1S@?C)iF3L}u|5Q$U5UlKYBW-5qs%BMpp_!jKf9?H0CvHiE zaOh-T(U0e=Jv`T54^zJ-Y8hC$Xpxud*;naX*Rga2rhi$tYvRvDR|%_5%Re*bot(zK zJ6J*S=aM-_4lAm~Oxw#@D#DsRypc+Lcj;kob;%aVZ_{g=OWyLNFmlZ}x!|-%$>xX~ z+ZI~A2;9G7(*4c*{(fRn7txdpC~V(QXCcMipX&7G-s#29cRkXrk|>E@*!iu~YC-Kq z#mo&wf~N1pN_GnDdZ{({k7KL7fZ6TKi+m-YR2=R2Shmla!K!+7aGTK6Z*P*zrcW%= zZmM1#lbG!7TG%!B$;*9 zKYL8mzAcBY-tqJKxG{HA(9)&cPuIf;t`qA#B#QbEyZ=vRK0Cwo zkGDqXAJLS1i$si-^e3^;lV8riedW&u6*G6v|9=1Q45z7TCyTy28!#nY>f~_ha?9M; z9s68+{lD1tZgVqp6BLA`HTv%>v261)FE5WaTD0amj}V)r-I?;#@+Dyx{#I10o)&6a z60$!bB>#qJj=jAT4ClrQehTJq(9igq z@4i>>Mf9?l78ONe8!>qJ+MOGGZu_UiMxS(Em>6THb%o*OWaSyUK6>U1OK*FMHw%Az?R)y`mI~W@8wE;M z`z-3XfA-VXvfk7Or~WaA;)}Rx+9kUGg4$KndQN1lnJd}qRx_=?Gtp9ag?y3E^e~OPDk}oP$e`saW*7V))t8w4r z=UZO%FMTE}v+L<$Lpfh_<%Wc`hlkC~ll)a(XNU)QT;KV+MKdQ+;=#SHD*v2KTBWsG zuYYGNS683h;;fwN6wy7wYk{qYXVahak9&FMGEdsT(&m$OulL~RmNyrhKBsm3T)TQ% z$^JRQf5R-BA{q9r*WR|@nPok1Q(>5+!D-h?(Qm$=J8b3OrFltFc)3t=d*K(GTdvmw zb}v-V5S07#JFZ@H+GPV1C!5U=i|YJu&&}oIo4}i#zAm7WOZnd;I}RTCNx!s1dZOdC zIur6N=O(N^bmHJsOTqZZHv7-+uRHyAseD1`%+IV28}8+priyWe2wHee*E<KCQ!h?%GDyFev(UWekxG!~0wvcf5pH$O$~XJ6 zUK@VfeYyNlT+MZ@|Jzp{KP&NXRb$Y}c&8Np!`e6h8+>9(f4J!BuO)qFUEkZ+@MS(K z>kt1G7-sJI;gqq+uj=OYE} zd!HEo#)-CL}7J$5?Zc%rBIjOEQ^uHJ_%FSM?;HH<&KrQ2f4 zx{u#N*@IiJFYfFKSjfci(#gux>;|j)Kd0@>8qIPRRF?TNa3TPxbQ z9eg2rc=Fp^wgc+wn#z_xk`(0FMNBxhdbUSItyGgbn(dzXB2K3Ex~W2!sQTQM+d_oS zN*n7Nex1W^ljU{kithd2cXt0WS28TWx$QTv-@C@&b5&lvZjI?!8SH3x+K(~ee$Nw0 z(MsbV8~T&x-AT9;d0^(J(+ooM-#jt@y~MF$<+IseTc7K*EoT3*ST?XIm3^9ti?Qo< z#dE8t*UdGq?{ZDv5Vj^KuzF&m>eAhQSN$%>yz|!5FFB-tdP;}O)s^Sn^8I9se@(q0 zuwm=j;PuK;yoWbfTL>|pVf&Lh>z1N`%)^UuEC;*X>|8}+uB@{Aa=wL8V&AMy{Q{A9 zP6#d9cFxc?N;R{uM=j{O{6e;SUO)D<)fVM3Z7Fz?dw~1j-g#d)eYbF1))Q1wbNik# zn-cfMN4p~)>~DM@)nEOiKvOMakNLGZBBzA%%HBIyh+L{j2tIf*=5QnPjSJFS(oNmA zHgg@&b2vL&@Wp-x`*UoP=Wd)jUL{bjeuV3=ki^{+Uk(W#zx3Ggtljoga@-5KJ1?@F z^XIy0TYc$YvGljPkp2ZiuM+RPmb}znrEc1U&TNs!0OvN4UEBr3K>~fU6bNXhb&E+J!vyUvC3SAgt znRvcRr1Rc1V>~fE*m%;6)wddWq0bUV*e}wF~`Ffe%xezmsO`<%@*YkbXJF0u< zzQ$aWIR}b(R0}@k%-wL=-08z1zQ&fCr8;---zn}1p11quOG6IPX@9wQ%s&5VqkGph zcC~_U^(NCNJ*s<@H)Y0&lm`=*`|2J1sI2b4>$_L`P0dMvSeDNXwM^jpX?pJ8BOUkH z)j>1#gPvZ`@7Z*NUuJvs(XUZA!UO`#&OPya(V%Iq)4r?2%23|9Op0MQ$Bv5mfAko| zK2?@)4Bo5%-eTIP!W$E|EbM~LQ%yHcKYgdg=HI zK7*@1ujhI>aQ$=%8OGCP zOX;N4$IPGcrgqKOhVAoj@!E)dxW7c|*@e&C74M!!?EC1{anh{0BH~GZ>n7;}$C@SG zinrC><0U68nEExCv zIJG3>Y4Vq&*(=R|H*7KCxue&4Y7yJ~$wluyeki^a*ehNy(NN8n|LT2L?Z!TBs~cf~ z3FkNXIq!OHb1CiL#i*{>+{IVsRMl_Zt?;ML@m96tgV+UA!#wP4cn;e3-EpgXFIj%| zlqmb!z4KV^;FIlG!Iq`K9Of-S=3bWUwKThr4>> zswuhKl2@tt-P?1^&9ugG!@q|o#htHwaG536Bl_5*L@28B%EPrUE$%N`)pO_23ckZ? zB3hHPgIbzO`ZM`-`wj%zU-}?cC#{>y9GTrEyF~A?PWr>? z6P`Q%KA0MuU-kOyzTCKF6TdgDbC{dztrfHPey&h#L)yd)X94l5yPMm>=dDz`ckm_C zO8yBwOVb}2G~AZq@G>fm)8jR`@L$zkP2r=V+?RXG3>nU`>zihqTsYu0$!x*wtCK5> zzBlA3OYF9G`fs}QL&{@?x+}XTF6!PK%2~_NdVbaI!u(S#;+mI4BI6~#epqhJAzd(I z$pnssJ$GIu$;bRZ<$Rid#|-X;k9KpN+Y=;tJ?y^x?)CRyi<#IjSS$BQy5n3?dxqrx zTl@BNJdm9v6CxOLl4)=3d#=*6MzP!eyNR9%5Xj_WT4?Nc?HC7-!PMwgO;-%t=U-f~ z>*mgHq6>e&;+2-oKd-6F7B9JrZTkfm^AGEjS3gcUcm3l1DdtNIzP0$AIa}y;F(V@I zg(L?n;|{kUZ6(LfR}?gL#4)i8KL55!Kr``r%e+@>7XC5H@=W@|dgQtHlLgzDa;7am z{Pa6pM7Deb^PaZ_c9jfO)wMs*)rJPW%-WjZ+Sk<~`PGz9<^4pSiLMt+HugR?G~X*b zOE!I0fu@b)F>~cz%m1^d_~~BUGC|R9hYEX9C&Td$$1R;4a&qcP(c(%Ev&5O(LzZ4` z-1qj{(i=~CZ}W$Rur>T)FMDv!@KSHVe?RY(a)DJfXZ>x;R!S_lz7@&%@p4zRI*xa?D8lqqVjyXxNQ6zRYpE#gaN9Eopx z?w=WxvpRQS)4Ia52KJ1}oF>kf+N#8f zc-efrI<+jt`eu}KSh20dY0q1-hmIt$cK3_$zC0e#a8xFZ#WSPrh@%DP?4Q=3v0$yf zb?qtqr*<#8nP_mt-p)1L-k{(~RG)+8y8^ZDgG#*)x{stCn)CTnzOd&{w$9;tsB^r^ zBh1HLK1lrOy{Eb|$Nd%GI?Q(4FRN&G^jy`=g)aPO3lvkGIqyozPj_g}6f}CGWLWUL zcTpXy-u`u+YAlNv2QJu{#JTadp~t1r;-s>WYKvBv1Gxs*Zf}^ZtKXNfPqg)$;*Sll zw#k+^6(=ua3~VUnmRa$w-o0vR`--}KYg?Y=`pT{GT-7A$Kh6EzgtVRU+oew~YjApZ z+%#ieUU+Zrq!ux?_>~?WD@zWqs`5G8JmHhbi`|B~zA=+tF6?u7pRl#=R^w*&lcG)D+z|66rg0NPSVaumtuo#< zta%eraAC=lN0mY=W54d~%!{2V?RasvZG<`F&M$ou(HD%ePU+D)&ceJtCi5IKt*th5kQg^~FDW-6YnH(|$ai;`M{q?XDPShx1qOlP_9hWDZT9 zbB?p^nNFR)TUWZR6dktYNkWgR%4Z~7z_;V5PMXiBGUDqEyBa*|@nq;yjdvXf%d#$~^ANw>?rc5za=rYjc75KgI z)tWiqGPfT-wW{J%&9;XNbGlaKZND9H_kv=JiiG6H?n(FUw=D}7WnR%0zM*hQ$rDzK z1OZ*I{rU&bY(CTU*L9iw{-2^Qt0?U(*FF;jK}T);f;sv z?)^TdIfMUU!ilwPa`rJ2*7sCRfAl<3bLT6NUufWWIct6Jim;2jg+gs|FFcQKW$|gb z_x1Ioqnl27{ttayYw{&{s$5g)>rnfwo`jTh`L^9+w-tGgu4X^}y!7<{vxUd`zBuFL-)fsO<-k*61&1tDra1ibS1X#5=X`PcuAEKB15R#|y~B1g z;?Vg_)$i+GS7y!R=Hp^n>&}0awKi~`_mt;SyqAw9*qPfko_!=?saX;@+uLT(!y{7y zL*{oBH(x1KOa7N3xb=6+qWu1cHNs}mw?2w}O3~w~@}K8ie&)XL4yB&WSw3fNf7NVx zD~(3q?(}?872o==cPFha zG&;NNXG+(ufVm~r<#VUy?iIRtdjApMp4e>@p0gX5rneMoSUn4<_@BOKhp+L``|q20 z=clfGclTm;tg6PkonOAF1|B?Rdn4kXW+u6 zEqwcDzR{erXOA!aw>n!8Yo}(@HFNERnJN0Kr*+gSe+pStxOH7kQB%jG%3{e2udhq( zpHql4t^R#V3WzN~-#i`zfzbN8RE(O42*pzHXcd)eI! zm-P59it8~qtld$Sx$s`=19|e=gUwu70rXF|Vwkvc&4?*K7~GDz2O*Te&UTqw3emoRYKKb_X2K-^V;H zey^hb>B|Ls3qKxu<1zcB?DWg3r-a03$Rd=*_O_XzpG&Duw_Mdp7eta(_h)hET5gDl;mGfw)NSZr-$7I^R`90 zuK$;K-;VXG#j;>7=P)C!AHOcxTrHgUt+Xt?E@4&bfg3CdKa7^%l<$-J7}EH9j}+r4 zqv{9Gmj;~w{_3ou+=_405?0=kOUg~+JL!04iWU2+N7=7#)$tTvxD~~k`E`lyE0zh* z{m!QuD~O%Xi`dO3!WCpT{q#NF4-3-QOgYf%eq3?ZIdze<$Aehz&zb!7LAzPT<{NB5 zi4(q(=h@eu;fy}8LQU2E_==-Em$lq>E&Jvf z5MO+Nk!$tbw~OZf5nnfdHt*EzUuqF%LTf`VoMQfE?_wI3*zv)6nKjFVPd~IzMag+a z^Umb_Y0k6%Q>_2OIqRF5Q&u^A{?8k7_q6X#<4(~e*~#M5JD7e=bCpr=x#jY)(P7!M zv%L+A)tE%NezQBzi@XuA*pq+K?t>-wjo$E8o#RcDm{H-e&um}iQ^j|$?PZTyF*^2d z7C2hxx-z3|>(c5~j9F?0o%)sAnl!(!`+IDK@T)AJv~%0qUD;w}>ZRK>#V%ZV8$Nq$ zsI}J7%o2msYu{CM?bcf~OOr(+m~-C|bLn^O>KT*YJamgVFu}4@z`1W_`qZ_7k@3I@8(ZPnj6;JI8X} zDazAL&|-ZMxW{2*`Gr|^-%eU@dN$$a#Bl4T)k*ixs_A|f@3Og6A@bKlV$+VFkJpJD zv-mUrZGyoBvD)OdFOsUSFZfiUbUcUY&bCK8jACN{Uwmz#V)T7sb?nnKb`dpK?$#dp zAfNHitn8(D&+7l*uF79lFzouXWR_7wof}WP^HH^%f9&%<2`yZx-ykgeg#Ck=3wexleR7A)l%ET zjr@DNr)smVD}JR^<2Kdl*%pbCsAF@C>cZzwUC7y`r!*-_qxcfznH#sfK1sfoTU`-8 zztyBP+vw-akSskvmHlDO-V?kRGwpO(U%XD^>Yu@-}XuwZ{7mg z#s-}*f#*kzS9}d$KD(w_wD5BptH>lD>(yb}^<6cW|E%r(S|@5Me7-VyapbJ2Z@Uw{ zPx*;Gm1nBe(F+Mzzkce#QdwG0o|-59{Qu;uB@+}ro!o!T zOULBKjB8GbXCJMeVAB3qwdH@M)1pU9I1YRKN;Ps{)W>JJthnvPcJ`ghbL}ld^!?QD zJy+Pi&SIumUyhaUmF_t)lkd;H?!}wD-sjNaIpwauTTd%Q-!WB`sUAi^=}-XaxD9O z?Q`uB&R-hXFHSI0kSzXHJWh67Mm#gNa-x8~z=)Zj%V_xKW zAI{4Qom{6r3VXGS_2ot1F2>@rbE|x%gx*CMY~l0!sr~taKVwZp(Q|d)XK;;Fs=#Z_zfKMK*pi zDP8~P8x-3pOQn2Ydf%ZueC-z{JhuMiZgPtiPjjE?9@1zIyJ~JHNs2$sm|F>RvQD~jLsXk>rKL({Dp$d&c4(Y zwikK+fUWVz6vluPyBy5UCP^husZ|c>{myl``o8)9*$WH#9A_!$K0KAv%zciZ{c`+= zEi#(BVy_)8`OvJBv`hC#tn%IZ>qj=-3z@djb}7qd|I532%gh*`_-GV0CjIodre7Vd zQ#`37X~Dggx;@?6>u0(CcUpCQnyZiW)qT4b#7Zk3aG55`wXEY*xYz0$&FmFlIN23K zuPfQAbeO3AtX7>E(Q4qk_VNB?o#nMT?7EVlSd-xkSpX*Znws@MtmLG|syC)^d z@+q8_Po7~vq4M?-Gs(Bvdml(2b97TKc9Fd=>HmmTX0PKLw(`&Iej%>KS&whY&yJid z{CI&-TsFJi@|*19s})bqYM0Lb9^{e4q*%N`Z10C|@rPkkuFP^i`a+s@1IuY9iy2H> zukR^M>9Z}G*x);{P{U!1xSDen>vFx{v!X8wi2450Hrv1F%xd#@>x?Q~-bQLp(mlX@ zqj&NZ{e#ySxV7pP|FpTZH{39BJS-4*bm78v(UU@hIyX;v|6_vU4Q-2q#WE*&n|7Z# z%2RwI>_q$FV6{1(?%VCRh)ns@-~2h!bP4bOe=mxw^lt`nOcczrvD`Al^?`v|yK$;x zZTp0Ia?@ss^I0_3h9_GcwEC=+w^GcI>yE{Ad5Z!oPP-YW^fo#l$-MDy!NIp|?MWfx zd!KyHRXisCkUe1L^ZheTqAx605n8aZc-~US{5cDm9NQT;G@2NPv0Qk5!2Dd)XHjRZ zKM_0bR5^d!6>{5Qq0g$yo6$2E*1EnG)wsUMmf!1+_Py*4+b4(bcywg>A^-mFm95tf z$4+|iL-OIXGu!Se^j>H04RPEqb?#=;HVgOXGV2pp=y5%b?qQs`yXlE^VSjkWHs!@< z624Ehc4MgbsJiB~*}&WSUS4W8OQOaivHxCc&X!ERyYI;sWz)C-b`Gt*ObXu0UrQPu zhE7m0JbG@5=05G)yNiFz@5sG2DPobr0+*-EA{AdvOQ#hbuoGvIshc(<`K#<}PnUzI zk4t-Ue3#*~;jy(g-)-J5a{aOI?Me|det|!)w?CR_YV-&#V*mmLKnH zI4I88BF|jiu>9Fflcq~a&s0(rJ0MsnF?Y?YfaRacX3BSdIANEa7aFMKV|HI_ zLY%_&HLJMSP8ZRzY3nWuOJIH7#hJk)7;xy^wRz4mF%FEv*q4Oto%Q76m0ueV?@_N2 z)ii$fwB*FpN!5#z_0MfjkeT7SWuI-nM=I~y$(6aTpC(m9pbM3Ot$&%~$xU;6*j(#Sv z?N|YS?e2q&OD2h?$HzKv3$dH#7hd@P_M{i;2e+*GcVkxjyNI8e%!NIXa^=&x%Zd-* zsou_~x-4LwVf+fqz0bBi%Ve|r+OPZ0lb1^B~>RjD@ zC3{ROM8Z<$zgGPH+9ZB;^rxDyee2m@6?25_dAiKMrZW7kx=dHG(OX$LCXT?bK~F>* zXB0EBd|N9ablZL6mS2sl($bj^Og|vkW0`z^if7|>(UNIqERI`~pUgbCS@&~~#j@Mi z*EBPfIINhGp7Jrc>BX&yE&}U6O?$WWm#>F%&hfyLseek1+>gGjcJR(tma0f(3xDoq z`?3AsE(5j+C%av_#orrqUEY@=!Ehj=p1JAk+3(XHnmnKV`tG~wdQy z-Pq*wZO*#I-{;5buuS}Nq;Cb6^YrrUe8<_*y?-vo@AP*2{QCs^frB~LGu*xut$Sb5 zZFzkH&$l_Y?{^nXIDT{6)_06dM;&fIC=Hs<^P$iFc**0%Q$ClP?n#udY?%8(E?vzb&bHqOG`?@2{hh)|Q)!7E{<|f5u+#I2k%qs`TB_?8IQDoBy)QHmb|@ z=FgH}E%EK#epS^QhQ}lSMHdB1S8m@pH?^VXq5?zT>gt^`O7BHCt@}4`^{0*(y8<{^ zejjode`+(A_c6na(~L>CCMo;%xUTGxN<6wiAW(FbNJxlJ{_n3In+v(r>L)i$`FA%z zX7h!$=e!gwi$1-Mvh>p^{pqb*G5Oc}2^aq8MMw!}Zqhx;%zp62J;RT?k6nMF_Off5 zlg5Q2R`=fm5)v^Pm%}$k1boY>=eWAi?bS}du5E#}{~DsYpEY(}s^$Lls^5RdcUEJA z%W;ZD1>F-q<-GBHy=n7=+u^TwU-DN^d>O_3^XH@@^OmKD#MqcNFnC6v@Qa)M`xjHj z+CTllcFUhmW384?jWbf^%IK2VdMf7D9>clJKhNjBoh7(p`juN@*4m%h4N_8-*SODT zI>Vz7&7t37sm=3tPrBNT`<%kt{@i$SBD8HQ(<~|X^Y5-K z(pS36Kfi^qhxh-YbMD)PLzU-0n>^EI`qUK{&5Y!X^Y^l}MafFOeEaJSXS`Z>^7)A| ze{D9U+&C!o_FcWP{N@5?^}dYXmB-RMuYPjR^Dp~L z(?#9Bvfa98zv^4BaGCUn&`Y9olS;I9emI>WHSK1LoIuHy4+o!Ggsr&jx8+;?OdH0H zho3Td1+RVk&V0qsQ$M3Fg=FT>OEz(d>VJ-(AEs}< z9mV)@R*^&#|B0I}4LQYovKSVBJ=5PsdV&bs)~KGPQ@%^uOR*jJBBwBQfw#$)Vw)%V&aWdr_M14D z^vUyx$u?e)o*kCjTJ1d9-28@>&J))ez5BPDRy5wt-2dsNa+~pu`R{(uTVg-)X0k!w z-aGGKJ$>cD@4%aMVQi9k*rV!gdheW0{H?1-K{nlH`vP#HET`fr?xW22cD|Xrp zkw0uq@^%yW`@)1#c zbK@1?nSR5QXSwU=?&90-o5!3l6TRyF*IEXFm6~0pTbGAF;$gJB&=vkp1rdQWbNoHGm{kg2yz9D0qikyC`%j|90y1d-1Ne7>we?8%m)Wjd#jAYKgPe@AE zJu`9b%Ze1zc(Q$NH}|9!P{~jgJ02K^G}Gqd7XdPiu2mZgvv`iadN@s zN#-)YZyF@Ge*V*Yeus4qtM0*r%nvK9p8Gzw=3Dqd!k~vm!S#2T+i_XtbKSX%Y9o67 zYwB$5yL?$RN!?KLu#KgU?74l)A_m%vG7b9{20!?=m+@e|<<5kMu9i!WPjTfh-R&ZN zPa%sV@YI`^t=-E`vc;C$3KZOWkp0u(Xx+B;HxjSyxOe986cd~6zb}cTmGWDq&$*$^ zG>={I$A`R+O<@eT+bC>I)21ly407*_>bonnb%n9r z{qGO;xBXxWc=4`8Ea#n&$Q`>G_g9-weg0%aWFW_uS-rD$V-^ajFda*>JD-#z_*!h1 z@w$)OPM%K9m9V<5a>&u>OG+o37%IavPv zZY(>xMf<|8z-=@3YO-E`XwCVgl|?*w#|o8cT<)tr}wS2ewH`T};FTdwh>r8cgaUrh#mRZi^0F%;DIy=Yr@L>4wO628wyV?{(k$y#DSL_pd#__c_%( zlYQ2{`%`aCr1joM_bkOM{=_<*R`=4*>s)AmW@`2MB(5{IqT5}%oG-fTAFyxS|LDwY zx9MEMk-x-3-Q-UMq^6186`1pOce(Cg)9t|h_0Lb( z>Baq@@9L?R8F>eMG(K;#IlD_?&OZO9=F7rcZtOH!6?b{zk{eDHN#BE-R-3zsvZ?RN zyL#xWy!7_tm7HtzzC7OZGtGAStUEzTncw6e+|@pCciWP)x{;UYmYxY z-$sI|K>^9oU40- z?d!~`o9_Kom(W-(az;XpcSYkA#S^#J>{y%EzufMeOMB#j^OqkblpNbFedLL%wR2~W zH(UR|zGIv8x%?JqRBv7I*42zN_X~Gdq@VmGF9A! z{i*pkMQKOb+_nEI`;9(63pMOMaPpg7J4<~$gKd+I*Afw>M<<`NOnk+a|6p&?x8j0x z>tFqyZaAs^=Zkv_+V5*OmN_VhasDdOQPlT2+9}K-Dre%g^nC>z2 za(ET1*6)`b22K0y0`^>XXA1qRHeMAFZ9Mq>@KvXU z6F1&8Ie6mpu|<0gOeR%?tjbsW{;bNY``JnVKL0$I(^cFtk|})_S9QxKyzkv};8DhY zv&&Be7N`g87G6DP%N3jA|0|Vu3cZzSk(b`ia5O+8>#q6q{Pn4^GZIBuHmthTZaj5S znpOKXL+|eyCZ5HAw@F(6yEH3Ps?6Q^`JFJ+n7QwrbKdQDdRWEKb0=X|sY{q%_0ek` z?eQ%a|Lgt8%D?7lH8Z@tCFluf={>v8IS>upChES z=c5+Wi&@hW%~JN6+doWu-LJ3pF=bk4+V+1sinM;rIrt$CH0FDX6EW7)^!+4XN? z=AM*1d~_?<$_LY(p6uX}UA|Cw*6r)MoTZZYnR~=s7-k4tYlW`q-R`q=?jc*j^ag=T z=Qp004olh z$yM$k_(<$RqCxAPl;vT6EyPc2s>>K>mCZOV(aEr&@Ls(&m51h_NG-uyi z-fX`vFuKuo53_w$x$iQy>7J%*x?i$~>fL5z%rOoRdK%!>+xBzCW23$6*A?h$Mt=2t zGB7 zL~iiDWdFLTH6JgTp^272}rOo-P;eu$bRjsIujW$?Edw3m+Fub-w&abF(+Y zFGkrC!Lylu>mz5?-u-apc6Ni_)58r8UtKzPsNTJ_VNpSG;qw_^`@P9lKG_ZX%Hlco7;WAit$Xgj*#72v zl^X80Zmon#?>*e#cSR~c7X0e-yKVjB%49Re7s8UCqc%Lqcq*z`_usa=>1ViOlaP65 z5ZA4Fn>iDVRulwIpDTaiUUS83zNdm393LmL%x1NonaqnN9HeM85a5`CB zaNfmbA}-;x;}$BF1{h90xLaY*%OeLggYs6lKA06F?ltk0_R-AWJNWsQWpJPF!@`|aeRAd!OI@?HeoVVG?S{(su=aYc2ZEfeUV_h5APApp=$0r|WEP33uv|f4DOlgzA5b<{L@9T6foKDM0i`P_*iii}C<(#=J z>glzXwdJnQuUpHz*4~|D?$#qXwUkYnTf(8W;$rwUP1g<69~_w7n9n>ZZ~KGOkDHwu z?Pj>f)ZAJ#BklN{dymDYZd)-ma9~|tK`qRUGq>QrO z-JbOMV%>*D>;7bx%iny~CS-r|=CsI2>4oj?k!vp=cd{yRH!I;d%8*u?aJ=N2C-%6KBLYLL4t@$9J1qhevmf&Xwb{{mPg)48;4E zU+Ixex~nXFY@^ZA&(k8GwBBfZ$@b1}?aw0SSIhcuxPF+PG)e5r;RgkMHQ#EFWF)Tm z{pB*#M1ieB$!)&Tte!Vw&t!BT7PIc$6r^+Lqapv!2fv>*SuOrtmBzDdmT~{VilB`t z9s#o&nr`bWW~~3T#G+x&Etz@p8>B_z>dXI4d;hHJ$*-x4m|q|EU4BG!`r7i}OTE+r zI>c7pTV1!XQtM01$E_zh_WSeqZ94Y)q4`tGw%57Im;QWK;QfAC(Bn?mmG_$~d^Ky+ zmpCcToiJBip(7#S)RmbAzOPR@Ue(yOg?;nYiiv@ zZwy)r*9#hFy}tbFz^vtY2AaF4-uJ8L`*`nYY^nCiz6|L${dM7wabHSw2TSxWA1*OQ$LN*SB@SGwe6&FQ0c#aMd#2a|@L%Qj`l#&)iH{sGE_` zCC64?veRyc-KM2XCFj0Y?*D(~9OJT^F3I^5d>-!8TF|!M&3!7Hz2_Apy-o28F2@@$ zyIofmcGqCv(dH;-`P~uMf==?kE|XE*^FL2s!(igUn?{F9^jOvWl;r?6E zBiA*wUMyo>q8&7?_3W{4;tt%!6Hc1lYdd_yC{2`ELT!4+twnK{yyIi4($i$smQ2nO z_-lAJR()Al#RkQI$<}J+qQ?q5c5p8GYqup%qRz2Xkom*vNoSt5AE@!lk+YcBU|GdD z+oM;kz3xGD<^BV_3-&c>FL$`9(R{W3^218?Honz~AMdW2-qpkQ%9rKyLB@i-?0{>V zeD-vgP1`B-aKByB@%@uD9b)d>lbgG?$on%Rla+eYTyrnuXPdV!m;Apa$0}hz=K}uS zH;!dCH+QoC;yB)YM}#dq+c)uCecTjL@dX00mn?K1C~W`n?$QF;`m0+nI=1&uU_W;0 zMsU3;Yy1D@&4xdZwdQYSP)}PCG_zN!R?vxy2yfChOdB*lX~6|CaLq8RdM0PE( zb1qwdeD1*=R+i<73v9)upYk1)T&Y+s{Os_?LWtk@vju^r!6`xTo81|5GmMe>Jq)v@&iAKgVh_>lqw&ANj0joBppdu08Ns z@z*5BnU?0qSYJqfIL*Vdsm99USmT28KQ6BFF+Q)jZArr~o!5*y>iV-)4JszzkPhHC zyIrq+G{q^6QRn!|)j7XaeU`fo^?=i^*DJLvc5r8^d~}bfciCy_qnVa`pEEQmxgo{7)_ZQt|Wu*|AP=gbQ6`*%X}{~yS5h?^d?V@i8uQH5^9Hrv~G zV)+wHrd+uF!rHU==kLkAcc&~4Y|pREvU_xS`lAKkG`IbG_0DarBj<%%KA$CyrukaG zIs5ncG+xG)j)LC|&B{MYb8U?_FD6Q5-%k;^A|phWDE)^}a7%X!1Fg>C!r$ zrG|aGJf|$^*|0n(^~&T0TD;lnns+CvEPqk{PJGE}dF5&BT%XhLD~7Fzt$W41=aX~D zhG!?$Q=feg(|&(|k>Bvr^eSzpr{^sr-l%zIOmLq3V@~P+2ZHr%ecM@gFZmEQLBT>^ zX3gWD55-(R5m^L^0grTw+?Ykk`Nit^Z8QVhJg zk5B$5^ZZ&_Mx5_N#<`a@Cf~Ybl*ivbgYS*&!wnv{*Ppz4&T*5N-J6Pod$%8*>7O}e zkIPFRQR|8W-S4%!)=lSd&fU5^pVf2v=@nlxP1QD9oXzBYeke%kG-Jj2y`J+QdWe2g zd@Vk$fW`eqyhq=j6%CemJR080KGJyb?5oH5|NHM>-0!roFZJOeo7;k$q^lDu=UZLL zYvZry)!4jH`_Tl?rO9_|_bhdoKkLDkW(_ai<0@=(b8dgrGzi+c;?8WoXMUpG9i5AW zG;Xc-bzWzBpr_Dy#e`!&t{)3^@{iqOCMRyrId!_2^M@`*wQi4X&!gg`mv85H;lHYL zy3~3O*XN+6YuBq7tm1LDRI*;8oL)84d)dy=)YGX)c53t8n7``8vx9Z^QSxjHSIb`Q zO8?w&=hnaOrDb=zXJ0f{j^;mm^3c!2du|KQ+!S<8eXWsVf%p3*S=?D%7VPhOB6Qxr zaaXkG4oQ)Tc~{QA=5f*eO>chZ?z?OAfcNl)U*%faU9S&W8_cMRKkRm2`Kw*ZMdjW{ z>V3Ye{dYf=dbsKon^}R5az=vz!>3!8-V=7nH3+zi)y_H|byGG#_ja{s+KPkgCAPaW zO6a=I)yn_=+25Y^LgqeqnIG(I-0hcI!sa!(r|Oto{AaXlmXX5Y^3zSsXFq!;udbNV zaMwAB&6FWmOM1^od+|5FUfnaayl^$oC*RK5B>6@9wGV5;&i?=K%6NWCnt7|1n0=mD zQhesxKPwNV`Y@{f@eWsOp7d4vcGZWgQL8<_lxpx#=5TIFo8K-Wc;Ya#OoOsx!X8dD zpX0Az^Peye*|_P<88`E1Vd@c23$l`Rjq?QleNuEuT>iQDt<4cG?$zck=T7mSo%%ds z*N?#Yr)?rHd?|nQ{gjNRY1#dJd9$td>rWfbUvV!&TdwZh_N^ZzS^qsumswf1NNn$C zE%x>g&iY&OZ+u%ag}c7EBjkent+l?#8pVAJJiI%F=YB0Pnk^rBJ=jEN+wVQ0Nmq_{ zZJQX~e_-?!w`SHc+YpB^o)hR5=X2owJ3{Poa zwso6-*x_Zf{N?FSUR<}&oV?`Nu`apYTnp}9zq&hp>iSUi@bmmr)I&7a+}XZ5`r_m0 z8?Q?lnYgZebz%y7bX)5|`2RPXUwN$A{C=vnN!@<2`pS-Av#TuWVe9N)$J{t{Xl1?> zXHIgF9^1DtzjZRZlchg+EA+o_xOco$D(h_AGUdFd*~*nYLXOcgj$g|eD(9*{Wt-(V zq4`Wxf!r>x97el`4uyXtqmLgb|FnVMXO-Rwmo>eI)qXsCbF=!P@-7y~mC~l?FMLqQ z-2C#csMP)+Avto}1G<2Cs4PdcFGtuh!p4$f=E^V}%c-KJe^m=Qz zof9YSKDzJ5D#3S|YvwB7xc|NVnUl`pFXuPrEZuys#W4Bp+NFoJ7H2gXt7v_*uiPaj z{9V|fpA~eW_{nUo@Fn;gX3-^&-Oz<)Rm^n21H4RZnT~E zE3~ADlR<1^kjGvAcTE=-RSHG@(lPtFe%~QGPL=-0jUf!m%Twfn)ZPng6>FFM)6HQp z{=6)w|K#K9y2FPI*OrM`?5yFP`P6Us)t9==+*!`4y!Vdo3eb&D7cScnbVg1n*f!&m zOThQNYqxFKCV5ZKKct-H$9vDq+&})?ecO2B|EkQdEe@yFIj>kN@kK1OrHngSt7Cn& zq@=^KBL}BfJur=VdE?;W(C~!oK2B50#n~5aax-WV$hdao7x1u_YUlijEl%-VI4$qn+qOq`VeeIr>fd{xq! z^YgtrCm0;J|MR)%;kUAev1pRk=d~&m)tH%5tWJQAOuFeU%5&>GZhK8PeEmW@V0Q54+q2|P$8X~I zu{`TMzuHe@L5s*ewfWB;30#=du6*_EZj0j|QhfxkK417ufNzme)$#i-7E(Ei?{`k` z+$UtJBDGvs?Rj5VlT5AMJv*VSMfYRA7K*Rfw)u->5<9Dc<2u$a{eL z(uL97L33D~?f7gC+6y-YUbgJMys+WKe)-1%cQ4B&_}6n6YN+LIGGn&g`)QU^)r8*_ z_N+-wGLL)OxTW`YykA{wCe^|06*ynbU(&vr#c|H8cM7l_wwPkI@cA#FZm-vV$)a2}496b+ zLI#gVqH7Qrcgp^ZbjfWWqgEYNu&mv3=iRqyi(?)cwFDiwXsI(#=9$}c`G9a+zPzI@ zdwwYBKmWKy(fzn|*F8QV-hZ1KT)50Ej&?G%3AJ-@<=ZVLxh?>+oL;9i1B`-R)d4JK*J_R1N z{}Eje-Rdejn|LOF*G>#AVqy#Xca^K=6L-SA>L9D&eKB1>M2}66llKnc`{&=d?B3GE z=X|U&*I%2bCQwx5`TNd`RGBijaQ7X&YcdNHRu?-wvpCLlWOHfl90%*!&)(=CU4CG- z{*^ancTaCFv1=~cm$U0~`Yj=K(`1{xcMm^Zm>4(RAV20!Md*>UOMT|NKIGn|C)jIl zd|W0!T6e|jSG`_;-%jxR#WHO_lX`1c?AuEo+KQ}8SI(2aHm#!mXWc)mO@a~$6XSm; zEn2fApe8K%^pPE9R+o};*LKP&s_HN)Wv}0BagiGGV*=+b4S~cEx^b$ya6jEyV8ss)TEO{5Kg7nLSf4p7?+3$j>(y znvQS%xqJJ(;u$ADPn{u^xZ!3%%gL@=5_48uY}wmCiP+H-v3U2Y8wGYj-CKK(zYUbj__BD_%+2>^ zWgYrE<7cd0Z_^Fa|Duckzf*p2a>8kwCA^F0S?s>?JTGUD$*z6k_fGy$^1t-Yw${xX_x{&xRCHwT|5xQ*lT>GVxL!ab{;X8d>bkp?+)wS@ zN`h{Fy&7pC$lCbzeD}Ajm6uxDnv!|fN-LHemFlxEIrZaVlIGtYqch<%er@4>Q1ezJ z#Z{r$`&}99#VzkuemoblSukh8xeHIP)tq{0(ec5r;pimA-HSN7I>ldGPJehS?6KE> zMuuvGM18;e%ipx|P4qh2-a236=;|aXt&lx$TQ;8-s;*I;{+%&qvT5R4*B$YfzOZY4 z`0?@sTjaw#0Y{r3M_gs|IeO=-;C21LiQ644m!;KQy83sjL>|MnK=UM~RE4ZimATbC zJWKWcLPfmnE=wPHD41O5+t&9y?n-w8GoPS9xMF{%{C4xa!loZp>JevE=V+|f35FULRXgpe%fK^7%J{Y^|~ie{Hk2%e|b1#d7R?n8HHtd*)%W!bgV#!O)4$pL(z^QOw;P|x z^}J1*DJ*82&&!J5J?9sD?y2XdPYs3}L;eYwRK@(r;f$J{<8-5U&6Csm8q6}*fA%vM zbM2m|`SyEyqM(3a(gkhZ9?2v8auKf4Cwd&#oojOxocEBmUCa84@Udi3>4;yY_HxFG zE`g>?-AYDL4DJOI&<@`F|E|nmdKR>-5G# z{a=zTyEp4T3zpb2bA9|RrQ`_nmEO)Wi~J9E>*P7Voz=wh;!H)Nb7lCqwCS7fu|hE1x9vzyOxm1z7;UNwE!v^6Xh4Sw@K@>*Zt+%u<@Pj{4q*mcr8=c_U0RRN+yrvLZ=3`zMhmd>p11w)qFbi(uC4^{O-^3`{W~` z&O7Jkff_ZgJFi77qNJB;h1qQRQ#I?BmcfxjtqC^2eonq#Ja=;YrIS;Z{ck*_wRquV z!IRBr!nk4{v%K5W`(kJCq?=`PEvj$s@Lc!all9EHmMPz6Yq+wosVW;O1-#=FtmHoU z`R%v=audrhW^U7%c7;dyaB5kVVRJ~|#8ZL$&U7BuuISM^&Ko}Wb>8-U_Poh051PN< z+Y~xv4@SyG=+nu?N z3;g-^FhBoze(I~(f_p-pvp#QZO?GNchKc#bzC;oBCMRYwH(LI}?qbGEWJ(CD$%r7Z{oHZP)t@ zhmyQsoAhON70pTbv8Na|=^=d^EX zeqa4y*1@>B^-B7Ax$l*p?|AyqJaorz?@0$;51GksVmjm)XW(powy*gYm(c|$_oBU; z^KWNqCtc&zOtL;1Z+9rkMX-4H75xbrH$pzz^Y#j;{mx91`{Y!zdS-Nf@yX`s+~Wak zS8Dg~IiI(6o6ZM^phK$K=G{^e6|4*jcb2Mt zpnP@L(fz?!6K1i+JmPWYdl2wM$0E{kS^QJB>}L11C-%8@wtZ_5r%9)QgU+Da#`<%hM;C@%bk-hKZj9Bwh{Et1A zX`Ra$5PEgZmLsRcxc+{cx=7x#cAagSex$YP)rO9__0x?PKE2KL-s$0%@{d0rr`JcV zux8=j&ZfSi$wp|&&rTbMo?8)D0wiAgtNbnR*|K%>uL^G?`>?My$DiaMKlpl1&zh}_ zqRXZ1mpaX#_~}-99B&B$&Tj^c|37;4 zHD7Itz8l}_|JSjjui*6>_fL1vy(rqA8{Js)?ZCblnZ?U_jFS)D$bT09B`-8nvAyP4 zb&>RuT{XgP-kUfluj|%OG1|RineXf_gXq^;MbZt|KeAn!?H`mBx}N`8nB~_F=CTDY znY}`a7R+b<_q0h~UOOkz>ak1aOZlH`)i=H~-|^Y+;TqOd^WRGEj;$z_zVl1`q}VIZ z?)w$qYu;S^_F3-jF~0fjc~4t;7Dau1Yjo89nZ0d}bp6GJ8*;aVMCKIr&pF$?xR6s^ zFw8})#d6b}SGnsR-`CuJ`M~aZJ8p7I3#_p4W!`dU@mjB}2kOWC8j4PB4F7g=IiK{L z?PBGK>m0_(_Ojq!Fls+-A)GViaXR; zur+nASH}PS!oTvoj26XA|GekVKZSEj=Y#A`Mdr7)6?m2`U0$ue(rr!RkxTZA9A{=+ zi2ZkT_4&rnVwo>0H*vk`(Xl?v-aTc}(Q~gaB_CO&v!S&@=ELeVU*3ja;&C_4UVXS4 z^6!3a?#V9=_wL7U+Gm$;{`pSsn)EI8dJpe?jws&kSDJC6>i+&)hVNUMYj-+v91+_a z7Cm84aug?{nUzG_R@KS=vih$-wY{6A$>XY47bU^tyPM;q#G}p~UlOjxi=;>Ooje=m zs2jrT6Qy2{%lK7a4+SkcP=Y3ppR z2A%E`ND{d`?cwis%F{!P|C(d=%WrRREEZhy#Z)mIaQ zBF!UrW|#$QZrLF_sVGK8aObt{2ams!R)h{*{ zXIiPVcw`9vmbFUcWB&Kj@)!u-NJPDtJ7wYw8*xUT8Vw3LO6Pgi&J z7(UFKvSs6&6`xe+rVHNsSFiDbX?E)h{f-xwua53?OqeY%?Z4Ie)9cCnRdagYyM8U+ zcj*6KD__or-9ZV<)|MMDp8eul7z5ARHOBTYcXO=Tthp@ljnz9H-OZRZf*xZy-9~}D^=cKe-yUblz)psk0qUGKu+rt6BQ<@4b z+0NR8bG&!8@xPU1QmrW?v&(Mc39GN4<*y&em=zvmCa&TjeLPpIa$~VwWOa~VEUEH~QP4Sj9b@{w#W3brW8FO4KT9)0Ky_EAV zkF=Q1%zk@qCY{d3=5jA)@x{KHZ`bFS$S^T*m1swXdrzbBl!f%w)h*eQ% z{!P!GKK1ZcDXF>M0{MS@ou7FZR5-uA@=7D1gY{@=_wQ?ys$;*~xCn;7AtS*0Sw&&jhTv?e~G`Q``nF9$q)ww=4MwjyzD%NhM&BGwjc zOx?dzBQD-+|G$29_pP|QKc-tWthDk}ah=2XFWK~m$nwHCs~a`TmBNoQABk*HzUqI_ zulwAJSUtDYo-=EmV;sw$RY?5}Zsd%=T(-k{fxw#D1p-I+#H>o5by_%X3eyky?@5hH zqAr`{a@()#Nr?4(iCTC{h^jk_ZkCe_`SDx)vW;-zgV%eM)^JIz-1EmkTHs@X-13qI zP9Lprp{W$`P770Id7p!*GO446gv)*27TFJbcx^DMX zK|Hzl7V@r`FZ-*Y(YW&P^$*7`*Im0JpQ{+2=Wn}TEr0V*E=J*5_e0~ltF(O%a#yU~ z{!mcTaP@&8sTW5-Pj}XkthKZ=&lit*5$cnj&sTB$;PoYg5e*N^uA*<-Xe39=V1$<=zM5vlHJPHP_2~ z5;JY8iqciR=U0Mr)O^#bb{ze0H)Gl)kI17z);_I!dZxdd=BC;+JKiptW&8YxuV$^X zzM0@Wb+X}Oo-aBdzJ*+qh^>@9lwAAs%f*-K_AaZBiLKBK_UzdgxjE&_At}M{;kWL; zeBw|Zky%}}>qdyZ_`=dpos+UGEBpTL`l7L>|C#WY{Wh*&x80i_aXBYnyjYpRvhb3h z(aY_{(oDN`cf30A@8w%T3&T%2WjswcWMdlqIp%r^E|)lC+#*xn^mRLn=HGw|_cy+| zX82|gyA;pjS<`#3n;+!)@qNR?aDkP}Kij;xy~OM6+M^w(4%a&L2S2cu+hMYUYjO26 z@t^aKa7XX)D_;?)d-BPfSglR2$7G%zNIk!=CV3K%^Qt|LYl@c7cYZA0km0gu&xexF z)BIog82yd!(>yNjyW?AAcMPYC%U#tav-<9y5#i*K`pL<)+CgLKwTJuFUMe11dNtX3 zvD>nJUr)p=P!wC{dv%Pyt3D2oSO2cCQaCDETda6V`9miMcHkh zOhG=c5?7cgdT}`8r#arGHoH$e+2CvDRAJa+}NkGc(QV zwalK?v8qmedw738yRSrIjNP3`Ng2&6EJZ8441M%sykr_LaXK~4>3f$C1(_Ytg z>c4`oGF?fEVwcrR3XBb4{(DpPTjvXIU8yOL6T4rYV|3iAqoO`l>;2pH3McpK+P}Sg zb1{p&)wM&7$(*)MCs!FUi%(c*-ly9k#H#S@u?4Tlt@%%<$Q_)&p^U$3^36xJH@1l1 z$*M`7SH45X$SUAIljGYqoh9a53a;F0zPY8ZWkCy9={|Kg+f{CD7Gi8yIQ;crKbTj( zMmL1Rw|&kV#fSHulpbjxEbfVjES#WtE734V*LHourmXBUs&}pG)*qfQLFU+t{ED6% z(<740kJq$DrrY1O(pa%l-fszSjmXW5Q(wK<=vY|o$=}O9-}G%Q+ssAAEqg-D?+PwI z`q087`q8g|$@|wVcL{2i*_j&GQ9swp>n2b3ukCC`QyacLOPj0F6tZyBgXhVd#fGf& z1w88ZhgR#%d&B+H*C0Vu&S2(4)`rAYzu&Md)Tr3izu=ERqwiBGfl9*(-@`4P)^vR6 zjqy1$^UIp$um1aIU9&e`9N)MJ#4|f+P z>ON+FVmIlcK<)Cd;!Ea%@$Cu4eI4ap=YB^SWN|ee`oeN8^+SI6{r~e%nyMJ5Ogk;( zSekO@!BPJDQ=0CZQpz6q_Rm%6UE$p)*5STm?HtY`&fn_!b+#Y>{H@t_>U8SF&L?3{ zPkjE_)zfmwe)l5GK0M*cFQ&GQGi?5&$Ikfzx+|j3pV`l-kiGpf8@KiE z?Gh#1@*n5usO($*%JM~Z%8AtnzpXiA?IU{R?y{f#52_zDcEyO_y1U-^mhNBcpF71n zJP#W#Y=3s(35$sRd-r-@)a{yg?TFt~fg{;kJDHbGzVOSZPpaRed&|Vr71k?@ zuPoUry}kSU!7_|VR~z>+Qg~XzyCk1eg4Sq6I`~ZlZ;*ks`Bu2 z#$5ZkEbF^Rv%c^OZL_mJCuT~-O?{PB^LyHwwPs4w-d@Nm{pwefO2dDgEOpE{ zs`IDdzJhZ2JPGcHtF?W!9=`4Jww7QEseSWHV1W*Ed4K(Ol^@Q0C7JoDmp^8nG2WwC zDi^U+f7$G)#G38#pNdx(yRCi0cKOM>$No#$F8x0D!(o2OzJ|CA)vs(j89&z@>(n;= zcSdGQ!E-ymqSa3}2l1(&DHAtnPMDSbx6V1AIb$s3Z&+2B3l*<9(qGd|AjB6G?vi46D-=u$Xd5YSCx_Rok2WO-e?z{Qn zP?0$&qmSseeUBJ5*FATQcHR`ne5}}3b*9Gb;tgdYYZj*0>gz?N|7W^7KjMyU(bg3_ zGVdK(_Rf<$Eqs5cR$ayErY(g}yxRHLq&p1#9!5|6zftQ^=hv*Gw=c`yynkrxeXCBd zx~=zr)ZdS^lwSQq`)&L0Z1x;E<3-QjJUwipRdZfZ3qWh2x7K$&+IOB0FYa8=63&GQO1br82 z^YrdhqHC2@y|P@3&q$ z&3HFl;?n#g_PL4e4qpQSo_7JFJ)y=TV#4wEa&661uY73i zRX%)~$3@CC-BQ%M;^Lo>Pse?3YRs@#I?mI_^q|Q3Q((EI^X^<8r8{4H-yII$WW&un zt#yZBflb8jMYd}@XY1tdI?495g5ghI?us6-{;3l?u6=6%p;@1{{7Jdt{q_0NZ2kC3 zz3rEBhHA@{aj$CTS3Yi+7gst@eY2wc3P}}(ydIH-f}f3LuNQI&aqa5i<`;{&ep0|| z{bZFBQ~ZuZpLk>T+DBE&{#~SpbCc4O*F4QvBZ{}lPkv$GcP#N}XT=e{?#SxbKlOPu zwY-xeADv@&k-c(E>P~Fl0d@6ism~<}u6nUd(^g(Dh>4f++TQJI(!4PJ&lV=e>s5c^ zvP-%3t`zoE--)!E%&^s9&ep=pjeC`@gmr&<$=qk%)~|7H%BPT-zUx2#QB3vsb?dkD z$ky7wGEOV7K4v<1gwl4~$BCzYdOvBHF#TEOukY*J4hpTm8c@%*;m;(+bql)<{IZ_R z+P}6k?b3sNe_L6;{|?#hb@J}{hPZ`!hAcbZrn>E4v_8}D?}v_s+Cd>=eQ)1i*d`st zVi}zJeC=%AYi~kSivp9xZ9*h9E^O7`|sE!!@bKV6eaIsvhYq8@A$-cYT3T&Mqg$` zxZmHfUPJ$^;`U(kDz5;Y<{xiwT=IAqzoc>d{NvwS?97~UTO(`UCOYnL-#=UJ_3{_; zq7?-vv)lKH_`gyxJ9Yb7$GV552jq@#JNPRs)Q{U-Gdys*fq(4O_@|{j9xo;+l^V26 z;G1vpLt@q56&;5UZL#6rSgn7HuP$KS`GkU--QufSF5lWvw*F?+(-%7e+J&aKr{C!F z*mkE+&h6^4v+HsXowzK%Ykl8Y$KJDdtF9l-n;Ez$_MB2DZ|rsc=cRimA5jkDQ$6Bb zsILC$weF%`BS+b=`dvcXRkq#HUh%2@kga82-;9hd)`dT=lw~fx6P>trU;V6@%)fn; z%9E4BI5_TpIdIuhYu}|A3x4R#{k$VIY?t`^9UNL~6V@g_64MEptM{cj*8)SkUSBVW-x{=~Jek`?XyCA+M%Wg4IJ?-s$C< zmb<)_zf~_gArhBZG51cgu*GGcg!JI%Cclaazt%;Fl-^$=ckhak_%ern;|Yc>)hv_r zD$3F-XRYsk(jo9#|Nh>YFD+d}uhrgda9T1|c;5E?Mz8`@59wM?Ik{ z?ML=9>0NYuD*fx=%HQkecWkL%c=(j+)+cp8TSBIH`7}(sTK%Zc&Z}bXKJI^;ucesg zgxy&Yz9+i#f~>(hZJ&?d7JUxASM%bxDu?dfhz5rO&y>rB6~QuhMxXMvI0r!ry+AHUJvo>#W$qKvDKE%zkxh?Jhs zPkPV&+cEcNSo!3b2LU?24cF(rwy4c`%Eqhn?cSd?pQiM_Yd;s5Rdg%=db7`2?iUAF zW(t?ay!OnNdb(dFo4JkYFk{ZgpR@d{a zC^$LiVCeIiGn=@$kEt*hUpTcWcA40^eP0~<1QRwky1ds>ozB!1vEpEqdX0#DhH$WZ z_nY|&4M)@)#4E2&GMI70phsu6T(RH#)agoX*RFpviS7KsV{B{_xXH|Y#nT!-(di5_ zwW6`T4L{GgsVCOg1k~5scsK+mho&v}{J+CI^y|aj$#)z+1SVE89a%EVvon)RNKJ#~ zx}`AhkTCudeQ2&%XZGV9@uj!ChwG2Kql z@|c(ZlfV>)zKInML42E^_cgi_$u5i6#yi?yboce0TC{fB-dl6)AN1JtC97pAhBom9b=;q-;UHwKHuwGJ zWV?-zU!BjI?Yb!8@9|TQPp-?JIbqqMbDwuyTiU{QXnvDStYF~9>-mq5oV)(~T-#!y z(q4u@xDx8|1O@Wu$}~m0bQ_aHabBhaVG}4%C!APuU!0cHYBG)6_tO z(}LH+wju4bTdKnJD=$uOdT;hJfA=p|qtD_u`d%Afe7%!>u~Poz#<>pyUd>-N?VY396r2H#OchI6Z=0+eH$=sj_W(kjbBe0WWIUfx8&&4d5^wN`ynxRipj-a z&ti>l-4MS{xGna)vWe;cfeKO-*RPF;Ec(0_p#5}w8Ze@R8!ZuKDQbF!fyKB{2TD+&_!cE zwc>BPoF?|};*2@Se&|?=+bxHAUG+(Z|DIcZi_S9lJy$NM-m3IrP2FOn?aP?fR<>KF zq#xLqvVr~Q+>=>{S9zMInE%!k3D~`=BJaVRYu&mlrt|%{sQjl_CjYfx?QZeBxjdRjq%O5d7B4#cYC?ZN z8>9QicURJP>F8{l(DSxyZA*hQ!-6(bUF}uT`}duAs9JEzx?JD*%97Gl1&3qL_!xuM zWJvb69+3Qd+BRhG#5sp-jjq3(BPO1{D`fq`W`kK?LK})o=f7|fJaJt|&))dD9Kn)+w&r9!HLL>S z&I?sKERV=BajjV;-q*5yyUH(5|4_v6<%>S6t!dyL)fOp0A4* zXns0>@xiL@jNh(8%=Swrnn%p9@hG`*_4$?6Q5nUdIj`K}IyrR?{0@=}S3WHh$g}^| zKKYaHOVz6VPfq$3{Vd|4L`t2=)`dB<|`vAKuW_&96*-Xd!DVF&w* zlv~qp3rlS&$gB$&C$T!qQPJs*Bu-?XFq`I!?(!zYAn zId#bQ&Ewb7ub*ia8`+(`7`)0kD`J_9VUSkz(qADi>-T=kn3~giAnQ!&tEyY`)j4E} z@=e5VzHj9C@xk^Ee_N|4_q2KIWD7I5iXNT1c=h?WAxff8c-%yn)w5rowM6<#m0hO<)w%7zWKYEHwag$e|?ZW+0_rd26w=@>qUHC3*)ltcukX;+N&)(;E zF0XBVpAn>cesAB)pYG9rCps^jntEtLtl5g>l8B(sP1R4VSiaV%yy&iK(t6%^$T6U6 z(v_B`N7Es|5cdE?fe)&raSS`41M$nGpEVB$#X zm~%;Z?#=Sc$EVAkc_3DHV9|A>ckA!8+$sCHPgFzQyiv|J$4~mN^Au6X<4^AdEICz^ z$+4peU!= znXw`vob~vk69?+KC(JrJ`^Iil@lOrEChvVA@O#_V=R3aE$NdWk;CsAuSG)6S*;SrJ zt4WuqOY|1NR4( zuSE|$Iklki@w+o|@69{T|I@f#(K+vZu&u~0?l-3%re?1v4 z*ZxgS=t8f-lWiB4KR*&}X=lax;O70%|4uWRGF~S6%zb+LWZ|UP-7ok;S1dfaP$Nxw z`3utxvvTG-`5e{U{dsydPew!hJHwrps_P#<;^CaNbbFEs>fvq1u+HNKOD1)bFLK`&J#SrbmQg8wC~!oM_TubbjReSik|Vd zOE8eyxhG#}vykb@zZ*krt9Pe!Y~P(#7uWAsH*2YrM)K(-qqY1plcuLXUL=vRYnP>g zt9YOZlk3+nN=X`5I>LG0iOv_*zsM9ci?6`n$L4bFCMJ`!4=&oD$-11YYM8N(Z{9h1 z_535uyAI`W&1&lEIkGw2Ls~2B?+X>-IEg!_`6f>b<5sz!b!_L(pgh@(8*^UlSAH8G zZ7Fb>(NpqDAb;Tpi|xJUdrDt)ef{jCByyeO&iA=aLH1V)WmNY(U8Ck}Vtt~gX+q%Y z!*kRBDTUpuI~H3o&(3tRl79Ohy(MW+>Yp)3uta(_F8W*S-*i`s*++xRw8k$oe*JIn z9a%fAjvl%m^0!Sprh3D=02T*p_i6T;^PHxObBHSUd~@ZjzP9VFv{QiOm%epI?S4Y{ z@hpBHqqm_a}G76SKc^8X=Wa?uo2-;ya`l z?SI$v;hcY41HV`)oncX6^;`MV53oY|Imh$97$n!|1 z?Ky9@ehJ>ObA4z^-j3ZYuKLzTM5McV1Z=NecV9AR9c#7qD$&N3na{PJm(HBi( z9~ZxQ`0}eu;NpxELGun)-OzCfaJBe#+-eeUo%_j$bJv{NuA}~N`ZgE07o37ek4ql8 z`Pr+Hv8swi=t2629i|ylU+!KB&WxQTSTFAsX0t!stp2#h#`1rq-hT{EY+jiyqwj8N zBvEmb>HWL~&l$8n%)7aSO~0DA^tpFf%VR~++W3{3JoN{@>-?CTx%JQbgv-2hbW)ZV zU)lTEbEhtYbNO=Jo%he4z2F?!TcCAAbk}r=1E)`1vh@3WaYf(8CaY`r8P z?N`87yLonz>n3~-IHZ^O+97++SKX>(7a1MA90K=l_g?Zyt}P|1+^OsN zm*SNZRvoRo#D1)6rPr?|oQZ`K^fOL!f8Y1+PVS+mGfx^1o;G5=PI_F`~t3Bz8eOJm#7e6;u{CxM$F0qX}`-3-6 zFOX;t@@MrZxOJ~(f#msz$9ZOD^WA!wd&c(IUw(yY=iaP(S+l#R)X}}~cv4u@mR-?1 z-b}gNR=~`$_gMGag1;VY(;oF2&RbWhkx*;UxAy)yD_iM>GXr%L#@T=H#Nj z$RFM_&%1`sJDaj-_w3C+w~R$?tYT-~nlzUo*kZKqz&ni|J@_t?H=4Bxp9QCiA+p~4DM&Oh# zqtm)`*Hz9iYvcGkWrxm}03GKS7T3)x+OBTfrL)x}L#(XnNz$iJCHYq$@|P~$VyxY; zApamQvg1(D&ldhIQ=_u9XYY(CEMq_M zb=8Rck!QOcB-)V*Pw}M5)}`yFPdh6x z)#Az4$9BJ}HU;VVUvr*v(>9q!yZKJ(sq4ACA9eh%P0%~XzkljJ=ETI!3q($}&G0h+ z_uL`AxjksnngexPwrQK1U1}{YP!-r<-*>5xDgVoEmlu3hx>d@~_H9wW_s(Q+vdEwQ zcrN3go2%#eG}M;zZQq|$rQG^z!!{mg*b;V(;%Zma~%tZrnOo^DFSzM2_`u zq>iuANKV!~C*mEsP-@ezNE?yz3y*dyB&a-SntAHXFW++$_d4LZ)+Z?hB6Z^;l2yzuX4N~`Rf#8qbg z&VIuBI{6O8I^hz_+4ag==V#j{2i^^Q#0{LPGypy*i`4da% z=|$JyDX|(^pIySv8o2vT#ipr|0&|OAov3u)AI5Ge@AzmDfG zhLBRZtxta9KSM*OS=W}<9XL0EbAQQ%o;REJ8H)XNonD^#NSk}r)@dJg9~T4|ONW;! zT&lftv>?uXSySbS`u@qYFU!nZc6xjIGrQli*)lat0O1Z8B40LfID$buK2OIXdU< z4u_XmgfqvMaBfk^uQ;{;d2gb1ctnBwKAU%~FOz-;PoDH(5$_f61v;Pdq!-S-x7W#I z>$jhZO?~%ooz~y4`HAhFzH_d~JFgeQ3$1i6NSt`VqTRUo_>|WLk6$LmyU8-nj*>Gg zXSOJRq#BWsHluHAPVAgX3}5a|{j2Dj=(bR|LB%DXnLpcQi{*svl6f2vRpxq?a~>>O zvf1XwakkY9Rvod4^qk3Uc)R7(j&0`Z+m}th@8!9gf5y6)d25!oY35h{zvad+dT3&W zK)89E-EEf8_sK$K=TaYh@=8o#J76G{=h<7W|C()|`W_j!!xDLWZHv!vD)khdv3Vw1 zzWP;Sxb&3em)q51Zg`>9u?{=lTL|>*_Fhsesaq+D}P7rpz_UcyHC{EtY61*;HcJ8XT6#&oj0|L9tmAM z{OU<>*fLk?ZE?~IA8#oP?ao=AdGLqqSJ7iiA;Jl#na-wXvme->P!YjXD0s>7UD}Vy z=avQYPdcag)va>Mp1cVc6n?Mj4L_Q8_wz;R7?#d;Kh#e$i5gvbrlq{ltWQJc(yw;c zz31l}JlQtkK(*-mrJ4o{E_h!~==xjCdnHm&_rdok^5H+<{Q33&t0?!SADzW&$LDSD zoHVi6%OiY6_%yFi^X#UD{araJwm`J}euZMnj8}oOA6K00e`B-LhB0cYWWV|eUj^-d z2fa(BO#J7#HkJvye80YO%EY@y@5;{vO(>YS+lY(L>%yBV!?wyR?R=Nw45xCbv$mf( zaZ5_z+)LxBni4wwVp7lEGR#epSF&1fJ!7BN=dc&k;=Ohk+|Fie6P3wZq9Vk}X0OS$ zeGyMWVqWJf2aB_IM;yO@kGs6qKJ0F;+MhQY%?fXGFJs!?nR`U6J?y1f-6AR5m4VAs zm{nUYd1vkkSi5Jv*0gsstn)3dF|YBzsh&IiQccx4NqLi3X=cfXfAySr(!b^Wm1T3D zAJ>`5=ygix&tLoW2TRx0pPcElFy!0)iMP56rIR4Uv}7M+Z-2(8va`Rw2rJyb_**G+(e*87F3mouIhD)q z_~%(YlQPA_WDfVZUx*8 z`KukymPl*#Ph-5g%lN42J`3@hnT~3I{pl*udfns=_|SAR3TM>8-puX~(Q&G&CP9+xhA`$2>#c(-j}{sJDFU=(kY9?E3TO zKU2@xwsa?7I%28+gpYrp{EvNR3C=&CGHvI+XJZgDufKMaOm*D~?jVlDofV7JLasQl zSbm6J zvhnY-6+-;?c|QD#5wKSKlqSJP7_MO@1MV24>8Leri zZMp98hnrI~yl%f#cqo|Xxb{`Wt}7-Jj@Ip$e{=E5_N2U4$#}uYy=#wu_V?K5|8ByC zjs4G0%IrFrea6o_=U1g@^4`SnZGuf%rfMHF);)UBzw*ECrz;U#429KF1Bu%s7+mB>vv=6?-PW-J4@#WM_Bu z_^NQH=syY>%D?|uJ#ngF{~g|YVB5)iSEihvvpHjZY^i&X)!Nga973gQ)A_G2S?PT= zjyZ6q{C6h~nMKRXOBWq#yjJA@>0;E*wbEbJ6*f6n%HMGOvG(xGHS-oWYhC^-Db{`9 zOU%ZuWix`K*l$b@Hwrl{6SDO~<>TJPvHMk&ws>W2Y36c#csQ-;V5~_|R_L9o-^nj_ zpIF4q;$!wcDPOMPYhduV?sdK|*Kc>^T<;^dNix_mGU^3STF=Yf>OVxfUA}IT6=eLN zuXks{$!$|Y^AAt`U-tA@iyZ&&ADOP_g}mNe4f(#oNx{5OGXKdvr_PS7H?3=;^9t)y zV<)T)WGkMrSxaWI;1A8nl@&2+zxFAGf8lRCs>?9<{B-fPGx~oAu_jGtb|_9g=kxfM z;kxKW4?i27Z2R_e@sp;PrC&NEQjULep8adxkq;g9Y||$AcbDq3*WaG}|5%W|nNGy( z_F3`5^H1|V7ASad@ha2dgpk%hhxFDf`>k2r>3(6;(j99}UOYF66qP7{_TtVo*I79; zi|?ClU3;L-cUR*#WAlZ(l=M_In75}~nlo$C5vxRptQ(7Osyc3r_hYF3(zPqjcv(uy zRz5a&>ko5$W*F#6G%ez~T-{MsG;?*+!Ch;fTQcb}2pi9{Kd|G^hdIutd@sGUF!X)P zC3=syT>XPryWym*C$i!epWQHb!S~m0PPQ{YY1_o#pSG`T!ki|rt1GRa&-wJQ<_t%& z&Z|Xvr?ZY{72lWidSv|T>6r(Kjyo24%)L|Ban5DVy!0#k&mW&HsGH`V8txjL9{%=S z{7XrzfP+iV2uBC*xpuTz`cU3(HpV4?6n4$OYSF@V#5a2HldX|ejgre>-)H#oIXZAtjg^)Ds^+vUnGbt!-r392elCXlWykd0+irI(R=aEQQ^2>QBNb!esbfum?XtLmJSKNsm zn}T0Cb*+`Tzt`%j$}hhOTWp>QIY{t{TW^0m)wK6tPtnvy=M-u7vnPFy9u+n`dA#W7 zn)lh+QP-bcPB`WBiSruU@;By}7Pm1-*I0jFxwGK!jhfAyZi=#G$UR=oe_rDpvs~-J zeRGnu%u_cDImzdms`a$oN)7bS$*5S!8CK7Eqqt$E6ko~V$^Xx|%7}b%y4iTs;zxpo zMpq3tZ?X#yuRABZi1?)Gp4+;DCTW>2SQNM0W*W!dr*6~3Usd#GYKR3)$w~cRdZqr? z-He!5C+xR8N>1{BS@L#!jrBskdZEMbW=vuG7k={gw#*-Va_^jN*%q_CgLRkcdnB{||7 zUoZRBb+~?MNXWGc8$Ql$f7FlVs7KAwIP+WX%m=eYOSgRW-G5!$B!cX9(EK@%)NFag#)`+3}Rmk^(}tY?03* zr^RmlwDaGLo%hul1Y55-8(2&7n)v-?ViWECAL`-SuXkh0arN}rk3WSjF}i;4$>QooBGdA6kQkB z9LMs~^_a11`>$Z$vJ$p0Xapwjf{Rav!|@!@@jJPO@XfGRUD}iN&A-v8fHxpZDK84o8`^wzisN7WqtbRW~bGF-WEX|&DdX~A$Wv1(M z|36={k-@}a`OW@J^+N#}p%8i~#vC7*3?+PvN0G&tw_J3k(_eSUI3!t$@3 z7LUIfL!LnUyX8V9B_2XahrM^qns{3(lkxtx^$#BAC-#_$H z5*NF!_qpT6MImLLzl)xlNvT%Nj^|Nx$#V-Fw!G)W9Yqy-4Eg=_@a1~doW0C~argb+e;1^p zd^La9DkK=^&zyC=WZnD;2Scu>YfhH`DPgo!d1i8CNiECkCHn6;*ofO>SoU;x2u?dS>}1t?Absmrjj7W4u^cWKTf! zP4T!j4R<-~7DgYx%kZ;n;(}xGHBD9V(xL1esi(7ZXDjNy4X-|I`yin4!Tc@N2jc(i z{JJ##|HSSIJny}oFTBy{ey^SR^HHka&jsrT?)2P@|W+qi~n6FnjL6cvE%$Y_k2fAj;_!qE00C@Ej4e6^w|HKoOwxM zpXGwcx%b}e(-vp3tUjoa&baC9p0^X2HqUJm`^GK%;=r3yhb#Q&(pXepIT!L}7jM}7 z;<4LyO@lZN&Y<^RC*LuhIic&97q!Lo>7j0>fTDGmdMZ9G`}o{nMZ=3_%lg0c+%Wqq+-HwR;GCR-ll;S4iBZvI9FUEqE-9h1mkTU?8OzO zc9$8`G8CG5O(U7ld2uZ_xvkH5B|nSt!1=nEV-Yc2d8V&KCoMgErEsr+_Hrxn?T2QG z^7}trrt^=v-c>9qexgC(=B?sb+&F7>Nuh+* zCFI#1uikqPg9E0lT(Bx*HshT4Z!;#m%G2Vsp10?m_KsKcPkHXYCt+ZuGC?9`ft1md z6X6|44$m_@#Cpd1>p743qleg}Ps;waY$*J>ceA5)@%PEL>)bn*AN&xq<$FcX+3E*v z%Jb*Hys^%MaixLSl3%}0g$2Y`3F#-*RETtlOf?IQ?B9I1!)6Qf*4fvVoikc@#6kGs z&C@s9H>x{Y9FJsMwom5D$y0%rR)g% z>1V{#WuI*-wm&*wRfn5Rmh*#%Um^ec<<09{Sc-3yZsK&Cw|0h~Weh#??t!tCalP!z^8dbk{%e;WOngwsRBEv&PgJ?<;*X-|^2=2IeG=D; z{?mE8OX^XLyn5~1En-j2gn3_U8cbmEwf6n^`k#iT<$1#Zi=__hru}>T$>zd8)lLLhID}G{L&Dy!EWJ-14 zDnlX5cm9Ws#4~5r~mtj@>V>}k9@^#9kDhuTV{d@rwf zHkTu@=;Xx|8@UF3&;Cnl6MgKsmzh0$+kCwK+n#GjRBE+uUHyOc!9}}^-M84Ym{fKx zxu@S2p5i-SSHqy&LM?y#20r`D98Ffc!0dDN;+niW+mF^bzdd|GEvh#(UEjRx8IBL3Y_KmN*jLejF6gD3$UUk*U_;}6C=Q0leXIGlcJAIT>;K`?T zER$9$r+FToBDCPrZoU~Tv(C77tjnw3HfPSxWFxx+7nQqiEtA#$@UX$#eCw25yKK{S z7FNAsSbAo4u*Jrw+u~ABm#%9`?$+7NTq#+!v?BELd81ic8msqCo%`*{+GFB;Jl|E# z@Asy@pR+ghNWOdH|A)+9&-FUiy*Rh*d{FNh201M;X|>Z2b7Uq>Qcw8z(58-rHdBxPg)DnEL`&$^A~ZUBjGTvU>%stCVSoJ}O-4 zInnjE&XlO`yQltmUfgR^U!7)luApS$J1gD3#Ih@Xns@EYRqhaMO>K+j*Y$ z0(*hd=_)y~eBUpwvq{`Pv%H{n!-0L}zK)XRM^@+^S^Praq0-@~A4^Y`3SU1vU2JL1 zxxYCF+~%HPmTAfNpX_{jhI0G1{3!YDTEP7?GtkN<0y{8`Vf1Z@byST4-!N!=t?FuI@{>zZ( zODH#(xz!{`>-#jL>@IfSsySO(Z0wfKs*T>Oye#MU#BTn&(iOk|ecrWj-L-25syBB_w|93O(>7Loahh?$r`m&iVx(k6 zy7|uE;t$$cUCut+x#*etww*KQ$^YM<_|D?TA@3_;2ezE|HfW!uz~}3}Sc5G=ZkhUr z^KbWs-0&`#)4lk*^4ahSYNs5ljaU5X=$+dt-t&Lc%=3Hui;qv7Fh$lZPxD^7*otN9!|Mt`F!OyZJ91}4FjbQj)CVcO#RZfuwwaJ2d719F>1??+ zkma^bX5I{q%3aa@wR;v`oj!y0a?SarYz7>8k&D~jdo1NTEurc?FZ_zxOrE8jNA~V% zm8?D-B32m6J?Dwu-V<}S);?}Ktd)IB|5Jva8Al<1x7o$B8$3V0RcM+2erZZl%$JnY zr`YPl*>C>U^1HEl{<+7~c=A)8@z)+bs>znL$b_TrQiaTuIS1d#UfUSh)blH84Rh8O zj@Tt!lGj__#a`{~k9C?6`D~;8^r;K~WWGAvsU>x?p?rf=+wJ>1Y-&u`JdB_2p>MJD zZIJBh@V~cYOkO;{smJFOP-Zo|CE&50wPwEKyw{SlT1tY8Grw4M%nmzP(-bd%S5{zt z?A^ya1xft;Li+h~oc@8#yi1Rr`@MA4qS@QCxA<)Gz7%oxV{Goh&di(pr+WWi?y!l$ zB(w6^%y&^5^XsR-n3b-$WUlB@7P)_mCF(k+B<`)Akp7d?I3w-lZ0FQMMdQ6Z2aarc zFmKhWQ&SZ_ovYqs_^9yx(j-Ryi~gs|e`&muJ#~XWuE)=6a&|*^75CYmRkIhB6y5(X z+aa|hvg~|dypc?1_Oo@Lgr8VXe#Ciq!;w?@Q|sm(kLx(__*6qpyP)&>ke%u|Zap5~ zXY{x&`X_D4u|6pHouj?+HvGU_cKUsDp~IO#&W&%XeogzkqBpBzZLw4B>}z4GX3CsZ z4w8?HG1+x#!Ghi}(U#IYmYpl+wLb}N?(En-yX~#d;@1m;%;FX_MtXmH9I^F5VGQGz zM=JY!#lGybclhSi{!qmDtj@HPdiRgqsar0)%zpJ#xt=q}4*4b>`^B!1{h|E&o*s8I z$@jg>S{6;qjO2T4`MYa&buH(!?QU=Ps*O`_|eoi^ycTjRka>CU$3l52d zAN9yPA^Uve@i}J&Zi~AxRoQ!Kop{o`&7GU+UjCiL%PdLkoY$9B+y42k`dev903Ykr z+3tS>w%KufJ3Qx};nKHxACy=0$Z1^Yc)U6<=6}yeR|Dfs%+KcCU2gPa@|!O?2fP2d z+KMrTg_UaGR1Nufd0AML#L;at+K+4hoWJ|SLFQ%Zm+LPWE{WNr)M}vprn~U&(UV&Q zPFrWL`;s2{xms2Aul=moDpQzqYAk+orJvC_z|8+?>yp0{ORQTSsQzc2bKOa7@(U*2 zNcVTMlg{!AFbecv)h}$~-M?|twl5N9({{|TygB{UrhDJ-Ydc9**>lw0ym|RvVdJ%h zhZeeZSaCfv+PyaA>9s2#1wOg`eJPZ6ZpAq%kyZI?EWN#!B})nL8~b&?yZk@YTRd;y z)QD)6tB-G8iJ#9=U4OnI=j)N%r7p*xBpOYs`rWj8{p%thra~>&cN}L#O|BbBFKAxp zwC9J_i>Y#Z{_^Y1OtgM^!c_Gk=j*AtEwADyc^R5jUhkNCa!0|0z1u{;I=mGuSo|%p z-u~l+hf;=1V=TqA1){9E>WrORY%>;kp1twgq}qgSvDS)EfobxGrEZI>y*{8}_5EA3 z_Va&N1G~GHUNN*032aStpRxZDM+aNu&eOa8=C3)=W#m15+6No+ebV87*QiQ4hcGhV zjrVbUcFLFU&x*Nhb9Gb${(ZZ%PW=AE%Y|OMc3Gu_2+kHfl0M^^G@oj|m){~UzUKE? zOec?~?=>ubx7KOWw3rz&&y&|A3KSM4Ci?ol{-pOpoHapB?)ZDvJ#EUX_%Cp+%M;&~ z-?$;v!J6|>)YX6ehxqwlGiI6FHzsX4tMH-8BDhsfW$yV%6^2z8Lbh7$-j(H<@YlWX zN7^!uYr6JNHwLc!we|XjnFoZ=J~}JEC-t4k4pZMYg=uN}N%5_#Octqp+PnJ=r|FdU z`#*)a-LVTYb;x_hH{*p{PFUCM=Cv!XSU4n2{m8^r`YbLsFICc3E*OZ*8 z!E|r_^_~1F9a(v6j&GM>wA^62g;TBXmRv*JlSQAiSS)A6?d9R{U}%*5?O^eBd(;fE zs^~)9%Jtec3twJ2(9FNuE#w>9Qk^bu*JdEn^v>` z^Op+lW@?aJYBKla_g^2pnHTPU|9fu-!}@PCZ(hD5{j=uv)ZFKS(zPrtr4?)QALid_ zefZ<}KYg*yYt*J{P4Ykcna@8?fN9tBP1!#zJA7}-IN6@!|7d8duai6H)bX5lexa`n zsqPjP-%CnZ_aD~Y5cl@>W`+`k5U*U%q`qd0ka$u56As^M!z^VI2C?R=i$iuE`bL zvp!yz@A;Q{!=&}cmYrq_E%2HX;4y>Ev0{04;p%zIR#zR6_$_p%`}}4*ZM*y}7nydj zAGc9qC@+0=+I?Q{)AddF|Ap2)yRg#n!`%A^^j3a$5jpJiW9Ig$JKlC{8wFT>%NJdh zq{cXdX)SZ`s)CD0Ph5R%$L?YHZ;el|=d6Y8>to4cowNL7ov5QM11)>t*~n+?$>WkeSOEf`K0@$hNnW@c6moU;&|%hxcxb` zK2~fHpT2GT@5Mj*XXoCru3En6A#2dwi+(Q)#bSjPcxfM8>)bj|KsxQ^L3yox^WP_S z9D45Zb@N(-xJUOHg$_CO`5#U=8`79Pefj5ACjJLwv?oTkGK$=o_#&}u)jjJ}yZP$I z&CzYw7dbp03tXwtO#;ts#dtt10#-8g=symK} zZFTHTGrMPHvut%^@vTfXzumt$Po8z@ulN~#S&>!D`|OnyUhD6RRN3gg&`h&OnbYh$%*QLW*9&&N66=-dAJ5n?qTI@lVSb%ZshmdY*k zE;wY|a(3m#sHe~C?oDQQm$ZL5-CyQ{=!xA23V&4oYIJ#*&RUukx$5G|%)7nSZNL0O zdp|_JQ{2$EUo~WT+sXHuvA4bm{p#7~BY)V|OhL(!job@sA#x^(YQ zS!2ia0@nL?AyQmv*GvQrOm-vsUZr!RY&z6Tnx%pi3$4u&h?Mz zk4Fn9-Q7IK3igHpYn8!?}Q`De0ZpVC=_15y^! z@>%&SCUV+6oxkblYA%5tmm=5CFv`F5b>;Wpn-&$W&zGC&UAfRRH01d!*R*6#%R7eK zT`k|OFZ#b&>%WOm<&@PGd-*4xu6E3lKISspCh?!wnwy%kvx_I`Rewm_a8l`+c12`$ z*|hUpmga<{Rc}4+x7BIdqKog2Jkk7^a9k(zkGhxowL4oP1OLvwbziwFQ{=kvChOIA zq+-IXH-_wfsTaEI>%Df{d3uH&yx;T%Ux?dnznr*p=H$(R^W$>$PfD63-D@&$)e2Jl zSUrFJl!g3WO9Ri;SDol*%DKw%=7UT^#kswYShY7i?#cM(Q_k}DuYsaZq(M>VRTt({ zXIPS2URg#luL$1vbEf1}D*>BpewmC@7i9g?{JeAKfgeoKk%5)so%Y)%#NXa8uEl9~ z`Q0APIg{HKOiRl=xHkNl73(7IOs~#1orphQ#aT;MF!Oz$A-(;r*T)NU9Jr*ol27~# z?Q!+veDbX$GtgXrdfeu0d3WiQs$D-49>0h&l@y3$R8&)mxNUhe+(7I5x8Bm5aZ(ZU z&Yd~>b-MePVzvz%4w}xEpVnO_-E^+$2*a{Ch0Ogdsq2Q4oZ{mH+0yez~lQYR>q~!C8zyycYgAlV`upN4$a>0 zeU{Je()5LUYd-&r=P`ONs~BeVv+YV8TlN0DFsuIeEA+h|=AFx!%FF zEpuZNjV?TL7uK=%4hUup*z=Sj*yjV+U9JhU9T(1edg79e;jEuW7jDt&?LD~7YeTtI zMR%;;P4l^W1#k8x%{%r%^WDP(zM7Vc9jS=mKjpbAonunn_q~tjo2|+z&FzXhvhSSb+*^t+ z2b1qwZ2GfDtLVLz^y2?JzFxZ{ofmC+V#g1QmtC_N_jh?qEeOim6Skqm@}X(;zIUHP zR+gSS;kqI^W#hVNqg?_qJMUO6oRMtueUVHZ_iFV;7rf&WS@&GNKE<_O+v-uvbNy}M zQTrQ@uCqy8m$}_-;_-%rs~x%04`!UInv&z>XReUm`!cX0-1O@7PP6zwieKEXyKnz~ z^jqZYuR#?-(*Iq5RA1TGn89{PUeqCLo9HKx)P|R#WfxbzQ(mVYyE4+z*|Rl|lLvDZ{pB5f1>(Ew))Fo z)%|*pMDO$@tg))HU3K}~2jg5p$@sVXZ%sL#8}VB@c60TMQoovy>IPZv(!5$a7cO%w zcIJAZ`F{Gpg!9rJo{^s>iGDlN`|gf_Qc8PZAW3g*n zx7dPPGZwMm@rXQEu|M(Ci!$}yjM1M29X7LE-tdw0luQ1)Rb~>g?*0e%t(#h-By(Wr zq90ei-wIhgxTuEykC#%j`w#?#XcEYBI$Xo) zyedav6yFMFTl2V;a*R8RepPpwT9n_ESjzXHW5vJgO3P0?>aIvhk&Q^~&m(N&p3$tBO_j#5#Nqu(G<^mC}&eN@r%J}~9&PiFz zzV_we13xc6IFi3RUw^l{Y(2x7u=DqAilSI26-NiXp6%m4=k&A*)r+Qj&s%(HrSIiT z^_vw5I=^-0r)a59SDCdn&!fm-f$NkWIqRx&rZzK^srxIZ`Q*J}xSjNxaXDl16faAi zuL{wA+4jcU4S&uOpZhkGW2(~G*n0lxA9s?nALhP)`gTe@Dc@vb$-z6VxF{qOkF z-zuKEFWXLi`=nPrb+`F^wjX;dl%OA4DsrXEJ}f24>uHS|I$Ja~Ul|ljC|GU3cT?#1O||R7Pt;?jYFhsW%w~()m45H@ib;FyUQN?dOuXp7 zo6|_e_cmLTvehK6nT2`IyY89PSK2-MedkEFpvwQ8th^F|Lj`}1`fui~5M=UQu$Dtk z^ZG-Evxl5nFF!M%-fm|4oQrQ?+NKY)XQms@d*_|Caee;LOMO)@b(#MP$$u;K;Ybgg zz5C9C@21_NHVyfYC*AqCLGz7yfO+rAwi&`4X9`v0l_YdHEH5oNvS)Gx7tikN21lZl z>^O4|+*$l#ZktPZnc$|gAqoo^pGz#=aNmE^h11qyOMY;v^1e>Bw@kClo8Ve}?dOC8 zJB1UPziC~1V!e6+_g4QmLK=_b6EAzQ7|NyI`{Nc^*sRc zO^vp%vwWs_)<$1cIMN*#G3(z?4b3HQ4w+b*Ukd+Gcm2mLv4eXA>?XbYxo@5SwYO@I zx`o#r`ZZ&>{44WMAEX|d&bd89;F`v96`M`sQSZ6CMUNXRdZ^@mQrW+)`jM1`U+765 zxl_LnP1V>fSE0K6=iXHR<3fkECf5XQF8Jr?J$;k7hi6b`o8A)ktFDLqHrzR&zMt*( zSLu7V=Omt9qq%8g+N50>F%}X%>A#rb-vHju;Prqb|*ZZxSsq<>?$LIc=4rbR0-r;)rb%x7xoqe(TPeU)nA1#^O zo2b!HqWIwE{z+n-r<2ahrv;nKr94o%X0P@tA;S3aCE1ym(l$MsYShrszmmP`zjb=6 z*_7PO+o}JB{_A!mD2mP5eYv{C+#`# zUBGLNW_c_BF$K-&5(R}tjuI6*SH3^FswA|n`0I@6)wdqHXPskyt^D`C&@pZ0w%V#E zKk^)G+^5_vT>o)qZt#8iAD5S!Z~eH=qH>-yZaNvpYpjg$CW}`D^o3e#ZTo{#_TkQ+>8|->5j>Tj;ms&7qwyW(G*!I#&?i zH&N2@Rf+ou_%OFAmRMU2}ilN2wjvzfC>|IeK{Lttt)PXdkyTWLl}jj@^Ix zW*%?fVwUq}Q&{x#L&4isf*K7N4whKNOr3uJyhmN~xyiaMM@(kxR)=i8Xm#au^zW4y zz0O@u-}m_F4fZ^@lN`=VX4=t!tlXuJMYaq4f1(x{S!4p;&^zt4u8{Q-({Op z&v&F}!_tGcuYMm`po8tXJ72`V?nE! zLvPd`;aM7g81$=d?Q2qFb$qxs>R7(C<#t}@d1dDmX8k!_@b<3yv40Wbck{m2NjQJf z=8@yC()<0g;;-*6-c1q;-@E-e7i_p#75n%v&%du%6ng@$x?1_<|25u_CYdFD#>w)V zQl&xaoqkANq}&%C}dclG8}u29*{d;4^AnY&h%PIF7uI-I&G z>qGSSKcy$wt5yaiYsBe_SKjMliraPfQ{v01>czcBT8^uqSskx4>)EDf3$|!YceUBJ zOD*x+uIcidLj46c7IBIwon*CwbI9ZZBKmMZLnv~vp(?>6F-H&GNE!%Rm>rDNZ z^7~8tHhfCmT$9uIc4o8U=KHSA>~*IlF7R}p{}4I5NMpfkO9|iqt=c}aCT^}3(>88= z`&Cct$C{F$Kt2nx$s!u*?^MFRnl1@Cx9|#6>8CfV+qsWtI4znHb>@HhwEFdaYR9!Wq5m&AH$-2tQL*65-EF|D;U)fJ$N7nmquVF%FpS$=b!N?XKE1+l z<^1ed%pot<|Jm_rfo_A)5tbA4#ZE8aYBSF%^9WVi@9Tdz(|OH5#bb&so0?9p&=Aw} zzw*E9e1Jo!;xk?0N&W3VPcS_`KH2BSs=RX1JDrs)=j7HtwLg9Q)i14ge?qI$Br@i3 z^6X3UvE$Ewuxh@P`tFDE-{W|9f9skPwQ|mmh@TBSFBd$LcGmj8A+ywPO7XIX*4G7Y zg-+VWS-5JdlZ7nzxrW}q7r6o##B6)Pa7xUv=XmXJt=!Neg^>NWRZ-1s>nb}_|1oY* zS-kFkneCE_NU7fn#VKF^B(Dl(aOu-{FLPoAOPXHk{DK(~%2or;f?qDT*j>GEtK$E-{mUnAIDMn@O~}gVs)I#dcU6@P*k$ZpLw()}eCZ5T4Eh_H zGO_K;$J4s}UGfv(y;(L%$ZN{Wjkg=V2XCtc^prI)GO}k*I)=X zIJ!q_Zgt0V=Q+xgE~wt9dU&Vpc3y>V{oeOQ_E#Fe1z)zCk+Jc6^wYnKV)-6P`$uQb zJo@l&PHEv4b6&PJw!HH_w*F9Y`u=TE|J(Z>uKc;}jV}{6ES#YlJnQr0y|Zqxx+$*- z`o^=|>C`N1E%xI-3|`NWS#7}4eey^och8qFjs5P*OH~?*PRf;h<1_0mQ2SthxBtKa zrltJ*Ul;rjKfA7LZNZvNNxRx~JU{t)-M!FRt+x3{ul3TOCmuBTUS#p~UD|E%`KH2r ze+}lHwTo?6yx5R+O4#YY*MmJ1muSgOo!G&ozd!h4@v%Akm6v?nC1gBtWrk5^Wx;lC zv-i>t!r>v7+^%sJl3t4UBlPc|aE??vqT_$yNA9ButCxCzKI-JVI&(>zLWPgqx_R=q z9JDsN91F8{JahGnQ^aJyZHMk|TBhhJxaIa;jn$=ZdPNhrH_p*+$WNW?R(faM$~ke{ z=05#-eKP-(qK$lQS1w&WDbRbeNJC6-qgkWqcA;BbW}o={=VshK70S$Y`){W4{=(pd zjV>2XX8$YVaIHU8gIJzW8l6 zS@DnC*HoP`T7zA|VzIfwVvF7rLffxbPZ1MKKF-Xz=8@^Vr*m%J`*3i{9)VdmBW<1j z-Tyqj@vnI1Z4;FQg$221WG78g;%u_{`F4MY`j5oK!2g?1UEjQ3ZRe5vV-M~>d|~X{ zs&>|^Ce!V3@sy|c-bExhH| zoY4vTb$pK{Q&XE7CqvTg|K;ozvqi7!N$q|7;mD)Mjb>Xqu3w#Yb?MuhlX=SFtC=3k zb}v0|+Eu-I`_qEWLOl|vZZ5U?a%9H|e(?;k`qiz0uM288Dt|4z^|49(;U5lW7aO^> zHJo)j7HsGU%dP!yKh@?N`_jO@e{J9EXS|b|E%o$R^X|19cYmL8achIytX-CqpNBu6 z{qPab{tP}2FE0iO?H30hGCf*<;Gyy~rbQl(`y~S^7g^~GJHy8CZ3SPju^m%O{+oC}J zhfFi3irk4w@7U;*vF^Zne#xE(=}y~hV)fOvm9J{%>|Q9IzOw4hxpP0|zieH3KX%2X zeC@2D$^MQ`Cxrtx>0Jz9Oj@){zV#Nv?}Lv`E3e&ZV)|Kn#`bD(=Qovwh82Gno!BtR z&wBNo2eNVeY<>TNcDb0$TXS3MPvn)rzcqUy$z>|V8d z=C?E@nOFTcqVyau);CS@EPLy^cf(~C6C76@y_vw~T=%k1{-<%_c~?^dT9 zuLU1D*#Fqm_^)l!DYbjnYx0^Cc4-uFNU15t#q=(`RUmORT15LphIwUxo$>C3B5^am zOYgt+Huz@p^Iqez;aFUFD|C{tN@?A>Lz4wlGEd3B-2cj}Q7cK{#?>ZXcOJ%lQ~XW} zOfol<+0)a{mYn{g{bTj&orl%_`iITzy!~$$f0w?(%!?u&yng;a9AfpuJd;wl{(s46 zTyu`=b#>6O`pxH0t@3mZ{}Xy-w_f5wqw^K~pH|JZP_W%;G;?XRTVS#VtBSkt$9BGe zrMW*p)KA(UczN>l)sBZn8FOw0imp0%YQdhfTh{UI4=9{x9e)1Gs$ zZ_kR~_B(rqmEu#r-&(httqx|Jg3*PlYyAzvk^c-X`nHTplDZC~lrtQ@F#iHrClh`E>1uB=7xOySa9sbkQ_62cgNGqbIt>-!D_dk)mZVojeOWQV+`mcl zP_0pk?h(~DYJY$2%ib2ZTV{sPj-ca{xmA_s9QrCCWA3?Aj?X;B-f=1K`i+fpTrU2u zeIHD}cz*pp(ck(oSCy;x^V z+JgKkKG#*}j*YNW9$O&?r*)<96C~)zZ=|r`(%dg?~MJQtyqGpr_DP4f!{6u zxaZ2!=Pd2%VM?Ellxl5RIN52b8*BDME#ubXC%FFqk5+%b;^dB+=_}U7*tzfMFb=ez z_ie$yzwci6FPOYLv+ieD=gk|QO|es-Cz}Ucx%BoplfRA8vblO6yG1V8zm?1O-@GJe zU6Ezl!xNGL;t7Ag?yK7LFZ;tG>)?p%bN#KC=J!Sz2)^+y`t`6r*5KQN-_d!$e)&w) zIK8dUb=fiZS2}KylT)^uMJLK`Tm8DZO@57TlTc`ot!{hMyh5#aKOZdSy*Xo(#BY8F z-^S$1;ODc;5HZ#j?oUf*udvUUMz|&ci$9R7_-< zH_Qqv&HcC6!Yk`X^^03#GUfa!zil_oJKB)Fuc|jXSFz~R=Q(G7dwpGX`P8hq!!zf# z{VwGJrTc@m54bE<}$qK*H*{Qy?P^BxS>Fj3TSIs8(^K`uA?N{DkplOrz z&W-!YnjM-axfpBSyc1Q5();2b%)a0guhCyGyTER*!>XF^R7+)VjD3&P7KUtM-pedkt^-!X1=!)X`*USFMMm`I$ z^e}%oFR{sDy6y~z7AuWwZ_B0~vRuII7e7@j`nBO{E{&8}e)HNcE`8Hgai6s~xQ%KK z7@W>|Is3j-Ug)=vXPzIkHJDT!bc!o)a))tIQ_zq5sdvI3&)oB<%CBc~^dk@X-7$YI zdmD9o{TX4mr0zr13$4w?*q7~Z~Pnk&CCdBS}EnR#x-(|1*0IlcCm zoTI>3-XFyeUG~TyQ1vyaF*>c@w0UZ1fYZsWiHj@MMHWoj7uc90#lo1dFIP!*Q_D-i z{hCQzrq4Ok7g=;YJLID8Z2t)iw@Rzt@K(xAn)N#4>ZZAZx(+w%EOt4)HQHpa`Hb=Z z<9)ZM)Ny%VEZx1n^VQKJ4`x~Z-kWaPX_xl??NMQ`VG`XPbCkiu)i6!U8#*4nov9388W^^s~f5fy^`U#B_6~p&?6&A7i*%*zP@DcC4{kKlSvS_Jd_sH*zM)?CbtN(P?@1q$2L!e-@`- z-uUyFliyFr=u2Oi6|J97ovOdnyZ89LyQj-?`f8UxIR4;TLXBaGo4rWVQ^t208IOP8 zQ>e_|e2wv;=eIIj#%%tweWj|~_o?#L`W4?Z^S0SIi|g5(Jtr5iGCpX!zFdFDj9Df< zhf1rWEPFe@s(Mr`&pQ5I)}%%I(b3k+KSErsSRY(Cz$g9abE?oDPNA-^P14!-?))#W z(AxHWs^q@A+U6El)M}S(J(n2Sb@E0Y%71fI;?dY%LjojN}+R$YAVf~@<&ReAs zndt#*bBnZf-JhsD6^-}1#J*bVo_DpJ)_wLP&!j6Za|tz1y=v_K>iDdQ8pk~i%xk2W z7&LFV%_upt|Hf%=ww%+`yPs@k?hCTqqE|<50Kyt;=kC?B4qohc0ycu-4v=W7NEv(qpi5@n^o&s)rZFy3rc<+|l6THmdeywi(thu#Tnknkr>SX=)B+pl0 zPQ*Wyke@EHP+-#4OX4@=6<5Ctn73_d(b1bq7mmHZ#aQ_Dhncmu&GM{*tk`R+3r@sc zOPs*5PobK{G9u*e+QixwKq^eUb@Wc+FLh2*=CvP3X?-p4N6e*!;5pD29!cE&<>wlDK< zymzoGlhL1FdRAsa%oe?WXA=ChXI3aRMU|cV!s99Y*r3+teEpN%i2?mOyVV2B>%tHB zea$xfklFwGp)_C3$@$_hRFt0odT_?5l||#_S*Bmhwl!(l|J=X9k|Q)Ob?NtKaYA#p z$hE9rrnS#FS?&az^xQ3nCp4QYY>xG=V|x8-cB7@*&vWYivTAvcZ&a5=ocz>Ta8Xa@ zJAcQgD`%FehX0>cKY6M91)+&old>Fs-Vn|%V^NOYdSJufAj#b>9a}9m9p6fm7Q&ej5652 zZ#*^0Z+_jg^RY|CR9#O`%e#2XwC0ZQ*761B6Y|#>F11M$c^i6d<_VwFlLu-_uX9aX zXLi(Onu@}9gWb+7{l;?kXSEzXBj+0U`3X4}y}J{^_gXvlOWT8o=?zJTFO(-TGK7U+ z30V6|aQ*h<78$Sp+F!O=nDTxn)7sV){R@F_=VsPapILUaR`ubOBQJL8ug#8O`qQJ= zw;);|p;YGkv1dnXWDMi)ndUS#^3QhW{Izq|-sRyn>a(U#&+sZyVKVOKiDsRe@xSTk zr+tPc`z>EjoN>3#v*X@}W(CV9_mUn+PV7mMR1Ptj6SrPKqMFHeclf-NdptVn$rtWg z9?eo$YnSHHv^0Bup_NCcJAt?EnD48Lo-IFmJWg`>p6z727+m|rRQ!R$QX7ML)q1>M z?1{542Rl#C`)uXdeYCh2D5pJ9P1XmR;WAWy({qb*+kvV{JV~w z=J@k-fvAG@=l`p^)AIOVnEie15Yt;UN62!!H_v{p-E4C<&DKuqs~1Q)H$Q#9Q3znRY&H1pA1YRx%~a_evQgVyHxnY-gIvR^Sbcj1O4F{6BnGcTl(jY zOS`GOlw+gRtU34o{!y21TVH%}&J*_eIW_0kq&?lRcP8u68ywC`ZX202pPlCYUcF#_ z-~sP9+ZEP|w8{GR@jrae>X+Up)bstJ`Mb*Gsyo7+X)W7Yu9yjV*B8y5@N2K}!N7{A zhmTI+V%=(Wk2QFMmS2e#zx+V~X8oFn=4Wp3UYGkcbGgWy2l@UHw~Z3#Z{|t}VskZR zpJG#*XRzdDga5uVU#7BlhUm~W>lUcL*=MT}oU8EjS=FUw9}-@bFM541+4%``0H8&AwZiel4o1n)Q?8c~OMc zJibC77r{rx{fiz=y%x6bo=Jq>*=FsPWzXCyfGOsU!s zQ@6ZIgzr_|Bn6Mq+kFi3A6>3&n<36A<{NWwE1&snwuVoRY2O#Qf0I6=*mJ{aR?8ft zb1oL=&Xg&!Zh1T9yKa}2yzarI)a-lA=YCYM|2m!atJCQ0ERnZHp`kzL%)+y%_-7KS3yG@I(inW(H)Xv?s zxMY)M=7|*xryopjyy+qQCdIGgz*^;#UxXj3ep5POxBB}U;bPbS_FYHXjn?h0*;S&o zQJOm~Y2oubTUY#!*<|Iu<=C|nnJE)Pru4Tj_3&7`$Lr9oWe4OPoGz5F{bN%*uawJM z(`&;?>(T_PrCwpLo;I$TAfXUuIC=5hgD<9r>aMn0tN?UY#MYBGO^abTvjk(Ws zxP4E&o_XCt=4fF3q zCi|v_pZHh%FW}5i#aVB%{Ox$>3;zAGLbZjb`rh3rhp$JUUj0zrI+^kCzgNBIr2{g1 zUv~vOiQ6tEu)FZf59!BqI*(Z>UpQYAvt&u4k6512v#onmmrU|Lawl=#^*XzIsgshv zFIswGhI#$nNJF-HLDe5>;c`f$+YE(+GJ@@?3ac)jWV%$mUsCYkm(&9BX_{KQY%cy&e{za9e(j~gLxwG< z)$UKIdnJA%p7ZI+ndbKmcdRU^b?8#xcI*+atp2{I44>aky*$_MU)-IfMvkuY*h8|F*sx9bL#tt_d-qJnjFoZRZ@;$n%q*xYk#y7k z$!NtA_WEv5oxVq&{K}96pUN`SW^d_;IsGMGWBM=YDV(K>ol+7fSynDf@s2(+DIxIP z?KND-lueGNU64JWqIG`7bni7ClR0bNaa?=Z%QtIkrcijEKH>LM?r}eQ+p2t&4OV4L{ z9+muR?OHT*@5W@_7YW8KtN#T3TN~QF_P9)1pX-N*3}Fu4hqNtbXwUC?sE~X-G~o2^ zi^^4bHl31_pEuo*f00* z;!x<|xsv$(uKwh!EbCI{arkd2%z5YS$7p;v^n?1V?aOVKott(2rPikB(`$GBy}8dh z>W9(UsE5<$_Aa@1WMiP5Re848&P`F352NBN0+*hadvxpaSwV(PXI36mFUVJFkuH7B zzD}up=DH)3{WLxcX!#2&R-Zkz-lAcx@cF{++rHEaU)_CWzf#w)m_$GJXZ~vQDi@1a zpOENtQR`7yBAs|^aW8ZKI;$rClb>bY>ZCrovoay0=F)b4}w43Rcv-!)B z@Ia5gi}wR8J3<@h>V&p@D*il8%ZY*CPfF5fV`+ieB9BvNxx3y}bM~H*nP2-Vr|7ma z&)FciS-G1Wj1L}`I-4aKyL#88xs3PTf3}vtsrJ0}rIgZw#MXJ){<^Pl_0)Lql%XzO}RdPdCMt9kr zMPW^fu_9`me#=CE7bv*6PkbJqWXF2lK=q-t=bGp%^7h+>^Y<=}{}A%3Ls90)zv*FI z{u`W^ye@NGtHJcpJMQW8ulsKOzxCB7a2DTXsoiC{^N*+`b}#b^kyBC1VdoT@r)(}& z|KmPe_;>$_W<9nUmu5#~?YcQRX5o_gJ90S}d3${7X=^Jx zGBL51|4o(N-TSUQepx%Mj#M|tXYe)j#1x*{e~$Y>M8HHDYZdmxESwS2x_1B7Unqq< zo>P<+UHE6sg^uf$Y$8F|8FZt$0vRW6y>;U$%l&tS+iz6x2VeT(_wa=3m%f0@^9&CO zuMszkKO&x2p;Gqt=iH!mye^gOv8Q7lI-bkVyOw)GDYGC%@afmXau$l^um81osfe#| z$d$@$-*5RZ|7>rlx_#YE z5k_9USf;~)ubT=TrrluJ5L=Mdq4fXuwAUvOv7XCj=n?JopJLwoII;VN2+NaSpEJ31 z4?E9a(J%0FYEW}uwDI301HaRIRo-7st6)9Zox%SmG(g4AeG~hgO%btf7JKTsY^Fpx z`mH|4_(r<2?0VqMFIF~-lkdshDKp6^TKnj3JHtmazb=>mK>|AJvENuLRxCXlF2SoX z!~9#x3lr;OXD?gi&zSpE>JabeuDPpJ*025VHz~8q;-KToSK{S7O}DIjm#17Qv+EXI zb^Ok{b^rezpJn+>e(rk-ga1=|Ul|^MN-YcuyE(({MFpczc=q*!_&WMcSrk& zJGVAodAp7+cgOL{4;+DSKUJrB=@-w)mCoE&GR-KZKV@fLnS78)+H39`AKq+Qt!|@J zdr!t9SXabz!yos`-%KZKGy-MX>XXYZcpg3B>bTdezw*y!cDwe4jy}nIg@0aK$tf6g zJ$!qvU71&)Icl?UlO?X|lm`8b<}D z7%@IpxS!$Dk-s;3(X^EU>rz|ZWLgEp?V0^)F4NwBi#<9Fm?o|}Ui~%ddwyLl&zS}L z>y>K@l!{hdEbQ+&!g40r=S$Iw9aFx4;L*09%ya4Cf;y4+aU8X-3w1Rw_SPgMR`;i* z330CZX}Q*9gF?W^v+fVBaQL3oXXE88P$US66E9Ppwk5*RTB=+)1Dn49gQw}$h?2AtHJne;@!>L z=UabT{GdyHP2NJgKS$Dwe%2;S*VnP`>zeg-@(jkai7srvI{#>0N;nB^kYrOV(CRpn5da=@z-Ho67e#CFj)j1Qs=L}Q9Zt=^4 zzjo=&__uT0e4cYb&pVFI6&2Ot3ODS0BW0n&CR6yT&{XO7=J0FPuj~cg9K~P$syg@~ zdi`{+FU~B1a@DW7tpcrT&z$m&Iu*m&zVCkS>7{}S2exK|)OE5KIzcy@ta@Mzd`8v*$rwb=LUsvZY`MP_%y)a-_!Y*{x47cUU}sI6k*RE z_9KccS3-Mzt7ku&FZ-aEDX<_dwzeVj?e=fk6J2J#h}xHO;B)7!f>+m%Gm6MgjIj+6 z^S(1XdP`qJ(2_IkGua!SuG*t~zH7D1ghIQdtN9K8!?)FJc#**}gRS=^uRe zayO&Es(Jg&uRKbc-m9P}9qB3fd~eH~<7@shE87bEYN=$)@8KD2vrbe7pn-P}&*w2xc2UY&IJo`P)jz9$tolgzX~9>1zH z>%rYS5A|=$@^7=g@VmP=H$X-r>BIK!H20*{Vc)!%0$FyK2cOI3de)}8jOnwff$)?I zA+<6L6Lqd!WRFTN576k|;BKJ(P_2jAGgRMtD>@V2WTK{8W@O<~phc&{E7Im|W zCixW|*84GQQ*i7apQVix_nMo9FKm8jP~(t&`ioEr*X++9)1Uv<{F&>hdCGNZ)smyj z{+_73?FV4f@SI{fQXp2&ua-P+4Mf1EP@ zm~CDm_utec%xAjt2T$`aFZ33QG_Z+z&dOP}D)>lP+T&%`4aMJgNq*Jh)tK1(dgffl z@Uth={NG((QIh+xu1bTYlUB?d{bcD{cmNr9S`77rp=f#^?j+aa{z?J1m^`yf~ zFS38E?m0Evb48_~=F*8yY|E^3c9yFtR5C=B2dk34&5m(didHQuOAyf zz82g$w{X9*QRCDq-THv*3^8KsM z)1^aLc^ub!B)RRi37J!Cbo9Q@?OH!Bh0n9^PrfJOFki>-=qIbdJr_DY1-e|A$Dlg% z!_VY-C;hCiC>Js^&N{K<*{65OQtMq#hW5NaePE`m->yB32)z-zFP6g@7%|npF1m9-y|fZTdutI)jTsn#(ANflk=8m%(sg_{WWZSQL@Ic zgj1^6$?I{AqVt0DN90aze=EZD>CEj8=Hsnf z$qxSmZ6Ej_YY2@uta^2E@#58WtlyNhH@@4b<@0De_p7@becQvg_doJGeb8s#)IB9m zcJ>iJImL@h&E#kMo=Wo7-CGmavyI2J_+adNG~k&RXB#yU;Zr|{9V)ZeGx zNqMtZthlaN;B9x+>`K#ep#@1-=lo+n!gr_FY0hf@=hy#Cc(C+_-<-ojqW%AO%n4CUldi}-x{Kz9_^IH#y#GXh9)wj*tTN#wc zzl(W8YWUHIQByw6oV>xLV7c7mxpLbM`t)x7_3nV?`iIt!ubZB%HCcK5xu-%}o|WyM z6}vAlw`cP@m)a=&C$8trwYtAtebTW#aIU@n zrstt+d_vCr`xbd^^>Ja%ih#IDV+Z1S`2=VDOz_ohcyxAeuN;r0Y;=-t&(QZf)|6bE!T%)A<jwZ;PBn#)0!&77JQF3bNccNqx6h!s`#Njky6U-hTT1 zXUfD&KJj-KU%!4%*oR>rZ-dsBKBkw?GJdF@ozi%7GmFNojZ3W)lb-KBb|ZuNWn5UP zU&`_wYoB>%b{+h|H}y>TbI*7C7%Ft5Ocvvm-H=&)rh1R0&eucjFKld3Ry|?;v;0Y_&s3|ev$mO^P(QOyvMjR5LS>7XRnyAjp}EDI4<@c!Vm0mi zrUiTLKduZ6d!I3xMfcQ$#T62Mne)5kFLnL!+~UpEwYuYGZpH4ro%W5~j?)C^aNP3W zvNX{0$fslR3|*Xydu3*O=l4#iu=u(BSCY2vkAO3EOeGUSFVwWo6&EvlE;UzvO-soY z-B|6nHFGRWJ3d}{opjMT{DfhR>Acj!qZ`xa&f0JxTqKj-zomJ4aq@bezSVnJc;9%% z`Aie?%4?pKyY?en!x1MDc0)I-9Y0Oe&&~gL`>uwEGlPzrVWs}1%c4i~=KVRfUVm5H z`Xk5x{xKEIn4c%+ak6ClUy+LadG=}j-N)2CXU2HF>#9!oV>l8z#bV0$X@#;j2WPDd zSa^_C$>zp|0P6$IvEe~i|GfORR@q)S+O2TWdYi*RUoSsVJFfBOgzGA9jmg^lcMZonF`%M4JMAhJ2EWtc86CP{nz^5$N0C+=9i%Eg4s%Mp{7z)Oa$MbA{cn9=^2O{&=eJBOtAEc`t)R{){PIR`SoEEu zr=^FF1l{>R?`Fb|pzVRuGuk=#6~9TyGxDre@)x-o!E~aRF=NxxgLbpdoKD#N^8Izm zlml!Rn1kmj-(*%>9wHksbywW%{D}q!KCM;wA~o&pZK=dnyXtu+@5?D#6LjEp;CJ~T z%Qsymr(UT)I=MwW@b!@dW}%g@d?oj|FDQ<=XOZkE+ZDi|&3;X&d2dKs?Jx04zuak> ztiMn7ilkQXf0!>X+;4PbZv4l|g&z%yZhl>P{;g~K`LALI=bB}ms$w<1pYgJhwJ=o( zahR&H>i|dY|JM7H!=`Wj^J@CtWu-e6U#ApQzY9A(=eOM#uL(EeC$A{H&prLv3!W+W zliL3;y|Cf}zgfP)+Mc88!CIX-)9hyzpgsx=LJ zMW=qRHh)v+!uo=DkNljbm^DA2pHY@o%Z=K3lP`7Ie8%TDS1!4J!M*dA=n6%F1-n^3 zYRCUd*~b~czq+B|@q;r#mmWG4na0%AKfkfJ`JQoenn>)a^G1Ayk3XiIKd&VlUve-g zDq&NyMRMqakjZ_W|JR0ur*x&SK2ckl``_V@{i}x&F%LI>;^L~o>TENpG2RGjvL(%FC$W8?*Sd z%rs9;F*$FQ>LjIjRMF{aoWRTKe`xAIK%&ELO>y+$WkNx&qnjy#QXDPdjPe^jf*gp4#>H?k3$MbhMEU$SS z80eoHDCOt1K__9iS)fSby6aPHvX;Lno6)oD-;R#lPdyv1KW#jtvY)xL?VoD*O}3PG zHBMH)cE%6-}gMKw)Ab%nv1+Qg4a6L-}0C+>sQX=nazKW1z0!~H2W{jkT~tz zBTz8=jiGX>70c4a#Xo}Y_?hYS374GnnOI%7_up&lDQ?&2sLc72?Ed@rxvGA7k9g5P z&4(|Fls%o<$#pqP%skDL>;Jr!{g)QM|GM?ygxxKnQDPTL_r@-BC}m;WyvONB#k3dk zl^2xHoNhR7U}*n!H~UZ7u8>|4F2~(mGn#fRIz4rJf<~G5)eH7@#D}k9 zo~7;k(v34bLEOT?<;||u!Eanmb8`zrtej0VdGE~SZ0;>`^51z_U{=iTVt!uP+iEcz z3jV}dZkpIHsyn?vJY&-IvVbFo7di9Gwxpbg3WOL_dE6KIYK4)yFo<1Mz zH`iuU$E5T(QWeoX7ZxAA|5(YsIp_D1jYn@bUU?~!)_sFH%v5W^4qmehc{klJt6qI{ zXr8uGLD0vm?mT~MSb4e6DD0l9_;9jO9P65!wXSRC-EBSZzRASYV$xC53+1&87v3N5 z@hzHhUsrtP#GLHdz4hJI@3bWAYLj<9UcW@AQ1r=%CflD!tDioO5t`Fia_ZvS#vOMT zv+=GCyq%qLNs8a-b%zhf-(a>cjjuN7dk62orl2NpwDf^s*}iovv>#r|PJOMSC-P<5 zxl7L+Rev`2&DYIqf)ZMovZ}Hx zpI&<^{d~jJPwi}WW{gJ)yY}Bczwdd<+dPvQ)=wIHFEM^=W4_*SR!_>~?n8dle`|Yq zW(o%!yjQ+(O7WZexfewazNmC;C~deJ`p!{rdUW0QPmu>j>O0-Muk|`#_AryNOA(sy z@JKdzNzEOVJIDW5tq3zqu4b#LlKnXU4!VT@S3It(Bg|oDbuetM>EmzA4eie(wtU78l20 zaPjsTi_;T+EdQX-S-0dZQ@94#{uD2Jp3_Ed31PaQLT4T2W_;-y{?q14nE#iuQxa+S z&(AB>Y+N~Q(W^h3-gC((_g1xrBwZ}N)MS4rK_FM_2TyOlWyx&6yD`oUe0y{ir(MWe zaV~aIWjH6-JMo`$s@tlZXFZzsv-qT%#?FKlg|{2d?A!D8*B1+xI+k^1OnZnC9w{EDXzt>MtyJeETgYVkja-Zc<76k{+-6{Ua>RWltBGl!}nZG|%+Z~_8 zDHooPJY^`p(>Ts6J#VV>bCz@MQ(6TBDpKD3&=U%-eYp69pW_*&sQIOYRs49AAWx#a^~A}!?2PwIgER5)rx3~J8ntJePpB`{b^f! zM9H<#gNL}~_Qf>W`!ls{iZeL0y6XLx0_XWw9{=^{7X2wmxNP$1_6Zh~iH0@B=8UiI zCO+R_Rd6#jJh@g%`?}RDqrQa#uc}mgIeqfc>VH>4MHhW|7vyy-O@;ry3x`gl!}RDk*X?s&uaOAv{kbcGa6jOIg43 z-()U`4mi0jz}ISphS0Specwax{p)_2W^t64*0&U(v-*CUlncJacb1%s=X$j=@A{gptCX^;r8(hZxgdUPu1S#h-lUL z{`mPy+jOgY3X#X!wI*>Mm6JOD;UH7Y5hK+lsdHa;d0BAAKD@X1!t~1~FWz#mc{FiT zJNvb|*P+|p-bn9o-Byyd`J}a)apBZO<-ISX=e|^~TH`T2RNVjmLWgBnehIx$*nMnX zZA<6|&OfJLv6n|4KYc@6QJSCEd2`@}MJ*lwKi@gCGI>uY|NN^ln#oTj+NL^fuK(-$ z`9V?aT7U1Lk0J#--ilO*NINdH&TKzvTA&N)i&;hSilUKBIJDM~6Dbl>Y_UFTg zv&@$o2Cba&!!65iBLAlLcn=q^7?z^7MoTyrhPJ(URCQyn<(gVYbBRN$%hH!D{1Ca| z_`l~oz&tZ$ZpH-k!%1m*0gu%9m;$T@i7$CvNr}W*yVQg(#D7fwf45{|0gIk<*PuAq?7Ff z?RfEP8lj);H09R(>w10oSj4TaJLjY4oUq;Y;z6$@Q+0Rf4e_6qPj5V2Hl?0FJp8Ty z;og4dzcwE)tYo|0aXxiVCT~%pa{HMj;cG5(KT&98UAR)mZA!VK+r9na`vs5s*>5Qo zur__nZ@G5CISm=kC3j|UOJBD?eISu>?h>A(yKalUOh{c|*T%Nw;kmVYKgb<;P~qj> z@>)7qXI`}O<*3ufTy}cVr#4Ei-p|^-dadNNsDIy2B$Z!K_jCz=@j*Hueyz&A1CI~M zt>|nMi(2{hR>>!>DU)`c%Zi#}z^5=NbmRHuB7M;Z*tZIuEHwMPw?OE~>&WcD(4r$u zVJS^t+V?H-G}b>|sjD59;)%}S$mvI z%wpMuEe;IZAIUBKu_jleG{Re9yY>aeyRYTg`c@Qb{Ej*G-*WBF%*KG)BOC5d=y$)| zc<=V{g*!yn{>tUjos(o;`pPbRMNHk+OZqT`@HWRJsQAe zaC}qY^>p6bbE3-|)^5M+u;Zb+OxewI*MIdMVU%B~cKdRpKuN&lk3rSX{$6*S7+5~< z?ThIXPpiL{VakyAxAbe6>uJRL+H_u)R;b3qZ^`T#{n}ce8mINdZXw5c zX~CrW=?z{QbGEPW`CZli{$fP^?APn`SrSD%-fM4XRG$9B*n<05{e@fZaiWhUpRM6s z^5wO;sczl7>yOVe6fyQxh;7`moQKVte`S;I{pUN6$jBs4Q)ZZ#6j6QrJ-0>R*J|mD zpTt--TJJklCGpI=DPE_4Q0?%}-nFW6s_VZjGgtVaXHUXQ>3?qE9cxHzr*epc6+rYV8KN1yb@2%9QD^DFah z`sk;8`tx2>u7C}55B@2Ct3FePecsWo$ctM`otB%L^-Z;t2sg-FeIjvIy;Av_m)};r zsF$cay}!+M!-uP~)=y_#329?^|JN{eYIE<|F3vT@8LeEoZM7b2IQK|e8ZdmG&msDb z!QaVzL=JgJ@TR#Cc%-%IOx-&VH==esr+_#YSC*FVXA zli{?sE#7Z_)HW9G(ydW({^k|w<LF)wZ4>L2eVKj5GXQby^cYsh572Jis=?cgEiv z>#t7WKcX7^iU@ z&qCRI?ryRVxbVGZrP7E%AgCe640|SHdj&_~rYX9H=k7ZDv%%;dT=Wz$m zgN_iEx!z72CUd#Wu6)1!o>2UplLp3xx-XZ$iTdzrN5}IV@lr5{L0zuYh-@yofGWy>b{>zx6=Dh7bYzf=>EQtyI4jjSm=Lv;7nic zqT`Nj1rMqc&TdJrWxd3-rE+z2$Zv4hW zOrG=3az-1)gnU)(E&g}ZP>U}h^w2lYjE5?3FLwO=*3`XAs+1>HL|xcT=cu_`Y1I4` z(+=^eaZHV$RQ@OLSnl~G-tI>SmF)kV%x9dg*Q@@0a!l64wdPMlr==J&XN9?~(&n>> zcxS3>!~8Yv*yfF=reDY?{a1NyR&e+EpnF$uO}w&W_Qpw9FHSwSS$f9Xo5#!x*$*s> zJhv`;-2|)lMOTv!<#Ywla+2Xm*8h4xV0vspnv*%Nj9qd4&biM$GVVy9iBOJ@`>p!& zVHFo=+AdX&{H<%WPHgP5eRg1OpLr6`>dil*3?1IQ*=O}KGuPz6D}5uclxZj06yBR& zypouF>*i)5=j)v@n=jwnXYi|DGu~mB%I=OkJC?0;74Ym^|Msv}i30w|x5_k>gRdP-)-dTwB49rv6L*xIH@@DP#+WODE{AJ2Ab@}I7qfnbrgO`{8&pp<*!7qHj z&snZhA*y*b7Vt!?G?f4FS6v8ZT=n-Kcz_Fq{oc8OC&Qak|VxW zRf{%e++>~b$ZPe?T}lc*jahNee4ZXNTAFk$SR*RFC1JO9S|o4z?PprE*%P1tpKJ6w zBR=C!#NVX7o8Ip&`nOZkX+pkH#qE`g`J}eg-7wMmYFc_==B!QIv>)x>z4cFW`PTH- zuP0_NTjKmyev$m-1FtwH?-TkLvBB1B<^1O!rGn?*d>78pw`$xsZ`V4x&&7*xMDqVz zcTwbvnfoTg1q&}muZ(=pyIt{1+Weh=N_MZ~<31X8i`VDM_D`?OHIr3m-<<7#@BYfZ z-m7OdZ4OrcGg@3K{5a{qnA3(AP4k+!|E~Rc+4gGJQK_3g6I<43f0gY1p%L#FYo*{V z-LBh_oM=;1|0Gs(3A0kV(Ssi|O;cS9R@h%s{@|)M=c3aE137=&Fgq3-Mup&D%@wP+ z-&l0yht(%1#x}m#rhp5JR+vd}{VkZWs`Qug7q&N5XH~Dvs8aM0YjM=+jH^BTd-3nq zd6y4d7Fiy#tDNKdbJG`GhjwnCk+D~JMQ_W|#cYqw#EVDb~7y6>&vbbO#zktRS!?71+MxY z^Cxa`tp|`w?PJDj2cXrX*m1XXN50A@esz;SB-+R7fhT~(4*2!LpAHt=V ze!sVPe!UFGr_!F6@nw=m`U^{CKc5Mgy*=TG6l3L`%l>P3JCv62X#YO(LC3RH?(_4# zOSEejUGr@A{d|A5srvqD`$d1h3i)2yp#M?x2xFy+_v_#B5%FU38y0@JcK&{w+gF`) zF9P-iq@U6G`bbc;A^XbirUDL5mvlqD6+10f2HbBm+vQ`S@!@9NtTRjJ?ADJA*mTaX zcVE*n)^ALEv$k)p{ieqe9KU$V8ifhPmKv&a=O4PiDnftaM7;|6+CvxgoX*z-TMArL zUwkI5zCtS2af{W-jk|@vG|rp-hqL{P%r2L{`b!KNI{$V>slPVA|NDvOo&6~;JA_@W z(s!j^`0b3$^-1kzUN--oYwx{3oAdNK-)y6Z$)|Xf7e8ox z8k_q*Ui`wZl@>SRj~`+9Wm#kMV!@(g5?UI)EqC3A^J2!05zhbcM#H7@#$F2+VW`^u}W*qY5Y}lvumv-^8Dz7w} zl*zxjKTfv3@?qVB)y@n0TP|)~bav__kJW2Wx~`6&@~VUV9iJ6*SHSE(=?$5x|H7VY z=sVubo_FSPuw4VgwWec!e;&G?oBF!)&9qhjU&yoR{jqtf)2M9sZ?aSWjJuq_(=Qr` zn&qT7Jc+)vY)a&r&oeK~>Aq&O+2xeRe82wwGgTr?zhy;BZKltu*(kSl`L)%HIX7N; zX8UCY+e7ub>HB}ayk~Fzr{U5e!?H^YBLqy?Z)AmT+{^1Y)$&?t@vDOuZazLFCodXp z$*Qzsm+^zMnapb0v$yS*+?ldq8Slz>z4-^{uC$TOG*6jk8a3-w?%Tanr!1NE%;aQ& zxAYEWt7miVUUD6C32Jd$ypBctQmTCMs(@KsjNj|$XmU)~m#Q*7x1v(*ZfWX?lC!ZF zC(Zu9E9e}9TD130$%;$P6p?w!R9S>fkZCvaqJ z-!|`6JgdMp>A)PicDs+Lf(~TPijs- z>p5-jUq3^_=;yb`-}O!@Ofj9i|5TdT$$I+^+usbPPndWwF1COAMN~()`tsSiiAA=S zZ?{^K4Vs+vS2jmD9yp zzCDPm%jt669_fA3ta{^>$A3$s_SC(KsG93~c#VHr!6Z3V=dWjWy1hA+V*2s|TkqSC zmx>$CBzVbH*}q;OVj|IYHdrvw|IW{KdTgt!A02shW7WF&?}&1C*o%?%Z44PIPt``&JS5&Tnn z?bp)XY>$8QzELbNuZr2#wNRQ{i{bn3`~t4^8r^$ay?6!v6F)}pVU`j5^t3knmGA6L z$1fIG-MPWCdlIYJlLNK6b%{4;Hs?=_-{bz~XGYbJn+IBVSLyBBC)T)J|Hp|}KVG}c z-J9QcD&Vh(<%cDO9GksP3a@Qx5zS%ZO75MWfA4$l(dS`7*D4j(Yj2;l=7@jn%C*i> z5-;CnO;pqqTM)iMVtdG1qY2x^lWxCVRk+~x$>5GHt|9vmpS-QN?^6m>hvPNrBiGs* zTY7a4Ff}bnyVCkX?$&nQp9+`UiY_EhHVtW+!M(KMYT;?y%uBg^zZ2W^y95~|$$coPulduqtD!E<^0?oovr_Z;U+FJgcB&^KUF^|ZyUJU&-<3*YL;m09 ztC?G|CPl58)nH}x7km57;VWKPep+LqRUZ&3mv!srv zQw_~!Gxsvr*OqNN>v^ow_qDL=l%h|uIZK6kUq7%t!YFw;?#aw0n>F6pdMCNE1%15l z({b*o!#O?iFtw`3n|cCME)=VE)P3>(R1vnMc$T&br#Pj)knP@l87F?7FaIvWQP-l+{QlaR$w`xT#_A+@2K`Xco4`_U<@GF* z<3+~0Yt3@!OuP*KCL35Zc~*Vd+55ciopjmKiLs~Gs7&z8*XeDY(0upSeD=OFX;FX1 z&FRM`%%Ajm_UlLHIhH!Qawn?K=DLe1%+K}Ew|`Ytdz(>E%J*34rvm*C`{vC2{N}!3 zw@&Zk{){}8lZO7E^Rw9x)^8OP^R{8QV#xmRT1U`U=ioQT`u#rk+HbL(_E@t?+&N$O z2LG8Q3%;)UTYJiq_ou|%{vFM`*y~<$_5b2oJ2UJ2`nZ3ySF97iJMH1aij`5*JmNN0 zrw2Nnc~)Vz=EKjKS9+)K+*YAIac7InRMl-;{0o<>m+N#o-JH7E?_yJrRcfQD01xly zfb#pdL>c7vSbtq}!PjtTj%#OTG>`)!lz)Y9+} z2N#xf6^~Xg-Z}EWEcfmS&lTZI{juiSwO1C0`R2C^IQSM;q*>Tk95K4ocI|U-@W167 zZ)DVRD(~dz(41+|cjd9?%6ofe9DVc9ZIg7z)Tz_O@AFG%+jm`=)uYp+u`cDxK|SlV z|H1Q9|M5)7f2C=S?ghPcd=N z{hcX!|3}U5nQ?1gDtl7&@sXDNt)lPx**c5&6n#{gk~yo&<%pzux!XFfIDyT7o;?!JDXiUoCf~UC z(%k<6e^lIg1PuQ)>+5hVbCY5=nvvUnr|Vsn#iYE4x~(&h-CyIhChpe~S+h7-|4^@j z-tS>9tmp1;-@K7St4dLOiGjFi;($#-tx_jQ2eb z7oTvqz$U_xJiZDyS^qpB_~Ame_cF;!1)CEm-IUDxTK^tY5R_aSm6Uvg{fpe$ zvr2!aFGx+fCd{(2f>Y~JrAfbHl3Qk=XR5VO=wAlkX%*E5Nfk4OI0VMCFed!ocHP08bjZdS9#cq3{5*9PfNz# zd+wJishxiCD(7j#tv%6acf6m-B@tQs*8ElF+3&rQS!?}OS_9{DXYV!@t)KN`MT_c+ zzprMTaaNprRP9{AnJ3r2&iO2PZSSIcMNMBlpRZB*TDi|%sg*CF@2|?HQZx4jGj$*J zxy6KwN6h17d&5=q@cPq$SKD8@tPbD3O+NUQmg$e)+(On3rJHk#%t4G zzv?ojK1O~oq&ZLDKCPtpRVZ(IR-xbXqgyulK0Bor+%k=I=i#0IZGW=MGkEROJ77^< zT`nxRB2K3y^L2F%Kmy=m9wBHUtCZy`dMk6hsbutZ5IEn zZ60@978ewG?fjp1Jb&xHsv1EhZZGk~d5RA{9>3ISe>wkpmy)Bp;N}zYn{9nKZ4kaX_7eX|1&zkNAd?{HZ{^Mz%9!Wh;1 zDnD-CcQWLTt4VCq&cln!x<1!^s#l--(yx2j=@%cupB}flC;Zl7uGnrH76}QZ>{YS1 zzUl0XpI)C>*2Nj1bAOB6UGw`nC7*3pUrvw^`(fYy;EC|2Z!aDBCd(>pPn*NMKG5c< z$P16uiH=rp^YVvQy)5+KrzP_slnir}*7M*Ce*LZ6gzG~{a`pIrScBfycaJ02|&f;CV^`P9L zmD_5LyI2}7m3tZ4BKs&Q<4^y5l@}$Gv&&{YuTq-Ev6^=&W8?IX`WGjyK5fn0^h0${ z_0#tW=Op=fkKb?+6}tPp(CPp85Mv|rKa<1TYBV{Yv{#kLxh5PJUiHH&sI<-Zvfz?R z_k){nJYm@I<3pp_#t3%nrR-Z`e6E`39!alzH}CuITiWf_D?+Lhk0~^LJb_ z?p=-a>bD5AR@&ttY`HCy^;7f-+s{`^nnaHU=R^f4oZk1>e947rk5hRccmFqClCN2D zF5q#Pt8>_=z``jGtiI`U3f8|_@qeXRW!|7??V%fEcNgReA(o)<`!5xKZ3&JNEUV56bC_CXAL!s%x zsRAaav^vwpUqQ_hFW)EaF23*4P|`Igzjk@Yq2`lWM<=~> zh|Sdh8n$n3V~d>FgSV6HIN7ds>K5J0JvrU$J@f5N_m22}TY7k6O+&Wb?yII|zuKa1 zP2DT9KJw_M6|euBM9iDDU#Np}k4)aSl- z@ZSNs9;I7112^v#DCl&1d04i5`tOUY)<1{}xuBbxD<8Y<>aW-kiO-E6%?@|F^7c;E zx2sI*TH&+hUvBd!0ahhfPm7Dpikk`qRy0`0Cv7-3XJx<5?Dx<0mj71oe5S(?R_bZ? ze3PYx-M?LrW79>v6+rQ+l$<^u7Z#vdn&$6?bq<&_iRDF=;lur>> zrmsI+UCHMw@l`x}JMaFp?~i}(zjf)b*ux*cWo2Go&*L#$bh+*GGkc{E>vxNrZCLnX zM^x(S-lBzy+*cn4ONKv~!jT@}Ae!1H`SWqKT_5L>OIhm~WL=inO_1HNa;gREt+%H) zr)cnPR6Q4Yy?p5&Jr+h@xxg8w3Cq9i`1v$a;pw@w&OgP^mzVFhk>V>g?8u8QEW3W= zxJtT-($3H=yOon3a|w7FJuy4*W{cd***m3l)Tht;b$7G+uZaiKRzJye7P_GMq{9AU z#f|f?PAD$Wc|GYNpVeaaezHUIKH%=;`U09NoZMc??sp64Bv-Yt5df~hXuFmL(>?HgtLrXKIyJWcrdr2iAWLD$DpKAI~S3GKK$Q3u;o|E44x2o<<2V+EJg_oUx%7+`j_1X(~PrbGj ze9==sk+y9r;_IaB|( zw`l7x7ug_x%LhrPu7&SyW?w1I%Cf8YrB?2dH7^9n zTv@R4Y1|e@|D`ADJq>Ty3Wp0Z1jn|VX8AoUV855`_h5;hGdp{xZq~abwJm(nt<#q$ zoG$yEC{}t+c=3HF1@A>GglkQX)jFLzdfjD%eX+l;tN+O-t83JDcq?31-=BBKfOo>* z8_K$p-=yE)(@%(4ys`Y$Z^vs5lOpHrPW@e^b7s%$7YmqVJ1jjdbq=^KowueTdgXM9nZ9WOjKvv$Ps}^ryLt!P-8~_ZX$o7a zUbfwyywdQD}$H8P;6JR@9pNv ztG^d^z4-Xe$A8O@(xWkXr(X!qck`IRSQ&Qb$~&j0D|Ax07ZqAGCLB9Z6XBa-P|L{s zlw;bF-wywt1s(ip6?*Wh+doF}Je{;B{1KkqRxeaVuRqonKOy+e{dUnN%hsp&uAa;_ z)sDz1-e{2CRMFkIYQfV}R~u8e$5h^)d@zi^R#JJ7+Mh|Cr(VkH+V}AL9Q;_c_e84s zKL1~B(LJiOS`Tbwo?FUa`IupLb@%dD`}R+g5w9_>Up=E?x25x+oqdwCIOVgGzZy>c zkW)MV^zrjsOI|zg4k_YOnAODl~~8oZguA{q`46g}^-CC1>5M z*NHYgj`=cuwQ95H=SOSq+|dX)rBin?pEY~M`_spiGQvzu+TLimA3wG2)v3zrtMv~j zC5Ahk&dS>S?xg&wYx}1*EzdJKvsEWi{|8fGQFN-@+|yf%9cN^$>poO$bncP2|F>CP zt8_lfZssYBk`l@d{rZ%xcauf_L(R$gZ#O@Fv$Xd0B&!%7_G35MME~$SpCx>+^?n_H zc;2MM^?PTPF7n~tY@?sz@hyjQ0{8o<1C?$rq0R4>%ij%e+q1n`pJUyPU;oT9rk!G1 z*eb;P;Mqx+O)mGY8GW4Y82|mVS@qQg6(b1&MZ&OZG=Lx_gzg!JSID;Jv_`SkVN z3WE1Sem-J6F>T9m)ho;%=mA+bovVxqbYXBYg8{T zFAd~-trHNmZ`(h2&K2@Ycl`3!i_+k=bT$gK@X-0(zrgs?(mQH4A6~q1mGW_U${+sM zC%omW|4C2QO}_3wQn*~-zyBG*_n1W`@>tj<#v{(RImX86jm%NE6Q2C9_{zNl~HJIenud>-#9t^MKU-8n}KYL`#%;9c`8 zjQO|Hb*7oSUaCFcBv>>t^W(1aS)o#U(^*O+E-d?gZk5Y^lPdy}yix_`iU(Qtq*YcP zeqPsl>=yg&a0Z2G@Aj0R73zKa*2RANxqoiH@%&%IcDlJUFHc??VDjJcO4TEcjMpjF zulW40zZE;vJ-N%{&EZF%*FVrUyeYPS!d>HU?`$Vk>2oFiyZGr{3`f4Hfkpkw?#WFb z1W)wkPUPF&P}Q(oiEmYWZB@*d({r8{>^Eoq;nttI>0qAAy?s&+X5T_%IFnBHvu$nK zrdM$=`|d^+#?z|$zmv3X^zGgsSM?<{e(K}hi<)jrFIC`66|J9JK60Z6tw+mS| z9I>_8({$UpCR|uT^sE+B6q|A-d(X+aHv$@J;y3TxAHu{j;V<*d;=_z`*XONw`*luV z*FpOrp`e8VWooB&@$aFgVSY;&fVE&hhbg zcO|WgYfRhhm~MqIDQ)}yS&-*z;PsEUPkKyBn?1YZ(KjjmjF*$%v*}byt@e5pcqzz< zDeg=B>HQ)%+%gI!(tUQc%-{K8eut+}@}sP#OV9V*^4@0^+B7G_?asxik=r6CHBC01 zmH%Q^;~AU0zyoXdm8m?xeZ)jceuW}$hu#y7r=Lxt1fO))h%e&$`{&gY^8&>rr?m$> zir+r-TpnJtvHC#v&cE{~eVQcnxA{QyOwMbZ%p64uT2WurO_}%244S6Kcrra@gI=BB zy2n@frr$Wjm)Rila8a{Qe9t5P9DBce9v`;Xf13JwSJ!Kk1-YDkA{|#s&pB@XXe`LK zQ!UQlXeYyj9j|11L>^vCDBRK$*cPw+{p_PT)ekSMk`OOpHoi4OeCxtb|E3$XT}X2J zctx%t>TtE!?-}XAs%2l^&${KPrsJ|&qx{ppc*}&7QXdxe<$jBL8qe_RZlcXPkKU5i z^OlObzTa^1(52s#vU$F2la`scbrt`X)=$~o^QLJ1X#2aCXKQ7%XrX7@zb72#4|fC| zc=ne=Hl|h~F4(N*mQO;#&$Qn&ZM|mpii+0l{}yK>`7LGtk-rzRdUvT!YSLo(ee<+K zmTWMu;l7N(gFhl(GuiR))VhCd`~QbquKb+lYIyaHrO+&nKSz}(t}XImy}nU;+kUsI zQ;VXFd!|L57h7Q0x5(i5{9SCKM^2u7Bf<3c?Ms{Ix2C+BoLK*LL&(-{_ceZuW>T-U zTjc{>82o0u{(D44Z2M+o+iKnY?9!(1%+==fdu01$-}K*l$I4gFVnbxM{o-4PIm;T3 z-+jAs&*~4E29^xTzqUr6^3|Oxvm~OX^zb_WE18lHbvDGwC_fh~{8!OB=aWC<|42KL zsg1I4nE2OD*}PJ4@@oOV+uSoBx~1-3vq1I#bp2VWe>WL#f4KXQK-Kj(t4?pbf0%7u zsJz%j850-jm@jP{$@9y*s{iG&y}U44Vr9IS(xwZ)`!5}MCRn!T|CZ}pUdCyZ9rRBz z+5V9w_pblLYw>lZs}04sF1j^=DLL_QT}SZRov%}W6t}C)JsEVjKA-W9g!TXb@i95d zJ4^+G_dcBUYf9B)W6yPBV%|?8^m85jcuh2Z9e$GbP;xUL*YCoNINhaNqcuWPZfhuf zk`bSLZNqogZ9W+tAJ2GA4epG-9jzK3D#~rWZ=smaZh=-2hRrM3x5Y(YVa<5s=-Yd6 zx6bD|PMZ=hCe1WeS{_-j`*F?`EeWab8NUsaoFB``*M;2N&*z(YI-uHrx79)i@!sWW zeg&5==btip)aiDMC(QVGjW)?IEj&YtR*C#@lzRVd>NTJ3#(dqgrK?^3yKvMT z^^L84k)iK1IUxUP;1>Sf+VxL;f8ThsX3lfAgVn#>E!9~r>wd2-eAzocg(YG43?&WI z{wMcTJ=E0q?eY^j#jLW%g5epf#w5+UIV;o8g(pkg;o3N_L+-HY4j-egO}y*VKOOxP z(k-MT+xk2E-|o#v=RQ)lUJ+KO`bDW!+udMW^lT;8Td_{3*xi}4WDl-v*SOHw!0pA) ze9y9K%l*=j$~iTRW#@Zd6z&LXKfXXcUg6%4&Yfp?tPPVE@6|2-%;*wv;-8w?n<;ay z2!HpjQe9zD_vP{emRC9Wj9D4fe0`oVU=qK@9Ue~6ryH;nmOXP9mXP>1Nmx8CH z?hSWerfA>!O*ua0!ov5n9p>vUU(g}4;i1a?uE>ikW;@;IzN@1i<9_{X?Df*0R@X0X zul@c(?oW7g@I}#HtLlc69N(5^eLnDOBkMoInvZvM6n{QGDeU$(t~F>^`(o*tGbNVZ z;&LkA;8OAV%I&6qk^i;jRf6|^|29iT^IznwZ>8B;ij!jn=2#tci>k`~EV1l5-1gDhu1UpfD@-lhv1r*^u$)V-@NEZydId!Nf{ zg*AN9#{>IY)<3?=rP{dgbi=b4agWEs7qkN&T-1#?_ipZ-{^Ij;lg^|Ie0A}bU4Gfy zMc=^iTgaOeqTNk%;$*}X?O)yH*?3pT>x03`OY2LWcwIIhbTO0J$M3iMo$qC}E!Y31 zY?>c%a`UvGU*AohIkDk@V~xwR>fJZL&Cd3Gd9b=)*!ytka9pEKku~|@0&Jn@3JwRnf7tp(v^kllpR72aNC9_yuXzfk{EQP%t!dl z`|jD7SIKXx|H1b@N9FqB6YeFCR=lg_crjbY=*WDbTYq9qdk!^T+Vb17dQbHJ!dK^% zmM(}<_vPI*MRbc=-HVNv4&N)Tc__V5EGK08f|{BafgNJgnLT#p1a1|K-Bey<#^ct% zCSs`$uY<@m#w^im!9|be|5`rh-{wod9u>To{~ETsE&p#u?jn9S; zC)~Nb>^@0vFmj(P7Im|w&sMMRvSi`xAGIc%G$!)oEJ$7Jyx*_w&XtMvkCk7^d!6K| zkJ0A~{?ud9Gu4-|=G4FV?|HXuS&v+PRFD_)Z2ly#?Mc~X3)q(l`URC-_7*-B;luU% z)pP!SjpKPo+rDutSaQybyR>KPvY8VyZW*lNUhVABy+uC4ZK-fnv`<6dA=5iMdRT*{ zy!F0rPx=?HwkFD|+u>+?r&zB6r`Drm%>p_BS9>Qeev0EPG13+d=QS;TUR33KoLlpj z#Jbvr{2p@sQ)OPx6Nu4YCYH}zWprwF)ds(>-14s&?G8O)D_D6VxA;`T?fL6G-1hgn z2+saewYY3XXWIHpKNkPUx#yO$Qmy2Or;5PaNQ-&dUk$=_n3|ucPF~u2L;LvA9YyQ) zUbZuECa&n&wK?R_%ujcAFL~Ve(PCvo*UV#O^VY=jpSPK@K>I6uidsyaN*ljG_o{Onbzec(@zR;> zImcJnZRdL`^XY#NFO&7!Uh9(_Davg>mDlO5H(I;HVS<*m`((8;TaMKqb!Y!wd2mVn z<%)Q})A{Q*bFM8;2sYfl=-l*md60H7nr#$=nZf_6&b4w?l5V8$7|01p#^*J>E z>*kIXs;gZ$srp2+-uT?hxGwPUdWO7^;|+NYBCEYCMXsw|x%xOW-7qWWWv85{IhRLy z;2GW@Q*ZJ7_dII9^w@1*v5Lj>ePd2sU$C*lw)P`q$^M7Cp2+^ou77aZD|lCopmy+& z=&kpdBpLnw=7dG>5z(n?_r9X~bK72{`MUafW>aqF2Rm+D{8-GW_@2$1`m=IH_tpl) z%=FEhAG?HizDT^>W~;}g*^hSYo3QI@%zd-VwH;cn*E_<67Fn$eHZo^kyG8X>>|?tl zYdgdG4D=3$r?vc>Q?^RV;A)o5#@oUX%eTmM@1A_2?2%RIFAObc@o z<)fBVx2ExU`s%Y6MUTm?Y?A4fj<2jrx$xxCELX|uCHq3|J$vc%Z2DZWGN;`|Oj+S9 zju!FJhAgMuZtU6-Q#twdEva)|ZL2oBRi|HOEG=7XH0j-4=dbI{tpHtnVBzmE9&#ncBINwaYWNB8ZIoot)<3cr^;yX-2?n?~(o;>th zALIDgqbOvF&?4J~k33_f%%*ccl3wyMRa!kIzleq6TuVqh+ z7GLo8$o+ZReMT?0^~WVoY&)Fq9eQGOMfu@#C*Lmc7nYMx6EyzXI)%ac zU=x?7?Ve4svZZqxDm?pK3My)uGgs)`4m?@be@1M>ys(?;OtBup8?A3G7H!E+?#hvQ zDb*z9rrW#W)aT3LQIU_gYp&ka@87`bk+prN_>0rVebL;XJk~j1-0`|fRBV}J{-6C)U!$I~Z~fITls=VLlyBFg zL%#DQf7|dXa;DAa^Sj*jbgA{xm-1d*3+EelIYr#@ai6ey-Sg#}wccM-z1e$a*WH($ z$!3S8UuNX*VQq-3Z;CW$s=KdPkfD_L^ohLt`rN-S&Wi8T&OG#IUQ)_|6|2-*`WCB9 z)>Hb*w7P@Q?q2=sv*E8-iDzEkwJhjqOx&~&r`>}3gm+yqf5G(T?6a)p3|E`Ewf;oU zR!Q0C&UyP?h3G!3uJjVGZ5Jn$n@K&qn{t#r&Gyf6p?QWO-wlfVEXx-*d3wcq_Brxy z-2cSe(K27D+^)jFMef#n4zDW{d44dhi(Kpdfxy84?(&8;@_*tc~elWw@Tmt|f379aibL=BHI zTl3L#LU952g8gnYhQ2M_?RN1-8?(tmU31&EFiR zbuD!iZqW9)tBaOI!m9JJy!fHtbD)w1W&Qfi7R3OZ~yyUO6u{8^*erxxovrU z_Sf%C?X!*tu9x1k;_;p@AyemEz4SD?X5&Yzm-ZhGuO8bp&BrhH)}ff2`VQ}I<|r|= z&tCZ9dvwLMId)T7ckg;!c!SHV>EF{$zn6Ut@;;N3`p%@-dwnT0OTx4I`AgbPT#@*6 zx#V4e@kcJnR=%&!O^zJTP2c$cdZNNE*=Ud?V8ruq>p_W|n`835c^2-QTK!^y&844z zHcj&4T5h%Q)8r!_FBhK|F?!ncRX$=OmuoO<=Ksk)O)7gE-iud;>+!#-l@>ZIoVBVV z`|8(SsfTX7DeX9t$?`)xz(n5k&)VP5`nt;ad9J^S6DVAwdz$Hw?<1#)9bJL4=l-Xk zKm9h;m}y%K-}627`%bcLHa`}8Zbf2{->h|owLNS9ZK^xY{APNb$a z0=LCIyA`=3zF<~dHlJmDIpfP)Z?AmpIXYYLOrg-;rzL&s7%W~pPHk51?mW~ugJJ1^ ziTie4?>`-G5joXzrR(_g8)5-9XVcOjUgl$!$d~Rbb^36P^VRq7PbwYy^iRI`d^i1x z^kKD~Q|$M>wuw7%NT{~rf#im(@-&FrLXvHnx{Lu8FNzrGRUxwlChj-!$*hh1=E} zmr1VDc71r*+WnnDvn2nar#n}CaS-~_tFh}s_s);&oImJ%e*Wl^j%t5OFvEtE3>8hw zJH%tmrC!=k*4j~TQd+YAZmppA=@Q+FJFsTzU1v1nOy;m+52@`820aav&o@GD*W8O>T0vz1GV-(O-c&K zxm#K1YIX5v1#UOnFY#!$*u1xL$J-7Iib@&fvRquh;oCd=;M7H0j(ok{>87z;bnE;o5t%ka-)Xwa z<2|{bF1?r65j_>~cA~D<#ov*E)sGGHxc{w?+s&+3;f?7*Wr zCrzA%R944cmwVAGC1?0HcSgA5+WpVY=!>-6nR5MIknHk`T&aLrul1-B z98B-4)@p6zlS5bJ9{Kad>_$t%t_R0-Hbh_AwYKSm?4!q%d3JSs9QXHm%s46MjPm@<6`$%} z*7HZ1b?ZCCEV5H6s!(1b@NTj~`#%3wIs!Ud79MidzuDU_wlh5BX<>wZp{pgq> zT`P3_8qhWSWw848oju&n?T1w>MfOcFF%Mc38}lXl&^-OE zacgZgInTZ-Rq5Z6{9R9eacP_>*F)b+5momYe9$s^?qj}1s8#z4k zaWz{Lm7{j_%v|oh>E4H;N5L|83Jf=VdVTR*cc{?>2dP8;hu@xe*N@5;njEftv}sY> zf>+#zPK(aiN10TrN?j{Eva;;H50*y3(Gzbe662QO0-Q zuIR)qNfymU@h_H7O;yq25sTBf-r}>|!9sWSP8)+yC+E2_uAg{N%4gN_Rq4+(m$Clt zJGb@8;ORG4O}Q_H<4%YZXm>-sv)SmRlX=Ep}IzPehgz|v#hodB<6 zv+oP%NiLXpz+)M|!_ISJv5dZ3&13(4NL%T#V7_-$^MjJ(e@c3?7Oe3w)|&S|bY4w@ z7qit?qkvs{YfTd@TusAQs`rT8JF@1+doy{Hi4P2UHz<9}4GumRvQ5XC-EI1cmGar= zZp~~7eU|<+mHEMj99tH@Cp`SI)*TtS%^cI_2FK-cD*h9y#E%vGavc$QEP4T zf@Ry*r&Mou5qhP2DbO~U(Ob3q_nuY7AMDIde7P+7ebt%?x0&r4=FgD7cl7MGmp=1F zd^&CYr%c;totZnYN!IPT#=mtJ&P;XrDRy%98?VyshVnMz`IqwkZrHKszn})g^UQN) zF%S0c==dwp6!6PhzN|daZ$DqD+aWg1$OAWv8}5J5DqWZ*sC?11zV3Uz$1kQSUl+f; zv&C!ClSgga?0*`)4&&Z1v)6CW&gm>>S@#QN*L;*;&*Sc2Zv7~$LjUX9&UZdXu9t>v zmOWiCuZ2_m!=``JZ-qP)H*%El*kQXkR4#Gqmo(Xe%&P($RZcJP`su&p<^N!Nqu(~# z-rPnY38aPPFQ@MYo*8yTqLd9Srl%UD+Rex6#w*M)lm?R>5k)t>#B{ z1zy@Ru@!Wm&|oP{SkxT;Y|h2tgMX%l)O37vOI*%(OW*TVN!MG>V`g2e<{T8M>AIrH z%E%zJ|Eb|eiKq5Kca_sDDy%LjGk^0iczrMW(5iiPjuv<8<~^LT-g8TmKy7Yr+U|8) zM>CX8Uiq}i;zPJox!@0>J@1uFZ7y&0@t@FWdgwvjipxi$Hr5{Ho}6$a-lKYT%O7Qi zkhLo_?|j&Ni<70q<^LQZtLv(_eRevmnD z-3+Z^b8X(YNkh=q`qOD?@$b!c?H4}l`ARDp%=VvFf8fP$p$#n2r>~@TGUx;p^)Szy zcf9iU-V(pq$Fm+T{h7A^rRKVtb$3Gacv+tclqYpnw}>=FeQEL4m!7i9-i!b7o(r?u zs?&DWPWU~MspU3jl*~(6^CubkN1QuTBEB@-t}m;auvTlI<)qK|XXLG0bRv73?z+>H z^%Itd{a#@j_*jp_;PKMbi(3m9_TP%Rv;472sekal<9Vu~u2U}B^j{2K;cdCTm~okE zk?-x-=e`xnzh8P$(%P2A=5&AG?rZ-9)o)+Poe;XgG;qI8iSDit-|CM}^^)6u3u;Wd z&@q+q$?Pq)I-E5&rqkH>_a*HP%c-9q;qu0?HggV3+P#lgt}PWlCUR!Y_9C9lw+zP< zFNbA(-!P;6j9^-_>a!KkICUPJ+O%f=Gq3p?R(EQ&vs!mf70P?yHh;hIJcAz>w=~53 zFBBKZWwcuGa6a$Nmu)k3ixi}Fwn$G87HsOyn4?aF3!B{{`$tt zCm&duC2N<~GNqiVmw)s=Pcu|^`EAXu-Cw?zbzHO*HaYudwjE2ty0!}4>yQ6waI9bb zSm<`LFUwS|1(Tkublues{K1hkV{_PcrdfuphfkV3X8W%`q5ruXdrYH>-SRIL`g>3O zcW9b;$MNv5n@fJ}ZAv@H$(^@u{b${D^)HG479Q+L*WcB&;P$FH(E&&A1HQ72`iyW{Wd=}K9<>9_xU6I+=tO<~6}?W`|kSB7`E zRsXzvd`;K^ZJn*Nf8D+Bd`)(T>piolnK5z4CAFH$HcboXFuWRh;Q#uae{=G~f{qDI zzO_I;{cM;{{fb9>rPghH#1}Tzo*~J9+EZVPB_7#EOSj(Ia<^+IZ)Mb#Li@XaFWNk> zTw2AZ{p>`jb*}MM`H=W%o`nxnTK`$4T-;hvUD07t_Q|T~Nv-5Z)9x?Je^@`0wT!u$ zCvPy(d}_p<>8i&6f)$efe^?$Ib#;Do!H1a7>igEmF8XuXS?_P-S?%!ax*5Ld8;P=s71P!L2}vFPv4r)t!zr%-t@nA z>W+6}I<`4mZKhg0>I^h}W1D`GU&r9A!!om3p$VFgJ7X-_nnIqt_y>QDV5m>;sJA`* z`X(>mhjr=lcD8rQ*}tm(F2KT*1`Vx5GOk||$?#6`vJ%Bk*^FV+_`^UY(NlRo95U14;rS*fDBqu_#;M0<_E z|3z{8wcc%y6tE3ePxUN1`|z?e_dKr`4WDx)cwLqstrs}+Pc?PxrOn5?Z=6HJ#Bm0Hre%hcGl(l z1wSX)s9(KP_2g;V#^e8XU$U8a;Qt?+><4>iPMp2c(^pwW^yIJK30t^xXGvX1nX!4z zlX(loJ&P|ac7MFW&?w`Yd4y~F-;WFHGLO#6d|`I%+GVGMp4lbS9&4NtRa(&O`E<84 zf4_cLW_$ko`Ln+-zB+Bso&8&8i%mFK_GGd`(9(N>f8(o-0_#gzOZ_&dKl2YeYQ4@b z$nV2`7nZxnXTJlXVxcsg(+vLUxUw{aCXUd_myZykB+dtIw?86z`dGxT8ln?%z6N zt%slUH&;7J%CemK8FTQ!lO-Ht$KuXt%lUcnS$uyNSTOfzzV7jF83qzFjbSajmPRyq@@eW@-$i+fiU;zKd_J zmCHKTBRY+~Z#J<%f7tqVuCCuk!?IGvw$lAy?#d{d9m(9M8q6WOyJvL;Ls??Aw)mnl z&g^-o#8y6VXOL9)Y3#YG=Oz;;^)_?-X3}SI#>8N9nwGk}JhN+Nwpk;qJa1Mjy&a`x0ke@vXB?Cw=quA-@n-U%6EfIt#0=Y)y>CQ)GV1M8T%-QZDTOH z^~CIn{frqs*8RJ)wa>2e<6@RR;^0#}Y2S^hUCsgDww(R+?D4Abw9L(jhp~3&cHCas zF!|ysp1iG3<@hc|Nx#3j@_44)g2l?oC!P5Zp1%;?ZM%VGQqiOTS$Y0fCL{;H2}sXK`g=DFtVxS$>0c4=S7lJEDvET0zCQxqZf zFzJNN_j8|))yjoge}BNwd|GUi?$#O09rCtBt(rQem&w<6amUq^E4^RprkQmLT?^T~ z&!TntSB_5>rUEN@Gc!-mpL*c<`mp;23STTvO34Qt^Wgk0bR|1ub*BF1dZ%SmIaEb+ zomqOG?mJqt=I@uhzwRv#Ve{@YJldBqFSu^yI(fEV8cAih)K;u|7$Tuzon`jytG4eR z?q{I|6O(UkPZoQ>KI)PJDX3s`Pl@_u~nYQ%qXQ>ua+%#p;{sZDNZ(7}8kq+o$T& z?Bt0Bd};cJCH~30J|Yv4*+;Zh zNF2WR!r3UNNuoJ;uZ&7O_bY*H_a`g$eUdB}r~RGem{nz_GuQ3un+Nwg&0q2Gw=Y#) zayt0bCrL%AKLzfR+PPr|A1!#Ge9LUvjMwLX-+H^Z`?B5Z_9iyRC!$;L|6kwuvE|s! z3+g9&R{l*0D%jI@^#O0*q}J$=Jh}FyfVqz)BL2l}oTRbuOW7`t-YHk>_t-ySG5fp0 zTFmmbLdcWffs5Z-9?ac-l~qVAP%c;*^zIm9uV_&6)Iuh40z7)n2OvDyokhER(YH28U#?cL2?vBuK-BUk@j?-c5ye%IfBqr!K$TUn1+ zJIz`<)%0nAs??j>lYBvKvwjq~)~_kH3x2WcLE-b8^R3j1%l^d22CJ8Sy?KDQrbRHk z{^)(XoR_BWA3O|xS5*>J)zR$z<+_=-*y>!i0#TQJpExJKnf}Me)KpQC%_97z!O~y* z7Oy+pvVVU3oDMFXmIom=x~t=&D#HBsr{{9rKIR@bd0uI3@XGCltGLw@x~>$2_E}7R zqAzzo{lLG)Q;k<8zA<29n4#aSV>F{|!f7p+-*@YTGL*kFPF}&h?DW2?s@{!7XP4~z zGgV(A^|I#QGS}OCzl1mke%S5$F8Z~M>C%;}4v1&RKYHNsi!EyVhqG65F5_Bg z5_a~J2frP^4I8tbpjv*|YfdfM{4zJ$b5r>R?wZ(MJDClODY*QJk{y zbn}@B%X^QdoR+U;=kV)^dwEx4e`G&%^ZltYmqfECY@gN^y25_)pLf1ySw1PNU0$fh z%&MPJFR34;@ctW{XvlW1)VSrV`Nb@j*dJsnHe{0EzT3&vf6i>)Qu)HG9;<(G^}8!VMs-~ZzBr~Y~k-DK%YA18i48QeQn&COD@W%k@aucgM8 zXGDB5%M3CD{_okb>ZZ8z1BgE>K7?r}FlVp0 zyT`FN=dA0udp56%j0(@4srX;JXBBhF&(wa6-uP9wI&2u`Y;3%{=foA2j6GlWJ(Xen z7PjgBtLsZkLOv%;9=N@8Qmmu!%&lR*59N-yf1L5KUX_=v?TPpLtaXVKww^fgX5H^N zrXq=g=l}TD?fE`Yc!I#OKiang|1hO}UM~MmrS}Za%190KR9BrZTjy1DWjY6Wz2Z`R z<7U{Y`t0?lq&oL}!7zn9bN6?ShW)#GMBhKH|2TiyJiD;yqU)hnV!~I0XWV{rjW>De z)I{T6w)eai)zS`HU!OfnxU8T)vGqW1olI1#j&uBp&>Ue;#br9;tu8%E`bkYXBIV)s ztJdAx_=|JV$`vs!fhqNumRn!iE*2}}ynZQ9yJW(l+7vQA5=Em+$SRw-YcC%5A9 z&ZG0Zx*27z_wDR^->lCSW~i^-@HSV{;wfWHlYZ0Q8;1jX4|2L*kzMeD|4M&QGs|<2 z-S2-~X4B=I^?Q!;{PO<~*QM_Jeno!8YXzMNLD?VUzfW=JGWnB!m!tS;?hn=vYp3fi zH<8@m%5W$3zctIRLa}P4(EIQEOrP&_Kj5EukLS70bTOX;>{~61zL-8T_49BRV_f5O zSH+_AKZk60ad%2r&J(G=PscZ#vmU$F5RPIWn zYnN7iUBt9z>mOCInYU`0uKZtLlzQAST5sFywJ8c``n`&06!`q$&Tj;#L2JD=g<-Iq0FcJgwxW4K9D5eJpnTUKjGh@%2%jgq1~_E89&fnpVq8NF?(uxh0>YXw-T8A-jmi z)1xbmWUT)3{c|{5ExX&#tu1Q8UI*v1muAZpZV^0xQu2bj%EEn%Ulxj{XbE!4B<S>PhnX9 zLF~fZnyd#2EzR<+uNxQfEaN_+Yil~$cD-KwpJVb~lV?^JJG7|Gb(o#{F7;GITVCY_ zSMe!gEobgtJC~(4$F8y7;J#VXaUSbbXQ^!S^T}6h>;IXZJexjIAhRr7Y;t>a^X&kI zKL4O6K`~5u{99)qHoCLzd+4)8i=G`8?%uWJMaSH!?={}sx9~gDb1Pu2@!qWe?ajNC zG}Qklna|#NBuU%q{G*?Ho-yd`uRba=qpC3Zfo$l)oIf)b&tX4ccz)MayB*ra(>8Bf zH$BBGDq^j0SWV9L>3^OCPr0yrQe)=ReXByZpEsDlhTS}N#t{t#=5v}-{(o+U9{PS( z^NLlSL*|Z$)}Er4d^Qpa^((t|ndJ38O|)VuvouNk#aS79gK@!ZIg#QkFMQ)}^JV^< zRhoFB$AinlcaLvZZg7%NyXC+8|GS5K-&_xUZ0336fTibO%LKReRjGv+ z3J>;#Jp56w{yc)i>G)H5-i386)hli|?pc4i@oUG9W6d`@%3rXVW$|bJP3^8UmhwFF zYSLocI{R4e!`Dt7m?~ahwf}dFgl+SD#V;K3k)Pi*a~7K)DHMuyJh#>~expat_g#H6 zLmpIX>=AIgw5TyF zPRjOKFLYSt-{0P49g@{jYVq{P?gQr2liYSbPPR%j?y^|hC7@z{^MK8S)0qOt3f-@{ zI{s_bs2_G41}{5u>vzxRjN{=Ix*`z-$n zyXE_{4U3h8o@*QhUH|tw{N!0R@3CCtCt(S@P20|2?|2no+T*uWW$)~B z@iSIc-wE`QG0~e=$eO)0D z@ps-mpZQ^tszn#pIP5LYn!)jlyS^PO&LYU0qT^g~1I@x1*{n2q&Rq{Xid{=$)AlbZ>(Ihah=TmjUjre zXa4&C@r@3nX5^stp$&elo31+%4_(`0mG3d)n{DX&IFz zUaXT&xV=niv0srff5vwo9_6^8Szo;(`E+LU#y0#9Oyt|#xsy}Hvbc|DhLX)ffe$`Q zo?U%sT@%kAvm!&S?$oWv)2(aw-D&hpyn4JKYHyKdV8*Gf0WW?ocv)AHIl1cW43&)K zY3mf!X9#SoQHry8H{+LevDWn-<~9#{su#G zkNJGt^Yg3|yPiEsl;7l#AX@otpI3Q0OLuO_3Uc1@`K=F%1iuMfERr}e!%cwI^HV_Q$qA3oTFlmdKB2$%zsd15 z&yWdL{7-_9pYCv2sgkwkLy?bW*=;F@FWzQ0ehvas5bW=1>2g`^7L>Y1`37UrUm$CLVY@ zcke;F$}81vMnA2i=Fh)=QNHSpqhW5ATBlC-l{j723XAXjmwo=MIu<(T-GP?9`-G|< zOwB(ntn~b#Lc-z;AEE4eedJ<2eo`G*1!FDZ&8!q+;ifL zI(sCQJ{f+~d7b_0+n-6RbL$!etq7pV|_T!=AYfSvs>@kH3sRaekd$ri+^)>WATaW z%fu@RH~LQco8-68F@iv_+-xeHw=zeGWsmLGK!=D?yz9PKt{Beh6oa}`?A;GB~ zpZW8@GbG;3WZ~QPZF#W7*5n1hz1H|`{T>(J_bg?J+v)aDk)wHK*_E@HS$fCO0n(WcH}g>wPAX{Wi|-u5Cx= z^w+It=ANIuq1rX3Kydk=9oIknH3{w6xpMzhe=f(Usqr(aHz~OMS^In?lg*`<1~&{A zIhbqpy6U7p(p)a2%G+bQ+@dDvQZ27EB09X%i5m5^?>+- zC0*NJI@{jh4G_0-vvpg=zt>$*YUcO8hYE2&t0MSLKRLYQng2UO7PaN8qoo%rDcd_t zZWY?cv$)S9C1UZUwe07UTZ12dc>nv}k&{oahwQ%Vt-5>pTIPwmUzmfnB~CVeDC%#{ zGizSead*p>4y)-~zG%LlVg2w{zw6H8e=K?TxgWVJN3bV;sCwR&(Ec}Bd6wja`F-Zj z2H(yZiD*5GY__mow&`g2f_qO=ZuL~=YFSiF(pz+1te9aFvT9@FJo(j`XOG6( zX7*VcCI4=Do-BV=T&DNNol_FaISn>V5Vho7zF4&;-FbhKs#9j*alVxrUuK47&Nutu zC!EW4yG;D*DeZkz6mPeG{`_^e?M$^7W~UzZs#W%W=ghZPSa#xu`TR`oXUiYE^B5Tm zuJw5ReO1$@i#t2C$}X+)RbKdY>;IP;r!1%an6Z8Fv5e)m{+`Ko>{_DRe74>0c*a$% zGIRasD9csLisnr0U%eh`%^`m-wSpc=$||A+WOq{ z)ORw1ZqC+QP5HNUoVm75vf^{0+REJ7l{w$%or`^C`qQVT?f68KBjL}RXHVL5{EwBy z**=Z{eqQ#Y22*aOv`!bE_qS5-_x^A0+#H~l!{*Sq8iw;s-_+npa>X4UG`^8Di) z#+={Q=Q9fbbML#HJh`FIynMFG7vVe+KHJv4mb`&HF)`Qulx#k6M>@+NKj!;1+Vibh z_y4oLhgHg6CGMA9x$4#|KeNfX2`NW;Vzy6m~*axU#*5zGyoA+hu2HhaC_=^yU? zG+cc;CF|Trv|z zOk17j=o|dCdd#%fmm!Z=>}XL{txn2Si`x2}3f<^cU0f?CFr6!Ly&A^8>d~(n#^sqF zITE+N&C?HzHGJY*c`}3Z=Fc@=Q=Z(@*?Qu+@_f6nQ!yVdIf`9~;8<_|Cw3d7kz3kR z2i7$Q#WF*^w<(sWU3Nd^s=OeZapr@ST@y6p4*yfXRF(26P&r|?Wn0s1r#0u5mFMm7 z?w2+Ga{s=(>)K?^99h@Z0q^7U|MzI$Ui@C9>zBrwdoS)=g}A*~Kd-gx$nrQ}Iit^vEva94+E3*_SscpkzLlqqjaev#S<6SWAS6!t*j+_=p(gYGMU{Fo zrdJrwBusv-DdQLTYPR7y;qOeZRAxI}Ec3sZ8&=D%@<7o!o=D0kv&cx9$;jdO)}cTCirb)diQ@^$MK;!9Op zUG-IunmiP2c%Hm0dd2?V6WQH6*Vt6qa&4D=c`+<^S1Fy5Ya%yIOuL&yRC;*)+A{ESC6}o~ZxO{i>;*<;==cS(6PfO3#~p z>F>LpYHQmz6&&dPvs%05Q~r+DteTf~=lpi3Reec$a?7$zmsS4i_8aCa_jpJo-|VUt z=I021q~l;RG2Q)aqKMr5REurjAB+1IJAKIroE7y>NWxm?#L`!rYt|mKKBwVWJ*Amb z({_Ex<-pYRsC%E*zuoGdtr`8p;gIdcIv)S|8yOehJ1O&VZI!YTMzb4#-PYFI0yC}(Tx`0(MvCpw%Zk>6ax-f7&JeqhGi$SU;4hir3D*|5vtpGR7gXIUzB^YqSXnjfYs$Juw5Tk; zIFx^yvQ&7_&vyrTrZmKUb~qvTPCk5}YDTF~*$d_^tZzfByV~_RxlHxX+Q@G||H{!W z*unFM`J4QMon|c#^{JgVS8SK6e#(4x3%hRK`7>Qlt7bFL`p6eKbM;@NGxKK2YW{Nd zzL>kVQenQ6Xm+1qji}AiYk{62Qy$f9-~I0L7A6(10Lj&o-+Ujp?t8~Rw>z@A<_6oc^c%!dxr3Q`>tty0Y2bJ))BQ{I=`mzw#e=*^|9j z9$LS~uU=)N!u5OpTFboZ>Rhsx?E7`iV&&2AEdQ!}rf&34t$BX_llb)hmwMVMA_-kV zA8xHFefMF0gp;EuhyA6P28$;}y=88OmUZ8kM}K@E`t?Nlfo}x@DT|rZ%y`5fFs86v z51i?6w0%boqjVYH(d%0r*r&(87CzJ+aqr!x-zQfz-`x__x}DFU?<3%4vlko_X_bvkWp#Tjb|elxaoR|PS`8H=WTwKUOL$y zr(HG|Y*^dj*BiF~HAA|3(%EF2{jLQP{0(zoaGle!Kf5usBZ5&otV>U7)gvX|SqtW= ziA)iaNxa{8&^&zlvQP6KDGL3)JGoea^N&AZ0-a=i1v^q8-duwue6FweFZ% zp8jd$gi>j+!OQliPrWd)jTx-@e_#bed&r&=uc}BZupp?<62wA)7 zc~P4g&-|L#(6#JxQtY=Lb0bM9w5Oz{5QP#%79 zZQmrrKkxOd>TGTtx*pMWMy$5zh02uOdlfU^>$7U6-KqWbN=z!!&FLIBFIQ<>r`9v)_`v&X2>Cy`?u`m7E+Ev@Qxu0p*&DFK$#$vj2 zTmOGct6j36RXXqJ2a$lV8{E@YvVHcrTl0s1Mtfsu!mUZ01ch9jW*w%m`DL%?7T2wM;j-*}x|KF@g%v*WpMW%UWv5Ls0Wi5@V z6*qRy+37UB{oXr+Sn_5D_cO=;cV#RNd^_*9FQwxL z%Tpn9QJH_04wpOT6w9+;lM%L3`!P}A=b;t0G7rv7HU59nW>&uJ3>&sm)!qASUwyGS z{P(i8zEIo~ANwDxzkGSaWxKxL$Zd7$?T{SBx)PRGT$9dwC|Ow}jK7PDIkU-~`O5MxIH+&|&#E)~3gr`5Z0?AQ z*qdv>4pBH%vzIAXhX4p$!M zvL+pH|GZ;|bLLcz6=J>V?R$lIH>o`BO?)r2tAgn)6ZhY~d@G z;wbyLc;=AX)#k{X=5_}14^3v&)@MGS8tkPvk>ka$)@^FS zqD8hFcjWIg?$*oEnpxN0aAxb``Dr21a~G7U+>Y$FQ@>Xl^`U&Wrttpg?%)-+(-yGJ z5?c~9anpWYuj_yI8gKQPRg-Y*?2Nb@w{6`H_kS#|Iv{50;oX$ zR5V0jopyJq!7HcidPOH`lruJoF&^UZDQK5;$c_NIWK8iSw0F%dg^-B!*DemK*^ zDLP8P?SP(yz@K%?Id4hWrZm57^Zh%GcT(@?+>DISZmFG81%QkfQ=h>dQ{`gAfZEmtJ-gB1<;-tZei!RE>b5^I6Z2ux)*30($@jj-%QHgI~Pp!W+%`j=hiOIFx zWwCxP-ig&ye#{c@@6D}!wr&3T%-y$*v`pq4ea4u!@WstZip$gr-DkL8oMxBlGV|dMuol$hC`5frqhA=AHQ5J#ydPd#u|p z%$2IbSS7do{Kz`L+4e>JRNsvqElE_}7OqY&$sl$(?uWkJcFYN#>rt zb1Qm|PUv#kRjd+*s}d79&hSRP{^9d1rz`Qspy`2Qqc z{9DuZ=@&vWVscim3vj)q8vXB1!1JQ}H%etQmW!3C=kr@SUVHuQa%6`AD_2!iib%)| zPiMF>t%i}m)z?OYtBC%ZL~qxQ=5=u={wM0czVn0D!^ zOXlizErQE7UR>|7aPs=yCyZBArMrjPKkr|4KI~IzX;Ai`1?O&;WfUM1VRQJQ<- z;LF`>4f}q*Xw?tN&ayxFoac62+x2@Vd6Iq@{8}m7ULK=zzd4y>hJbw8qw2QBUuOIY zkiBnwkKtA3`n!Bt_s{y4&+%BlWPR)_P0zV$rCr(j6T?+MOydvEm1Y%>Ikf%F%GnQ& zB?P}YE9g7vQ-|{1xX(o?l~-q#E^EHG{JTL3gR(~TRn~=0FJ8u#&9<^#TCdps^-P42 z(>i4Q)xAru?m2bCE#RR&>+5$nr6QHDRO{#NoMsbry5{Ix zojH0lI?66>YF~IuJ=r#}Ci8vNlNr@-l-ZbH>|FOr?bo`$Up7gu`x5p2ShUpy-IW2) zHHE@dw(7`#uXYkGd~PGn`;%+o(uLbUS-2J?WLoaAVv(-gy889hJ(FL~n|&lyE&o-b z9jpIM^}t&JXBMn(*tPLoxuS!yYtjAxCT}A)3ILpO1tKp7cc6*K6mq%dtv*&H*752a@qadqnl?$PVAei6};bZzdFxZSI$SR zxfNx7FMmgywG}L6{JWvt;`@`g-?}Hq-Cn-pXt82gM||wN%@ViDPq|ngTN-1rbNh@m zS(YY_BeH7q>+ap)2{M%GW@p`e>ii}lS>tEFs!u=K!ENXG=VDRQaXF!~%ICgOhM-er_p2UB@eA0Gg@pYjA!IGTk%b*{@Y2Z z!)Jvu-zF@-Tsc{2JuiUVx zN5#jciSNOYN!;NFEBNA4Hg03ScjCgX**x1rSAU(Z&F2tv=~Atr-}*jj4OPV>ojLQ@ zmA!c-kj?g*NBrrsJ?C!ONp0~zxEwjWM|W)wB?>Rt)Y$Sw(|2*h(w*0X-3>GD z+WO8v&$3nNhV`0hb*h18GHUB~3GbI=pEmFL2Adg1O8@j4rmb6VGUMKk{{}~vJ3$!+mr>FLUJtk+RxuSFk8;LReq817v~%= zw__y?)*lNd`FG6{w3peW{oKHD!GGTG=VV>u{24hvw?8+tUpe=mbJj_Tj`CpTtvfy@ zFWPImDQ@xdY~xnX;td`zzfAifI4#gqz%cF6nfAlaR4gZO@lL%UTbT6WUHyzfp6F>jFuzkAc zWge&)zRAA2cVQ`e!T-1C^bV6>#KF-li&ViA7{ZgZ;S7kzn-Yh_Uucr*v99~8dbi^ z-hW)|ZGZ3m+p2xBJaT4!_m8W){ri6AK>dvS-S;H-_-Fk*#w#MZU1F(w@U}~jmso!h zW?Ye9nsKv=WFR3&OhooV@~zdBhCiaeKN5V zs&_2rczia@j_IZPOx2ktC4MQV+toX6ol3pC!aMs<-X9ldX@|>2w=SqmmD2pWcG8TB z17`eF3soj8Y}&Fo-ikTy((fA<_ZI7l-cQ?l-P`tFrDa`J*`EKgGyX1?H?Oe%C@HYt zb?4-@hR<)j^GvPP=6sC3&-OV`NE7rHXBKwP?I4f}<^%j_z6&j|eCFl5=FA?ca;e9s9+gSN1L z{+aBdCLhXYwwwxdWX-sF*^x&oJaw<?{`cWS&hizuMVXr0|}>`0)lo!#wj0UbD~nMvukr6+B#IW~Qrio>NPq;koV) zNrA95*3%cxw1v)gKKSDzZ?fC@Zo`XV%bAYfP3-wEzoYkn0?&`4(PrrwupCNl4+3HW&OTlcJq^PVmGtv-WGw{%NoZGP>;D&G$- zC;vKcvQ}l~J5}HRRU}>JKaHQZDpSzLU*YL~{wkI!w|TX$4`T)U^lB2%td*V>48UduF< zga48?cP}${mj9bI%|@lh@AP?{ZRc-uxaHhGkic{3ne&SeiUn=_JESUkh3#b@y!GcU z|9JZ5Bkm5~8LJI%^a(REct_2v;!iq+wS_ z!pgRZTREDa&t!0J$Y}iPcHg_-*{w3{`YOBin`W#&^CE50XBV^Xc+NA&Lp?0>LQBgd zr-%Oh=KuJ3Kx<0YgJ1V@wf7ebwry07P0!=r<vT-$Z!P8m~p+m{!$ItL@8Zoisia9nX;)sdO^WzMX$?E5tFq_~Tq zqp6GXN|8O!g^Z@0S?qOg*2#jV98e^=CuD!=_mX<5~*0<<42zs@9r+AM%@6&6~m8a_7oV@L{zNXy)5!aos{ZAcv$aG_K zO6?^t^9zfNOGQ@l?u_}e{9~Gi8{cx)*TMSFr*rhY$nuu?d|Jy=Zr7~06?d7Y&j>3I zPRUBPZQc^XYhf?QV-+T?ng1rXgV*)cPPK)OM>1X{tzEI?qQIfvs8g%%uQE*B)Kq-7 z@yPRp?+h(jX57=a+C8{kbcWgLhswN$MICDz-+z4gHov-Wx%?yL-%`Ib7avb{KUo>5 ztGPkzqno(enF4h|vz;>yN-|ZKtlIi%|LcuE+0U)FTW$SRN^WVgpkMZb*O}%^g;AUiDKTbI&`*Cp<@fs`?!DsQ&Q%qEGO- z6D*oP=7^Ows+ruB&AlF|QOEXM!L>1V#r>p}bMB3RH^QF6^8`pEU ze*JT!li@>0{(70)jB|W>{9@FFx3uz$32g{cm~>)(>k0noZyOeQn0DH=X~}CO+Xc$A zpTDMOl)fuq$My`}XY04B9$$S^=9~1gUP0A&rEMp^^=_&ReCij>W775iYl-0^=j^r} z-PhD|<5yHZJ+sP~@k5ka>c1H_ey?A9dY$^Az9;&ZZ}rho>75r2=N;YallI*+ecwK_ z<$Yj=@A_Pmd^dN_%n}70xEdAB}2NucjaIo&8H=haS`RqVu!QulecpN+mmQQNXoZl0^ zskep~-C4tC8~MC&yUNEYnLnl*+`gQ!h*h)s@?Ie^z6vvLon5S4KBY12 z)j@%y9Q|KnmmWCuF(tC}LcXkBe5=%ph1?U{SKLaBT`_U9;ZEbMee0QVWhEtm#tkE*D zITd%OtS&QoQ?!j?-kRgQS0uG2=`qSjXD~hA^Eoss_TN35R-rf}LC)?2!p)~Q_E<|Y zoZo9={;B12=j2O=g`I?NUVWXkzH8ycmV&<=dp+L>to>?ObZp8bKlX{=CTQMcn}0w? zTT^PauT;o{9gU}-o1eP9pLKWVA8&KMA`c@2saxk-3rc#wWVm+;aO@WO-E3d;D&+O% zT+1CdV^V7Kr%g>YVP&^qV_~!Jb?S{)d%INf)}zfXyTaqvEmE9Qwfs=U9nL(T)B4XI zEEU@EirweS-wE;-6X$Gy9GMN9KnInm72GzNRTvie0Z-lF0eN@X_gVYkT3%yk}pZ-uS`L zKv#YC!Bd>erT4D1ZO(IiD7IGlg~R0KcPIQYv##|FImDw9!C=Jrb_0j#R_(cVmptz+ zOj))_@}in_^sFg)?=$yEfBq!F@<6b5tPj}LfkcIlGqS<^4#6dGBQEgtQw5hN{_ z<-Bd%sn(+s4vcAPE2@v5x>~csdsg<=M$?Ng&G$d7*!EDTK0*cphit?FL{{F9J_pzwS9=~Ll%jC{-yTx(ikz%r?sJ&%mR9SMO z@5#;Qe@9o8FT1thQ`P6j|7(4l=c+9DW*K5VQ)Nd%S@ z&z$$xoA5oax9}`}P*4)Lc#X)S`D$rLR{mKSQl)fOW&g)to*U1Kv@pEfl40jNW8LjP z?N7o`}rD)e{D zCC}m6)?qr!y6w2&^hGg>mk(vDE}xWC!}`AI@99?y1pbH2`rNBf8qUr7^w~}2w+pqD z)ma{F&Dmo7_I6rf==IiBU+GXG3#c=!SgqM z?EHQDC3DHaJK;-1+{y$bZr`}}srGF|R6*4A;Jcf6nls-fvs^1Ye%WwWfS`wgReCh< z>WK<*Ju?-w3pn;X@!WK3!KR9d!uu<|8p9G|jLTWM1D3Iv`AvBj7Ru!4XLV^w$Ti-S z1-voOw#d(0+_~h2V8Vj7hrb?7IA(p|4p)Aj%*xq+r!4Jp`O6l)>?N=AZEl;ljc!#= zAMZ{%&bz_tdnEIvO$#i($FSs??yR>f=$>>Z{LaSn)0*zdr%P|S!geR*bXw$Vj|6j8 z`2^ml8pSIUgS+2*~?Y!!cUh6j5d$&*fatN}dDYKb`1v5M`Tlv~~YwF#< zW+!5dCv|g~@JkL3T+zu@kuXeu5dDmX{^P~2oC-TQz_vB`I`z-C3OT2O>ecA<4NfGs!8li20UwTWD`$DpdZ&r4<>TP;o&N-`E zy<*?}mdf@O!tu9$IiHx~^pRyUR3a>f+ z-!EEO?98V%`W{+m%GFO@w%dHo=1|t!VBN|`)_q#{F0Sxdn3a+`W9Db3S#1nDYRhAV zziBJ*D%!`_oVh6{x9nTqZ?#>2*Xn#WpLjpb;K1R>b{szz-(4`ZGQ!KqUWYZ#hWC=@ zZ0h%} zKM8t#basP?w)4@dd7bNis#&{SsNk9t{(njNaY@hRUBXX!Q!AdH+wJ4MzG-5P(x$^# z-&WTphFws5YS`O4v1rxXXIpI9c`Vxa zyG&o7n=g9lc>i6o+nT>F@IFB;72S{EKn>JNNvpjN+m3CWl zN8suMZ`JeVRdc^z5bfXFX?Ex$=V84Adps&?(x$GR-qronrQvJnJ>OdCmv3gRl}!#0 zaa{1GRqjsw4$hA4@4fGw+S7dHJ-eLl&ameUr`}q9DVdho|&00Rk*hp=ejE>p9Jagj@|7*M+RXkZJHBVP^ z&BoBKA6K_ty<*&Dcl3QB-`S@@Y4K+mUaq;!7Mt4;@q{<(coS>QKF>uT>?g)1bxafO z5qu={`&0R!ck#aAH&v3WU$V;?%$%xLkt_ErbuHr;!&^6hwdqgUvs}>Y)JK`O&9is9 zL@5M>mH16slKb)bX|eJ(>-L>9>G@-QY3oAi(zPn7am~4Wx6S_l3ea!cs}OZ^v&v0< zd)Y;WS>^AdmQUZ~tIO-YY4VzSzN&`D5xZaQj6J3QEq`0W&e;x2WFD=bdiTZe&4$?m zW@5runf}-O%zuWetS)hXUuGU^+m^H>GwaHh?R$$Ojn#V29B12T{G?J;OUQVZ`0QsQbJ+Ss zqz-TkT(Nps@_*8*M|b{wd^scgt(n`$-j5f8x4Ep>F}lcn^Wyf>&lV2?{EM|V@PuuQ z;=kWocb(@12LblilxX zURnA(V*a|AjEr|qt1WK}E$?6{ov>(L%4t2RNiqgMlrA!#6AZGO$SGr05gcE#%}nUe z0q2(9ZLRz)x7iby3ij^zztnZk!ZQ2(EL*+D`+qHZbX%)s92a*3Q7`WA}e<YNjJ?li)sm%}Fwm;=*!h8kK`L8{0FS7a&=Qnx5bhBGi4Z=evRi}gr zt5(Qqy!I933VNkt!=^XsYSW~!6(!9=zZS@7r*yISHUxeV{r>Pr;EF@HC!Ms=3yW!1 zDtUAB*z4mnl4NQHC9Jz2>stk<`V;H`JNUa?4XdG0A! zn+Ului>c6z_@=yrd$muQrd#TP=IrMl(tFDj?lvC|nKPATdfZP58_2i{%(TUvvL3LvR1R#PhVSZ^=* z&GDd6@Eym+#QXm`bnA|$Me9ysj8fdThfV2u`&C9q()Y&o&SRr zM5TOMEcZNm=;!3`9q2u2-$t#7n_FiV%TIO?`Kct+9r0fN+t*#Is?|1j#d;o|v1Q7x z?+HQG4B-cjtN6XcK3@>;`f}#LW|vNxcWdt#HE^gLxpHg67xT~mL}yIh@NBVXShB3% zgbxoHpG!A3>~73Y({Kx4GpW9dC#}TEIOn(JokJ&-m(O(D&cSzEcWqXq@3XpDPYkN3 ziXDxLaLurII4S$mjeK>>#jH*Hgx2UZhVGikbnB9W+nUljauc34zu-;Ot$F)kp~cjo zU3(h)EgrDVou##Z`Qgd8Pd&O-D#2!+wCZc}a;+1VeWJVqVaZG)Y?To69C0@4Dgk)le79EBoRuycM~- zt$apK+Pn??1?QzB-u28&$ubw6D}K}Ut@^EfkJs{VzG)#Rc#PRuKbTE7@9F0KJ?>jK z9+!}J2L>4}w;}5&lo4bF`B=4L4*kExW_pAt^&2n?j zo1S#PG4uJUQ(>uv^3pQm=lOqa7VTuQzi+*4 zS=^Cw>AU~B+l;sDoMt{_ozk2|xl14CKh)C{KWR`Pw~GD#ABUX8ZDM+@E0Vc4W}jOp z+2xgVCga!SFjFZ@WzL43$?rcJ-)`SHQ*dYE@)Ev`TP(X;ofh{CXxQ1jU%>jh@jZ~e?q=J)K^+}9LyI#hPNb2ar}?z7;gEBiL)OuqF~e!MHz+tkZt zcwagEvZP3$QRTr0uccKVJvnlC96BG5si|U)_htwI&VLjxM*>b?}!S0>&rcArZ!m!F$ zzs`p-Q1ohy)wW4$OsgfTIU)E;#sy%kR`)tx({gpOrmR>D7?R@s$ULCf@o;8e|PRcPEhoZzQ zCuOIs&W>2{^NC^3KBv00mkRUz1h)U%H|bx`A8(1;uuyYH?+^NFU5{k?glt~%v7XkK z3@DfNy;X4YgY(JqMvh)So9Mk;5C8V_{$shQDEdIoBpGdE@r(O2D^hL#yGHPDyUg(J z>u!gpNDa2m?IKb!VF!D^mS$YJ{>8ncHGLUhMVafb+o?=@&U&w(zYV#CzvVBJ<6QQQbNAWSl9i`SEM9jjF>8IF z|FQQ^wu5Tw+M*Oq=NQiokrIY#2j=iQC^|lhYmB?};cL3AM(Q1vCnxW3+Hq`Ew937C zPRswvKYIOa@giCK%f2fMCVw#GsJ1-6qh)oU%X|;c8kaAJYD!H1?cduUmXZBNTTk8m zOpcmljdR+9Lka5Ncbz?_u-bJqBb)T?d!$zKkjxxOYr>=U4 z`F(JM822~ds%6WjKVBkSA+!CvuDw8gV#;;o@=& zXLsCD(_*RM+f_4jBJ;fGi!Oe1X%Pk~ zEPax9`kG0|RhP6wni`wrdxbnB+4;{O{T23H`EN?1~JB)-ZIp$x7Sr-`vP_zihhQVrKU5CnK`! zBrmCF&y)LpYTboT6ZtRv>$@ZL=X6A~nb<$!h^57<)-~*J#W}uC^s$SJPVS0R3X%Pz z>pY!fhdXPwykoJ@rH_wqK8_LS={x^vo^N9Lk%&jK{w=AQ(zz2wPlOb|SZ3)_Wq2mX z?CG1JP5J*;M4pVc@O9fQx$AGYZA0|eS(}_rDZYPn*5+#@t z&UbpoCGM=^XSRM$oqKo5;my+n7i`(ADrdZIyGZ6;yA-2)x8<)q%BWE_vdUtaHu>b@ zdjZ~70r{aD>a*XSt@NG1c_Vb)_u2=a*T{swUal0LBEQ(b=)ckFC%!=)vsc&7O4_4& z>(kQXChODY1a|FIZm2r@{*zkp%h{98-<*6Y%E-Tx&Fo#RQ15hZlNSH0XRRQGodNJH~I+e~2z^{L#YEP;q=gePrGX{zGnA z-r1Le-Tyt3m3C88mR@^k>q7qNo4xZ~m~-WOw$rluafTD`z{_w?`A|9c3|(^>6e zsQD=1s8Dv;7>3_scvp?T2`m0)fyZ6H8O_yl6UfhOdNgVFCcF&Vo zk~YESmB=&8h3Z$Ih{-JNc;{%PZd>|aTVch~Cw>cWx}S<)vTzEcjN1+FN%JjVJLOCi zlehHDe$aSPGWLSNY|%}t-~2bdnN{HLx2?uaYf zGRtC?gu|l`Wz9CBTqzSLUw+455&Aso`_YKlr&IO@in2TUy`FUa+2sTuOXX!h4SRP* zK55v~uadLnHN)}K9b$ftPZfo4T~=B;^_}Xq`Ij2PU$`7T?~{44Y;iB+GM~DR2yOiz z)1O`1D_8zSxWH~x-*2DSKbB;$Ts|dG=5YAF_l@$OK1L}&QZphSKCIuZ`Pw8=QE>0; zavAOkFSI8(XLO%iQ1i=R&g@GU_MQJ*|D4hE^mOT(Nz41}wr}x>WxLg>cT`TGeeR^n zXEj1`S5K;Pu;@29MZf*=ETMCWhJ0bN!MdMX_jkQ(Kfbm9eN4>+?G0-VD+X&GWM3e= zT%YNqU31ed7T*G6&rr{0)dfksX%_R{cX2;I5t8tSLpSfp{1&Ix1y1e)iT}@b%N=R> z{pH4n1F!@d4TZ}HeW@~oSc zkj1e%`_U`AoJeK^74QAslaC6T&0Qxpg;%}w_viOLZUObOjw`tzK6II&RLI3x{>^?x zzO?nc`6rjn=+h0D7uY6uCU1F5_bS;KLtFW?{C;y87Ba{2J-N7%XT$Q2@Hta$+ePE} z7h9jI^wCk}y}#<%)+e+o`*7@^c!1r1&9B3ER$hwcb13+5LO8+byy~p5 zpB3|^g4!ORIqR$Wb^%xT&5h2h_ql0DNdIg${k~uxrwCi-#_X&MMq<YvXAyrxN+kMd>ejw5EO9uj<)+ zdjx7iYOZVuGAlSM_%1hT)4sF?FC@!P*zRxKw=nY=`Aa+vKnvs-F~V+wJa(n=UkrJ z2S?fXWkIiHOwU<}W-AykXIcCESndmpWkvr^rS?B<@{`X?zW#gjFY(Dq;qmv?9VCJa zzO$+2&$zhm-kGS=3~zSFvefggxa{5L@SAm}$%*Ki@Wfg5VRj#9`%icT=%S$ZtFmqq0Bc z!*b=8>hpUmr))Fg)refyBfWINol^1QzZ{asE?wMdv(IVr;S-rtyt^+ap1K}4_fu2* zs(%NveXUQX{K&h?q4jPv=Tpa-j_33aG<;a8oXnNXbk?uj$V{$%&fM!~r=RHjq+|Cv z+*L=g(fm|oRqqz-?0T;dan9z}DYe_?R3y8eE0tYb#NVUORm;tnzmM&7GV`rL-@IW1J<%_F6Z z$VYQ3Za!kSy<(I7CS;@M>NP$Gc32*Gens@;^#{*q=J!e6TQKi+>br~&XREoEZgCId z*{Y@(vf}-UkC*mvU(8Wfihi{g zKWO7)q3oHdtuoWWcVV7iX6kmMEt)SZ(hnH_igR}s`7B)Cvh+vY7v+Uw*D{Zb6lopy z+I8aZGiJ?t(f@kycUHu;PpM?9+$eS6*1t2%zQKM{rzXc-`Q)a+Q*&Y=!|#g{(-t&8 zUc@coD)Mjg+KU-GcWk?L_!qC4uJEnp@$p}`TK+ychd1Wc-v*tI&5c)QMe>D-G(8PH z_v!e_(p8^3@1NZ(bw>A+U(=?a#}>?*t<8P9de!NqX}Tf{Ud-9ccS`Td%${fOBT^R~ zd{}vnMMUJ-N-^C7_fGTgJ`}mMBb})(VfK%}wE5H8x4b#o7HV>L!Tpamx~8XEpX^@v zX41}C>nlw*PdRpO`yZ);{HHd@rE{|FG5l3&cy`HK7G8O?iC1*)SG-^F_ku#7dw$KC z(>dYd%Galz{b9cE!D>mqNAI(gw%adRHN)xn_Rae$zx0GHy4&>L#_7xjfy{|Z-OS<_ zOT4{XmLajSw&X=0qm$wd!<(f+}d9q}t;9kN1=pL+g3 z|HV7T?;=;;vHKFWVj1L~gq@sZrc<ASnV}AtL+ztk)&;J$ZdZUK-)Aq{UlT2s7NjB3HT=8e>o23cN0@k_3vkyD( z`#ZnF;-|IUleSCxCqf^ozw>QoVq{y#b>VsWi50Uf-|s3vA* zzbkAH%hC*AYkolK%z~seqYY<%3B636$ikhn@x9P{zwfTc77Ao!1)VH6tug=aeJTIq zWUt!&+;0urekJTUvAb+>g{8Ka)sX(@H2adTHoKe;ZCNNRkT& za+_IzbFq|M%&9Bs+Z>K6tNeYn`juy;fGz9mn{)EGR=9GDrquiHXia)0Tg!`_$ zYv+HkPWzC!^U3+`;Wtm2t`YQ+dNM)ckz0cGR+myyhl5j}yskArVt4u4q4+yNZ(`iEfD7n6$mdG)6q=rASlv^AFRG+`Hq&?q1q| zz)Uu3q2#5d3~lqzXs%$GopknP_pC<`)^qOBn0`xNiZSxKtEgMamCA+hR`%wddj7F@ z@1&NKg3+BN+1GP-{;XOg(s4s>%e|fPg)dxwuiWTeHF=`#HxKbYIcdg=-@NZv=g+-g zcq8g7*NW0*Y(1O1n}b8XuG+}`yzJoAJzE7ot#7&XZ)(o@gDolFCVz34U$Fa}=-0#S zQ+R6(799%{+Q2UF!rH*TkW6cdRwO{LJXI*7|G`D@*mE|WwvW{N9`g0oBl`rqt zC2I(Ds1=3nDJ?k2o>BaKM58yp$GOr9;o7w7ra++s!UJTP?IM#{c^Q=9{M#u>Jb?K11&u zm(TjNpGrR!*|&r+*qb&_thBFIO%b$uVCw8ZoRYtD+` zFU>zC?-L*-`|?!Bl+tfyZ0i^eTbsQ#ZnQC~o-K|k{9tD&v1IB)wUd9W9Hv!zrwwJ*Gj#S_0Di|N1na?29#nGDmmyR=(B z-mmG<;4xY2#oq;w*T1$~`D~W-`yT6eyOoZI-S~1{^4jr+imUb0X4O9zyp!TD@#ebS zq?22ZS?$vCmgjMdJs$BlhGjzM%D+A-fpPQX>lPhd{-T`WaqgnIdVvlHd}In=U%GpL zW9Pd=g=gpQxEb|nzCum*-bHK;kGDoDyjZk){hSL&Rvd58%rTZ&VEiX+c1P_U|J~-gVmdxlUGE z!Jk!C99LOPRZGZEaA=HwXnH@nG3tQL%@(g~Yh46F?jG5~ujYTG{bTgZPb(@+8s^#9 zPg3D|vPNB8Cs?dZE9dOjw57L%ao1gYcIiBwf(tS?SX!+$b44j<4A> zT|Hn1-@czbHs){sNdCy~TfP4CX-}6k2d1}_%#Pytv~IpsK|9CMiz+KCej6Izv2vVM zdyb>WD(~)_*Izr;{+M4lQsKQ!e3yV=&!LjJpB~CAnV9!+cj!Z_^A!myOueFS?H0!S zIDD~_a(VJ__5Ux6*={WOwC2Z7@dI!7D49Ismtngn7CFVp`(%ZT&BtASAI}A8xUPJ2 zz`uN(oh$c_8pi1#ul;15!mRBQTUYJ3;Ye=-&6b#cwC(Yem%=-rV!zPrIA#(}e3W zt=TqmCl}|6NI&bcR7;3XsV`d!JYE{acM3daoP2G*ered9$N$!f=)U?d z-Y?m4NB*j9+KiS7>lUvTuF8S zvLyPvgsy=3@e7Pge}?JqVQ)X55+DAlCi!o9==1_L*UntdUO_vRByt-SCji@{%%p7SJydf&ON8k>5qL`WS7VyW#a(}2_Nygj z+mmm;HoTCZ;24`z&n@6J@l}M%2iyPBz4;Gk-u?OWOM6uZhfPUR+GEE1tWl{#_KeSu z*(DU;cjRk4%U8{(W5&bv^6}*PoExJTeCIS=`>thy2=}p&Lv8D}?2+_gNo~1gk@4~I zbxo(pI)D4Ob?l~?|a23%TrQIx!J!MG9Q@urt?tP_gYciw`{+6ZjvMJ`UvVULpB= zr~8i;Dcrh`-~O8QL_1z&PvZI0ebHZ8wiPL@l8QN`x&M{wGA6~Gkc#M^rx~?mw*Q~b-&z}Buv6O>~;{DzIZ50Zs)2^+Hcs1Q+mD>sLS!;caVrIDAn)6;o zZe!)S1wqyP@l1+4t`;-v?N;%guf*Z;qrd8D{JgZyo-bx_&nwY!jQr2oTVd8Z<=gXj z%Xfxr917jC{fu**SC%PXTHcK9>TmdEAA6Z>_vHKZo$K_>2UWtgb}g?bzvpFX=-ctR zb;b($Uvd^_W?aqLn#{FkO~=8YE5+|3x-XSn7H6uTK1+Yb%nw`spV+WEG~gwV#ZFcO zv0h`hRq^)EqvgMAD7}1qaZ=;!tYf#jS5?bqUtAjYa-O%n-`Rlq8}+Bm$gw)CzOL=& zkBIZJ3%6K2pYY?rh4Xz+rnTpN*?7*q@)LphRk`I=Oxh$ReOstcaJiLp-@Wa}*~`0{_M6wjJ8MUc_%gshX}sROR9`3ugraJnC7PphNFPP1FBgzxQ>4mf+q!%Awg_^Mv9QHt##S{${Y`KI!aF7asjM zC;V(jTBXD>#vR*s#dMoYsZX_8cD!hfQ^X{Bhm~cmJ{$6tCOJ0V+nJ`|c_vMGch)pX z{t4-aB~HFENZeV=btd{z-oJl~U$VTFecrz3Kv#U6{*F%0bxARORfci07lk7qqy?$$ zk7>DjroaA*%YwzXw=U)T;kcdSc1@|b+k#i(Mo;e8zV)!$x!i5G*LKZAaX%V;Lj3xt zv+J=Qp3`vRLc^Z2Vuys@$nDjaHCntE|NnQ<|A+h4x2vcAIHlrgcAopFa@o6<<{Y`N z3)4&M(s$*C*p#n7dE)BFWs|NR{4_~!?#~iUsrBP(H_yJXk2e1@E`@ol znv}d}lkPI_TNRmNXWQ59nCGzMAJbN61JADC^R3PH{+qS=|D%=Ku4*Fs+xImEKecG9 zyd`G)GvV~~jvkgRspqd(-nn=Fw&4a{cA+E3AN^9he!I4z_}K| z8ke|Xy6E@6{0Ylei#BZ$;=9lp+aDM5tWlMh=9OEdMm)s>HbN5kDf%J)_*5?rm ztJ+iet96T4Ts+n~{ZsswuXBaV%Y0tvJP1A9T)*`Bd*k^QSFcKEHcekW!|`8Hq1#o7 zuL_Am!s(y)-er4pQb{W>)bahhe{bKN3@&JRy?J5iqKvLvERBqB-px96TI|YE%bF)T zm#^NL&NlN@`gGT0|m1bYHcd}jh^hF|k-*{)H6dJg*ZR&o0 z{n-VZ&wH46nO_yE`<~)8XTR%`MANyGk1f8wXXE{dOxqd1=j{9aQd%%~-tGOeUN!F` z?*{2+On-Fdr)}}ud&kwAj{M92(pP0-V$*kJ>Rg?=Q`Z;|vLxRtV{tf`t=fHx#eO=w zwx1q@IopplXJwTG0_@rUa=e`^k>*hUI<9u+ql;ySFN$d|;*hjF9Ghq&roHW(=+EGa z75J2n}t-gehJ ze}el7*^D^RZ=bpiGFT)2dUbd|e3Z0>FX-Hhvd>b69*Wi5_SfHeTxqx|Ql>}!K`y?PE#hshV$Kt0*96!<&Y1PaV0q{VqkWI!Bvcgd zPAd}h{JwCSfR@AWl$c_vU~OOP-z!^N3K#g99*EFL_AvYzdT7h#nmKm!rOh-%yUyjs zT?uAvoAs`}XTnnT%{lizFHgF#OtMz%d)0rNTuuLt+S{d?P4AW*YJRnHn(1WunzM3E zF~Mj3&u!rjRo5(DwNdevhGIbEPDXC8HA_6RYFAgyJ6tP#V0Y-DqX)ia*xnM?)F@iC z{^P@F1(nPP*@Cantmj*vTYDlPmv@0j^y24?v(D>&5KeAOb6h1ASpAu?rIMNdeW`C@ zP~=wsCt(tef9sfybJCGO?oc3>TKAGe2puUjlPDe{9}9mv{6dn2K#J_ zN;Auao2t|fZBe~nuhb{_GX7NFzJ@oCHz!8lPFpll>oR+&*@JnjbPx0G$)0RDZRwfo zh3SQ%6`7HzYkd3`C!F{i_jJ|l)`D9%|E5GN(0=vn1L^8ZIX!aKQ^O_YmkAz!TR$m8 zUoc#a`BkK2@bf>_yA&m-F|Aa)GFAV(*Nu{jkmJ#@M~`*?3wg2b%(t+=Hxu(F)vVpK z-COp6Xf4aFBV3xNd2ik?{KdKK^IiRCsvo~^WPI=8S+Uvu?T3ctb?Z<0+g?tbW6%Cs zRjglm;@Y~6C$?VX-+3>4T2}hU%CpaMzt5S^){*;{VKe*UeX7%&)@*gn>5kRhl^MtC zA>O|9?VqECcgJ(mQXdKI7dlaOkKuCcL;v$#D>(kt|C?NO zIKQai0^iy*5*_d3-&Tak6vu8}K2h_h-^2$;xED0Mx_L{-<-n#N($*KVyXI;t z?^_zWwtIT8)EWit?|=4K_y-<}l=}2BkMa5WC%JB7*VP?`E*`J9Ra1SKqqy>WOx+_aD`coFJ=F`oAIV_uHUVv1Un8?SGG(rkPf5bj*AF*ZuO_zKWyQ zzC09uV0Y%{zN1y*1%``%79L2-m+L#x;CK)ldTv7VAX>MWn#yzLfru{WI z`D}CFw}U-y&v^I8N4O?`+x0hCBZqgX{&8MGhL48@HvZkbgKfiti^laKEK^P_c_1zE z&xXe=ufaI_-C0ZJQZ?CU%TGymZg7%37Ol2?nYreU#Dh+|FS3*!&?-2*UAXM?r5WLJ z%3tc3m;Tq&(GN>8|FUGMr_Vw8YeqYN2G`Y9JzJc{o#D;R?rH6JO~{+&i*A(73cfu{ z{%Ej7dllT8J~MIt#JduU?udD~eRv=_`_cToV;gW^^LwSiQ7L((<1C zJ=feirf*Dq5nn4;ptvvgXx%49j!@S%CXWwAia6doVjR9WpEn>t{hD#ncR8to`w!k9 ze3#3))YhZo0C$Bxu3w9$A28IPW+>IEN|2BJmh~>NG*1dJ+>SsdMT3rGi)AbgeeK+BD z!ZPXmUxF8}*wn&t^4cQl*>X<;A6+;)^>CKIxSGwOeU2YKm&wXDRN@6+e`$~zoen4Q+V%IU)~f%yx$Ihf`qDJltcdTq4OGYhV>WZ7d- z!xg>gi<-Q~o~xgg86We0ao-y7K4O*3fw@9%O{7zVJ1T z<#5jF7XlGWPJi2RJ!y&USrc0UhYwZFcU-=?UpMgE;_X#-CxzkrtjZm`Qs&)>JusU^ zymkE!`_}9m)p64b)~{bWBf<8M-N_Gp5d~`MXW!0>mJ^+?)vNX9N%T3nr_yfxZpVsR zXK*fc|61^5x$+G*n?L@~v^TF_vhE{~f5DfQZRZPSp1r_a!>kf~SMu2XkkT3bkALn> zO|jPcUCpy&a?l2@oqrb25@l&FSLT`;@zuC0YeW2k!){w+V(hh_-oL25#`}@X&2Ha{ z{dU*Z6l}bFX4&`8f5q|yUIYg#t6I4PFYx}h%hf&G>cfmJVm3KDpZ|ON@^$5^Wp$fH zm;TJKWO=IF>M?0f;^XY*g~wm+XWb#_aNz8b$xCP3O)hVIsw&H0n|oIH-BBCyyH^Bv z#T%A%DCO?YePVZ}*7bu<6?3te!gj5OZuw1env0Ll@)Y&d%{j1rtq5yr_p;k7d&2I! zitRO9H(h4R?myffug)xGUN_~8XYV=w8;{)n$)DywKRuwvQN(cp|1&AKLgD>3-|p`S znRxOe*AAy6mUHHcclp$IEp)tFcEw_y&LZweCHdNbYXWZz+wWW7({~9v{Oz`1y-4`; z8|rJzc1}y1&N%Olov3)ztM_gH?;q1Xy8ovB&qEQH{!h)1JiV^zzo>JzmAw7GGWMxS zzOL=7?huSj@E46x#XQdOio}T0&q-3!D zf%6jioOy3<*s?bSi(TDwXWuD5ZUccGV(PmVO*Cl!X^}kbYiqIcoh6(Tc5n3AV#mDrx9(4#*(LNaZdRDsuuZUj`m&jfEUY_LN3U$@sheqIcU$jK>?qxv}kinrWqCeR*BQ3i-)C9R2AsSLUfNDHVNP za;D15#P7v(r48Ect88Ogz8kv;XXP26+mz#>>}+HfI)&Yf<&}ez%QnLZ%ddhF5;5;0 zyyk$ckO;7nqIH+{bgQNsd(qIHT>0nnM>EE%oJLYP#`urCUuhMyIh$6c<>Vtcsv6tmwb=B9$E%AJ3Ly+o;#&vvrola>bLA zHcT^9k4voHpud)T*1OK_KUFoRZ96J0!Zx{q*yHn6c~n2dm{7`d_)*l}WJpW)|820A3^CeyGsRozw??>?%ChiVY$cCY`JPwoS>ouTea>I3t7762 zwX8|SXVx^uN-TD=F_f@4wPxqyd;1w%JUeCzAK_SgeCjRN%o^_y^PNw>iNBuiz_6_9RpqrtVA|4*x}FOnN=Lh_Y?>YY zcH7MUu#fFQUapfwQ0j&2>4G^~OXO=)TDl$_-ZKBR{T=VOoD1?-WPe=9kYm1j`^-C2 zWW@gcfB40_xm)7cQG>-&%X936Zn9l=I3ab`x9$pGi}63Mj*01AuqbM5g-um+dx5rf2^fF8iD^Lm_9kw_oz5;w{4av(G9y-CUvV|9b}SVU`(3 z6VB=+x=Aji{b$ZI+AbZZ+8w5DaW;P2{atnMk{LO|FYnrad#Tj5 zd+W`-0zM|RIVC5G6<_(Xt}FBgW5xlejC(SVe>`UIEnHu*^zpjHwyvPsm|W)D@|7!d zwLQPx37)r*^W9l?UDdcexidd5ZgF4Vu9;LPU3fug&Cb7jf^@a|4d1y$s$|~weRKU5 z=L!1-`mG5wjWjv_EVsP3$+gDKUHFFCDUlSe3r%G=7C%2NmHc;^T-nAuOpA_0FIU!$ z+RdVQDQ%;dnfD)N%B~0xE}O*g&{;1lU{c0&~ zz4T6S`O{sOg*MuL<9_(2e>d0R`pf-Z@9mbhPBc4nCpMS!#+)OOUz~W$<{y?@B;=#F z;eSoGwCN%4|B3fij?H!Mx2c{u<=@4b@)MnhehogDJ74^k9M7Euf8~Op?SgP z+2Y?)VoN^+nS56BKUA_(Pd4j)-YS+GcXIRV`TMR+y)u{WsORPDj_xH4A;O(|Hc51C z{d;oq_tSwk$~pC4K1W};UceUKoIL#w+uq-+iv=7cZ&%*G(Y;F3VW$m0|E@if>A|`W zPtU&M+GSYnd-S&ad9evOg}O(2V`lYCJK+4lQX*%k?J2%Toz#9etC%Ov^r;ic&fvAag>kU*xU6PR+?b zUK17^Q@kI3p1~|@hWIpX_JHs05B?eN^tSq#cwnb5o5kTS)&*A|XGEX)VI0Wun|s;j zi5z|&=Uz1?ubQ)JNh$lZ357q_J^LWMY4VY;uO{9x^fbEa8+l}t=Gy;`S=I7FYH^(b zpYHm+XZ8;L@uwl^ZfU{KbNi%jB?vATUZB%8!?MV)l4lhw7VwsP2+2RowGPFEeV& zdAQ< z)~z?+Id8S__San7uQu&6Gx{vZeQm>6#|@sIR<@ycbe6nie_3#D_coV#cVB1jPQCm_ zV(YREQ*#|A2)5r*m?O9E(dPWL@T8NBCqy_^qwXtu|26lz_u5R!{P+(ErZdNU))qeE z641N$wf(bSv#`M8G|j_By;H&;I&hvmGi^5i>Wcs0tW!FkGeufgTP3GR22StG{$J6`S&UhpVhtW8q@1mzm;3%u&>$wU+C4yGm6?7 z8w*2P48GgNyy9LyL)Oc!;mz`>iSH_6r4N5i{Vw!&ZPPjPxe~I|?>>mS>+AJp{e<>~ zlV{6MKAwAP!KZ4~NLAI;f+?TO9ad{D>}w6}jC{QP{qmxhH_|SB-BFnT!zT23VbARA z+THIeU7p6RzPPeob;FL*_AP#g6V@K+@X2_2IlSJ~>*3soKhv-8Ej+wQ=d#hFOvTJ= zal$)!%bsL(F@;WJ`oXg}gr#`JsV$+ejx&_LyZzm*Pf?(0VwaU_OXS{lC1Q_+=k3he zDY z@$)|ycOB%|{CAZsUAE9q0 z@=k0umvv^zknrTK=eSZy;j?D-lPVnT%`*<{OoZh zd!!2{7?W|yx{f)6ao^QRg*p0{!jK5iamirw!eSM1Q=MU3lZe}~% zTv-~xn^4u__ruEl^;@TT+_^VQD`v3v8W%J!UoIcA_DJII~{}es+~@t~Xy&;{+#&ejpPs9~ zO?fjm&a4rfZt&r}RC(~Fdsffv!j`gcS*-l;EAy(khc|z3S5EfmG-jOhcdGh}5+R+> zeQP5o$9&7x7ryz7twh$cr6!ESXz|=l!U3UOI@VE6es^@IpUjZE{i9)t>+)N!r$U5S zIA+e=V1Kk`ucd~3=*=Il?`Hh3x%+b8%S9pIw-+!*ta#=jYrjgAzb%e;;pXGj5l@qM z?ta)E%dso?^*;-th6~gD{3d(aWiVGpE?lkrynE_~)1KU0S6+Gj_r6?Jki_4GFIs+{ z+&TZ*joD_cj{2qj>cv_HY)cDY+*RCiO<1gDLqOA+v;OO=ryo1gnfU9`>4SzwN|l|g zn>S9oC|jiJZzbg1?@`+q7oIw?N#Mlk(p4U_#BM&HVQszYi)Wm4!>!|2yBkI&)svSkUrr)UcyYa;T@73#eRdd}I zbl!S>%N4UVcMQ{25|*bf^sDn?J9EXkx=G9Zd3i+o_3Wovc}a40elk`oZ%xZMyd~(# zt`iBtJ3GFq{W5H|IKA6o;^NqsyH(ab|GGN9bl-)B? zCcUz7GKUIAAcPij_r$}gTMC&2pi{~X5y>LH~YkYTh=$#ce`uX8e z=&{#}MY7trFRA=w7r?QwzwY7H7iSx*Hu2fze2VIwXC@cGYp%6+!AZ}y?w$^3FW-Dx5wXW#C9@Uyf2-G?VdR}LQa39m1m-XFTB z#7+NUvW(60Ys}g&-frT}(C`;rm9*-L+rF2cbzk%z%*dYC-#78w1U7*`?)&%iSbW~N z?;TUmbg~#Ol?ww!ez<58bpzy#tlM{#ZyT$HK{dFREFXKJ&^u4oK=DB%I7GGX*@!oPH zy%652!!lbJ*lW8_HaiwOzg=$i=cfj7B@eyax_WZd=RId@`8K`uL2%NI>i1_=|896E z+IQ*U-b%N_bxeot%VyrYyZedl@`Cs4v!@u|e_*e+z4W#1;r`oep1kc6YvXGCDlG4s zDBk|Tudwr?>E}LHSqYVk`}!u`3BS<&ziub<;xD<|Z@*K!?x}e^>eWFD?%ei<>{XtTAMoP%K~N5WDHM>XTh}PJP^d@k-iCu?{vp69&0U|4fap994XI zR?S{?UVXmOxrcr{d$b<09nSi%wAaI$<7DF0l~#|vyfm*KeUTsEp#SmIO@(x(MxKtQ zKlui~^xi24cdlY#m~Fzr+Pb#2-twiLR>XmX9hcdEx*pl$6@TWd{i$cdrpikW_PTAq ze>yh%$&5Sf{)+nZZ*?_C6rcR{<-gKe4!%vt49m($yS%~Y1n3wP# zo@1K$Ju-tM{%!MTwg86}yB4Ikyh~qFQI)^LtIT0jWb^uzceYnmTv&KS7u}tcDy1WM zVe;*b{JZ48CQRPCX+t^3t-#H?Q)hm*zkZL6{ko!$vqez%Ew z_FlmC?m0cbX#Hz*d_yYrqhlY;^O`XyOl0TDLkAXYQE2NG(yC^VSarrJaZl%EPuu6) zyr=qfNqSFW`5rCZz2n%`cWPHdjs9(_*XP$?{ccxS#(dFh?PlzuCoV)ku}EDNZU)Wx(u6O=sIB$BQnYGK+iSqE!l82XMhj$#Br2f21V(yf8l`}(qzU`dpu;Rbe-T;=D=Nhhe ze&Y{$JT?BzIQyWD2( z?NpUuZT{@}xFM=wo@!pw&Ddq?Yqseh)rnABdg}6gr&+>V&drO@zmU<)_qFTBS%$ht z*RMYiTIsRk?w`KsvtJ_E{xivaleA)4{g&^;v3tzB?YXyE8&*1%+Adj{lCoe~@-dovJbiijO_qU8Ea)xeuzdf2i_jOTb z^#*OlvR{^m>Sq6(B>dv!o2A?K-8inr5nr3KZIkojncS0JzdFt|H|)}cKRoN5bhm19 zX#RP8?w#j-C&gu7;~DFBNph@P)!>%UwsCX!wfP$xG&k6^$Ulm@bjfhC&c=!$gKaa6 z-!m~kEEU;Wp1@0{+birrey8XwPV6#jnqQaQUI z?cw|{V*5Rex{L+bte;HmOZn|t{nU28l8gNR>3xQ4qE8rIh`*_A+^Ib6(cbhz!SviO zyWbe^Iix)0iqM&c7be!X?(BWN*YcIwC$r6G0*W)r=l6RaO8KI8>Kyc3C2|>%VeH zwACZ8UCG+ZWzU~lRrz!6eB;!GzUdZDuOGxYl_akXjF%S7-p6tB%f`BAMX5VuuIrzl zExG+%y62vEhg_bhum7$4x!&ZDc3$V^gz~MM!wg*$YxMr?%$)Y>(LvJ*N_V#xCMlf# zc&K^K@wJwXV(TudybRtd^fzbH@fR{ToReRFZ*+AE^ZLHp?Ri*y{=9CPjSg$>ZQm2J zGCrj0757V#NV#?AKN&x``o(Pf>W+#N3!@)Td#>H{bcdEr&S{BncQV9U4t==DVPN$6 zYhA?c?YDE^^UaKuRGPtJ8!emk=-j!ZRHBy{%GkEnLekrD(PRpz7@ZnXFW4zp1ID0 zNnJAc1H)vu9Oe}HtC`MnU3`9h&RgvY=lY~{YjKbA*F5d3!m1u#U9oz`<}}@X3Z5(N zCh)wRKUveUQ+_GmeA$D742$RUt*lk|&TVb)Ns5#Al({hP^LwEqmfW+{`Y+CymNZo^ zdg1NqioOyD4xNaVd>nCr_t_q%5<%mPzdAF`c!aK6UTI1Alz3t5vAH+z%FMZz9}#}( z-ikZU|NdXm+q;c0Dj``}yR>PO;}fQF{ZtpG0K%GQ{uanpTSKzbE(3)-sM^4z|+WQt;zh^ohR@TUf+9eo7|9mBzh(7x=r?{%^UCs6*81 zbs|fS%XS>P<>LK*m%+YC(}FiWX{hXI+w1i=MfG#z6ua3fH!c{yNN-QIn9Fctej0yP@mVn$OV?FTc0eeyT1?-i8^cb_!d>SJ9f+tuI$ zm#5c$WSqH!JI%gZ{>7n$35ma1B{vr+ng!U!8pS#Of31=$`q*c_EzivV7K^tf&9QE5 zyDhtTTGTz)v;|T2nu|^r6dnC5e75zoO1-f~d$@t<&F$Rn9+!A?=Z6c0O)lcsw0ySO zfKBG}*UZ+b2fh^N^`EJoJ3ZwfyZZU&Q%7$nduvbp_fmIFok!+^Yc2&0$x-_*vdT1M z6#gnqV-?-&^6aa{IwQALKF?eqwELahoKemjD}H*5Uy|ycH}Rj{70g#GpZ03?Vt%2c zKJu>4RZlEpf}F4Go>4q^VdJrAi8xlqMbp;hoLO|1Qa17mu4 zymo&{GH+1%ZyQ;nyT9QnUsPM9%T8ggvZCkv(=_;tr?}kN(y_b9&{6YY#BTd7r{B#L z>j_cY&MLNQjaAAAgFm}{Zk?58_1XKm;eTV^uKNZiGa4<^4mxx}S@&rE?1f>66i@8xv(1-u*z$SFw!|N*&y!awPK)Yw?|8r`@#?3e z#H;&FOCJ53>L{_~jMzrED{P!|kE93ao;f_#ajWS^_T%Q+4BdkDeG897K6_rI-@odL zho9KaLaqkAwKMNnedWn;sMys2-i;7SBzV`hY58jURGv5D=Tf!>t_}qBb#cB3Rl?7MKx-WvHW(Hy|%a@vMKlLoVsjDh1vh( z&d>7sQrtUR?_K(o?k87dOiWb%#(6Tm-T6r@uu?fX%yLq9=_KnV@wxLCnkMtCgsMYRby$)Q{`WdxaZc*6VSFKZrrOY&-%k%cD^!ZV@w}`|vF7+T?oaP_o|n6IF*&En^XQ$YsR8Fb)8_6t+0cH+ zXKlN@T7#ogDd!;a<|9b}F!+ig@_qTlTFSm?pT`(n&O(tRFo zwny$sUDQ?yI>la>UhG@^O8e%To`Z}HC9JvJJ-&6)Jnt6nR$3GO^S;ZbN%7HGdNsx7Qd~GQQYPFiz{U1TPJAIW!z}bWATc|x^D#5%-^qe zaDwvk`Q7)nb}u*1`kWVkn{m-vldbmz*<>a~C_6m!yUOx=_3lc&n#CQf>|I;aLe1yg znD{c__bvZuI&2rv2#}XdSUS!XCBPYP|oX^ zyKcAN+Ur8e*TT6awnzlm{4`m9oj*BQ>E+g9}{raML%dSjdoF1NVt3t3vFKYMidkd}0`Q2(gPx;R9f53TeFVoX9u~ObZ zuJ{eV^xaFf^KX|;GJBfPkoU`ZfxyFX87H2!UsmUrOmXvTOFp6T{zttJm)-U|t|x6D zeR~`Frb0RLX^;9%4~sT=(^V&~Op{q8e2uN<;*aW$OZqMLF&S}bB>5j(cysByTZc9O z%x(!_NcsM&>%!(8T4(qEuy0-Z@0jO)r*@M!E~>Ks64E^8v|Uf_a{s1mYaX@f@{Dgw zbiRL*<+D|CoDlz=heP3#`pK^$%yZs8v6hMU_n-U!b@`oXXH7y5RVA-}U81bAE^mgG z)xY9%?;oa5{Xg4IvwV`O>iqC)ZA#nUU0e~{Cl!B!d1IEM(p!%%Nr|wCmut$VN9Ig& zObXHRvbZa8M`Uxzizwc_V@o$QZP|K2{>|;Ky^K3-N;QqY+gH^5a_4le6lWCGdAw~| z^0AVp+x-u74NvIY$=7Alx;JMAyIGsaI-bkxrU`=y*#6p-`u zKZARr*NKI*rXHKqQnX1zh4bkY@5x`9?5D5#`Fd~i$J7&jHQVzal*$~tJ?GH+?=yd^ z9^7^2PwEbr>VpesWqyCH`Nm?^OGVMH`_k(D;v+<#Cf`Te) zb7yPK)yVkxC6+n$L+|soN57=qXHdSS^l$A4A-6n+tIZSi%(IzqJ0HDKYtf~3soLu4 zk+(MwW?tMrpWA2a9@~XGByOy5w_jlP>4y$O?eUX#pMIC*xySD2W`D$av2E+`+m>ux-;p<%N61E~_*zxvu)g>F*As{hWtpnDsw#G<4e5V#C)50gI6l87>JUz{J=cgm91VTTAXLU73dOBOmL`a%E-@3DWnqQLQsSq{2*U7s2 z@oD?sef`y^Zs>92>OJ8~r`)Rh=lUO1Dpas-uvwAl=FFoS!7A;tgTK?3d9I)8&#ow~ z?5XMLZ%%9|{M1{e^uG79#XRn1(~TlbFTdFnEU)+Yg74FBpN`0z{8^LTvnli78I#kW z{_QL+YWTDz@Ll1JRpusTtG2Ed?|ysx%Y!}}*@v1lRW__P?icQQB6*T;-(-~;UjA=# zw)1~2mOA>JU&|-+fmZ%`R+X2((k_2~JL8nGlA*@)Zg&&uWqC41M^6{PK{H)&Z*TVPapSXHO zC#$;i-MxC%=%b-oo7PWSXVU4=-OIqOtnYWg{hoSLq3tK0WS^x%CQoifuwE5B$81}z zwzyDJa>`TZr3ss~j;OXfg*-Kq?cG)%Ba|jzkv-$~eWBG;^nM(c<*BdFZngc(>gn*{ z*}_$pZpqiDKm2z^(Y(I);Cp%BwIb5w=zRGseBB|ve`g>gESG>9V(lz&P`m#F( zS|X9}41cc*{jx^B_+-MR^kNmF0E51>!9y2gZW>`QvPe)2gHeXKZ&6=keee0Xa zA+b-<67t;ZdM>-~3}{YxBem-LOgq1)vhmqox$eIOau3LSxyi@;H{-S z(1aUyb8Dk^SG?-?n`*G5_|xlFZT6DF?LLkhvQ?&MTd5vdWWqJCYGI9YB==tF2Y=n0 z5}UL1<23KG9O3@U@q2z{*HP!q{l&u3JXJ4z+Abe_y6Ex5B^!8C{60Uky>-4((R5#7q-YXdp;W*tt+`*r<;&<4v=uK&*GRhkz~$?aP$ zzCb+S`dkUgg^M=2zmht5^SoX6?@OO=i1t3#SkUOiwBg~C#gpu!q}J7XKc3t;F+b5M z;mN!z>*U*A+5cVi+rQWa$3D!=PEO%ewR*r}C4I@?#Vzt$PL_&6DRY^$Sjvspp?7TF z*>b*M-EjBHuQ^7)=4H=WXTg3ZwMdA?$mQ5xuY}2M0l!*q`7ttU&W~pD(2RZKmZ;&X zmebH`Ahs!ZqM4-ejR;fixa3v8^$vF`3r=3Ln=zdCMUCi*NoN@?ZL&|T+86uR#iRUf z_hF5*=UoKnXz=h_DZZ}Vo!V(W{h(KCOw*&L1)aPpPc|2<3HZVJk?EHI!j0~~cmG`Z zCu=UBsI|wJ9}jFC_m+AK|I223drMT@KgeaK!N+%Jtgbxm6+9tg@831w@n^(~Pz$yH z@$Bnn6|Fg6!4}H@mH+bA)D-Wc37=i1*Gsk?kM}Im+2Q=FO8jGuy>3WmN3;Et`wGh* zDVfe`Vb?fNaJ)3eDSJ#Nz` z!G?{cj2l$z%eGvZ@<4ZbIvF-?)vvq>@pkI!p}i-8O2KE_xYT7{lht9&IC8cTxqQe9lhI)A(NW< zc9c3DoqqYLPUhEr&wjad_jgn-+WftxwkLu-kTL!nQP$Vr~NPUaoUsB9?I-*eKa?f)W{hZ@AXZU4Oq1);?lu$_h0nz z|9+k(!NWYqNo97+VW+Ul2{VlC1g6-(e)v@6<;$CE6y8tP(-6As@lF24;ijwedEU)F zoZdQ1#OBKqYk_EMwKc*kMIIrY=;|aZjocl*KL%esNZc1*vsd?y!-RX|iI*cn5 z&x9{wyk!5PG^)uw^O3y&2g9NX0%0t#g;|yzgq*G=}g)ajn#~%-#FZI{JJBP*0GND?drU50@^d!nq2A+TsW0_)+n&$?#7w# zZf{>uU9t6sVCJH7Ui-47TNQbs%a-4HWK^+Db#-=w;}qmh~K$Brld@nJ8*_N3nUz-Q_>>G5Ihg>jq37{ssLn0Sd* zXix5$z1Fuvk{YkL)G9^jTJK}swm2^Mom^zugX{p-XD8g(wM1y`5c(Btq~x0Ek=m1= zI_GChYo8^V_OZ`7* z+|1|=F_Y!@{kwR42%^j{sbTp<|>pNfH z_<-%+b?p!Hr?p6I{jdMla?eDSD;Hm`zBMIJ?ObEat;v@s9Wr))&mEi2yHf2}%dW!8 z%&ND}U$kBov~21*{O6Y0w)_8H`&?*^SmbuU_2caa9_tlaYt;P~{HglRA#vpJ=6}i( z-pW_!oNd$I{_*AM)&-ljzMT+XZmJU<^>mT;HHUAdli1m3f1LaD-4*p`b+2ho!IVj-4`_FZOlvCoit#uD;L@MGSKpPc5|Yx^m4&V;=Y8kH7BB zUty%NGWf<6CM|to-Zle1nWcesH`#oy{M7uOqjX@Z=k)C92JN|5#Qwfpqrs_Ipy#`C z@;9evA}bANd@fafdeFwP$8Y$hdaegrGfFm2U#7$L2u*EU#e{b+jpWZ=Dl+^js!|8$JH6>^J=H zJ=X#!{`ALzhgZ7x6iZ`5hW73lIyMislly4XKxYR5?-V~Qtb|Ap+=XF*#>DxZB zza4AdH2pOw$)J7Kih7XUC-tZ&(CkWB`O;Ak7q)h-^FjgVjrC8l1i)YFJhh* za@D}EYueGvM^E$JIn3;`cGaE(77@E;yNcFNY53#qVRm1 z@-O3**|$wg_i~@qkZM%9+IFj5$f#(AzF)2J!kN3Cn^*qd8asWNm`h$^heNIP6}8nx z(MKvL_V@d?&2uh~5ZA6rlJ$A|fUPd}xhiM&ZQj$STaxylyXd<4`sv0eOCD8Q91Ypz z^D~MoSANXsH|u1U##Hzjd=omod)4DvaeqE> zo9W2R5HdP(BZp_M?XCh9rs?v*2Li<(Iqnh;y^*$C)okTyhBuDllNQNdX?^Sc(oL>1 z(QwP<54`zj6Q&FQiA+?y^nfQvTtMk)l8K;&#Hs7*d)P~v*^_J!KCbV7_xwcL){2$~ zW(#=V?3noQVn@(cU742;VqfcB6k2&;Z9!(&yuu_yfkzdUr}FGVwgm?28eY37%2SA^W${5?sBqyJ61DcW9qENz!FL6`v)f7-VpBkLPff5;s$G;6G5kD zJ(V}EP-8I8wPoMJ5-zCpyJTWD`*k(Td+XzaHa(cweX?F-P0+o6me;4NZi@Gfdc=}1 zq4B?EquK70i;~*yPXzd%pOwJ4Bz4n0$F-Wlvv$4y*l&AFi1)tm6QOA{y^Ndl_SUgJ z3=BWJ{{5v&-iS$V(r@Q)(O3VO@crh-ZJb+WuNtIG6k8x|qU0_sApP%*@tV-TlcoN( z`^M*0K7HE}|FNB=X6;+Yys+icCa&A%b-OYx@|K7&-F_D`&$6wEQa#CAEu=YTYNT>MYD}N9)=Ki-1?e{3Of%cbjf>U@=WKlQ zui^N17Qyl$lBe>$^3f%3JKEcI?^Poc=bz=qg`c z1mmmiHutN9CLWmneA3F(LJ89QwNJOO%zrSWJ;Fup|Mu>@=tmu!yd0VA@8*ZyebdY0 zH;W;l^10)d+0*tnYgk2OZZwZ>*~s!aKvL^&Z}b+6wd*(Xoe;ShY8hP18zUKVd)-mq z?md<5*^4?a{P1EZxOCW2)2wT%pl2g-TTXSNg7!EGye6Yetuh2uz-a+^hQC|;P}#_9j~t*sM}g2CXrn!P*-%VXZ;h?&w{LGAIrO+{9UB@ zR?szbl{n9aHET~5P5IKjrDJiRO8mtWoF<3$i({u3yjS@6O8nZor;$BTN?YH(GJLUp z#>=a^hSLLXR=fWCw(r-y<6j+~rUV?2h~BDRwaw&?*PrReLORE4JpN3byZ`OfMa}*^ zDLI;D61}@wu3y$z+@q`DyQMfw?eppVr*uq=JRbdcb3(Y;{jdzz74}_42U(ufOw4zj znLTakuas1a*_}%7%Kf~Bj(Kglzm3_?c}-U&!_9Tm^5@PF{AE0^zow@y$D3Q3XJ6HV zP3ghs4=`+#_uM&Iq33J+;?kcAYa3iWGsE;5q!J#jx}5O*p^TKZjyC7BCsV!kQW!ZF zY(JBz@N<9Yy+1e9uf=oP&r8~z)qU!Jv$|gPgX(K?Zx&qf-thFV?{kB9*PZY7?!7Y0 z=+R~NHr*5(^#YaY7ndl-Ua|PUW$nhM-&OhdRSTu7wAWt`^5xdG|IjDZ=fANfAoT!O z4)@npg6ALGE3-{{a*=>W%^HB z=Jkz<+7^?`RnDD0HN7Enrro4ewKd#X?!ARk)n_AWrkUEU+jE=GQe+oHwZ~`f&x~A` zG~`@5KOUQ-67k)|e`3DmdM1ac>DP`lKA1Sc>GvaZ?wt>prNpqD*8Jl3XNg>lbMN&N zTo>DY>JHXabsBB4&YM&;^XvM{htn6$=G+pvrHMtG)9Gq?*5oOL;_cs+?D{Wn>0v0k zxYKm<${tr=cg?yZ@jqr2sf0xP3GNV_{*I5msb%Aza~842OZg6&^cBdi6S8d0yPUJ# z%~i7MdT-7BlL{Y1cGSd$|EfD}Hqkn|t$_RY)e5QR?dk5@55K${VQ5vo{djz#!ijC_ zKK*$wrYLYYE17+GKYi`V{g&nXdvklgb#cWn4CzvSm#4+2wNP`h!PWTI>AI!Q7MR@uW4WYydC#pJ|Ab1_>U{*zYiC)Y(ypYUj7 z^0Otk_db2p*ZAMyj%)7fDLX9eL%4E-J>TuxQ=;#}G=shEm*_8T@P)p&*Pf7U20d@pM#5hZ%&!1U;aedT<4%}g3wC!mtV`i1#Q}8=J&_^ zLFQkBtNQ|td@m$sl%)8IdxNk4}&n<7lvgl!J!cuQN zru#91p{L8_tGa(L{VkimFXsMJ6$g_KehQYJ4Qro^g~ubiRHrq2DJO^dmLmYeMMoz<=+CE4}3 z(7EyCvR&=xr_>yMqI~4K&-TP^XP)cL=R4!slPw!llX6q*=Z}?_gDN6V-c-8&?xFCx zM`tD!n2K6>>OJ_7#Qb;FjE~&iu76zq<_l^>oX$Pi^-@y!v%_gmCc$6g8`qS!Z`Kyq zl`4JB_Wa}gbcY4MK5RGp{U-ll$Ms*nhkL!Rg`b(I7N?qX@#*towO+BWXF{VQHr~8- z+eoc-(h0|l>x2Z^HhU}E8&~L`o$@}q^|cgd&W0&fGk-cx-I&tO*SP*j#h%T1&mZ%d zf4Q{x5#J|!zRmxh99f{+WH&Wr*O`>Gh0A8O%>2Qs&~7)o$fuKsS>AK$F|Qd(27F=l zMh^PtR>$(4)0xFOIrqK*PwRHBz+_FP*>iJWO!{NX-gDC1Z`HJvvXn33rT1sAyJnKZ zye?qNsg29KYPN?*bnx8qY`$`5Tk~;+qV4Y06C!pC%{-dEe3r?DyuYMwzWQ!T|R-yD)_{aM-9Gz_!d~K>+PL#?^#^c^TaQ|w3n}J zEo@WDpSsNVU;aWt_5O38Z;3GJTbTEr^kP-ruKc=gi~2Gjt)RI}u6^Q*w(pYpxNzS=V_M4aKK6h_Cx7 zJ%M$e-PBoPPZP6_Us(8gS5;kCmD3cZ2fnpm^%Enwp8QaqbFM2xwBB=*)}=?$ZYeFh z|E~~P7d2nNx%+O}>yO5|rh->)JeOVU_`Q_>-+tq_WuEg3j$GcYmAdqz>eX4L&wu=| zs@yrn;NzWwKNW5AoSWW!I54kE?%+M?EtfJ_6l?f3YbS{NE37F#ztCxd%?%Yf>pu*; zl+=1YKiXh+iTz*Iucb14_os<$xSCtU9{Mk!`KX&mwd;&8Rz5x|6%WdeZ#vDb zykEY4_qsTHqqP=Uax3o(D^=)ic{F=Pn@X05x~>R+xHysja<2TPbG_NIje8h^6HY!$ekL6k zlkq@zO`mGjrY7aP_b2WDq-GTwzCrB%mG==zeUp>Uzx@2de(|2bxG5bI@~_o3ro23K z#X|01Xj8-Dn*#Bk8@KVuS8Q|+edjaj(dWuX>^Ji3C;}+kU*=AQ0F=<2K-I_E{rVAwuSM*M@JxaZQ;mzraGpy>u%PNm>ndKQ2 zu$eCuny!-dO(pnbp@ewlr>=`%bu3g@T;qFcE_GpJcolEKiVVq`B_)d#M3d%i`KR}$ zP4_fYQIVm{)!TvlHe6qgvP2k)=z6)Is9l}a>jZ3-=&e!C;8>^AGQJ2{g1>n3nb z*L6z_ox^b8RDRi^4K~+r2Or*8FLQL!mVmgRG8x{d`y9@ERa#|cC3)pz)%+fo{q+r1 z-wQ)4^(*H5U)om9-|}65-51ky{XeR2W-%CVn8vKe{2=PNKxX7e@9i#Jg3DK(IVNsz zwnNqKZ2Vg<;|SURnL^TnXodYoU?*8n!ikKePI0?wsJ2hNUylec<2lppsOfw{D{Ojg(Z&r13+LS3ufVErG>vzPkaH!E7(icP+uoGu zhdwL|7k|l$^i1Pf)t?G>WwoMIxw>Ok0zq$L$*rtB*$8EoVF1-CF_4N@0hr4t2=ACuV zz4d>^Ns%hjaZJdS`t7&?#@Gc)F;-E$8fx-|wy^+&rZDwW{8_-}GzM z*`1GBOqQ?UJmh+@+T4nNzn5a-&eF5{W2Z6x|FF5)lA&tCeh$s$dXl#e%2l)b#oiLS z=lE5ncwg`Rg&C$HMK>-B19Eu*<{#&Vgxo!2K_G5OaRp&j)-ev4A+?Dv)m z*ZzKVxh$N0YVR&@k(X!B<*Yxq-1)rU>4t}&BWosiHf*vwE7(yRziMOW1&0Goj69X6 zQjDD2*Z$7k!*{bk(?~)wa6zT-x1+Mb{(EI#&XiEFQQfoi^{Q6Sxjs8nFS=P8ONm%+ zRIooQu~WDrLH^FnN6#Al3ioL=sqUQg>U`B{L3eGn1uvCT?iPzRHNQS+a=iTcg|w4t zjHk}*4P2+f_{>!Q=Iqq(_5NwzEo*cZK3QozHRMpQ)YB)+jXIBSf9@##pfOuosqnkT zR7SVi*AliHY`q$ue4;r~PV{urPjQ_Gm7A18ZfrEyHk{>k&9moJ2g@!FhZFtkqB*Ib z|A&+vH=AWeT-kHrz z(){L&8Rz!caDTZrKb#LIY`hxe z`oKKo$ZFBNx}r*_qlz0|9$%7g`RUZw$J=8GrkXU4|=s9FrUr&sM!f4P0>;;f(MwsRStKa*PhWX9Yh zq72?!E-GZLeI(x}w0x2;+mEmh$G0E6_n~WpXwG*Bbu}HH3A@&-PL>qPD5!l@u>0!n z`_o^F_1=BMBY)!h%HGfWj9<&14vE_L)opE@{>ytw=jx|%@l9(ucsjo$-Y0RJYigRn z4xy_7E0{fqo z9^$|6CI58aj5isceZM_ zt^FHu)}h^RvDt==MfZ%~Nk=<&?YgWWbpMO5>6;+HJk`k+{vq8`gVn-nLedWm|PR zCTCAU>Fd%BIX4*@7wii7?)}!kqv~_(!^K~%vpZB~sYQqjZaQb8bTnd~H^Z{OiF>7T zKBk15)b{=1;XnRqr^cG6sn0f7L={HZw_SKyEAv>?kLT|4orljd)&H`dcOstg9j~D6 z+ar&n5WAJLhJPX@Q@RTvg4Vn=d}k7EwLS`dQhQPxYY3?J3Xtq`j?b z=I378(X%Bykl($_;4IhMX)9e1e^9M?>s@vHv4s+&OhrrI>yA>nB$0yO-*|t%5%U!a zWOHGE*)hXkX|7TW&+oU*`^4h)56a0+kvVtIsO)+}Y?PChnOT;fzh>cz`1BoRtLv6* zo$n!VGAl#&-H(?pziJjNky|=TeqWjC!)jltxo;*rtZ!iKUG#8Ymc4lQTjRM84eTFx z=NE71_;tIqZQ0wtMJ|CJT|E6$4L|J8-r@KcLXL>uXpS165Zn^EQ(5veowCvw0Rl#AqT72G1)@H4XtO>J=jzro=n5-~M z)}GVi?A_+HBBR6XjO9GJSKVLaC7+nv|Mq!$W?^}+-dwSX>7vEH!OGVjeEk=A!C+zN ztlN9;6;JcEvSYF_pLXTd^-W)lf|R@u`(3JhI5DfJ_45Rl@QdcUyi?ZQGdz52i-nfg z`DNkrB_}(@7F!+{`aQ3G`$@Nu*S6oB`M*87{bXTY`>tsH`I}>=Gyd@s2{^lCzt67c zkAIwy4ingWrv1#Un28ae*_KWH?By^1=8)-`q_^{y-a2@s?5O*K<==X){(1M#zd7Q2 zY(=umkCco6w(XvN93S4~YcE~>_|tyNs!N9_F$b*gnOe&!y30JNu_(=P{KRjvQ^WpEST?$c*ds#CMNr!Z02OfTPW9Gh9Q$#hUB)wRB z*T^(kJ!4PZacjdU7RA|8Ke+W{_^<9+m?U2(AG&sn(Tr2+lYc7OzSBMPROKC;YtMz{ zzO&{{u>Sw`ZnoJ^*UL+<97_6AwQ1(Zv$t1e>l^)RJ!tr|PIbG<;ykVYHlLp^TItJl z+xPn8^7@6b7g@`Cru&z}L{r4;XXzQZFLe6iWUoP3d z*j!fJYL`j(qmz1rgh;G!1IXTJU_w$3<>*hSJWYkS~ zes;NlsZRPVi_eL&z4oPxGAD+=aJsU&Yf&LzUtZF?GUp{+KW*2nXq+%>LYVuZ+eiCN zy1%_Sb4+DN{+jTtbFMqg{7wih4t&+MnsKJc{&ua0Ig;PQk0nW}F zO7qN0p151FKaE&mboZ0r^Q^ijbK0^rER&CjZ#nwsbdKHPtLL6-ymsy~@_JyIek5x4 ziXCfCZdB}lP%|g4vuOSikAw{P8Q#8;#J`aK@)j{{JNOOgKZ_jNkb_F?cS^@ZJ4=Fjqv<#LKUxuC1C;yMlGq z$JF;TB^NASw&s|%%)2S)*`kbCKeI%6K8#_KDs*OA-s+JX;c|}0_fo~aw*~G+cWP&q zwmpAg#I@&6Uw#79TUO1_AMckfJdt0{F@00b)wf|$T`HGSX6o(kP+qbnCsMC|+vDp= zOXAaowzSkXrheh=XZ4@@QCR)v`v?UrT=Kto>%)(8J(i|J@_)TC{bf=9=}5yJzsJ&6=*g{ak7H+3+7%^!V*=-#+)k zs9&sdb0+f+dfieMiPe4>!a;;_b)@o)`bg;mF4wM!{!YW*pcY zIrpaj5w_V6eNwpgwXf<^NN>pa+n&9~_mcbO?Q_kZ&z!Pkd8LQQM2Aad*$p|nXI{K; zVf&0P_vS2l^t|=qdb=~L-*h}K)%3c!kw^alzjZ#xnSQJ1X)LM?Hw~st+a+$D`Hy93 z;8*!Q&PodUJJXEz`zD_J@oS$&>+Z6eAKTvru6egx!ptY!?PPVZ7mHKa%v|IBFCEWx zp761k;XTPG#y!{A|I6LlzKJg<2(ex^>be{B`3U2a>R%!bc59}0R$k_Hua!R5`168^ z(%yn+eo+!_Huo+ua5!g7+!w|p|6XO;&$aFxRos{EPnYXAxG3u45wXL)+CnkP#K&rd z&jA5l)hxj}#l~%0&Kfo*hL~k6a(cft=LI*ZL3H@Lpe z(@XkuJl;+CNXNAHEZXV>U?1a42BJ&#dmW+HF=I!iap z(;_A9@uA@Yn|seXUR&R>Wa8B_%Y~ue-RebN+;j?^d7n$-hQS0r#e@s*cGSHP*{Sy6 z@>Q1Eai#O#7Op6LTtGTeVQ?k5=xBr+? z@Ws0UD}Mf%n-;+;{6b$X%%}Hq*NPhoCs}2R zG%np^?tDB~uJrMRGiGMr;~#41bLQRJxSa2Cd)wA?jRCe1d)V$wPoHPerzc<~dCWw~ z)J52oQ`axPX6pXN<_d1h&h#Q~Mej|Iey(u5_eJ_~?!Bp34{AR2DKC-Pz`5N^b6H@^ zv!@)b2d-bZJ#Xp;&HRRp4ePhmAI(2yhXb#KV-Gk^X5b)NXE<@q@)(e}7&aKrWA zF>)`t7DfST4gH7=?Ti~ZQ zu>;qA7d_uG{jA$$*N$IS9*zHh8}NO<{$`;}z=WBOtr_v*$G16Y+@9s_f7Pc^BBPem z)VKJb2*1FB*N0xtbJ0?c-{I@e^sigeuCmx*!mNbY!#}=N+Rf8X6~6T5cdv%6#LDe= zb@dkfGU%TwncsSSJ?q0){Og;ptTNqhH&Zuwj_kz?ybKZdths7d@a})&V$^N5JLz@u zBx4hgTirHCCG#zA+FNW1jtJY)@t=M9)%{m&4y`ZaydQjEqA%mKKL4e&j{kb$>pW+{ zJh|`j=hyYTH9KYh&+T(Sb@}`W(TBd9UuQHmuTDAcdobW`kZNGp{PRbBex7I-xazT5 z!uW*Y;h%1-jt^Oz(gRE5Uq?+ZJ^kNQzVz4Q=T8eZH3)8+x;~1 z{SO#_+&nqwNt*t<3lZJ>VhdMo*1PbE)-1v5`6#E?K-2yu9kP%OU{Mt zXHISAo53iX5-73Ze#gCAH`e_=@YPTH=ikpor?U!~pE23=3)q%)CEN^%pYwg=7L!ze z_Up<%kx!2l%6DIt4y?ZWV(m6weVdofvd%G6J74xboBDFo&!s06S<7yo{-AuxA>!b? zhb?^qyb|Xt1g0$Wyu6AdjDOj7mZZ(BzjN<=a9=(7n!x4YzuIe>S1t0i;10d>(sY(~ z(5JNlYb49gUW$^O@k72dY-L=AX=4RLgYuP*v*&raILc4l*#B$OcZa9WW_Pl0G|Zj1 zSn)@l!Yy&$3)gkF>pbE4nJG}@WNR|%@r&(yaxMpUoI7{d?U3yK?JoBZ{Qtvf77)Vn zcSnYO%3eLi9(McnFU=-p&g)!s&C5&l=Jkb_BJ!O4emaVsd35(&bH2r|_4!o_7i~_< zHaXu;37odw&-nH{dD&TMC2k@s3#TxxPq(-wc;jL^pBguhimsLJ`@ib!X6z-^6*Kds z?3Nbl-M3U?mf-I@_~=@MS9adf!;fD!uJ2ql)3d!b|vwykJx@Keo{~D$Lvb4*quGA=X~G){N%QT)*k_UKQ~#N zJe-&F@#jA#3M{;)>PI%i&dej3XvDI=Dh zuF1~I^L1-QH_gAj;)CpJy$$ty?tCkYQeiLs>3KQzT8Op#H3Od+6Xf4%|7iGgrs=48 z%uWOQgKj7J+M_}r8CdhHthN&Ly3-XcExji6>LOi>Z)>g@cL&W_kJa;t;99e1ufu*ch#gDN-MU@!Xj_BL4F|8~ zF~QNEJVk4E9#vqsDRi+C#)*VexawLBsW*8 zjz#dy&ErRpf0NIi&vA}x({XL%>3_2xoZkM1^WD#E@vlcNOx%=odP8>O37Kz)CIxCb zZxeYL(V;lPyT7xp?ObH&fC|2^;B45oH~hD~P}y~A#&XGb`)+hg*v_21Gvi1y=epyrG3tB|mOhCnym$QfF`j9Qtmob| z_H8@; zU!C4{X&Of5Tz%tmv@&na@52WoYpzd8yK{4@_mRy@YFR&g5HQVjp3m||>CCc<>Z?08 zrU`C1H8Di#M;B}Sws(h4_Fee6HpO{uv7z49z;Me~TkZav2W>0Oy1hkbN&lI3lao(p zGc9e8=?u5N#+}1@LU6Ig$y@D?8=7}{M}22V+jGh0z~=0z@7x7!pT2(Fw(iUBRi!Sb z2OCav$}BtaYrgo`P^DkJqAxu+ZVUeZ{?zmY_vWhwva2UAVY%CS=hK z)OK~LAG>vWMVHSjfn{4KoUr{a{?}2-*=6pCi?K}HPDU%m9EU6%r>h7N_dou-Q`l)=65c|F`G!C35H2eG9cXl%TbB zj`YDdpI*mqm-xXXID;$iON@j1EvJ_@R&y0|;vH-_4@UQm0_@TVR&qdx!3hK*7YcZQHyx^?xMA%lr z(Qw`0lJFngryce#QJC}b$kG&!TXy`t$1enKzkTI-Mt>Uns-uy;YSY%c9#8h%6vFtv zaQ=f+3xm2!y^|d!j&1&KHm!EnNk#Ur?^zblZr*bGf9ailwohzkmb^UZAFTZH&YP7h z?<}|_?y}UYMfBsAjc?nPio}$!iVd;auA*{Y07?##bA&BW_n-j0atIda~O9-E%E-JbDw>xsy_^S^#@f1U9B0I!zR zwHZ1y63z&;T$b5=`}MMk+Tps+?{e0J>x;549|OYu#2D@#o^y2=SxG=1VRRk};JGRaU-jpxx?MWvDvg^{$g` zYYLwgiG1s=2MODm&nwn3HSe3Y+-6z9 zj;@<+>tknCg&ea@JtHSndSHW`=k~=X|3-ChlC>>f5Zq*W{h+JDc0G$f{xcjow`oL~ zwz7K1=Xku~dY=@&-iQ0#)oo?x4}?D3dqCp--KH7ds;&QIZwdZlvD*IX=_GZI6(6_u z#-|)Pb>ifr6=u)0HZ7@w@=X>sTYWjo8|Q7ain-0<|L*L{J1?aa*I)B$KHXXJ=HRl}NTK{A?@yO6e%L%wzPspRRM3Zt z`=_HGOsOvp;Ij0aS)AL%RDv~ZZR(uA48E0?J`2AJx9#e9_h9Dd#^R$JlvHjsYWgWp zf7TY-$I5Ud(!MIq>*+E6$&=$JG2P3b`NBJBf|lSjwWV%?riOw4uS6c07ns+1d&8`1 zMw^*t9`4#nFJ@j8C~;l$&UV61?clCG5ynL&YNdNGuF(C&o0C3YLjQbQM)D@!c}#P* z&#h>EpJml|NxmuAVzYzD0mbdEuT~ABAL=*>3DVC(VwEzxGRUMZE8! z>)|zLG9pj>_~C;^q_4mGcJxzFcEiF-$E8&%)T*zvM>4(bx7iwvJ*NO6N zughqcVVC9l{>k^r^hKGUax=g8on*4OU3=YSPxs^W9~-&fzW%$9JGjV7^2mme{EgQu zb~Horg7$$lv{Si zNh7zjchmMpJiHe4{%pf$79(Nq)YHE8QhAc|I7JhT*~%}Pzg=6urB&&e{%hcHg0&z{Dlb^M}TIXEwt9Z+D(;enPi&Yu!*S}QQ6e@cpWm&YV zOw@s+lZ8T=JWg)?zT97Z;#PnEk~aoY+ky&$ooB`xv)Am{^7&n9;pyG1>J8s_<|)Vf zA4)m;NAwY2>=jLu=F^`ZJiE%lIQ!+7Z@Z=x={U}@7s^mv_fFCI%O2Hf7f(GAo_(6_wnXA1(lOi zG&1DMn7T_!bX{*OM~bG!+NE_#Q|&@zC+o(BIF#03-5~PfUr>VPekH?i9lbnpk;fDn zRyMpp&0Kvzhnx4M%QZ1hQ{}HhFPI+Y&-by#nU`wpTB%uL{1(cOf<*$@NFb zXECD=R+neqNx<%Z#6T1`Hik8WYT<$Zcl?HA1w{VrxbTgzFWV=wRdHPP=|y2Jk1(6rXf zY=7y>DH(p*OJ7LqFAGwTJ>SJO=S8^owbyn>S9|}-aP92>m38I6`-x>@nx9x1P5A8W z?mawM@pgKqp@PZ}sh?d26^El+72_^G?aj_*4Jq?JysLBC!q~`bFAR?BR8hx=LsMX-oWCzp%+E{1@i0*8DQj%TcsI<=Kz54qq5`Cvi`H zI^}1-El<{GsZ3pKCKeIxO`QA-Zd%T^%h|JOxiriAsf!ywCKsP>&uK~AviIHO1wx7O zuAgV{T=~qxqRL#lt08WC)Gb=Ra#kq(Zf8~u3VmA1(q>aS1Ca7bi}@;KuC)X~fI!!D+~GymMm z(9n^0cR1j7s7{t+^51Z+#0MIaU#|L<6T7mZ+x3pRmq2MxW~TRv^|gxO_3uAuF)nR? zAnK>1F81)c%D$4F@0zY_hJEk9m;K_ikKsa|si(z)K8xf|@ICoCe!;W%K@K^-A#GoZ z9~WNs`}If3FKYJPUgr?u>mQf=m0NJS?8OZyrs$e&yK_1IU2WFiyX%t5fxT<5_}%;v zSi-ZaUckqC{-fZ1y4U`#HA?T?kl4z{v3~BQu2UEO%?XZKRiUo6;*tBbq<}^yl`fao z2T$wl-oKRl9p8Veno*Y8`NHOz0;MKmYEQk?v%8~ZL$4Q{iv?q_(*TdhuRvIw@-due5dP; zi$;Nf!BiO)rN-L+1wHB3QvmR`NFKdT)l@wn-z}QXqCp?N^E&=#vgV) zc4-4w*MZA5ExV81U)b#J+C5>`=Avy2mUv&e9C_@-*Ydl!ZX~W_bx2-$QD3-r#)HNg z^)-9NuitlzGq*Ha>UwBn>@%4SJS#ucR~!%7Y^xl$P3X{O|BN-p3XF-rLP~m`y}9HX z{KH&Q`Eb*n|AMs}xPScKAMk#f+46hc+kFcoSM1olhO2-3cAjths%~sads=*SMTplO zHZytmDJS<|*v&h0S!6@Lah!j^sgUmmZ-2JR9P8O=n4{r7A#{T4pA??6d8;?8zt6JX z?*C6K-S|{{-K&OM<}qGw`mv8}Q}11|{QKior&BJq(ACvX zV8Vvn^{baO{8+T)h3LuW&3~)5*61;00BJYKLPU$Rt|Ht~$7LKFN-cihRpY1suBvD*_VEw;K z`HR+HI-kp4e$GEUpXJPHftL$)OsmAX=3bsDS#G1TSL6LxUiS-oU8PJi{)j5>x_-ob zlTDIMl5M>7lV|xdUrOC?{CVbhWG3$$jm`xd4mh#ApY*{#N>}=n!McNqLcP_$yx9W< zv$Hw!mN9cyY&TzLQYrQ9(0QLXa*Ma}|6|)ze>Y{b*+XWPcD`^4*MDD)XO|vc z9kT!C+y~6_{xMuoQ|G_^RyvUP;e=e-trjX}QNI@aneCvz#k*NwW&Y!{?Ojj&8P#Xs z7Q1@t!e5RLY;Q}>S-%ixh+nf$x$b*HZmUd$&Dmlup>KNvKP1@QiIc3it<0(~tnB*y z{TT0dv5PFbxF$E|+e@!1a&wVBD;*#5`|W~W>CEK@q9L0iOPSXttdE{}@wmH4hfDs|7+#yhS-0;bJ!K9lpWpKKa+E=#hKUk z-Wy#$h_IDt+RT>Nm0i-*%>9l3=^lpPfshH;1E`nnCxQnlu@ef^L~S;c6Vo0ylt;Kk{Mvv$$ZVZ zvs~`#nGb7jviw&TjlP{H^Xrr2gh_GH`d8FNrX8=G)OmzU<$Xn8=hS~c7)4#Jf4o+U zG;NywZb{k`rL$Bbq)c+CRrr{ zC4V|E9FLonAz#1w1?%@!GyE@3zN@riq1U6PG++ORHvT*JK5y(eWxcT@j#;iasx)W9 zp-V>KaD)|k84tprPjuBk;9j5b(Xf5GvxeTc_w$_Og{}t zewPV{KXa*s{S3Rc>czXe@qZj1O!rz?_j~>&K8b7Y=h}aH)-hN7nR2!$_2xaE9_D>* zdv`Y-kk6hVl|B1hPSjVWG{;T8lhl`Pi0s^u*#BNC%llZ1zO9{`P&MDjn4M-}li4?FWlirVx^et}aedv1wL{5h{JgTCEp6M}f4z|<5if0y@_gP^svBr{jURlYBMt+P}5_&#A1J8za`#E5){a`EK04XcE`M z*#Xu9wmY|+;&I-Ya9z;0Zg_@3VT= z2(S31R?UB@<(}X3J2B-aHXq1w6KvC3YTTxJIr;f~{y%q47_|h6pK___@&2}F9kb-? zR~Jvnx~EG$e($z=O3DYH#jmgGbW5-5{_w$RU%u?Sg7UrxEkE_N3MH;wh&^AZczHp} z*ZDFc*YwYwUifC4`RNkLdHZu`a4zc&)}6pot2fWmGmm}yj*g#ZzAF`kFJAPKvO1;k z@pq5Zf6tKfUoTWEuI>Dj6MjY|vz;wCde%nS-D_(Vs&*e$_bI*M^(R7hU7NV`9orwZ z-m~6r`Ek%|uKA5ErA&&EArIW#o%l-y?wQ_pV42^nJ!k(EzgtIB-hHd{4B(h)I74`f z#9oCH3R=lMr_Gs)@&rV5Gh5%+^>PX@zw}$<>ikS`!!wa1aV=f?3g**~^X&d}Y<9ZY zMZ@Nwrz1QxS6co)|1ZH*UF&Yig3VuVKB+b|jd*t~oL^izaPhUmOG|o}eVn!A&*2p< za_{Rtsacj)H7(W@eDcS(?T1*v0@34g`JWE$mS|f0_-*AmLI9=<|q}gKwwplN8H;HM4W?qw@xbmtL6c_n0x_$()mizRcu3(-Uo!;iPGx z&+sW$!AYVw?nG?e6|HM)G9OAf&i?JPLnC1q&&||6RfUf+9?VJn<$j(jyTceiJMO)_ zS?TP>A6+MIh$-H^z2Ve}Lxz0sR(%x_*|^4w>sr9gp3Hxq*@oFC>by(#p4&1zcxm=s z_amAWt^GpF3h&H`*yCIN>5$UdUqU6C2V|xsrCX_Z+-P*a>pty5UQyuX{&rSr; zHC|!1H$GSE9Rn;lbnG$v75Sah9pyPi?!@QSC^;07Y{3LXQLYA(xU3`jnzpirW zZR;lI$?mP+FNs|A6Ve?>dy7>ShG`_vMURIX7K->oF?SaG~7wR@M`#b0&QVyZ`ur*MWI6!@t>a%ryKOTxTUP zd7qfvic?d5uofg4U3HXyT)2aMR@2&93R8s+wkY_VoY?Zs`RJ5IMmu9>@03s5?yb16 zl`ZA?a`yca>kq~q7HW9?$cnir#>I5Pg)iSHOu6cLc=6X$hht8~{c61<^yIu1L*MKF z5A-Cp-`zHkR`cKSL855gyj=w*EF3fTZ4&>_cCmiL1VIQ1)UPd;En-+gqb|lvw%xc(bG|S$F~0^?hGX zhEKSD)LP|ka;%JEV#0z-{TIzMnyjZrY}jmYEbhC2)1SQBf|>nRFL%y)rplAHWZh2w zJ$H=Fm*{=J?N=qrWjgC+j9$3UoVw2npNp+BW@{e~&idIqyRXI4$gFUNepSG>h-;?z zFO|l-L~-2O@M%5YsdsWLe>aE5Ytz8!gv2ItbR1eY=-zdz)3 zEPA!oX4dBi8}qXt+`jH&y?X7Bl=G9X;UFK&0M;0OXza?q%e9h+6Q=T3EsM&S*gJ;S9CaM>c zBkIlcr<7?)r%aA{QC@$NahA!ul?S62J8acvSgW&L`$bgnu5Wtq0zk zN2Kk<vLX6uzOwicl~W%I|^c|ZR3QjroQ=_ z*ty#H(mZvEYb^~4PWti*-z(P?o$UK?rpY4o_DKtY=btuRyea2!%0e&BTF1pcNcwnN zyHF)x{Jh1t-yTV{ENl)q@V1vDJ4pMXUOwZwC8=?-NPEI-Qt$B-2R+1sq~LWsiz}jP42;C zK5P7?3(oAR*poCVTiuEEi(_`zcZI31Cbiwy&w0+${r=YB3%u2nRJN_E2{0-?^CnCG zqU_tBXD&qt9C@wuC-q@LYNdM3%0D^DT=TAW*t__N+<3md=UZnAdq(>?yOWV0@MBqF7jdH7o+lhdP~I4>uxs6e7C|zrs?>ULklKYPhW82m%YxTr~2D!|HpMyo~xBf zJ9ks+R|C(3u+uFCX65~V)P25Om=dt+iR7tePyZZ^T3*??Tw|Uyi(2nKDSu|;?j0xp z7yWOE&)TJ%-hV!AgG~qHlP7#O#R6O&o7|$EOSWE1F8F_7OU%X2jD=Df_49cBjy!YD z>9tFnJNZm*X!Rq9wAs3L!S-9%7GGU@dF{IVzTg)=37>Xf`I1n7c7Z!j$mBc*AHQA) zr88F25?X=BY{RFq9kYnyXPWrzt?98_(O2j1@Nr)qrpxHsC9}pOZn5Xrv+V18fAQ=# za{BkAR`1`2@M4pK&9k?dZ`l#K^6F{7zV#D%7tY*p%`V!z`na2s+?8Kn^==f%BrK`@ zeCFt}OE3AiDyZN0-&pY}>GZ=N8#9`}<_P`E5}mX-?cL@TU8^Dw&Q3D#=zR0$#XkA> zU;L{qk8PIjDBder@pVdSylczGz{Nc7!JCy&D}PFvSSdE?iS!!<3+Ls%VV%#b*BLM8 zJ8ozOF!tmgmLXv5gZ{XFAMmN>yHd zyFt-K+f~uLxvw+yb!eHZro>0HOS9R}?eZ3Wy1Un8TNIawk(b!>Qlxh`6=7JPk;H`pr_3x`Ecxa$#)Uo zKF;Od@#>geO%c1})AXe|WL?jkTNLq(eSS>wcV90f!5bYf-{nsHqWa`w ztgTLgV9Q4Xce9Txr<|$vdXOm3d|Jv%kvBynapfTaT?_7zNTa0pZ9)ev=Fd8M}laR zQxe+6%fD(*?%6X7zs{|DdPF4c-8t1+3r!oEo~-ee{m?aK`3aVZbs8~VN7CoI1kLRW zea@kDb<3HWaNB^FZQt)dD3nvqnec1t52sn5W)d?OB?kKKl+jo! zsygYz^-DtQ+ZYCh8p2lIQ4>Zdesloj~It$dan8E{SWz?NS& z(q7YJZ4HmV|9LF%dT@VBlUzshysM{WWVWu>wh8-?l(4n8JlOv>N5Rj<=Z>qN4my3b z{B`!$qFamqo!tCq#$@f^Szms*7(IRJ#qiemOhOUjA4A@D5WqlVILb1-VbN+RqzS zFPf%z`(m|BLl}eIgCee@e5>9IJ%7h%D6`|;*2~}gj%lnnKlpKWllY|d!Rnhz()R4< z4_tILX5q#Crpl{g`JE-Szto?rS(I}w=jL`-nbgCVrylSKynIaS)$vUqca_)5D&IWw zb%mHud(V_6TeIZe&8~3ZNvSQevBV_k#<^7Dt^LOQrC0Tcd@)oDnPnh~<*5dz1Eo%McYi0&6^ewm% z^dkG-o0+n)FWXN{-*KtJ@I+K;woJj67*!n|o(&ErtACt5S!u0*MJ1zy^WyDV*>+y9 z-$##U)=0l@`}V}_uHxo)zn>o?{JZuEz7^-lT2v}v|8z#Ttl`S~Yc^NSstlOCz6yk> zcGXWiD#XVdX{BcRI(60Ov`WbWmRAphpStf_uD?J`mU(m4n%l--8{d3wlQMpBxgf-B z=3>S^bG^{xGF*w)j~55;IetpCNfVKU?V#VlX{5x_4;;S2GvsdkWRK^%1!SFQI zcxKqw-oVc@Hn%JkDoN7Fw(Ia)mi|B1p7C4yna69i`OKE+2s?1 z_DX%>cw?UT^>;VV(;dY<6|<_=J3KB=oVzH@@=Bx6=VZw(W*rx#mwQ`<>|pWY`x;>o ztii>?{aAx-?Tzx8-fH@bxV$*a|KGUeJ|k9rfr+TXlYGrMZN zx_YeAh40^2zdzu$>de+<=bnm3f10Z7nVop@(3}IOZhlfZv$%rCu6Fj_uge^7><;eq zGM*v3ZPngig)VN^1%Iq|mQ7t!b1-$LU%Th5H_KhNYrLLb+_Eh5&qE%&=@;*m2c#Rk z4`Pb=&EH+sx$xaL4)^dnwi&HglMQ{|ZVbED#eF~2ZB5%vd4KQM)0Jlh=N4I5CCtk* zQd?eftD#qFUeWb)Z%&=o|9QuKzCq)q&AU$MH=nz3*YD%nSuzGIBIj?lc;3hq?BFw2#0#mpoU`g5GZ54HY}n(w%H-}I`_hn^krb+w2; zuF*1k&-S?IY-J5E#rayr^B4Y=W9yXLxMidJH5<(L`<;G_ z<#Eb~&iJ#pe=>cOtt=X48GZ4E)bDp5Q>JAri%9VoHLOsVIC~W zspl(p-kP}}KrHO@rP}J&n4E+ASNKd0Pn#1aubOuyxru%0GvhyZHhvOWB(?ne&yf17 z?sbAjOIqi)e6QDC?7iY#&x_3~*ZmA%wr^@hS3{%el=Xh0b0%wkkMDY9kYLyQ`AWa% zoSwxS44HzaD3_|Se0lNEZRW$~-PJc4XZ8F(-^|N3<-?A+dBwr&Zypu9!es4v?6>Bv zyL=@P6UwG+{8W~wV9fumXDJJp;Fnj&Pd7+ZDGM9q%+iP|z5k`Qe)X@=V+l(Yc$Y?; zS}i2E)AV$Gu};MES0(*nOXXL{&u4r#ZCzx=>7A#Jt9?GMv)_G9%#Q`e;Q=!v12Vn} zvn*i#m9=uE+0==jEsu0|RCL}E%68dT^Yz7qQ*lq(SQggjr7zduTA)#Xmv5Oa!R3g^&+OeyC zVeL~qx7up@y=^Z_qzkS2pD%B}@ojt2#|c-o7Ho3cdGFSa6!*MYpFCL&%(tFN38@W! z!?N{Ad$Go1rA;rM-f~iP`{|+4#Ob)+Y5TDwf76V z8fV;|2F9B#o4>5Ry(oNjtjPTGrC0R!e|udzz4q0~i+)pHv3X>^*W7WlIJ(PIO6%Xo z)sDA+Mm)UoJ?pc2%7o2ley)0bEdOfm4T&1j`W3(V9>h$s*}Kzv_J!ptT~n%-eOvmO zUxeBDho)8LyHxkAN7h_xmR^f9KQH0(uKx1Vh3pd^_`6tHp1+`6Ws{{mO){dX+ftZa zE<@~3A>Y}bqM5ata~6MF&3^upuiu=UejO*{Ef13Kdju(|h>O3BeN%MQ`H9V1Mg#p6 zvG14OTWyhB`#xpC}J{EocF{f>nTjECcTdEpM zIxV!1i|>9mrT_ILOU{ZgGqV~$C&{Fzi|$^y_;ud(TNAubpHxc-I`$~bcgmK<9og)g z^zTkC`kk@O_|)}KPj%*5rgPaQpT2s7rDfI^)_mKetCXvcY`Z7_Uh0sxvI6H;pKTj9 z%$;8P?)WCfTL(CKS1gdxJijDc%8UEPU6ZAsUJBlByZ0%h-6kOT_NTj*sgEZXZe`J8 zN;g~VdfM;b)lc&>L}lEvzil-X+wQxCuXy*~`}GGJ9&5S(-#AypRQ$r}vRCtT4d)nK zFJRwY&^QyIfe#WOZNniZ3MO=Pd2?y9E`+`ivi{IlcP!KvXzoxb}v@8m4o_~F33 zj=fsh9;U@X_k}gx|1@>pPOtVoTXMf|YUmZ!uiY+}rzEST{1+;?n95x~v2G*hMvg1t z2TYw!`sS@){7`9Sj%@sLuMbL7Ut6u2c}?iS%sLhxQ^AD>NAx!uILdP;Ol&KcZ8$4@ zS&H#x&Wo-4_8hnt<@HomUa};&VAYZm=jMv^8 z>V<6Iu;bfK*PYpw^z-he4~G3k?V;NipK$mTTWVnWe{HG>Ltb>)vJ&>69F9%qVfzX+ zP9C`yz3}XD*GaDr#BDD0JHIN@Tk`(#H7f54O?E%np?pyI{K^cSzn{6AlV3&3u1Rz} zXdox`>B3d_%Mo95|8xg!w)^>6I@SKozvX|I^ypP`?O``kGn(Dpd%(vyzUh6a_L;-; z8?@}Vt)C}$Cni|oc-_{F==2l2{{Fc?f9j;j^yAa~)*q=7w!b)I+Fa+4+nGi6rZ-ny zJQuonQjM#Sfl>3TM%9-*AF6A!9z4i%$jdjA%lF>&o9&F}-B11X0wsI8f;Xfto57{B zb8qruC8^elJLk?Q+_!PViOI!Io*osC{w-ub5)mE5ciE$Sk-p%*O(xC<7(TyXnVqNC zcvh=1=KYGiNnS^@lOH^knB^#!_;mBJKTo%LrmQzsyLs~CHA{b$K#kaQ2RA&(FVnIv z()*!xM%A5pe^}g$f~lsvuE%gyZ2OnM9r*a(uiawIMU$3HDcJSeH}g=sOT+t>`8yu@ z?(m4PF3kLRt0J0RM9x~OSTy-!oUzC%?X$Y?@|TN#2ubtzShl^DYu#xd+nlLEAwS-V znY5{^SIJCSnR4md=eM&j&zyMi*A8}`dY*i-HF~)(&KqBGG`rEP$=WA<)R?PGX+6Vd z zO6l#ESEr)ngpXQeSC`K5cHc%f>~suvSJ{pk3VKjHkmGUjvBAHHCn#pqZ3X8l1C-5+N@Pw724$4^2! zd%;q^2_J=*%AXI+SaWs4i(}>|#QyxcJh5Bs%Iw7M45m8SV|qu*TqHJ4anfFMaL?uL ztKPM%l5Mv}zkTw!gE`Dds>osCL2H-q&usf%@Glg#mlFEw)Yr6WHuK``>0a*)Og0Pn zx@$4L=B(J*>&|Y=ynWsqjzVFZ!1VtWCzA3nmrI$h$iMi%=gzhE>)xgZ%on#lGw(HH${n0lZ8!jiTyE%VKe5ncFzWWpB9=fXj`hXR0&1apWg+bz( z)3RR_%|0_tQ7CRgVbzs6*E{55Roy=2{9o)L`cV68h<}}z zE$@LjS2cge-= z;+?PQ8WkzoyW`Z1)>ls{b?m zH0AtOuk^KX@3+75RsA5tkeX^gVe3xC!#Cyfj>UQL>Aha=xv4n8pzvmoV870kE4Ob< zo2PGPdnD6}U-aIpz8rzCg;lrg-@81w4Khosv6C)PS~$Gd(E+3XV2$49Nx$1dTXB6OotPEE;D}JHFKT(dzHz55Y>q`qm0Ha5 zS@zCa>uR|algDKtPD`cr)327Vd^PcbQTg7_C$cy!kIboE8RT>6Va4*`hyE;OXZWA- zGnmY>))L;R%u`nqtkD;~j*oZ4JnhT2B)2b3x;JeN#6 zo^t-(QnyQ@krRr3>zC?3YA#g;WZ`+V9j z<@_bDIa#HNTf$aOFgW13UV^Dif10Wz`$N-5qMzmopY~~3S)^yRWTkf2nLENg6FGR2 zr1Vz3DAP_k{;S5Z@vx+0QvbsMlVcB;aD;v;?7!E=Y17uAYCS0?M!o5_h2Q63-94e( zwjG%K>t;!c>8p>M*)HBsxxCnN1>?g0biahUZr@#rsuK0-CKJr}&iNEoDYmA^#@)Nn zTX(Yfr4ae;hmCDblCAfcu_cC|&UNo^Ggjr^GiOCD`>{_J_Y(Xjsz#bVtV-ap33+tL zl>g_(H}30VbKJFNZ#{Qps>y=hCBoYZu3s}W&3gTR%>`aXK`(o$7bS{IO#N3^+eFbGbdIlA>U~Ze~e^jS-z)Bs084zh6L0GNyNk_` zdbR0-Hj{@-WqoP-a%=zeliJT;KA8K>P{oQXvf{SJfL@%mM*qrI=ne3M|A6~w8NL2Y&S4Ja-O>;-PD}(k)ihO9ePO(ueCm{nXmRl zkvs9-wcR8BjRZsiwNU}5a#!ulDIC(qi$o?j`k8c(1 zRYm2^!WPazppEmJ3}s+^eKHS?o}{*A@n8S z?A29AUTU2DQM)>fW&1_mxt*d?uashbv_&>e#%oH#6Ed*ntyuyN!7rkRTbHq>pxd# zBxY{7X9LqhGz# zSjAmn-ml_?5B9!m|LJkrm_a?6Bl_FBy8k&{JdM*i9nNMZ7A$|DYjX5@K*&on6(d7B}(K3zZ(^74g&7XHmXz7GLORqj-@Z(lZ z(z=c*afc&zMkO5Y&}Xi={JOSmhq$%cQU|#t_h{`ajbB1bUnHJ&yvFjpvvaO}^=8HA zr!|D-xw52A#>{0mi{=WyV0}UBnt37nt6&XY_qEFB_p23KnP}wrKl{^q{p7Ns7YnC} z$4xCy+jX}6?ABW^`k#Gt6kqaBdY!hMrNyo|&dUdE1f*j_9pA0bJRU63!QQnZL+9Me zJF-`|1sI2P$JAZqF5=K+7Z==RlG?E?HRGYtt^T#HJO6%Pt&n!~%-7BGbuW&-t;>4M z_bmJSlmm-Hex5k(cUv$dQ1ymDw$Dq+8}BU7%)k9m$Ml&DvqK%d8P+U*uAyu=hXBKt7U^`Ju*+9A>Lg2 znLYUq@75QSucq|WspQWOJstJEZ2rXs;a66MhkUV*4$A2~mbm=If;G&saf0&SH;4Uj zewe8^MbfP4q}{fU0ouI$H%vawyx7=L++LH=>+!_6agOPV++_FLte+NGL>8#-l+l_o zM}F6`)ES57ukh5~=s(B9?%nQ%+v+vzk6Kl7?sw^M?Q=gDXIoxivP?&!g3IgakM8e@ zx+hN!v10Pl{us-jk{v?PuO;%;4`}&r-3{f7l*h2&M3*E7)bl>T9re#LKu9YS09p17i zgnv)t_bs^-a_ocp-M^B}7i?FW7v3{>;Y_;z_@&;Aod>xZE~?dpeQ6HeYv&oSDSbB2 zJt8Eqny<`eH`kuq-VfH??$E8-u<^;auT$>(9NJpvaPw81Px!rXv3u?7S2^~2Ni8|J zmD6m`x3k52blt0WUJM9GxV~HP<>5-1#Vk=e9{qvyXZ*gUl>gT8!9syHo`asb3qoAW z8s!!Uo$GupV{^cH^`@{3OYTGp79L6YR28DKTOiT@ZAOU7-`{=Q0!g!GWYp;H|Is13 zPvw3^*osbP|AVhKMYz{j7%43JYV)bA;c<%Ns`GjJSO4e9F&Osla+z(}8e!YCQMo+$ z!mq6v&s(>|c`kjf)H#2_p?QWIYCN)5e*I%Cq#TqX{cEOB!@)V*C!LTi`*_R!F}{sGLUWUEtjfvv_gA}JdQQT1-Om*v>o)yo{x)M{$Ny2*9iA%4ezKdn%_AEHZ`mR7qPV3X+J#4SfD((+jeEzicGndxpI&?SE%dNaGx+wj|5xM`jYtt+mX1vwV6v&j8 z-+DVCE+V6B_p7&7v%dd&74~W4I;O?Z?T#`_CKP(JZ;52zxozro##*6{jHQQ98vk}X zp%G%vBP4x#s&<^Yj^j@Iv_Jn&uVzh`4nN8meJjL7+2!ThWAm)0`G<>T%lJGvv~!VG z=>NIAk9}`)UYoS}dAD=xBn^iG{`58mrzICTHtvg=m43|f&BrH+rLzi!lNTM>w7%iZ zgoK$PeDI-_*Jm4`qY5q^2X{rI%mGio?OHv`m;G8 ze`?KweG0oWn)bb4->l5Icl)!XNpcMPzJk@(5m=S4^k0Skze+;)6aO*4U_t@+#8biD+w8ff<%o}PBJa-qWeD-oj0BhJrOtqYdkWPEpH+)n$|mlxce z@$!s*fyxoRwu7A(C2q^#DqmoT`LS~!gQw^&<#iG@zp|70w$$fISOzbbt8z3qS(~Z! zZQqN&&%Hv*Z#v!w-k&Tfnscx9&yy|UzQ6mQSVqp7@z?hCri-tCs^st4dEELSQ{-I3 zrj2VJ7HddtUffV8zlBXt7^z`bC?^znjzPuWi%S(5cZ+c#I zOT~cAJYjlS@(lh@&Wn?`N7Pn&31oRJUh5tCBlL!4a9() zU-pz|q8o2Zi7VT&uJ=CoY5uDp%tsS19cvbM+Ib)(yCJN~^u2IRR?GaXx#F+*qz}$~ zH~;D{hfmBknbUmJ8}^)Wd(J<mV{woB z8Csg9_m}fZcO4WCKc*y96j}4;uX6I?ZdJJ`jxTZ-N_!b+PK#>$c%{%lE8lqQc8^_8 z#MZc_xW7BF>{ftkMU%+X{QW8OUwB=7>Z^G0y7HHV=O5%2>%S0YKGQd?$f#4r`N9&_ z|K<8eJIZzE)`|E`ahLL}^RHf>QZsu?x9fZ_q4%r&^LF@eNtwKC=L)q1*6H4Kb zxb5$?-oD`F%9#ec-;`f<3_0VQ|G^>GKToSu>DcNWP3wHa&C^2CmM|^q_m3=pKfUD z{r#!sDM2YU*&sG0rT246-d&vT*0J#VZk-C90L#q+4KCZK^kg!2-;CJa_^k9l_YZ@d zBaHf|1=bioV|1@uHL>$Xs(h`{7A6-C{L2taU$EOfe9#p0MMX?;K&T6Zusq%?wsXul(EYyi~!wYrRO8hu9Y0^#u(2 zR;sNW`IFB}UY&jL<2kb>4QewVe^&nVT76SoW8Tr?{0W&+cDjFf6Sm*2E12o5u-~@h z3&UT(>?HfE&I1~uLR%JY3w@QWcADYi|o?+-W$nT0n@bel(xTgx^#X;&gOq< zt*5LmIW2k|?aFys&}E`k<&FO5^~TGc?K$6Zmj4%YSKC(R<0W%IijR5aGltJ@vau_h z)!oIoe@>ktvh}>k(zLC+ea;uUXSQBpQP<17 zgZ7vIZ|Y#0EWdQop7$(EKg77Z?~##AXy6pGv%0b__Ug^$>x(+qZwY;TbBD_9n#KQ4 zZ4%k*v9aDh!fSKaLHAoTwjPT6ohfePWi!QdO@{^Z>nl~?Z%kTt)h=tJ%nntpyJ5e& zwx`cZ-@oz7yhmz(pUK>1^xyZ&d|4B}-$jZaZk=X|jGk@7{-tmx_L_f3)XvHO^{*?kIJ{cvwqf`q8Dn*?mjxquu!ilIyB~9#rMv> zV~z^V$6A?J>t{>$1!gUN#V~8)$-SqhE&sJTDQc#?-n;2nt@j!WxP7`}CtBt?&-ePK z10QZ0OC-GMbm6;WwK7BdxBzSIC*kKI{A%x=b1QT%%vu}SU?RBloWzU0D{h_$)ZJFx zvVMs{qRRTK(bp%R4r@Jhr8x0lmhuA4uUnP=r`rad&nWlbd6&n?GWKHS{j?wJBBymn z@7B5E_fkxfxnCq8Uu63G4o$=3Cnqs}SueF~7Uae1*f8aAcjbYKFx9cywnr3t8M@fI{xxW)k&)KeA>3NKm zW8b^!#;;0$8|op0T0&*>r2~{~Y)28@5dDu{a_W zkz{Y>q+BP^4f1r4d(K_ByfeEcH9bmY%b$&VjN=5PTT86$weIrruX(gS(;|J1tA*Yqzr9EP zI(+ZE|NhDzWfRPU zn$FF4$t*drDT4dM?D7Zydh{3_qb_@vO#&bC(S`P0YWiWyC-9;r%f zXI$gw`s}>a+MDu@ttsE+WXhZs-Wa*QjNrLml&v&F;os+s|BIc%ERU`$Qz>6nd3Mjg zz`7MvRhFvdm1`J&{M~&ju3&%1sn?sOKIgD5`NhClvFu%e!B5U^+jnMRYj3-#x!+x4 zaXo6f?oFXD=6hzX3%hc2zn}e+SjN?wzO6rmgVviAGHsvi$-AZN^nLC{=`Y2kd$wqs zJ}XaP-jY8*_IxYHWP$&UMuLwQE7Vl^%ww?wzv=ZN@=>V);Gwub!-sy5U1P3_xvcmGe%@DPD*U%wsnu4;+dvuc}k<1yAZ z`ehY!pD#4ceO9A%(nbB=;wqoVrCXYxTOV1|T3_D6>2hOcO1rVspJ#$M?d*1%J&bMD zT9_yh{M78PmiWt(KUy_(7Dz*A5JiM9nSy%;N@9%UC9mgPk#JYvZ_j$eeOlU#KLuZvv-HS zb>9E1e`mkuL#e{9cM0CdU!Qr9Eir5PsXJ+_dd_VY&7N*-IonZt-%rsvyPo;0CN=i; ziY6)VO}JRllD9*^cj6h<={p5i-q8BUTORJm9n7b@QnPYnesB!EfGX4g1+9KCMnTFJ0};`0&op&-%^! zS1KPyOZ;{|xl4a$bF`y+jLEkH&s@Iu?&_W&et=2DXs7hf#QE=6{&>5(Ve8|X@2vLT zk6!(-TmLKUBijp$@;Mi@Uai}*|LdP=_mq7&IbGN0>ap$2@5y@Ee~npc?V6^1p{q@? z!Lj)arzZD_B|3g^eXuA~ctM)+%Op8z!4-eD&HuQM_0U9%yBwNq&O7%^_<8H|o<$pN z+uR;8$h_)W>CgJg#$RFOa{Xsw9q+$I#yy-Mb?F|Xg!ha& zZb}u}+cIU>x@GGA+r--F^XQD$#|N>cYZN1VmhcA%|B+hYu}81UqjJ;q*(_OXTK2Z@ z9Cj(}WY#x)y>7QzYSfvP`_~t7Hsnt^o2Zi?_pzwLV1{~stFm~r*1T=r?t7nqe6sR` zs93oXdwhO6OP;IFg`=Fm%~O~;GM3NYcr(8s6xw|iPT>*f1gaGN^M zeBl$b=&*2EXm&`A5bNJ(pBx{Qup|Ckrr`Ru1YIacAIT7>q(w)U-$W2Wv0jMH#iHt`EN89 zyH;oa_xyQR>YU!wOLl*q&b(fkef&Z$5mD?;UgVoahjq zxgSD>e!e(e_au*XOJL&k$9H}y#D6)>zgI=_@Mp`-$u)`x0%SJl{)(|WsqsFh@Zjl* zO)1ab=-4(sEWCXF#x~J{r=BlXhLum&(0sV?smiex(@xFi*lxH~N%Pja`cj>Lo%uP8 zXHGx+vEaY$l(~v^uj4uAYTSB$IzlNdO;qpv^=0$^Cd}OQ@OS2!K(@QnCRK*phEHDf zq(7?u)Yi*fFKvZ+b=Yzb^Xa1Y#tr%Fr5-ndXI4qw`^5Nau`pMpMrzf z_Br0~{X}QhOf;T!QedTzw)9fd61K*#{W?wuUcCv)k2v~9N#<2@?s}`sdWLBt6BHJ# z%B>GHpLmk#{NLXFdrJCJI+y;N`Qq(zi50W?reyxA<9J|EdtF{!+&|=_f?o03Th|qw zS)OJ#{r~4x`AcYa!r8ioY3k4KX{uLh9o;`)UhbNkbMOuK)hWv~YrCVh3PN`VsPYEn zX*5WFDES(g#>=>Kx`ORu)(yTtuo!D)A2`GqatT;1ak9Q4R?@xzKEv+Q2( z$=laB@!Z0e19#WuecF~H9(XEX=BKq$H_be}tM0MN@~JFZ_k4-FTF!wVQ)G59f0D9U zey8iVDbKfkGInxbL#H*~I8w8q_Sc!N?WcczD(Hz1TDHf;_Un&HnZ3%Z4E8R0y5CeP z+f(H2^rx;L3p?_{S5&S`U%yfyh09H*{>-aMQx{KltNmc z{wP|L&iX^s{-d_aM;38Q&(#|bO}9&!vuyI^H-)!u9i4fJ_2Jd4n_f?0w=Lf}O|)W* zo%R0~i3c2!jdSd|7f-o$;l;N10#idO+R|H?_8z_Qp>p4nqetKV^YLoh9U*fsSY2lU zXWTlci`F?;!;Fe^E0aFNE}L9)XKuogX_9YtD0iRKb9%JuQuzVp+j1*QEY+BJRGcCn zgig&^srz30y>r2rqksO!{#4KN`uE}@v$l|qwby^cUAq=TWxQ-F35CojIkW;kz)TZ&e^}ciA^P7b&F>BT_3Hy#Q*oE&Sm;)pKH|09h#(9Wt{G6)2ku@*hZlKlTJHDxvxRiv9I*}N2j@*cantro zzz+5!mu4JyQDb^{|Ns9NQ=D9`OIQ{JM`&`zd z)W7St?)YJM;V5V4H?Px-OE08|o$+=nzoC~?n|)2YT_<9g z_Rk7i^~SL1=zUIAR*v)84T(#mwBjR8#Q8tb42DBlN18t&JCLH4kRqzmRJ~-8XBM z*i%ccDq6d5cS>{)&RQqR`1(+8oVJl7V`tT>vKb)~d(wNRvdSLX(=|2j)E4!|%jJ9C zJ@e3edH&6xGe4z&m}}iTm7|<k+*4+W=P1`%fo<28DF6&jS+$g}Go_iv=-#OOz z_xiHl1CbB={P)e6B@;YBX5o^W7SSK+ z0-pQc*1Gn`T--bT-*o9?8k0g&mfN2@+ETf~|Cvo#>$D?}?q7?nxH+%mJ@26;rMA`+ zZ~WIZ^!}@@&a1co9msu6luMD_YOnc+E|vx5TdQp*7{~iE_~*F=OuB0?+ByGJy80B| zs;kZ3f^G)A>~%f?3gM}Ci>Jp}f8WiseM`YLzuAkUmPI$*TKQu_onff#wuZijy7(9o z*;u!Udn@ZdJe4aeoS|H4|0)_b(WW?9MzFBKAVSQq&t!Z_H!47F( zw<&o~;`^@4Xi2#6>1kEbrg$3wbkF7_Iti9^sDK8RK>JOaOYQb z=@gA=T~mY~bWVJ;U3KyzA&z~UCoi0^>GjJ=wPrDsX60R zdUnm9SV#{%Jl-wr4I6~8Izn%}_Ivv8W&l)3y{!ovMycZM9Vy3~8%%gj@| z3`+Elgl`j@xujIUl%xD7TjA@rA8#(W{8_N;RN3(j{5dO`J=nf++>&+L^mvhL-mmkM z6dV8Wd^=yKU(4J6gnPa+AkY95v|-j=Iggf{*50O|xIfBx-p1@%}H`la5{f_~1oRdE0y=!Niz* z_uqIwW7pWY++WsQBmGT^@2=XnGA1_0bxTfn39L7XyYl%)?|sFBJJU@cd)jT!RgPjf zm2AxxZ_NI*_KfEZ`5f6PL4S9Bt5g-JbvpX6c(bb9OUH|5#a%a#gw9-@A3jg`iDTM{ z^_TmzUU*c+#|5<4_}{bta4$eRde1TTD~CTgA22kVWG2meU~%em@n?#2a#}VCFUfqo z?dyMopa&J+)j9pU{&5S%W+~oTWYEdvuBdV|QmM0m zOuk3@aM7CIk;dX}J6Ez*P1zPFe8DJUIpbUg=RR|ReM$SoUkmJ?R%;TSbZW}3#q}KS z*JqsDWYoc6cEelq-Tdv}w`aLFNq);YXlq?xHJ4p_#<3%so7VX#pTD?1@j%~K{+n-f zRrfSF|8wsyyR@+O%KWV_Ji;!AFZG)!lJMiu5~Dkr7Kd*M#qU|15->qb!9+N)#DOv8 zV!EWrF^>M4uiv?un(~82Uexf$8`@r8178C_Cee)x{>2r(R=bk=LNY5rrU~ccLYoM?5J3fXK+)+bXDh) zLnf>NXYxunt;%xZirsW$r}X`Reh)F$pMSrxiC?+n6lYiSx+E_4qKc~a38tp%1+SIE z&+d6Jk?VrGzTeC0NxZk7RsC6)ACuC7%j=d;iOZd4CR;7GXiKz&$?w_r|96^+ zq_ewy;j)gN=k=!d^j`I~y>|^#UUxmLaxE`8^+{5#w`$5)?)jH?;5T0`GdYCr{k1jl z9s9oPFaEu~nb_L9HS1r)^*M3B^*^iH`vjjdTAN?#bt0vI+4s-cLEAz;A9?U(dEWmF zC5L;H_cZwbdw1Xo=l5khY<~DFmVPd0t~>DBcg4%AMdryaa#!x3$#Br0w4_|T#pyx) zYW5rF_Z)rq&flB=YsT?+c3X^U{&L1e?FEBH_tMiH z)CFZsS($2nIxsHN>00V3)AXl2#-m}$;m-K%r`PA5E_=3mppYC=*?<+2B|&yHL2-wYUG)-L9IX-5Xr0;Be@`QICl`7JOfF zIZcnRTT@uf_;}q)gG)4G zE!mB~ZQIl%7D|6T+_reBmb2+?MexEyH+JMaSRU@$aY^H*KU?vM zhRqt*YdM410wlKOst7%w@!8Q$VCnsp6Q4OUdFj4o4o!`(O?k~4B(r&ACMT0aacbvG z!&7Bj^i^+^KIwh_ZFa4f=L*%`*EY92n^ym>?R!e(@y3^RCv!HPH{EL+Bfo3MCu0GY z!l^rgC+Mg4#pqVG=IvWIiAS>Lgv#V9QO_fXjjrvmyS&8EJLBLw`((Rr->}!_OZ6*s zN%*UZEqRo@>ZyF4`@)(Oj!Y5nPYZuJ zbu|1~vO2|t`JZ}atYUipQU;-rlRJ)fDNMDlUb)|E#q2+w8n2dn&16rToOk8I&v@U1 z{s+yjf4r^Dz4X9h<28xLHyl|}aOu3I;k*CA`5H!N*1z>Tt`QjRdCfY$QY}KUap@U@ z{f7IlFnn&wI+obnddE&w{JOqLKcjq#tD>%J#50tzGX!*c0HBc7V;(0=W6l|@&94vR@Y9LtmD2`xnao`x&PX0pKX!8bY#}f zNsZb`g>kQ!?r~(1=$93c*sXLsxBO+y(Or@|BvuG6`s-S-*!#ulU_qfNm!E5SX5Z$n zjE&MhT#_Pprav(?T&c3sSDNAF`uX#x-*p#1q7V@ISvPFv`6r8l8;)jQ=uWPCz(3Ec zmp!>@zKCZS=6mx5yuN`)l!|3S8 z2>~~hmzQw2t6THcDW0p;)XJNmpP#tl_oL-A7VWGP6Zee{bFgnTOZv7hIe)p7!piDP z?K%y*Z(q&&)}%4h(t6RtFG}pcuC4Q$yIdsF>&M|lmjK(Y^vX0YF8|u}YlokRJ=+oY ztjjv#CAWsXm=d#Q+?n9|zuUAT!;a(@{I$L5GiBkFn?fu9eqVp;noPpQcHN{`t%_f8M%z;`#GfYC~_`Xn_ zGsE{--B$bg{YJit1F#hg~KY=l)oDyySYSt9!(&oVuqw4{d!U zak49R_0-8ltl6^NYsC`x?BHgz&n~{}zf-Hlm3P)Ij;%B8r>=Yds7NO9+TGuuS7%C` z5UR6{`K`$J>fx%WzmGR3tMK_8v_ke z=Npgw#M0UNCu$hm&#jU_=wZ9uV*WNm?jx={LipD~ev0W*zonhvkjT&c{$nZ zlUw%MDc$4wYyT~-sKS-QcllZVWpAZ_ESSc3RonGp7xU`Sw2p!g5&723HxnpJxOx3@nmYx&%3|x)ee;@aqGn0 zFBZ#`99Y%FZWjNe_S@yQ(xba=GjBM?ze+sTueh@D&}#nrjwM)P?m-m}_v|G!mdC7lpz__DHGgSBY4Tl<3?rT;PO(_Ho9 zU+zeDy0YQtx<8X+TV}LcuDe-tvGMeF*Z)bz-yZ(gdF196@WLhJhsA`p{HcZy&e#1- zFch~>oNRMlu=emo#V@V!e&l0V^IH=MsY_jf3KQkuP8Dii5P2WUv!eYN$GGT8nRPVU;Hh=Xzn`tX1 z`ZfP6-LU=Yn#+|<_iCbMvUYovaEtX;NS)c=ZvWE5KlIqe?rXmu{Z)Q-?Zw2i&U>YV zW?!oPXlQRGzCUw{>N&SF8#5Hdvi3`_UZ#FTQLuaM&l{3AOD)pZnTjpt+;Z4YE#jsD z&%IYc$8Pt}eVZ_Yx#U%*>)ozN$NweEzD`*f8#^nX@$8B$ht;X8TRFqp@A`#{bVDdkeeg{I;LJiR)xe*51f{kJ{$cPFB!Q zuar~bV(h)csQrb_T)FuL^TRy(Sx*)$Ka%`p4y%8`LOStb1N@r8+Bzn@uLR+)B6$n{@*oRopD9%spX!_ZGnlgdRd1h`K# z7QYuVMf=Nw)V2AS`PTB-Ofb_|=ALRERl(mr`EYzbPlCA|LvhX{&ac1aU%ykx;y8QV z{Fm0(-$`c7|DNvNc&aS(Nx<{7QfB9(1oW1PE@%5|pHX}NR?*>eXZi2{SftjvYpKAq zd5-dY$EN1l9q-sSZ+U?0%FddX`o)LrE6$ra=kK{VOZa8Hd~vGsfA<+rvxDuGLjaRT^Yoe*htjbt}#)dOHYz|cj#(n+vesZ#@Z`O zT3~08^TLk;Z~ysXBaTemh`WX{&kYH^>jbw_8)(?!U6rpYO0i1;1Uk)+zss;?5hv8u(p+KPW9wA6n^M0SG-~G6X`{V8-AXZ z+;{I7^Q8i3jgpR2ljfwYF4_O%2;cn@>64b)Zu`_r#U*tW!+DoYk#N)YVK%N#uNHT> z+AQaE_onOlJnO^>Oy7h{qgI@HbN@#C;m4B?glIiBb=rGc;#)^fQMA@t%OY Date: Sun, 7 Apr 2019 11:51:19 +0200 Subject: [PATCH 148/601] Codechange: rework how grf and ob[msg] are generated For grfs, it now uses CMake scripts to do its job, and both grf files are split into their own folder to make more clear what is going on. Additionally, it no longer builds in-source (although the resulting grf is copied back in the source folder). For ob[msg] it now uses CMake scripts to generate the translation files; the result is no longer stored in-source (but in the build folder). Although all files are available to create the GRFs and basesets, it won't really work till CMake is introduced (which will happen in a few commits from here) --- cmake/scripts/Baseset.cmake | 53 +++++++ cmake/scripts/CreateGRF.cmake | 44 ++++++ media/baseset/CMakeLists.txt | 87 +++++++++++ media/baseset/no_music.obm | 2 +- media/baseset/no_sound.obs | 2 +- {bin => media}/baseset/openttd.grf | Bin .../{extra_grf => baseset/openttd}/2ccmap.nfo | 0 media/baseset/openttd/CMakeLists.txt | 9 ++ .../openttd}/airport_preview.nfo | 0 .../openttd}/airport_preview.png | Bin .../openttd}/airports.nfo | 0 .../openttd}/airports.png | Bin .../openttd}/aqueduct.nfo | 0 .../openttd}/aqueduct.png | Bin .../openttd}/autorail.nfo | 0 .../openttd}/autorail.png | Bin .../openttd}/canal_locks.png | Bin .../{extra_grf => baseset/openttd}/canals.nfo | 0 .../{extra_grf => baseset/openttd}/canals.png | Bin .../{extra_grf => baseset/openttd}/chars.nfo | 0 .../{extra_grf => baseset/openttd}/chars.png | Bin .../openttd}/elrails.nfo | 0 .../openttd}/elrails.png | Bin .../{extra_grf => baseset/openttd}/flags.nfo | 0 .../{extra_grf => baseset/openttd}/flags.png | Bin .../openttd}/foundations.nfo | 0 .../openttd}/foundations.png | Bin media/{extra_grf => baseset/openttd}/mono.nfo | 0 media/{extra_grf => baseset/openttd}/mono.png | Bin .../{extra_grf => baseset/openttd}/oneway.nfo | 0 .../{extra_grf => baseset/openttd}/oneway.png | Bin .../openttd}/openttd.nfo | 0 .../openttd}/openttdgui.nfo | 0 .../openttd}/openttdgui.png | Bin .../openttd}/openttdgui_build_tram.png | Bin .../openttd}/openttdgui_convert_road.png | Bin .../openttd}/openttdgui_convert_tram.png | Bin .../openttd}/openttdgui_group_livery.png | Bin .../openttd}/palette.nfo | 0 .../openttd}/roadstops.nfo | 0 .../openttd}/roadstops.png | Bin .../openttd}/signals.nfo | 0 .../openttd}/signals.png | Bin .../openttd}/sloped_tracks.nfo | 0 .../openttd}/sloped_tracks.png | Bin .../openttd}/tramtracks.nfo | 0 .../openttd}/tramtracks.png | Bin .../openttd}/tramtracks_bare_depot.png | Bin .../openttd}/tunnel_portals.nfo | 0 .../openttd}/tunnel_portals.png | Bin {bin => media}/baseset/opntitle.dat | Bin media/baseset/orig_dos.obg | 4 +- media/baseset/orig_dos.obm | 2 +- media/baseset/orig_dos.obs | 2 +- media/baseset/orig_dos_de.obg | 4 +- {bin => media}/baseset/orig_extra.grf | Bin media/baseset/orig_extra/CMakeLists.txt | 14 ++ .../orig_extra}/airports_orig_extra.nfo | 0 .../orig_extra}/canals_extra.nfo | 0 .../orig_extra}/chars_orig_extra.nfo | 0 .../orig_extra}/fix_graphics.nfo | 0 .../orig_extra}/fix_graphics.png | Bin .../orig_extra}/orig_extra.nfo | 0 .../orig_extra}/rivers/arctic.nfo | 0 .../orig_extra}/rivers/arctic_brown.png | Bin .../orig_extra}/rivers/arctic_snowy.png | Bin .../orig_extra}/rivers/rapids.nfo | 0 .../orig_extra}/rivers/rapids.png | Bin .../orig_extra}/rivers/temperate.nfo | 0 .../orig_extra}/rivers/temperate.png | Bin .../orig_extra}/rivers/toyland.nfo | 0 .../orig_extra}/rivers/toyland.png | Bin .../orig_extra}/rivers/tropic.nfo | 0 .../orig_extra}/rivers/tropic_desert.png | Bin .../orig_extra}/rivers/tropic_forest.png | Bin .../orig_extra}/shore.nfo | 0 .../orig_extra}/shore.png | Bin media/baseset/orig_tto.obm | 2 +- media/baseset/orig_win.obg | 4 +- media/baseset/orig_win.obm | 2 +- media/baseset/orig_win.obs | 2 +- media/baseset/translations.awk | 67 -------- media/baseset/translations.vbs | 145 ------------------ media/extra_grf/assemble_nfo.awk | 30 ---- 84 files changed, 220 insertions(+), 255 deletions(-) create mode 100644 cmake/scripts/Baseset.cmake create mode 100644 cmake/scripts/CreateGRF.cmake create mode 100644 media/baseset/CMakeLists.txt rename {bin => media}/baseset/openttd.grf (100%) rename media/{extra_grf => baseset/openttd}/2ccmap.nfo (100%) create mode 100644 media/baseset/openttd/CMakeLists.txt rename media/{extra_grf => baseset/openttd}/airport_preview.nfo (100%) rename media/{extra_grf => baseset/openttd}/airport_preview.png (100%) rename media/{extra_grf => baseset/openttd}/airports.nfo (100%) rename media/{extra_grf => baseset/openttd}/airports.png (100%) rename media/{extra_grf => baseset/openttd}/aqueduct.nfo (100%) rename media/{extra_grf => baseset/openttd}/aqueduct.png (100%) rename media/{extra_grf => baseset/openttd}/autorail.nfo (100%) rename media/{extra_grf => baseset/openttd}/autorail.png (100%) rename media/{extra_grf => baseset/openttd}/canal_locks.png (100%) rename media/{extra_grf => baseset/openttd}/canals.nfo (100%) rename media/{extra_grf => baseset/openttd}/canals.png (100%) rename media/{extra_grf => baseset/openttd}/chars.nfo (100%) rename media/{extra_grf => baseset/openttd}/chars.png (100%) rename media/{extra_grf => baseset/openttd}/elrails.nfo (100%) rename media/{extra_grf => baseset/openttd}/elrails.png (100%) rename media/{extra_grf => baseset/openttd}/flags.nfo (100%) rename media/{extra_grf => baseset/openttd}/flags.png (100%) rename media/{extra_grf => baseset/openttd}/foundations.nfo (100%) rename media/{extra_grf => baseset/openttd}/foundations.png (100%) rename media/{extra_grf => baseset/openttd}/mono.nfo (100%) rename media/{extra_grf => baseset/openttd}/mono.png (100%) rename media/{extra_grf => baseset/openttd}/oneway.nfo (100%) rename media/{extra_grf => baseset/openttd}/oneway.png (100%) rename media/{extra_grf => baseset/openttd}/openttd.nfo (100%) rename media/{extra_grf => baseset/openttd}/openttdgui.nfo (100%) rename media/{extra_grf => baseset/openttd}/openttdgui.png (100%) rename media/{extra_grf => baseset/openttd}/openttdgui_build_tram.png (100%) rename media/{extra_grf => baseset/openttd}/openttdgui_convert_road.png (100%) rename media/{extra_grf => baseset/openttd}/openttdgui_convert_tram.png (100%) rename media/{extra_grf => baseset/openttd}/openttdgui_group_livery.png (100%) rename media/{extra_grf => baseset/openttd}/palette.nfo (100%) rename media/{extra_grf => baseset/openttd}/roadstops.nfo (100%) rename media/{extra_grf => baseset/openttd}/roadstops.png (100%) rename media/{extra_grf => baseset/openttd}/signals.nfo (100%) rename media/{extra_grf => baseset/openttd}/signals.png (100%) rename media/{extra_grf => baseset/openttd}/sloped_tracks.nfo (100%) rename media/{extra_grf => baseset/openttd}/sloped_tracks.png (100%) rename media/{extra_grf => baseset/openttd}/tramtracks.nfo (100%) rename media/{extra_grf => baseset/openttd}/tramtracks.png (100%) rename media/{extra_grf => baseset/openttd}/tramtracks_bare_depot.png (100%) rename media/{extra_grf => baseset/openttd}/tunnel_portals.nfo (100%) rename media/{extra_grf => baseset/openttd}/tunnel_portals.png (100%) rename {bin => media}/baseset/opntitle.dat (100%) rename {bin => media}/baseset/orig_extra.grf (100%) create mode 100644 media/baseset/orig_extra/CMakeLists.txt rename media/{extra_grf => baseset/orig_extra}/airports_orig_extra.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/canals_extra.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/chars_orig_extra.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/fix_graphics.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/fix_graphics.png (100%) rename media/{extra_grf => baseset/orig_extra}/orig_extra.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/arctic.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/arctic_brown.png (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/arctic_snowy.png (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/rapids.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/rapids.png (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/temperate.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/temperate.png (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/toyland.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/toyland.png (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/tropic.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/tropic_desert.png (100%) rename media/{extra_grf => baseset/orig_extra}/rivers/tropic_forest.png (100%) rename media/{extra_grf => baseset/orig_extra}/shore.nfo (100%) rename media/{extra_grf => baseset/orig_extra}/shore.png (100%) delete mode 100644 media/baseset/translations.awk delete mode 100644 media/baseset/translations.vbs delete mode 100644 media/extra_grf/assemble_nfo.awk diff --git a/cmake/scripts/Baseset.cmake b/cmake/scripts/Baseset.cmake new file mode 100644 index 0000000000..4329dbdf8c --- /dev/null +++ b/cmake/scripts/Baseset.cmake @@ -0,0 +1,53 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Create a single baseset meta file with the correct translations. +# + +set(ARGC 1) +set(ARG_READ NO) + +# Read all the arguments given to CMake; we are looking for -- and everything +# that follows. Those are our language files. +while(ARGC LESS CMAKE_ARGC) + set(ARG ${CMAKE_ARGV${ARGC}}) + + if (ARG_READ) + list(APPEND LANG_SOURCE_FILES "${ARG}") + endif (ARG_READ) + + if (ARG STREQUAL "--") + set(ARG_READ YES) + endif (ARG STREQUAL "--") + + math(EXPR ARGC "${ARGC} + 1") +endwhile() + +# Place holder format is @_@ +file(STRINGS "${BASESET_SOURCE_FILE}" PLACE_HOLDER REGEX "^@") +string(REGEX REPLACE "@([^_]+).*@" "\\1" INI_KEY "${PLACE_HOLDER}") +string(REGEX REPLACE "@[^_]+_(.*)@" "\\1" STR_ID "${PLACE_HOLDER}") +string(REGEX REPLACE "@(.*)@" "\\1" PLACE_HOLDER "${PLACE_HOLDER}") + +# Get the translations +foreach(LANGFILE IN LISTS LANG_SOURCE_FILES) + file(STRINGS "${LANGFILE}" LANGLINES REGEX "^(##isocode|${STR_ID})" ENCODING UTF-8) + string(FIND "${LANGLINES}" "${STR_ID}" HAS_STR_ID) + if (HAS_STR_ID LESS 0) + continue() + endif (HAS_STR_ID LESS 0) + string(REGEX REPLACE "##isocode ([^;]+).*" "\\1" ISOCODE "${LANGLINES}") + if ("${ISOCODE}" STREQUAL "en_GB") + string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY} = \\1" LANGLINES "${LANGLINES}") + else() + string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}.${ISOCODE} = \\1" LANGLINES "${LANGLINES}") + endif() + list(APPEND ${PLACE_HOLDER} ${LANGLINES}) +endforeach(LANGFILE) +list(SORT ${PLACE_HOLDER}) +string(REPLACE ";" "\n" ${PLACE_HOLDER} "${${PLACE_HOLDER}}") + +# Get the grf md5 +file(MD5 ${BASESET_EXTRAGRF_FILE} ORIG_EXTRA_GRF_MD5) + +configure_file(${BASESET_SOURCE_FILE} ${BASESET_BINARY_FILE}) diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake new file mode 100644 index 0000000000..f5811daf9f --- /dev/null +++ b/cmake/scripts/CreateGRF.cmake @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Create a single GRF file based on sprites/.nfo and sprites/*.png +# files. +# + +if (NOT NFORENUM_EXECUTABLE) + message(FATAL_ERROR "Script needs NFORENUM_EXECUTABLE defined") +endif (NOT NFORENUM_EXECUTABLE) +if (NOT GRFCODEC_EXECUTABLE) + message(FATAL_ERROR "Script needs GRFCODEC_EXECUTABLE defined") +endif (NOT GRFCODEC_EXECUTABLE) +if (NOT GRF_SOURCE_FOLDER) + message(FATAL_ERROR "Script needs GRF_SOURCE_FOLDER defined") +endif (NOT GRF_SOURCE_FOLDER) +if (NOT GRF_BINARY_FILE) + message(FATAL_ERROR "Script needs GRF_BINARY_FILE defined") +endif (NOT GRF_BINARY_FILE) + +get_filename_component(GRF_SOURCE_FOLDER_NAME "${GRF_SOURCE_FOLDER}" NAME) + +file(WRITE sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "") +file(READ ${GRF_SOURCE_FOLDER}/${GRF_SOURCE_FOLDER_NAME}.nfo NFO_LINES) +# Replace ; with \;, and make a list out of this based on \n +string(REPLACE ";" "\\;" NFO_LINES "${NFO_LINES}") +string(REPLACE "\n" ";" NFO_LINES "${NFO_LINES}") + +foreach(NFO_LINE IN LISTS NFO_LINES) + # Recover the ; that was really in the text (and not a newline) + string(REPLACE "\\;" ";" NFO_LINE "${NFO_LINE}") + + if (NFO_LINE MATCHES "^#include") + string(REGEX REPLACE "^#include \"(.*)\"$" "\\1" INCLUDE_FILE ${NFO_LINE}) + file(READ ${GRF_SOURCE_FOLDER}/${INCLUDE_FILE} INCLUDE_LINES) + file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${INCLUDE_LINES}") + else (NFO_LINE MATCHES "^#include") + file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${NFO_LINE}\n") + endif (NFO_LINE MATCHES "^#include") +endforeach(NFO_LINE) + +execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo) +execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE}) diff --git a/media/baseset/CMakeLists.txt b/media/baseset/CMakeLists.txt new file mode 100644 index 0000000000..309ac7a498 --- /dev/null +++ b/media/baseset/CMakeLists.txt @@ -0,0 +1,87 @@ +add_subdirectory(openttd) +add_subdirectory(orig_extra) + +set(BASESET_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos.obg + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos_de.obg + ${CMAKE_CURRENT_SOURCE_DIR}/orig_win.obg + ${CMAKE_CURRENT_SOURCE_DIR}/no_music.obm + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos.obm + ${CMAKE_CURRENT_SOURCE_DIR}/orig_tto.obm + ${CMAKE_CURRENT_SOURCE_DIR}/orig_win.obm + ${CMAKE_CURRENT_SOURCE_DIR}/no_sound.obs + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos.obs + ${CMAKE_CURRENT_SOURCE_DIR}/orig_win.obs +) +set(BASESET_OTHER_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/openttd.grf + ${CMAKE_CURRENT_SOURCE_DIR}/opntitle.dat + ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf +) + +# Done by the subdirectories, if nforenum / grfcodec is installed +if (NFORENUM_FOUND AND GRFCODEC_FOUND) + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/openttd.grf PROPERTIES GENERATED TRUE) + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf PROPERTIES GENERATED TRUE) + + list(APPEND BASESET_BINARY_FILES openttd.grf) + list(APPEND BASESET_BINARY_FILES orig_extra.grf) +endif (NFORENUM_FOUND AND GRFCODEC_FOUND) + +set(BASESET_EXTRAGRF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf) + +# Walk over all the baseset files, and generate a command to configure them +foreach(BASESET_SOURCE_FILE IN LISTS BASESET_SOURCE_FILES) + get_filename_component(BASESET_SOURCE_FILE_NAME "${BASESET_SOURCE_FILE}" NAME) + set(BASESET_BINARY_FILE "${CMAKE_BINARY_DIR}/baseset/${BASESET_SOURCE_FILE_NAME}") + + get_target_property(LANG_SOURCE_FILES language_files LANG_SOURCE_FILES) + + add_custom_command_timestamp(OUTPUT ${BASESET_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} + -DBASESET_SOURCE_FILE=${BASESET_SOURCE_FILE} + -DBASESET_BINARY_FILE=${BASESET_BINARY_FILE} + -DBASESET_EXTRAGRF_FILE=${BASESET_EXTRAGRF_FILE} + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/Baseset.cmake + -- + ${LANG_SOURCE_FILES} + MAIN_DEPENDENCY ${BASESET_SOURCE_FILE} + DEPENDS ${LANG_SOURCE_FILES} + ${BASESET_EXTRAGRF_FILE} + ${CMAKE_SOURCE_DIR}/cmake/scripts/Baseset.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating ${BASESET_SOURCE_FILE_NAME} baseset metadata file" + ) + + list(APPEND BASESET_BINARY_FILES ${BASESET_BINARY_FILE}) +endforeach(BASESET_SOURCE_FILE) + +# Walk over all the other baseset files, and generate a command to copy them +foreach(BASESET_OTHER_SOURCE_FILE IN LISTS BASESET_OTHER_SOURCE_FILES) + get_filename_component(BASESET_OTHER_SOURCE_FILE_NAME "${BASESET_OTHER_SOURCE_FILE}" NAME) + set(BASESET_OTHER_BINARY_FILE "${CMAKE_BINARY_DIR}/baseset/${BASESET_OTHER_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${BASESET_OTHER_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${BASESET_OTHER_SOURCE_FILE} + ${BASESET_OTHER_BINARY_FILE} + MAIN_DEPENDENCY ${BASESET_OTHER_SOURCE_FILE} + COMMENT "Copying ${BASESET_OTHER_SOURCE_FILE_NAME} baseset file" + ) + + list(APPEND BASESET_BINARY_FILES ${BASESET_OTHER_BINARY_FILE}) +endforeach(BASESET_OTHER_SOURCE_FILE) + +# Create a new target which generates all baseset metadata files +add_custom_target_timestamp(baseset_files + DEPENDS + ${BASESET_BINARY_FILES} +) + +add_library(basesets + INTERFACE +) +add_dependencies(basesets + baseset_files +) +add_library(openttd::basesets ALIAS basesets) diff --git a/media/baseset/no_music.obm b/media/baseset/no_music.obm index e395ba0b0e..3b8b9657ae 100644 --- a/media/baseset/no_music.obm +++ b/media/baseset/no_music.obm @@ -5,7 +5,7 @@ name = NoMusic shortname = NULL version = 0 fallback = true -!! description STR_BASEMUSIC_NONE_DESCRIPTION +@description_STR_BASEMUSIC_NONE_DESCRIPTION@ [files] theme = diff --git a/media/baseset/no_sound.obs b/media/baseset/no_sound.obs index fd2430de54..3b546d5bb4 100644 --- a/media/baseset/no_sound.obs +++ b/media/baseset/no_sound.obs @@ -5,7 +5,7 @@ name = NoSound shortname = NULL version = 2 fallback = true -!! description STR_BASESOUNDS_NONE_DESCRIPTION +@description_STR_BASESOUNDS_NONE_DESCRIPTION@ [files] samples = diff --git a/bin/baseset/openttd.grf b/media/baseset/openttd.grf similarity index 100% rename from bin/baseset/openttd.grf rename to media/baseset/openttd.grf diff --git a/media/extra_grf/2ccmap.nfo b/media/baseset/openttd/2ccmap.nfo similarity index 100% rename from media/extra_grf/2ccmap.nfo rename to media/baseset/openttd/2ccmap.nfo diff --git a/media/baseset/openttd/CMakeLists.txt b/media/baseset/openttd/CMakeLists.txt new file mode 100644 index 0000000000..42d62dd7cc --- /dev/null +++ b/media/baseset/openttd/CMakeLists.txt @@ -0,0 +1,9 @@ +# In case both NFORenum and GRFCodec are found, generate the GRF. +# Otherwise, just use them from the cache (read: git). +# This is mainly because not many people have both of these tools installed, +# so it is cheaper to cache them in git, and only regenerate when you are +# working on it / have the tools installed. +if (NFORENUM_FOUND AND GRFCODEC_FOUND) + include(CreateGrfCommand REQUIRED) + create_grf_command() +endif (NFORENUM_FOUND AND GRFCODEC_FOUND) diff --git a/media/extra_grf/airport_preview.nfo b/media/baseset/openttd/airport_preview.nfo similarity index 100% rename from media/extra_grf/airport_preview.nfo rename to media/baseset/openttd/airport_preview.nfo diff --git a/media/extra_grf/airport_preview.png b/media/baseset/openttd/airport_preview.png similarity index 100% rename from media/extra_grf/airport_preview.png rename to media/baseset/openttd/airport_preview.png diff --git a/media/extra_grf/airports.nfo b/media/baseset/openttd/airports.nfo similarity index 100% rename from media/extra_grf/airports.nfo rename to media/baseset/openttd/airports.nfo diff --git a/media/extra_grf/airports.png b/media/baseset/openttd/airports.png similarity index 100% rename from media/extra_grf/airports.png rename to media/baseset/openttd/airports.png diff --git a/media/extra_grf/aqueduct.nfo b/media/baseset/openttd/aqueduct.nfo similarity index 100% rename from media/extra_grf/aqueduct.nfo rename to media/baseset/openttd/aqueduct.nfo diff --git a/media/extra_grf/aqueduct.png b/media/baseset/openttd/aqueduct.png similarity index 100% rename from media/extra_grf/aqueduct.png rename to media/baseset/openttd/aqueduct.png diff --git a/media/extra_grf/autorail.nfo b/media/baseset/openttd/autorail.nfo similarity index 100% rename from media/extra_grf/autorail.nfo rename to media/baseset/openttd/autorail.nfo diff --git a/media/extra_grf/autorail.png b/media/baseset/openttd/autorail.png similarity index 100% rename from media/extra_grf/autorail.png rename to media/baseset/openttd/autorail.png diff --git a/media/extra_grf/canal_locks.png b/media/baseset/openttd/canal_locks.png similarity index 100% rename from media/extra_grf/canal_locks.png rename to media/baseset/openttd/canal_locks.png diff --git a/media/extra_grf/canals.nfo b/media/baseset/openttd/canals.nfo similarity index 100% rename from media/extra_grf/canals.nfo rename to media/baseset/openttd/canals.nfo diff --git a/media/extra_grf/canals.png b/media/baseset/openttd/canals.png similarity index 100% rename from media/extra_grf/canals.png rename to media/baseset/openttd/canals.png diff --git a/media/extra_grf/chars.nfo b/media/baseset/openttd/chars.nfo similarity index 100% rename from media/extra_grf/chars.nfo rename to media/baseset/openttd/chars.nfo diff --git a/media/extra_grf/chars.png b/media/baseset/openttd/chars.png similarity index 100% rename from media/extra_grf/chars.png rename to media/baseset/openttd/chars.png diff --git a/media/extra_grf/elrails.nfo b/media/baseset/openttd/elrails.nfo similarity index 100% rename from media/extra_grf/elrails.nfo rename to media/baseset/openttd/elrails.nfo diff --git a/media/extra_grf/elrails.png b/media/baseset/openttd/elrails.png similarity index 100% rename from media/extra_grf/elrails.png rename to media/baseset/openttd/elrails.png diff --git a/media/extra_grf/flags.nfo b/media/baseset/openttd/flags.nfo similarity index 100% rename from media/extra_grf/flags.nfo rename to media/baseset/openttd/flags.nfo diff --git a/media/extra_grf/flags.png b/media/baseset/openttd/flags.png similarity index 100% rename from media/extra_grf/flags.png rename to media/baseset/openttd/flags.png diff --git a/media/extra_grf/foundations.nfo b/media/baseset/openttd/foundations.nfo similarity index 100% rename from media/extra_grf/foundations.nfo rename to media/baseset/openttd/foundations.nfo diff --git a/media/extra_grf/foundations.png b/media/baseset/openttd/foundations.png similarity index 100% rename from media/extra_grf/foundations.png rename to media/baseset/openttd/foundations.png diff --git a/media/extra_grf/mono.nfo b/media/baseset/openttd/mono.nfo similarity index 100% rename from media/extra_grf/mono.nfo rename to media/baseset/openttd/mono.nfo diff --git a/media/extra_grf/mono.png b/media/baseset/openttd/mono.png similarity index 100% rename from media/extra_grf/mono.png rename to media/baseset/openttd/mono.png diff --git a/media/extra_grf/oneway.nfo b/media/baseset/openttd/oneway.nfo similarity index 100% rename from media/extra_grf/oneway.nfo rename to media/baseset/openttd/oneway.nfo diff --git a/media/extra_grf/oneway.png b/media/baseset/openttd/oneway.png similarity index 100% rename from media/extra_grf/oneway.png rename to media/baseset/openttd/oneway.png diff --git a/media/extra_grf/openttd.nfo b/media/baseset/openttd/openttd.nfo similarity index 100% rename from media/extra_grf/openttd.nfo rename to media/baseset/openttd/openttd.nfo diff --git a/media/extra_grf/openttdgui.nfo b/media/baseset/openttd/openttdgui.nfo similarity index 100% rename from media/extra_grf/openttdgui.nfo rename to media/baseset/openttd/openttdgui.nfo diff --git a/media/extra_grf/openttdgui.png b/media/baseset/openttd/openttdgui.png similarity index 100% rename from media/extra_grf/openttdgui.png rename to media/baseset/openttd/openttdgui.png diff --git a/media/extra_grf/openttdgui_build_tram.png b/media/baseset/openttd/openttdgui_build_tram.png similarity index 100% rename from media/extra_grf/openttdgui_build_tram.png rename to media/baseset/openttd/openttdgui_build_tram.png diff --git a/media/extra_grf/openttdgui_convert_road.png b/media/baseset/openttd/openttdgui_convert_road.png similarity index 100% rename from media/extra_grf/openttdgui_convert_road.png rename to media/baseset/openttd/openttdgui_convert_road.png diff --git a/media/extra_grf/openttdgui_convert_tram.png b/media/baseset/openttd/openttdgui_convert_tram.png similarity index 100% rename from media/extra_grf/openttdgui_convert_tram.png rename to media/baseset/openttd/openttdgui_convert_tram.png diff --git a/media/extra_grf/openttdgui_group_livery.png b/media/baseset/openttd/openttdgui_group_livery.png similarity index 100% rename from media/extra_grf/openttdgui_group_livery.png rename to media/baseset/openttd/openttdgui_group_livery.png diff --git a/media/extra_grf/palette.nfo b/media/baseset/openttd/palette.nfo similarity index 100% rename from media/extra_grf/palette.nfo rename to media/baseset/openttd/palette.nfo diff --git a/media/extra_grf/roadstops.nfo b/media/baseset/openttd/roadstops.nfo similarity index 100% rename from media/extra_grf/roadstops.nfo rename to media/baseset/openttd/roadstops.nfo diff --git a/media/extra_grf/roadstops.png b/media/baseset/openttd/roadstops.png similarity index 100% rename from media/extra_grf/roadstops.png rename to media/baseset/openttd/roadstops.png diff --git a/media/extra_grf/signals.nfo b/media/baseset/openttd/signals.nfo similarity index 100% rename from media/extra_grf/signals.nfo rename to media/baseset/openttd/signals.nfo diff --git a/media/extra_grf/signals.png b/media/baseset/openttd/signals.png similarity index 100% rename from media/extra_grf/signals.png rename to media/baseset/openttd/signals.png diff --git a/media/extra_grf/sloped_tracks.nfo b/media/baseset/openttd/sloped_tracks.nfo similarity index 100% rename from media/extra_grf/sloped_tracks.nfo rename to media/baseset/openttd/sloped_tracks.nfo diff --git a/media/extra_grf/sloped_tracks.png b/media/baseset/openttd/sloped_tracks.png similarity index 100% rename from media/extra_grf/sloped_tracks.png rename to media/baseset/openttd/sloped_tracks.png diff --git a/media/extra_grf/tramtracks.nfo b/media/baseset/openttd/tramtracks.nfo similarity index 100% rename from media/extra_grf/tramtracks.nfo rename to media/baseset/openttd/tramtracks.nfo diff --git a/media/extra_grf/tramtracks.png b/media/baseset/openttd/tramtracks.png similarity index 100% rename from media/extra_grf/tramtracks.png rename to media/baseset/openttd/tramtracks.png diff --git a/media/extra_grf/tramtracks_bare_depot.png b/media/baseset/openttd/tramtracks_bare_depot.png similarity index 100% rename from media/extra_grf/tramtracks_bare_depot.png rename to media/baseset/openttd/tramtracks_bare_depot.png diff --git a/media/extra_grf/tunnel_portals.nfo b/media/baseset/openttd/tunnel_portals.nfo similarity index 100% rename from media/extra_grf/tunnel_portals.nfo rename to media/baseset/openttd/tunnel_portals.nfo diff --git a/media/extra_grf/tunnel_portals.png b/media/baseset/openttd/tunnel_portals.png similarity index 100% rename from media/extra_grf/tunnel_portals.png rename to media/baseset/openttd/tunnel_portals.png diff --git a/bin/baseset/opntitle.dat b/media/baseset/opntitle.dat similarity index 100% rename from bin/baseset/opntitle.dat rename to media/baseset/opntitle.dat diff --git a/media/baseset/orig_dos.obg b/media/baseset/orig_dos.obg index d56a63712f..ebb27ee7b5 100644 --- a/media/baseset/orig_dos.obg +++ b/media/baseset/orig_dos.obg @@ -6,7 +6,7 @@ name = original_dos shortname = TTDD version = 1 palette = DOS -!! description STR_BASEGRAPHICS_DOS_DESCRIPTION +@description_STR_BASEGRAPHICS_DOS_DESCRIPTION@ [files] base = TRG1.GRF @@ -22,7 +22,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 -ORIG_EXTRA.GRF = +ORIG_EXTRA.GRF = ${ORIG_EXTRA_GRF_MD5} [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/media/baseset/orig_dos.obm b/media/baseset/orig_dos.obm index 0b51c2db84..49c0f67703 100644 --- a/media/baseset/orig_dos.obm +++ b/media/baseset/orig_dos.obm @@ -5,7 +5,7 @@ name = original_dos shortname = TTDD version = 1 -!! description STR_BASEMUSIC_DOS_DESCRIPTION +@description_STR_BASEMUSIC_DOS_DESCRIPTION@ [files] theme = gm.cat diff --git a/media/baseset/orig_dos.obs b/media/baseset/orig_dos.obs index 60afc854f0..c500fe0e4d 100644 --- a/media/baseset/orig_dos.obs +++ b/media/baseset/orig_dos.obs @@ -5,7 +5,7 @@ name = original_dos shortname = TTDO version = 0 -!! description STR_BASESOUNDS_DOS_DESCRIPTION +@description_STR_BASESOUNDS_DOS_DESCRIPTION@ [files] samples = SAMPLE.CAT diff --git a/media/baseset/orig_dos_de.obg b/media/baseset/orig_dos_de.obg index 388d685025..b8251ab7b2 100644 --- a/media/baseset/orig_dos_de.obg +++ b/media/baseset/orig_dos_de.obg @@ -6,7 +6,7 @@ name = original_dos_de shortname = TTDD version = 0 palette = DOS -!! description STR_BASEGRAPHICS_DOS_DE_DESCRIPTION +@description_STR_BASEGRAPHICS_DOS_DE_DESCRIPTION@ [files] base = TRG1.GRF @@ -22,7 +22,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGT.GRF = fcde1d7e8a74197d72a62695884b909e -ORIG_EXTRA.GRF = +ORIG_EXTRA.GRF = ${ORIG_EXTRA_GRF_MD5} [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_extra.grf b/media/baseset/orig_extra.grf similarity index 100% rename from bin/baseset/orig_extra.grf rename to media/baseset/orig_extra.grf diff --git a/media/baseset/orig_extra/CMakeLists.txt b/media/baseset/orig_extra/CMakeLists.txt new file mode 100644 index 0000000000..f865a8dd0d --- /dev/null +++ b/media/baseset/orig_extra/CMakeLists.txt @@ -0,0 +1,14 @@ +# In case both NFORenum and GRFCodec are found, generate the GRF. +# Otherwise, just use them from the cache (read: git). +# This is mainly because not many people have both of these tools installed, +# so it is cheaper to cache them in git, and only regenerate when you are +# working on it / have the tools installed. +if (NFORENUM_FOUND AND GRFCODEC_FOUND) + include(CreateGrfCommand REQUIRED) + create_grf_command( + # We share some files with 'openttd' grf + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/airports.png + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/canals.png + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/chars.png + ) +endif (NFORENUM_FOUND AND GRFCODEC_FOUND) diff --git a/media/extra_grf/airports_orig_extra.nfo b/media/baseset/orig_extra/airports_orig_extra.nfo similarity index 100% rename from media/extra_grf/airports_orig_extra.nfo rename to media/baseset/orig_extra/airports_orig_extra.nfo diff --git a/media/extra_grf/canals_extra.nfo b/media/baseset/orig_extra/canals_extra.nfo similarity index 100% rename from media/extra_grf/canals_extra.nfo rename to media/baseset/orig_extra/canals_extra.nfo diff --git a/media/extra_grf/chars_orig_extra.nfo b/media/baseset/orig_extra/chars_orig_extra.nfo similarity index 100% rename from media/extra_grf/chars_orig_extra.nfo rename to media/baseset/orig_extra/chars_orig_extra.nfo diff --git a/media/extra_grf/fix_graphics.nfo b/media/baseset/orig_extra/fix_graphics.nfo similarity index 100% rename from media/extra_grf/fix_graphics.nfo rename to media/baseset/orig_extra/fix_graphics.nfo diff --git a/media/extra_grf/fix_graphics.png b/media/baseset/orig_extra/fix_graphics.png similarity index 100% rename from media/extra_grf/fix_graphics.png rename to media/baseset/orig_extra/fix_graphics.png diff --git a/media/extra_grf/orig_extra.nfo b/media/baseset/orig_extra/orig_extra.nfo similarity index 100% rename from media/extra_grf/orig_extra.nfo rename to media/baseset/orig_extra/orig_extra.nfo diff --git a/media/extra_grf/rivers/arctic.nfo b/media/baseset/orig_extra/rivers/arctic.nfo similarity index 100% rename from media/extra_grf/rivers/arctic.nfo rename to media/baseset/orig_extra/rivers/arctic.nfo diff --git a/media/extra_grf/rivers/arctic_brown.png b/media/baseset/orig_extra/rivers/arctic_brown.png similarity index 100% rename from media/extra_grf/rivers/arctic_brown.png rename to media/baseset/orig_extra/rivers/arctic_brown.png diff --git a/media/extra_grf/rivers/arctic_snowy.png b/media/baseset/orig_extra/rivers/arctic_snowy.png similarity index 100% rename from media/extra_grf/rivers/arctic_snowy.png rename to media/baseset/orig_extra/rivers/arctic_snowy.png diff --git a/media/extra_grf/rivers/rapids.nfo b/media/baseset/orig_extra/rivers/rapids.nfo similarity index 100% rename from media/extra_grf/rivers/rapids.nfo rename to media/baseset/orig_extra/rivers/rapids.nfo diff --git a/media/extra_grf/rivers/rapids.png b/media/baseset/orig_extra/rivers/rapids.png similarity index 100% rename from media/extra_grf/rivers/rapids.png rename to media/baseset/orig_extra/rivers/rapids.png diff --git a/media/extra_grf/rivers/temperate.nfo b/media/baseset/orig_extra/rivers/temperate.nfo similarity index 100% rename from media/extra_grf/rivers/temperate.nfo rename to media/baseset/orig_extra/rivers/temperate.nfo diff --git a/media/extra_grf/rivers/temperate.png b/media/baseset/orig_extra/rivers/temperate.png similarity index 100% rename from media/extra_grf/rivers/temperate.png rename to media/baseset/orig_extra/rivers/temperate.png diff --git a/media/extra_grf/rivers/toyland.nfo b/media/baseset/orig_extra/rivers/toyland.nfo similarity index 100% rename from media/extra_grf/rivers/toyland.nfo rename to media/baseset/orig_extra/rivers/toyland.nfo diff --git a/media/extra_grf/rivers/toyland.png b/media/baseset/orig_extra/rivers/toyland.png similarity index 100% rename from media/extra_grf/rivers/toyland.png rename to media/baseset/orig_extra/rivers/toyland.png diff --git a/media/extra_grf/rivers/tropic.nfo b/media/baseset/orig_extra/rivers/tropic.nfo similarity index 100% rename from media/extra_grf/rivers/tropic.nfo rename to media/baseset/orig_extra/rivers/tropic.nfo diff --git a/media/extra_grf/rivers/tropic_desert.png b/media/baseset/orig_extra/rivers/tropic_desert.png similarity index 100% rename from media/extra_grf/rivers/tropic_desert.png rename to media/baseset/orig_extra/rivers/tropic_desert.png diff --git a/media/extra_grf/rivers/tropic_forest.png b/media/baseset/orig_extra/rivers/tropic_forest.png similarity index 100% rename from media/extra_grf/rivers/tropic_forest.png rename to media/baseset/orig_extra/rivers/tropic_forest.png diff --git a/media/extra_grf/shore.nfo b/media/baseset/orig_extra/shore.nfo similarity index 100% rename from media/extra_grf/shore.nfo rename to media/baseset/orig_extra/shore.nfo diff --git a/media/extra_grf/shore.png b/media/baseset/orig_extra/shore.png similarity index 100% rename from media/extra_grf/shore.png rename to media/baseset/orig_extra/shore.png diff --git a/media/baseset/orig_tto.obm b/media/baseset/orig_tto.obm index c572bcf34b..ced9cf5807 100644 --- a/media/baseset/orig_tto.obm +++ b/media/baseset/orig_tto.obm @@ -5,7 +5,7 @@ name = original_tto shortname = TTOD version = 1 -!! description STR_BASEMUSIC_TTO_DESCRIPTION +@description_STR_BASEMUSIC_TTO_DESCRIPTION@ [files] theme = gm-tto.cat diff --git a/media/baseset/orig_win.obg b/media/baseset/orig_win.obg index f01624a25d..b1cc8437e2 100644 --- a/media/baseset/orig_win.obg +++ b/media/baseset/orig_win.obg @@ -6,7 +6,7 @@ name = original_windows shortname = TTDW version = 0 palette = Windows -!! description STR_BASEGRAPHICS_WIN_DESCRIPTION +@description_STR_BASEGRAPHICS_WIN_DESCRIPTION@ [files] base = TRG1R.GRF @@ -22,7 +22,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 -ORIG_EXTRA.GRF = +ORIG_EXTRA.GRF = ${ORIG_EXTRA_GRF_MD5} [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/media/baseset/orig_win.obm b/media/baseset/orig_win.obm index 11e363fabd..de269d65c8 100644 --- a/media/baseset/orig_win.obm +++ b/media/baseset/orig_win.obm @@ -5,7 +5,7 @@ name = original_windows shortname = TTDW version = 1 -!! description STR_BASEMUSIC_WIN_DESCRIPTION +@description_STR_BASEMUSIC_WIN_DESCRIPTION@ [files] theme = GM_TT00.GM diff --git a/media/baseset/orig_win.obs b/media/baseset/orig_win.obs index 7b02372207..66dd619a8a 100644 --- a/media/baseset/orig_win.obs +++ b/media/baseset/orig_win.obs @@ -5,7 +5,7 @@ name = original_windows shortname = TTDO version = 0 -!! description STR_BASESOUNDS_WIN_DESCRIPTION +@description_STR_BASESOUNDS_WIN_DESCRIPTION@ [files] samples = SAMPLE.CAT diff --git a/media/baseset/translations.awk b/media/baseset/translations.awk deleted file mode 100644 index af5f2b4a8d..0000000000 --- a/media/baseset/translations.awk +++ /dev/null @@ -1,67 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -# -# Awk script to extract translations for baseset descriptions -# from lang files for insertion into .obg/obs/obm files. -# If there is no translation, there is no output. -# -# The input file is scanned for the pattern -# !! -# -# The lang files (passed as variable 'langfiles') are scanned for and -# the translations are added to the output file: -# . = -# - -# Simple insertion sort since not all AWKs have a sort implementation -function isort(A) { - n = 0 - for (val in A) { - n++; - } - - for (i = 2; i <= n; i++) { - j = i; - hold = A[j] - while (A[j - 1] > hold) { - j--; - A[j + 1] = A[j] - } - A[j] = hold - } - - return n -} - -/^!!/ { - ini_key = $2; - str_id = $3; - - file = langfiles - while ((getline < file) > 0) { - if (match($0, "##isocode") > 0) { - lang = $2; - } else if (match($0, "^" str_id " *:") > 0) { - sub("^[^:]*:", "", $0) - i++; - if (lang == "en_GB") { - texts[i] = ini_key " = "$0; - } else { - texts[i] = ini_key "." lang " = "$0; - } - } - } - close(file); - - count = isort(texts); - for (i = 1; i <= count; i++) { - print texts[i] - } - - next -} - -{ print } diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs deleted file mode 100644 index c167886930..0000000000 --- a/media/baseset/translations.vbs +++ /dev/null @@ -1,145 +0,0 @@ -Option Explicit - -' 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 . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -Dim inputfile, outputfile, langpath, extra_grf -inputfile = WScript.Arguments(0) -outputfile = WScript.Arguments(1) -langpath = WScript.Arguments(2) - -If WScript.Arguments.Length > 3 Then - extra_grf = WScript.Arguments(3) -End If - -Function GetExtraGrfHash - Dim WSO, exe, line - - Set WSO = WScript.CreateObject("WScript.Shell") - Set exe = WSO.Exec("certutil -hashfile " & extra_grf & " MD5") - - Do Until exe.StdOut.AtEndOfStream - line = exe.StdOut.ReadLine - If Len(line) = 32 Then GetExtraGrfHash = line - Loop - - Set WSO = Nothing -End Function - -' Simple insertion sort, copied from translations.awk -Sub ISort(a) - Dim i, j, n, hold - n = UBound(a) - - For i = 1 To n - j = i - hold = a(j) - Do While a(j - 1) > hold - j = j - 1 - a(j + 1) = a(j) - - If j = 0 Then Exit Do - Loop - a(j) = hold - Next -End Sub - -Sub Lookup(ini_key, str_id, outfile) - Dim folder, file, line, p, lang, i - - ' Ensure only complete string matches - str_id = str_id & " " - - Set folder = FSO.GetFolder(langpath) - - Dim output() - ReDim output(folder.Files.Count) - - For Each file In folder.Files - If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then - Dim f - Set f = CreateObject("ADODB.Stream") - f.Charset = "utf-8" - f.LineSeparator = 10 ' Assume lines end with \n even for \r\n files - f.Open - f.LoadFromFile(file.Path) - - Do Until f.EOS - line = Replace(f.ReadText(-2), Chr(13), "") ' Read a line and remove any \r - - If InStr(1, line, "##isocode ") = 1 Then - p = Split(line) - lang = p(1) - ElseIf InStr(1, line, str_id) = 1 Then - p = Split(line, ":", 2) - If lang = "en_GB" Then - output(i) = ini_key & " = " & p(1) - Else - output(i) = ini_key & "." & lang & " = " & p(1) - End If - i = i + 1 - End If - Loop - - f.Close - End If - Next - - ReDim Preserve output(i - 1) - ISort output - - For Each line In output - outfile.WriteText line, 1 - Next - -End Sub - -Dim line, p - -Dim infile -Set infile = FSO.OpenTextFile(inputfile) - -Dim outfile -Set outfile = CreateObject("ADODB.Stream") -outfile.Charset = "utf-8" -outfile.Open - -Do Until infile.atEndOfStream - - line = infile.ReadLine() - - If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then - p = Split(line, "=") - If Trim(p(1)) = "" Then - outfile.WriteText "ORIG_EXTRA.GRF = " & GetExtraGrfHash(), 1 - Else - outfile.WriteText line, 1 - End If - ElseIf InStr(1, line, "!! ") = 1 Then - p = Split(line) - Lookup p(1), p(2), outfile - Else - outfile.WriteText line, 1 - End If - -Loop - -' UTF-8 Text ADO Stream includes BOM, so we need to remove it -Dim outfile_noBOM -Set outfile_noBOM = CreateObject("ADODB.Stream") -outfile_noBOM.Type = 1 -outfile_noBOM.Open - -' Copy Text stream to Binary stream, skiping the BOM -outfile.Position = 3 -outfile.CopyTo outfile_noBOM -outfile.Close - -' Write the Binary stream -outfile_noBOM.SaveToFile outputfile, 2 -outfile_noBOM.Close diff --git a/media/extra_grf/assemble_nfo.awk b/media/extra_grf/assemble_nfo.awk deleted file mode 100644 index f39e6b6b43..0000000000 --- a/media/extra_grf/assemble_nfo.awk +++ /dev/null @@ -1,30 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -BEGIN { - # Very basic variant function; barely any error checking. - # Just use the first argument as the file to start from when assembling everything - path = ARGV[1]; - gsub("[^/\\\\]*$", "", path); - assemble(ARGV[1]); -} - -# Recursive function for assembling by means of resolving the #includes. -function assemble(filename) { - while ((getline < filename) > 0) { - if (NF == 2 && $1 == "#include" ) { - # Remove the quotes. - gsub("[\"'<>]", "", $2); - assemble(path $2); - } else { - print $0; - } - } - - if (close(filename) < 0) { - print "Could not open " filename > "/dev/stderr"; - exit -1; - } -} From 56d54cf60eb5814f77dfcce91cf12879f01e1d1b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 11:57:55 +0200 Subject: [PATCH 149/601] Add: introduce CMake for project management CMake works on all our supported platforms, like MSVC, Mingw, GCC, Clang, and many more. It allows for a single way of doing things, so no longer we need shell scripts and vbs scripts to work on all our supported platforms. Additionally, CMake allows to generate project files for like MSVC, KDevelop, etc. This heavily reduces the lines of code we need to support multiple platforms from a project perspective. Addtiionally, this heavily improves our detection of libraries, etc. --- .gitignore | 7 - CMakeLists.txt | 226 ++++ cmake/AddCustomXXXTimestamp.cmake | 145 +++ cmake/CompileFlags.cmake | 120 ++ cmake/CreateGrfCommand.cmake | 50 + cmake/CreateRegression.cmake | 86 ++ cmake/Endian.cmake | 14 + cmake/FindAllegro.cmake | 65 + cmake/FindEditbin.cmake | 13 + cmake/FindFluidsynth.cmake | 65 + cmake/FindFontconfig.cmake | 101 ++ cmake/FindGrfcodec.cmake | 13 + cmake/FindICU.cmake | 64 + cmake/FindIconv.cmake | 133 ++ cmake/FindLZO.cmake | 89 ++ cmake/FindSSE.cmake | 17 + cmake/FindXDG_basedir.cmake | 65 + cmake/FindXaudio2.cmake | 18 + cmake/LinkPackage.cmake | 18 + cmake/Options.cmake | 84 ++ cmake/SourceList.cmake | 63 + cmake/Static.cmake | 14 + cmake/scripts/FindVersion.cmake | 134 ++ media/baseset/CMakeLists.txt | 4 +- media/baseset/openttd/CMakeLists.txt | 6 +- media/baseset/orig_extra/CMakeLists.txt | 6 +- os/windows/openttd.manifest | 29 + src/3rdparty/CMakeLists.txt | 3 + src/3rdparty/md5/CMakeLists.txt | 4 + src/3rdparty/os2/CMakeLists.txt | 7 + src/3rdparty/squirrel/CMakeLists.txt | 3 + src/3rdparty/squirrel/include/CMakeLists.txt | 6 + src/3rdparty/squirrel/sqstdlib/CMakeLists.txt | 4 + src/3rdparty/squirrel/squirrel/CMakeLists.txt | 30 + src/CMakeLists.txt | 479 ++++++++ src/ai/CMakeLists.txt | 14 + src/blitter/CMakeLists.txt | 55 + src/core/CMakeLists.txt | 30 + src/core/endian_type.hpp | 28 +- src/depend/depend.cpp | 1084 ----------------- src/game/CMakeLists.txt | 14 + src/lang/CMakeLists.txt | 122 ++ src/linkgraph/CMakeLists.txt | 22 + src/misc/CMakeLists.txt | 14 + src/music/CMakeLists.txt | 54 + src/network/CMakeLists.txt | 28 + src/network/core/CMakeLists.txt | 27 + src/os/CMakeLists.txt | 4 + src/os/macosx/CMakeLists.txt | 11 + src/os/os2/CMakeLists.txt | 4 + src/os/unix/CMakeLists.txt | 9 + src/os/windows/CMakeLists.txt | 8 + src/os/windows/ottdres.rc.in | 14 +- src/pathfinder/CMakeLists.txt | 9 + src/pathfinder/npf/CMakeLists.txt | 8 + src/pathfinder/yapf/CMakeLists.txt | 20 + src/rev.cpp.in | 12 +- src/saveload/CMakeLists.txt | 43 + src/script/CMakeLists.txt | 23 + src/script/api/CMakeLists.txt | 140 +++ src/settingsgen/CMakeLists.txt | 13 + src/sound/CMakeLists.txt | 37 + src/spriteloader/CMakeLists.txt | 5 + src/stdafx.h | 11 +- src/strgen/CMakeLists.txt | 25 + src/table/CMakeLists.txt | 83 ++ src/video/CMakeLists.txt | 35 + src/video/cocoa/CMakeLists.txt | 8 + src/widgets/CMakeLists.txt | 61 + 69 files changed, 3116 insertions(+), 1144 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmake/AddCustomXXXTimestamp.cmake create mode 100644 cmake/CompileFlags.cmake create mode 100644 cmake/CreateGrfCommand.cmake create mode 100644 cmake/CreateRegression.cmake create mode 100644 cmake/Endian.cmake create mode 100644 cmake/FindAllegro.cmake create mode 100644 cmake/FindEditbin.cmake create mode 100644 cmake/FindFluidsynth.cmake create mode 100644 cmake/FindFontconfig.cmake create mode 100644 cmake/FindGrfcodec.cmake create mode 100644 cmake/FindICU.cmake create mode 100644 cmake/FindIconv.cmake create mode 100644 cmake/FindLZO.cmake create mode 100644 cmake/FindSSE.cmake create mode 100644 cmake/FindXDG_basedir.cmake create mode 100644 cmake/FindXaudio2.cmake create mode 100644 cmake/LinkPackage.cmake create mode 100644 cmake/Options.cmake create mode 100644 cmake/SourceList.cmake create mode 100644 cmake/Static.cmake create mode 100644 cmake/scripts/FindVersion.cmake create mode 100644 os/windows/openttd.manifest create mode 100644 src/3rdparty/CMakeLists.txt create mode 100644 src/3rdparty/md5/CMakeLists.txt create mode 100644 src/3rdparty/os2/CMakeLists.txt create mode 100644 src/3rdparty/squirrel/CMakeLists.txt create mode 100644 src/3rdparty/squirrel/include/CMakeLists.txt create mode 100644 src/3rdparty/squirrel/sqstdlib/CMakeLists.txt create mode 100644 src/3rdparty/squirrel/squirrel/CMakeLists.txt create mode 100644 src/CMakeLists.txt create mode 100644 src/ai/CMakeLists.txt create mode 100644 src/blitter/CMakeLists.txt create mode 100644 src/core/CMakeLists.txt delete mode 100644 src/depend/depend.cpp create mode 100644 src/game/CMakeLists.txt create mode 100644 src/lang/CMakeLists.txt create mode 100644 src/linkgraph/CMakeLists.txt create mode 100644 src/misc/CMakeLists.txt create mode 100644 src/music/CMakeLists.txt create mode 100644 src/network/CMakeLists.txt create mode 100644 src/network/core/CMakeLists.txt create mode 100644 src/os/CMakeLists.txt create mode 100644 src/os/macosx/CMakeLists.txt create mode 100644 src/os/os2/CMakeLists.txt create mode 100644 src/os/unix/CMakeLists.txt create mode 100644 src/os/windows/CMakeLists.txt create mode 100644 src/pathfinder/CMakeLists.txt create mode 100644 src/pathfinder/npf/CMakeLists.txt create mode 100644 src/pathfinder/yapf/CMakeLists.txt create mode 100644 src/saveload/CMakeLists.txt create mode 100644 src/script/CMakeLists.txt create mode 100644 src/script/api/CMakeLists.txt create mode 100644 src/settingsgen/CMakeLists.txt create mode 100644 src/sound/CMakeLists.txt create mode 100644 src/spriteloader/CMakeLists.txt create mode 100644 src/strgen/CMakeLists.txt create mode 100644 src/table/CMakeLists.txt create mode 100644 src/video/CMakeLists.txt create mode 100644 src/video/cocoa/CMakeLists.txt create mode 100644 src/widgets/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 3e74133dfe..156a9f7a66 100644 --- a/.gitignore +++ b/.gitignore @@ -21,18 +21,13 @@ bin/scripts/* !bin/scripts/*.example !bin/scripts/readme.txt -*.aps bundle/* bundles/* docs/aidocs/* docs/gamedocs/* docs/source/* -.kdev4 -.kdev4/* -*.kdev4 media/openttd.desktop media/openttd.desktop.install -objs/* projects/.vs projects/Debug projects/Release @@ -44,8 +39,6 @@ projects/*.vcproj.*.user projects/*.vcxproj.user projects/*.VC.db projects/*.VC.opendb -src/rev.cpp -src/os/windows/ottdres.rc /Makefile* !/Makefile.msvc diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..c1ffa9ecca --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,226 @@ +cmake_minimum_required(VERSION 3.5) + +project(OpenTTD) + +if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory") +endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") + +include(Options) +set_options() +set_directory_options() + +include(Static) +set_static_if_needed() + +# Prefer -pthread over -lpthread, which is often the better option of the two. +set(CMAKE_THREAD_PREFER_PTHREAD YES) +# Make sure we have Threads available. +find_package(Threads REQUIRED) + +find_package(ZLIB) +find_package(LibLZMA) +find_package(LZO) +find_package(PNG) +if (NOT WIN32) + find_package(SDL2) + if (NOT SDL2_FOUND) + find_package(SDL) + endif( NOT SDL2_FOUND) + find_package(Allegro) + find_package(Fluidsynth) + find_package(Freetype) + find_package(Fontconfig) + find_package(ICU OPTIONAL_COMPONENTS i18n lx) + find_package(XDG_basedir) +endif (NOT WIN32) +if (APPLE) + find_package(Iconv) + + find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) + find_library(AUDIOUNIT_LIBRARY AudioUnit) + find_library(COCOA_LIBRARY Cocoa) +endif (APPLE) + +if (MSVC) + find_package(Editbin REQUIRED) +endif (MSVC) + +find_package(SSE) +find_package(Xaudio2) + +find_package(Grfcodec) + +# IPO is only properly supported from CMake 3.9. Despite the fact we are +# CMake 3.5, still enable IPO if we detect we are 3.9+. +if (POLICY CMP0069) + cmake_policy(SET CMP0069 NEW) + include(CheckIPOSupported) + check_ipo_supported(RESULT IPO_FOUND) +endif (POLICY CMP0069) + +show_options() + +if (UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) + if (NOT SDL_FOUND AND NOT SDL2_FOUND) + message(FATAL_ERROR "SDL or SDL2 is required for this platform") + endif (NOT SDL_FOUND AND NOT SDL2_FOUND) +endif (UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) +if (APPLE) + if (NOT AUDIOTOOLBOX_LIBRARY) + message(FATAL_ERROR "AudioToolbox is required for this platform") + endif (NOT AUDIOTOOLBOX_LIBRARY) + if (NOT AUDIOUNIT_LIBRARY) + message(FATAL_ERROR "AudioUnit is required for this platform") + endif (NOT AUDIOUNIT_LIBRARY) + if (NOT COCOA_LIBRARY) + message(FATAL_ERROR "Cocoa is required for this platform") + endif (NOT COCOA_LIBRARY) +endif (APPLE) + +if (MSVC) + # C++17 for MSVC + set(CMAKE_CXX_STANDARD 17) +else (MSVC) + # C++11 for all other targets + set(CMAKE_CXX_STANDARD 11) +endif (MSVC) + +set(CMAKE_CXX_STANDARD_REQUIRED YES) +set(CMAKE_CXX_EXTENSIONS NO) + +list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp") +if (WIN32) + list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") +endif (WIN32) + +# Generate a target to determine version, which is execute every 'make' run +add_custom_target(find_version + ${CMAKE_COMMAND} + -DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated + -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + BYPRODUCTS ${GENERATED_SOURCE_FILES} +) + +include(SourceList) +include(Endian) +add_endian_definition() + +# Needed by rev.cpp +include_directories(${CMAKE_SOURCE_DIR}/src) +# Needed by everything that uses Squirrel +include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/squirrel/include) + +include(CompileFlags) +compile_flags() + +add_executable(openttd WIN32 ${GENERATED_SOURCE_FILES}) +# All other files are added via target_sources() + +include(AddCustomXXXTimestamp) +add_subdirectory(${CMAKE_SOURCE_DIR}/src) +add_subdirectory(${CMAKE_SOURCE_DIR}/media/baseset) + +add_dependencies(openttd + find_version) + +target_link_libraries(openttd + openttd::languages + openttd::settings + openttd::basesets + Threads::Threads +) + +if (IPO_FOUND) + set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE True) + set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL True) + set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO True) +endif (IPO_FOUND) +set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin") +process_compile_flags() + +if (APPLE OR UNIX) + add_definitions(-DUNIX) +endif (APPLE OR UNIX) + +include(LinkPackage) +link_package(PNG TARGET PNG::PNG ENCOURAGED) +link_package(ZLIB TARGET ZLIB::ZLIB ENCOURAGED) +link_package(LIBLZMA TARGET LibLZMA::LibLZMA ENCOURAGED) +link_package(LZO ENCOURAGED) +link_package(XDG_basedir) + +if (NOT OPTION_DEDICATED) + link_package(Fluidsynth) + link_package(SDL) + link_package(SDL2) + link_package(Allegro) + link_package(FREETYPE TARGET Freetype::Freetype) + link_package(Fontconfig TARGET Fontconfig::Fontconfig) + link_package(ICU_lx) + link_package(ICU_i18n) +endif (NOT OPTION_DEDICATED) + +if (APPLE) + link_package(Iconv TARGET Iconv::Iconv) + + target_link_libraries(openttd + ${AUDIOTOOLBOX_LIBRARY} + ${AUDIOUNIT_LIBRARY} + ${COCOA_LIBRARY} + ) + + add_definitions( + -DWITH_COCOA + -DENABLE_COCOA_QUARTZ + ) +endif (APPLE) + +if (NOT PERSONAL_DIR STREQUAL "(not set)") + add_definitions( + -DWITH_PERSONAL_DIR + -DPERSONAL_DIR="${PERSONAL_DIR}" + ) +endif (NOT PERSONAL_DIR STREQUAL "(not set)") + +if (NOT SHARED_DIR STREQUAL "(not set)") + add_definitions( + -DWITH_SHARED_DIR + -DSHARED_DIR="${SHARED_DIR}" + ) +endif (NOT SHARED_DIR STREQUAL "(not set)") + +if (NOT GLOBAL_DIR STREQUAL "(not set)") + add_definitions( + -DGLOBAL_DATA_DIR="${GLOBAL_DIR}" + ) +endif (NOT GLOBAL_DIR STREQUAL "(not set)") + +link_package(SSE) + +add_definitions_based_on_options() + +if (WIN32) + add_definitions( + -DUNICODE + -D_UNICODE + -DWITH_UNISCRIBE + ) + + target_link_libraries(openttd + ws2_32 + winmm + imm32 + ) +endif (WIN32) + +if (CMAKE_SIZEOF_VOID_P EQUAL 8) + add_definitions(-D_SQ64) +endif (CMAKE_SIZEOF_VOID_P EQUAL 8) + +include(CreateRegression) +create_regression() diff --git a/cmake/AddCustomXXXTimestamp.cmake b/cmake/AddCustomXXXTimestamp.cmake new file mode 100644 index 0000000000..ca93988731 --- /dev/null +++ b/cmake/AddCustomXXXTimestamp.cmake @@ -0,0 +1,145 @@ +macro(_parse_arguments_with_multi_hack ORIGINAL_COMMAND_LINE) + # cmake_parse_arguments() put all the MULTIS in a single variable; you + # lose the ability to see for example multiple COMMANDs. To be able to + # passthrough multiple MULTIS, we add a marker after every MULTI. This + # allows us to reassemble the correct amount again before giving it to + # the wrapped command with _reassemble_command_line(). + + set(COMMAND_LINE "${ORIGINAL_COMMAND_LINE}") + + foreach(MULTI IN LISTS MULTIS) + string(REPLACE "${MULTI}" "${MULTI};:::" COMMAND_LINE "${COMMAND_LINE}") + endforeach(MULTI) + + cmake_parse_arguments(PARAM "${OPTIONS}" "${SINGLES}" "${MULTIS}" ${COMMAND_LINE}) +endmacro() + +macro(_reassemble_command_line) + # Reassemble the command line as we original got it. + set(NEW_COMMAND_LINE ${PARAM_UNPARSED_ARGUMENTS}) + + foreach(OPTION IN LISTS OPTIONS) + if (PARAM_${OPTION}) + list(APPEND NEW_COMMAND_LINE "${OPTION}") + endif (PARAM_${OPTION}) + endforeach(OPTION) + + foreach(SINGLE IN LISTS SINGLES) + if (PARAM_${SINGLE}) + list(APPEND NEW_COMMAND_LINE "${SINGLE}" "${PARAM_${SINGLE}}") + endif (PARAM_${SINGLE}) + endforeach(SINGLE) + + foreach(MULTI IN LISTS MULTIS) + if (PARAM_${MULTI}) + # Replace our special marker with the name of the MULTI again. This + # restores for example multiple COMMANDs again. + string(REPLACE ":::" "${MULTI}" PARAM_${MULTI} "${PARAM_${MULTI}}") + list(APPEND NEW_COMMAND_LINE "${PARAM_${MULTI}}") + endif (PARAM_${MULTI}) + endforeach(MULTI) +endmacro() + +# Generated files can be older than their dependencies, causing useless +# regenerations. This function replaces each file in OUTPUT with a .timestamp +# file, adds a command to touch it and move the original file in BYPRODUCTS, +# before calling add_custom_command(). +# +# Note: Any add_custom_target() depending on files in original OUTPUT must use +# add_custom_target_timestamp() instead to have the correct dependencies. +# +# add_custom_command_timestamp(OUTPUT output1 [output2 ...] +# COMMAND command1 [ARGS] [args1...] +# [COMMAND command2 [ARGS] [args2...] ...] +# [MAIN_DEPENDENCY depend] +# [DEPENDS [depends...]] +# [BYPRODUCTS [files...]] +# [IMPLICIT_DEPENDS depend1 +# [ depend2] ...] +# [WORKING_DIRECTORY dir] +# [COMMENT comment] +# [VERBATIM] [APPEND] [USES_TERMINAL]) +function(add_custom_command_timestamp) + set(OPTIONS VERBATIM APPEND USES_TERMINAL) + set(SINGLES MAIN_DEPENDENCY WORKING_DIRECTORY COMMENT) + set(MULTIS OUTPUT COMMAND DEPENDS BYPRODUCTS IMPLICIT_DEPENDS) + + _parse_arguments_with_multi_hack("${ARGN}") + + # Create a list of all the OUTPUTs (by removing our magic marker) + string(REPLACE ":::;" "" OUTPUTS "${PARAM_OUTPUT}") + + # Reset the OUTPUT and BYPRODUCTS as an empty list (if needed). + # Because they are MULTIS, we need to add our special marker here. + set(PARAM_OUTPUT ":::") + if (NOT PARAM_BYPRODUCTS) + set(PARAM_BYPRODUCTS ":::") + endif () + + foreach(OUTPUT IN LISTS OUTPUTS) + # For every output, we add a 'cmake -E touch' entry to update the + # timestamp on each run. + get_filename_component(OUTPUT_FILENAME ${OUTPUT} NAME) + string(APPEND PARAM_COMMAND ";:::;${CMAKE_COMMAND};-E;touch;${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp") + + # We change the OUTPUT to a '.timestamp' variant, and make the real + # output a byproduct. + list(APPEND PARAM_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp) + list(APPEND PARAM_BYPRODUCTS ${OUTPUT}) + + # Mark this file as being a byproduct; we use this again with + # add_custom_target_timestamp() to know if we should point to the + # '.timestamp' variant or not. + set_source_files_properties(${OUTPUT} PROPERTIES BYPRODUCT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp) + endforeach(OUTPUT) + + # Reassemble and call the wrapped command + _reassemble_command_line() + add_custom_command(${NEW_COMMAND_LINE}) +endfunction(add_custom_command_timestamp) + +# Generated files can be older than their dependencies, causing useless +# regenerations. This function adds a .timestamp file for each file in DEPENDS +# replaced by add_custom_command_timestamp(), before calling add_custom_target(). +# +# add_custom_target_timestamp(Name [ALL] [command1 [args1...]] +# [COMMAND command2 [args2...] ...] +# [DEPENDS depend depend depend ... ] +# [BYPRODUCTS [files...]] +# [WORKING_DIRECTORY dir] +# [COMMENT comment] +# [VERBATIM] [USES_TERMINAL] +# [SOURCES src1 [src2...]]) +function(add_custom_target_timestamp) + set(OPTIONS VERBATIM USES_TERMINAL) + set(SINGLES WORKING_DIRECTORY COMMENT) + set(MULTIS COMMAND DEPENDS BYPRODUCTS SOURCES) + # ALL is missing, as the order is important here. It will be picked up + # by ${PARAM_UNPARSED_ARGUMENTS} when reassembling the command line. + + _parse_arguments_with_multi_hack("${ARGN}") + + # Create a list of all the DEPENDs (by removing our magic marker) + string(REPLACE ":::;" "" DEPENDS "${PARAM_DEPENDS}") + + # Reset the DEPEND as an empty list. + # Because it is a MULTI, we need to add our special marker here. + set(PARAM_DEPENDS ":::") + + foreach(DEPEND IN LISTS DEPENDS) + # Check if the output is produced by add_custom_command_timestamp() + get_source_file_property(BYPRODUCT ${DEPEND} BYPRODUCT) + + if (BYPRODUCT STREQUAL "NOTFOUND") + # If it is not, just keep it as DEPEND + list(APPEND PARAM_DEPENDS "${DEPEND}") + else (BYPRODUCT STREQUAL "NOTFOUND") + # If it is, the BYPRODUCT property points to the timestamp we want to depend on + list(APPEND PARAM_DEPENDS "${BYPRODUCT}") + endif (BYPRODUCT STREQUAL "NOTFOUND") + endforeach(DEPEND) + + # Reassemble and call the wrapped command + _reassemble_command_line() + add_custom_target(${NEW_COMMAND_LINE}) +endfunction(add_custom_target_timestamp) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake new file mode 100644 index 0000000000..05c19abab9 --- /dev/null +++ b/cmake/CompileFlags.cmake @@ -0,0 +1,120 @@ +# Macro which contains all bits to setup the compile flags correctly. +# +# compile_flags() +# +macro(compile_flags) + if (MSVC) + # Switch to MT (static) instead of MD (dynamic) binary + + # For MSVC two generators are available + # - a command line generator (Ninja) using CMAKE_BUILD_TYPE to specify the + # configuration of the build tree + # - an IDE generator (Visual Studio) using CMAKE_CONFIGURATION_TYPES to + # specify all configurations that will be available in the generated solution + list(APPEND MSVC_CONFIGS "${CMAKE_BUILD_TYPE}" "${CMAKE_CONFIGURATION_TYPES}") + + # Set usage of static runtime for all configurations + foreach(MSVC_CONFIG ${MSVC_CONFIGS}) + string(TOUPPER "CMAKE_CXX_FLAGS_${MSVC_CONFIG}" MSVC_FLAGS) + string(REPLACE "/MD" "/MT" ${MSVC_FLAGS} "${${MSVC_FLAGS}}") + endforeach() + + # "If /Zc:rvalueCast is specified, the compiler follows section 5.4 of the + # C++11 standard". We need C++11 for the way we use threads. + add_compile_options(/Zc:rvalueCast) + + # Add DPI manifest to project; other WIN32 targets get this via ottdres.rc + list(APPEND GENERATED_SOURCE_FILES "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest") + endif (MSVC) + + # Add some -D flags for Debug builds. We cannot use add_definitions(), because + # it does not appear to support the $<> tags. + add_compile_options( + "$<$:-D_DEBUG>" + "$<$:-D_FORTIFY_SOURCE=2>" + ) + + # Prepare a generator that checks if we are not a debug, and don't have asserts + # on. We need this later on to set some compile options for stable releases. + set(IS_STABLE_RELEASE "$>,$>>") + + if (MSVC) + add_compile_options(/W3) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + add_compile_options( + -W + -Wall + -Wcast-qual + -Wextra + -Wsign-compare + -Wundef + -Wpointer-arith + -Wwrite-strings + -Wredundant-decls + -Wformat-security + -Wformat=2 + -Winit-self + -Wnon-virtual-dtor + + # Often parameters are unused, which is fine. + -Wno-unused-parameter + # We use 'ABCD' multichar for SaveLoad chunks identifiers + -Wno-multichar + + # Compilers complains about that we break strict-aliasing. + # On most places we don't see how to fix it, and it doesn't + # break anything. So disable strict-aliasing to make the + # compiler all happy. + -fno-strict-aliasing + ) + + add_compile_options( + # When we are a stable release (Release build + USE_ASSERTS not set), + # assertations are off, which trigger a lot of warnings. We disable + # these warnings for these releases. + "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-parameter>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>" + ) + + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-flifetime-dse=1" LIFETIME_DSE_FOUND) + + add_compile_options( + # GCC 4.2+ automatically assumes that signed overflows do + # not occur in signed arithmetics, whereas we are not + # sure that they will not happen. It furthermore complains + # about its own optimized code in some places. + "-fno-strict-overflow" + + # Prevent optimisation supposing enums are in a range specified by the standard + # For details, see http://gcc.gnu.org/PR43680 + "-fno-tree-vrp" + + # -flifetime-dse=2 (default since GCC 6) doesn't play + # well with our custom pool item allocator + "$<$:-flifetime-dse=1>" + ) + endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + add_compile_options( + -Wall + # warning #873: function ... ::operator new ... has no corresponding operator delete ... + -wd873 + # warning #1292: unknown attribute "fallthrough" + -wd1292 + # warning #1899: multicharacter character literal (potential portability problem) + -wd1899 + # warning #2160: anonymous union qualifier is ignored + -wd2160 + ) + else () + message(FATAL_ERROR "No warning flags are set for this compiler yet; please consider creating a Pull Request to add support for this compiler.") + endif () + + if (NOT WIN32) + # rdynamic is used to get useful stack traces from crash reports. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic") + endif (NOT WIN32) +endmacro() diff --git a/cmake/CreateGrfCommand.cmake b/cmake/CreateGrfCommand.cmake new file mode 100644 index 0000000000..25e599f568 --- /dev/null +++ b/cmake/CreateGrfCommand.cmake @@ -0,0 +1,50 @@ +# Macro which contains all bits and pieces to create a single grf file based +# on NFO and PNG files. +# +# create_grf_command() +# +function(create_grf_command) + set(EXTRA_PNG_SOURCE_FILES ${ARGV}) + + get_filename_component(GRF_SOURCE_FOLDER_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) + get_filename_component(GRF_BINARY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../${GRF_SOURCE_FOLDER_NAME}.grf ABSOLUTE) + file(GLOB_RECURSE GRF_PNG_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.png) + file(GLOB_RECURSE GRF_NFO_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.nfo) + set(GRF_PNG_SOURCE_FILES ${GRF_PNG_SOURCE_FILES} ${EXTRA_PNG_SOURCE_FILES}) + + # Copy over all the PNG files to the correct folder + foreach(GRF_PNG_SOURCE_FILE IN LISTS GRF_PNG_SOURCE_FILES) + get_filename_component(GRF_PNG_SOURCE_FILE_NAME "${GRF_PNG_SOURCE_FILE}" NAME) + set(GRF_PNG_BINARY_FILE "${CMAKE_CURRENT_BINARY_DIR}/sprites/${GRF_PNG_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${GRF_PNG_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${GRF_PNG_SOURCE_FILE} + ${GRF_PNG_BINARY_FILE} + MAIN_DEPENDENCY ${GRF_PNG_SOURCE_FILE} + COMMENT "Copying ${GRF_PNG_SOURCE_FILE_NAME} sprite file" + ) + + list(APPEND GRF_PNG_BINARY_FILES ${GRF_PNG_BINARY_FILE}) + endforeach(GRF_PNG_SOURCE_FILE) + + add_custom_command(OUTPUT ${GRF_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} + -DGRF_SOURCE_FOLDER=${CMAKE_CURRENT_SOURCE_DIR} + -DGRF_BINARY_FILE=${GRF_BINARY_FILE} + -DNFORENUM_EXECUTABLE=${NFORENUM_EXECUTABLE} + -DGRFCODEC_EXECUTABLE=${GRFCODEC_EXECUTABLE} + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake + MAIN_DEPENDENCY ${GRF_NFO_SOURCE_FILES} + DEPENDS ${GRF_PNG_BINARY_FILES} + ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating ${GRF_SOURCE_FOLDER_NAME}.grf" + ) + + # For conviance, if you want to only test building the GRF + add_custom_target(${GRF_SOURCE_FOLDER_NAME}.grf + DEPENDS + ${GRF_BINARY_FILE} + ) +endfunction() diff --git a/cmake/CreateRegression.cmake b/cmake/CreateRegression.cmake new file mode 100644 index 0000000000..443332368a --- /dev/null +++ b/cmake/CreateRegression.cmake @@ -0,0 +1,86 @@ +# Macro which contains all bits and pieces to create the regression tests. +# This creates both a standalone target 'regression', and it integrates with +# 'ctest'. The first is prefered, as it is more verbose, and takes care of +# dependencies correctly. +# +# create_regression() +# +macro(create_regression) + # Find all the files in the regression folder; they need to be copied to the + # build folder before we can run the regression + file(GLOB_RECURSE REGRESSION_SOURCE_FILES ${CMAKE_SOURCE_DIR}/regression/*) + foreach(REGRESSION_SOURCE_FILE IN LISTS REGRESSION_SOURCE_FILES) + string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/regression/" "${CMAKE_BINARY_DIR}/ai/" REGRESSION_BINARY_FILE "${REGRESSION_SOURCE_FILE}") + string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/regression/" "" REGRESSION_SOURCE_FILE_NAME "${REGRESSION_SOURCE_FILE}") + + if ("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") + continue() + endif ("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") + + add_custom_command(OUTPUT ${REGRESSION_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${REGRESSION_SOURCE_FILE} + ${REGRESSION_BINARY_FILE} + MAIN_DEPENDENCY ${REGRESSION_SOURCE_FILE} + COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file" + ) + + list(APPEND REGRESSION_BINARY_FILES ${REGRESSION_BINARY_FILE}) + endforeach(REGRESSION_SOURCE_FILE) + + # Copy the regression configuration in a special folder, so all autogenerated + # folders end up in the same place after running regression. + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/regression/regression.cfg + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/regression/regression.cfg + ${CMAKE_BINARY_DIR}/regression/regression.cfg + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/regression/regression.cfg + COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file" + ) + list(APPEND REGRESSION_BINARY_FILES ${CMAKE_BINARY_DIR}/regression/regression.cfg) + + # Create a new target which copies all regression files + add_custom_target(regression_files + ALL # this is needed because 'make test' doesn't resolve dependencies, and otherwise this is never executed + DEPENDS + ${REGRESSION_BINARY_FILES} + ) + + enable_testing() + + # Find all the tests we have, and create a target for them + file(GLOB REGRESSION_TESTS ${CMAKE_SOURCE_DIR}/regression/*) + foreach(REGRESSION_TEST IN LISTS REGRESSION_TESTS) + get_filename_component(REGRESSION_TEST_NAME "${REGRESSION_TEST}" NAME) + + if ("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") + continue() + endif ("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") + + add_custom_target(regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + DEPENDS openttd regression_files + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running regression test ${REGRESSION_TEST_NAME}" + ) + + # Also make sure that 'make test' runs the regression + add_test(NAME regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + + list(APPEND REGRESSION_TARGETS regression_${REGRESSION_TEST_NAME}) + endforeach(REGRESSION_TEST) + + # Create a new target which runs the regression + add_custom_target(regression + DEPENDS ${REGRESSION_TARGETS}) +endmacro() diff --git a/cmake/Endian.cmake b/cmake/Endian.cmake new file mode 100644 index 0000000000..00cb975445 --- /dev/null +++ b/cmake/Endian.cmake @@ -0,0 +1,14 @@ +# Add the definitions to indicate which endian we are building for. +# +# add_endian_definition() +# +function(add_endian_definition) + include(TestBigEndian) + TEST_BIG_ENDIAN(IS_BIG_ENDIAN) + + if (IS_BIG_ENDIAN) + add_definitions(-DTTD_ENDIAN=TTD_BIG_ENDIAN) + else (IS_BIG_ENDIAN) + add_definitions(-DTTD_ENDIAN=TTD_LITTLE_ENDIAN) + endif (IS_BIG_ENDIAN) +endfunction() diff --git a/cmake/FindAllegro.cmake b/cmake/FindAllegro.cmake new file mode 100644 index 0000000000..85b2ffd392 --- /dev/null +++ b/cmake/FindAllegro.cmake @@ -0,0 +1,65 @@ +#[=======================================================================[.rst: +FindAllegro +------- + +Finds the allegro library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Allegro_FOUND`` + True if the system has the allegro library. +``Allegro_INCLUDE_DIRS`` + Include directories needed to use allegro. +``Allegro_LIBRARIES`` + Libraries needed to link to allegro. +``Allegro_VERSION`` + The version of the allegro library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Allegro_INCLUDE_DIR`` + The directory containing ``allegro.h``. +``Allegro_LIBRARY`` + The path to the allegro library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_Allegro QUIET allegro) + +find_path(Allegro_INCLUDE_DIR + NAMES allegro.h + PATHS ${PC_Allegro_INCLUDE_DIRS} +) + +find_library(Allegro_LIBRARY + NAMES alleg + PATHS ${PC_Allegro_LIBRARY_DIRS} +) + +set(Allegro_VERSION ${PC_Allegro_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Allegro + FOUND_VAR Allegro_FOUND + REQUIRED_VARS + Allegro_LIBRARY + Allegro_INCLUDE_DIR + VERSION_VAR Allegro_VERSION +) + +if (Allegro_FOUND) + set(Allegro_LIBRARIES ${Allegro_LIBRARY}) + set(Allegro_INCLUDE_DIRS ${Allegro_INCLUDE_DIR}) +endif () + +mark_as_advanced( + Allegro_INCLUDE_DIR + Allegro_LIBRARY +) diff --git a/cmake/FindEditbin.cmake b/cmake/FindEditbin.cmake new file mode 100644 index 0000000000..363bc00539 --- /dev/null +++ b/cmake/FindEditbin.cmake @@ -0,0 +1,13 @@ +# Autodetect editbin. Only useful for MSVC. + +get_filename_component(MSVC_COMPILE_DIRECTORY ${CMAKE_CXX_COMPILER} DIRECTORY) +find_program( + EDITBIN_EXECUTABLE editbin.exe + HINTS ${MSVC_COMPILE_DIRECTORY} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Editbin + FOUND_VAR EDITBIN_FOUND + REQUIRED_VARS EDITBIN_EXECUTABLE +) diff --git a/cmake/FindFluidsynth.cmake b/cmake/FindFluidsynth.cmake new file mode 100644 index 0000000000..063726dbe5 --- /dev/null +++ b/cmake/FindFluidsynth.cmake @@ -0,0 +1,65 @@ +#[=======================================================================[.rst: +FindFluidsynth +------- + +Finds the fluidsynth library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Fluidsynth_FOUND`` + True if the system has the fluidsynth library. +``Fluidsynth_INCLUDE_DIRS`` + Include directories needed to use fluidsynth. +``Fluidsynth_LIBRARIES`` + Libraries needed to link to fluidsynth. +``Fluidsynth_VERSION`` + The version of the fluidsynth library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Fluidsynth_INCLUDE_DIR`` + The directory containing ``fluidsynth.h``. +``Fluidsynth_LIBRARY`` + The path to the fluidsynth library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_Fluidsynth QUIET fluidsynth) + +find_path(Fluidsynth_INCLUDE_DIR + NAMES fluidsynth.h + PATHS ${PC_Fluidsynth_INCLUDE_DIRS} +) + +find_library(Fluidsynth_LIBRARY + NAMES fluidsynth + PATHS ${PC_Fluidsynth_LIBRARY_DIRS} +) + +set(Fluidsynth_VERSION ${PC_Fluidsynth_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Fluidsynth + FOUND_VAR Fluidsynth_FOUND + REQUIRED_VARS + Fluidsynth_LIBRARY + Fluidsynth_INCLUDE_DIR + VERSION_VAR Fluidsynth_VERSION +) + +if (Fluidsynth_FOUND) + set(Fluidsynth_LIBRARIES ${Fluidsynth_LIBRARY}) + set(Fluidsynth_INCLUDE_DIRS ${Fluidsynth_INCLUDE_DIR}) +endif () + +mark_as_advanced( + Fluidsynth_INCLUDE_DIR + Fluidsynth_LIBRARY +) diff --git a/cmake/FindFontconfig.cmake b/cmake/FindFontconfig.cmake new file mode 100644 index 0000000000..a6f0180b37 --- /dev/null +++ b/cmake/FindFontconfig.cmake @@ -0,0 +1,101 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindFontconfig +-------------- + +Find Fontconfig headers and library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``Fontconfig::Fontconfig`` + The Fontconfig library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables in your project: + +``Fontconfig_FOUND`` + true if (the requested version of) Fontconfig is available. +``Fontconfig_VERSION`` + the version of Fontconfig. +``Fontconfig_LIBRARIES`` + the libraries to link against to use Fontconfig. +``Fontconfig_INCLUDE_DIRS`` + where to find the Fontconfig headers. +``Fontconfig_COMPILE_OPTIONS`` + this should be passed to target_compile_options(), if the + target is not used for linking + +#]=======================================================================] + + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +find_package(PkgConfig QUIET) +pkg_check_modules(PKG_FONTCONFIG QUIET fontconfig) +set(Fontconfig_COMPILE_OPTIONS ${PKG_FONTCONFIG_CFLAGS_OTHER}) +set(Fontconfig_VERSION ${PKG_FONTCONFIG_VERSION}) + +find_path( Fontconfig_INCLUDE_DIR + NAMES + fontconfig/fontconfig.h + HINTS + ${PKG_FONTCONFIG_INCLUDE_DIRS} + /usr/X11/include +) + +find_library( Fontconfig_LIBRARY + NAMES + fontconfig + PATHS + ${PKG_FONTCONFIG_LIBRARY_DIRS} +) + +if (Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION) + file(STRINGS ${Fontconfig_INCLUDE_DIR}/fontconfig/fontconfig.h _contents REGEX "^#define[ \t]+FC_[A-Z]+[ \t]+[0-9]+$") + unset(Fontconfig_VERSION) + foreach(VPART MAJOR MINOR REVISION) + foreach(VLINE ${_contents}) + if(VLINE MATCHES "^#define[\t ]+FC_${VPART}[\t ]+([0-9]+)$") + set(Fontconfig_VERSION_PART "${CMAKE_MATCH_1}") + if(Fontconfig_VERSION) + string(APPEND Fontconfig_VERSION ".${Fontconfig_VERSION_PART}") + else() + set(Fontconfig_VERSION "${Fontconfig_VERSION_PART}") + endif() + endif() + endforeach() + endforeach() +endif () + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Fontconfig + FOUND_VAR + Fontconfig_FOUND + REQUIRED_VARS + Fontconfig_LIBRARY + Fontconfig_INCLUDE_DIR + VERSION_VAR + Fontconfig_VERSION +) + + +if(Fontconfig_FOUND AND NOT TARGET Fontconfig::Fontconfig) + add_library(Fontconfig::Fontconfig UNKNOWN IMPORTED) + set_target_properties(Fontconfig::Fontconfig PROPERTIES + IMPORTED_LOCATION "${Fontconfig_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${Fontconfig_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${Fontconfig_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(Fontconfig_LIBRARY Fontconfig_INCLUDE_DIR) + +if(Fontconfig_FOUND) + set(Fontconfig_LIBRARIES ${Fontconfig_LIBRARY}) + set(Fontconfig_INCLUDE_DIRS ${Fontconfig_INCLUDE_DIR}) +endif() diff --git a/cmake/FindGrfcodec.cmake b/cmake/FindGrfcodec.cmake new file mode 100644 index 0000000000..089f956706 --- /dev/null +++ b/cmake/FindGrfcodec.cmake @@ -0,0 +1,13 @@ +# Autodetect grfcodec and nforenum. +# + +find_program(GRFCODEC_EXECUTABLE grfcodec) +find_program(NFORENUM_EXECUTABLE nforenum) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Grfcodec + FOUND_VAR GRFCODEC_FOUND + REQUIRED_VARS + GRFCODEC_EXECUTABLE + NFORENUM_EXECUTABLE +) diff --git a/cmake/FindICU.cmake b/cmake/FindICU.cmake new file mode 100644 index 0000000000..471e43c1d9 --- /dev/null +++ b/cmake/FindICU.cmake @@ -0,0 +1,64 @@ +#[=======================================================================[.rst: +FindICU +------- + +Finds components of the ICU library. + +Accepted components are: uc, i18n, le, lx, io + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``ICU_FOUND`` + True if components of ICU library are found. +``ICU_VERSION`` + The version of the ICU library which was found. +``ICU__FOUND`` + True if the system has the component of ICU library. +``ICU__INCLUDE_DIRS`` + Include directories needed to use the component of ICU library. +``ICU__LIBRARIES`` + Libraries needed to link to the component of ICU library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) + +set(ICU_KNOWN_COMPONENTS "uc" "i18n" "le" "lx" "io") + +foreach(MOD_NAME IN LISTS ICU_FIND_COMPONENTS) + if (NOT MOD_NAME IN_LIST ICU_KNOWN_COMPONENTS) + message(FATAL_ERROR "Unknown ICU component: ${MOD_NAME}") + endif() + pkg_check_modules(PC_ICU_${MOD_NAME} QUIET icu-${MOD_NAME}) + + # Check the libraries returned by pkg-config really exist. + unset(PC_LIBRARIES) + foreach(LIBRARY IN LISTS PC_ICU_${MOD_NAME}_LIBRARIES) + unset(PC_LIBRARY CACHE) + find_library(PC_LIBRARY NAMES ${LIBRARY}) + if (NOT PC_LIBRARY) + unset(PC_ICU_${MOD_NAME}_FOUND) + endif() + list(APPEND PC_LIBRARIES ${PC_LIBRARY}) + endforeach() + unset(PC_LIBRARY CACHE) + + if (${PC_ICU_${MOD_NAME}_FOUND}) + set(ICU_COMPONENT_FOUND TRUE) + set(ICU_${MOD_NAME}_FOUND TRUE) + set(ICU_${MOD_NAME}_LIBRARIES ${PC_LIBRARIES}) + set(ICU_${MOD_NAME}_INCLUDE_DIRS ${PC_ICU_${MOD_NAME}_INCLUDE_DIRS}) + set(ICU_VERSION ${PC_ICU_${MOD_NAME}_VERSION}) + endif() +endforeach() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ICU + FOUND_VAR ICU_FOUND + REQUIRED_VARS ICU_COMPONENT_FOUND + VERSION_VAR ICU_VERSION + HANDLE_COMPONENTS +) diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake new file mode 100644 index 0000000000..5185601ab7 --- /dev/null +++ b/cmake/FindIconv.cmake @@ -0,0 +1,133 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindIconv +--------- + +This module finds the ``iconv()`` POSIX.1 functions on the system. +These functions might be provided in the regular C library or externally +in the form of an additional library. + +The following variables are provided to indicate iconv support: + +.. variable:: Iconv_FOUND + + Variable indicating if the iconv support was found. + +.. variable:: Iconv_INCLUDE_DIRS + + The directories containing the iconv headers. + +.. variable:: Iconv_LIBRARIES + + The iconv libraries to be linked. + +.. variable:: Iconv_IS_BUILT_IN + + A variable indicating whether iconv support is stemming from the + C library or not. Even if the C library provides `iconv()`, the presence of + an external `libiconv` implementation might lead to this being false. + +Additionally, the following :prop_tgt:`IMPORTED` target is being provided: + +.. variable:: Iconv::Iconv + + Imported target for using iconv. + +The following cache variables may also be set: + +.. variable:: Iconv_INCLUDE_DIR + + The directory containing the iconv headers. + +.. variable:: Iconv_LIBRARY + + The iconv library (if not implicitly given in the C library). + +.. note:: + On POSIX platforms, iconv might be part of the C library and the cache + variables ``Iconv_INCLUDE_DIR`` and ``Iconv_LIBRARY`` might be empty. + +#]=======================================================================] + +include(CMakePushCheckState) +if(CMAKE_C_COMPILER_LOADED) + include(CheckCSourceCompiles) +elseif(CMAKE_CXX_COMPILER_LOADED) + include(CheckCXXSourceCompiles) +else() + # If neither C nor CXX are loaded, implicit iconv makes no sense. + set(Iconv_IS_BUILT_IN FALSE) +endif() + +# iconv can only be provided in libc on a POSIX system. +# If any cache variable is already set, we'll skip this test. +if(NOT DEFINED Iconv_IS_BUILT_IN) + if(UNIX AND NOT DEFINED Iconv_INCLUDE_DIR AND NOT DEFINED Iconv_LIBRARY) + cmake_push_check_state(RESET) + # We always suppress the message here: Otherwise on supported systems + # not having iconv in their C library (e.g. those using libiconv) + # would always display a confusing "Looking for iconv - not found" message + set(CMAKE_FIND_QUIETLY TRUE) + # The following code will not work, but it's sufficient to see if it compiles. + # Note: libiconv will define the iconv functions as macros, so CheckSymbolExists + # will not yield correct results. + set(Iconv_IMPLICIT_TEST_CODE + " + #include + #include + int main() { + char *a, *b; + size_t i, j; + iconv_t ic; + ic = iconv_open(\"to\", \"from\"); + iconv(ic, &a, &i, &b, &j); + iconv_close(ic); + } + " + ) + if(CMAKE_C_COMPILER_LOADED) + check_c_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN) + else() + check_cxx_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN) + endif() + cmake_pop_check_state() + else() + set(Iconv_IS_BUILT_IN FALSE) + endif() +endif() + +if(NOT Iconv_IS_BUILT_IN) + find_path(Iconv_INCLUDE_DIR + NAMES "iconv.h" + DOC "iconv include directory") + set(Iconv_LIBRARY_NAMES "iconv" "libiconv") +else() + set(Iconv_INCLUDE_DIR "" CACHE FILEPATH "iconv include directory") + set(Iconv_LIBRARY_NAMES "c") +endif() + +find_library(Iconv_LIBRARY + NAMES ${Iconv_LIBRARY_NAMES} + DOC "iconv library (potentially the C library)") + +mark_as_advanced(Iconv_INCLUDE_DIR) +mark_as_advanced(Iconv_LIBRARY) + +include(FindPackageHandleStandardArgs) +if(NOT Iconv_IS_BUILT_IN) + find_package_handle_standard_args(Iconv REQUIRED_VARS Iconv_LIBRARY Iconv_INCLUDE_DIR) +else() + find_package_handle_standard_args(Iconv REQUIRED_VARS Iconv_LIBRARY) +endif() + +if(Iconv_FOUND) + set(Iconv_INCLUDE_DIRS "${Iconv_INCLUDE_DIR}") + set(Iconv_LIBRARIES "${Iconv_LIBRARY}") + if(NOT TARGET Iconv::Iconv) + add_library(Iconv::Iconv INTERFACE IMPORTED) + endif() + set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Iconv_INCLUDE_DIRS}") + set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_LINK_LIBRARIES "${Iconv_LIBRARIES}") +endif() diff --git a/cmake/FindLZO.cmake b/cmake/FindLZO.cmake new file mode 100644 index 0000000000..9a409002df --- /dev/null +++ b/cmake/FindLZO.cmake @@ -0,0 +1,89 @@ +#[=======================================================================[.rst: +FindLZO +------- + +Finds the LZO library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``LZO_FOUND`` + True if the system has the LZO library. +``LZO_INCLUDE_DIRS`` + Include directories needed to use LZO. +``LZO_LIBRARIES`` + Libraries needed to link to LZO. +``LZO_VERSION`` + The version of the LZO library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``LZO_INCLUDE_DIR`` + The directory containing ``lzo/lzo1x.h``. +``LZO_LIBRARY`` + The path to the LZO library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_LZO QUIET lzo2) + +find_path(LZO_INCLUDE_DIR + NAMES lzo/lzo1x.h + PATHS ${PC_LZO_INCLUDE_DIRS} +) + +find_library(LZO_LIBRARY + NAMES lzo2 + PATHS ${PC_LZO_LIBRARY_DIRS} +) + +# With vcpkg, the library path should contain both 'debug' and 'optimized' +# entries (see target_link_libraries() documentation for more information) +# +# NOTE: we only patch up when using vcpkg; the same issue might happen +# when not using vcpkg, but this is non-trivial to fix, as we have no idea +# what the paths are. With vcpkg we do. And we only official support vcpkg +# with Windows. +# +# NOTE: this is based on the assumption that the debug file has the same +# name as the optimized file. This is not always the case, but so far +# experiences has shown that in those case vcpkg CMake files do the right +# thing. +if (VCPKG_TOOLCHAIN AND LZO_LIBRARY) + if (LZO_LIBRARY MATCHES "/debug/") + set(LZO_LIBRARY_DEBUG ${LZO_LIBRARY}) + string(REPLACE "/debug/lib/" "/lib/" LZO_LIBRARY_RELEASE ${LZO_LIBRARY}) + else() + set(LZO_LIBRARY_RELEASE ${LZO_LIBRARY}) + string(REPLACE "/lib/" "/debug/lib/" LZO_LIBRARY_DEBUG ${LZO_LIBRARY}) + endif() + include(SelectLibraryConfigurations) + select_library_configurations(LZO) +endif() + +set(LZO_VERSION ${PC_LZO_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LZO + FOUND_VAR LZO_FOUND + REQUIRED_VARS + LZO_LIBRARY + LZO_INCLUDE_DIR + VERSION_VAR LZO_VERSION +) + +if (LZO_FOUND) + set(LZO_LIBRARIES ${LZO_LIBRARY}) + set(LZO_INCLUDE_DIRS ${LZO_INCLUDE_DIR}) +endif () + +mark_as_advanced( + LZO_INCLUDE_DIR + LZO_LIBRARY +) diff --git a/cmake/FindSSE.cmake b/cmake/FindSSE.cmake new file mode 100644 index 0000000000..d0a57ccbb2 --- /dev/null +++ b/cmake/FindSSE.cmake @@ -0,0 +1,17 @@ +# Autodetect if SSE4.1 can be used. If so, the assumption is, so can the other +# SSE version (SSE 2.0, SSSE 3.0). + +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_FLAGS "") + +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(CMAKE_REQUIRED_FLAGS "-msse4.1") +endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + +check_cxx_source_compiles(" + #include + #include + #include + int main() { return 0; }" + SSE_FOUND +) diff --git a/cmake/FindXDG_basedir.cmake b/cmake/FindXDG_basedir.cmake new file mode 100644 index 0000000000..913b425e20 --- /dev/null +++ b/cmake/FindXDG_basedir.cmake @@ -0,0 +1,65 @@ +#[=======================================================================[.rst: +FindXDG_basedir +------- + +Finds the xdg-basedir library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``XDG_basedir_FOUND`` + True if the system has the xdg-basedir library. +``XDG_basedir_INCLUDE_DIRS`` + Include directories needed to use xdg-basedir. +``XDG_basedir_LIBRARIES`` + Libraries needed to link to xdg-basedir. +``XDG_basedir_VERSION`` + The version of the xdg-basedir library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``XDG_basedir_INCLUDE_DIR`` + The directory containing ``xdg-basedir.h``. +``XDG_basedir_LIBRARY`` + The path to the xdg-basedir library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_XDG_basedir QUIET libxdg-basedir) + +find_path(XDG_basedir_INCLUDE_DIR + NAMES basedir.h + PATHS ${PC_XDG_basedir_INCLUDE_DIRS} +) + +find_library(XDG_basedir_LIBRARY + NAMES xdg-basedir + PATHS ${PC_XDG_basedir_LIBRARY_DIRS} +) + +set(XDG_basedir_VERSION ${PC_XDG_basedir_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(XDG_basedir + FOUND_VAR XDG_basedir_FOUND + REQUIRED_VARS + XDG_basedir_LIBRARY + XDG_basedir_INCLUDE_DIR + VERSION_VAR XDG_basedir_VERSION +) + +if (XDG_basedir_FOUND) + set(XDG_basedir_LIBRARIES ${XDG_basedir_LIBRARY}) + set(XDG_basedir_INCLUDE_DIRS ${XDG_basedir_INCLUDE_DIR}) +endif () + +mark_as_advanced( + XDG_basedir_INCLUDE_DIR + XDG_basedir_LIBRARY +) diff --git a/cmake/FindXaudio2.cmake b/cmake/FindXaudio2.cmake new file mode 100644 index 0000000000..065e2d3589 --- /dev/null +++ b/cmake/FindXaudio2.cmake @@ -0,0 +1,18 @@ +# Autodetect if xaudio2 can be used. + +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_FLAGS "") + +check_cxx_source_compiles(" + #include + + #undef NTDDI_VERSION + #undef _WIN32_WINNT + + #define NTDDI_VERSION NTDDI_WIN8 + #define _WIN32_WINNT _WIN32_WINNT_WIN8 + + #include + int main() { return 0; }" + XAUDIO2_FOUND +) diff --git a/cmake/LinkPackage.cmake b/cmake/LinkPackage.cmake new file mode 100644 index 0000000000..f64ccfd51f --- /dev/null +++ b/cmake/LinkPackage.cmake @@ -0,0 +1,18 @@ +function(link_package NAME) + cmake_parse_arguments(LP "ENCOURAGED" "TARGET" "" ${ARGN}) + + if (${NAME}_FOUND) + string(TOUPPER "${NAME}" UCNAME) + add_definitions(-DWITH_${UCNAME}) + if (LP_TARGET AND TARGET ${LP_TARGET}) + target_link_libraries(openttd ${LP_TARGET}) + message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${LP_TARGET}") + else() + include_directories(${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR}) + target_link_libraries(openttd ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}) + message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR} -- ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}") + endif() + elseif (LP_ENCOURAGED) + message(WARNING "${NAME} not found; compiling OpenTTD without ${NAME} is strongly disencouraged") + endif() +endfunction() diff --git a/cmake/Options.cmake b/cmake/Options.cmake new file mode 100644 index 0000000000..b292567f04 --- /dev/null +++ b/cmake/Options.cmake @@ -0,0 +1,84 @@ +# Set the options for the directories (personal, shared, global). +# +# set_directory_options() +# +function(set_directory_options) + if (APPLE) + set(DEFAULT_PERSONAL_DIR "Documents/OpenTTD") + set(DEFAULT_SHARED_DIR "/Library/Application Support/OpenTTD") + set(DEFAULT_GLOBAL_DIR "(not set)") + elseif (WIN32) + set(DEFAULT_PERSONAL_DIR "OpenTTD") + set(DEFAULT_SHARED_DIR "(not set)") + set(DEFAULT_GLOBAL_DIR "(not set)") + elseif (UNIX) + set(DEFAULT_PERSONAL_DIR ".openttd") + set(DEFAULT_SHARED_DIR "(not set)") + set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_PREFIX}/share/games/openttd") + else () + message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.") + endif () + + if (NOT PERSONAL_DIR) + set(PERSONAL_DIR "${DEFAULT_PERSONAL_DIR}" CACHE STRING "Personal directory") + message(STATUS "Detecting Personal Data directory - ${PERSONAL_DIR}") + endif (NOT PERSONAL_DIR) + + if (NOT SHARED_DIR) + set(SHARED_DIR "${DEFAULT_SHARED_DIR}" CACHE STRING "Shared directory") + message(STATUS "Detecting Shared Data directory - ${SHARED_DIR}") + endif (NOT SHARED_DIR) + + if (NOT GLOBAL_DIR) + set(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory") + message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}") + endif (NOT GLOBAL_DIR) +endfunction() + +# Set some generic options that influence what is being build. +# +# set_options() +# +function(set_options) + if (UNIX AND NOT APPLE) + set(DEFAULT_OPTION_INSTALL_FHS YES) + else (UNIX AND NOT APPLE) + set(DEFAULT_OPTION_INSTALL_FHS NO) + endif (UNIX AND NOT APPLE) + + option(OPTION_DEDICATED "Build dedicated server only (no GUI)" NO) + option(OPTION_INSTALL_FHS "Install with Filesstem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) + option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" YES) + option(OPTION_USE_THREADS "Use threads" YES) +endfunction() + +# Show the values of the generic options. +# +# show_options() +# +function(show_options) + message(STATUS "Option Dedicated - ${OPTION_DEDICATED}") + message(STATUS "Option Install FHS - ${OPTION_INSTALL_FHS}") + message(STATUS "Option Use assert - ${OPTION_USE_ASSERTS}") + message(STATUS "Option Use threads - ${OPTION_USE_THREADS}") +endfunction() + +# Add the definitions for the options that are selected. +# +# add_definitions_based_on_options() +# +function(add_definitions_based_on_options) + if (OPTION_DEDICATED) + add_definitions(-DDEDICATED) + endif (OPTION_DEDICATED) + + if (NOT OPTION_USE_THREADS) + add_definitions(-DNO_THREADS) + endif (NOT OPTION_USE_THREADS) + + if (OPTION_USE_ASSERTS) + add_definitions(-DWITH_ASSERT) + else (OPTION_USE_ASSERTS) + add_definitions(-DNDEBUG) + endif (OPTION_USE_ASSERTS) +endfunction() diff --git a/cmake/SourceList.cmake b/cmake/SourceList.cmake new file mode 100644 index 0000000000..6300a19a43 --- /dev/null +++ b/cmake/SourceList.cmake @@ -0,0 +1,63 @@ +# Add a file to be compiled. +# +# add_files([file1 ...] CONDITION condition [condition ...]) +# +# CONDITION is a complete statement that can be evaluated with if(). +# If it evaluates true, the source files will be added; otherwise not. +# For example: ADD_IF SDL_FOUND AND Allegro_FOUND +# +function(add_files) + cmake_parse_arguments(PARAM "" "" "CONDITION" ${ARGN}) + set(PARAM_FILES "${PARAM_UNPARSED_ARGUMENTS}") + + if (PARAM_CONDITION) + if (NOT (${PARAM_CONDITION})) + return() + endif (NOT (${PARAM_CONDITION})) + endif (PARAM_CONDITION) + + foreach(FILE IN LISTS PARAM_FILES) + target_sources(openttd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) + endforeach() +endfunction(add_files) + +# This function works around an 'issue' with CMake, where +# set_source_files_properties() only works in the scope of the file. We want +# to set properties for the source file on a more global level. To solve this, +# this function records the flags you want, and a macro adds them in the root +# CMakeLists.txt. +# See this URL for more information on the issue: +# http://cmake.3232098.n2.nabble.com/scope-of-set-source-files-properties-td4766111.html +# +# set_compile_flags([file1 ...] COMPILE_FLAGS cflag [cflag ...]) +# +function(set_compile_flags) + cmake_parse_arguments(PARAM "" "" "COMPILE_FLAGS" ${ARGN}) + set(PARAM_FILES "${PARAM_UNPARSED_ARGUMENTS}") + + get_property(SOURCE_PROPERTIES GLOBAL PROPERTY source_properties) + + foreach(FILE IN LISTS PARAM_FILES) + list(APPEND SOURCE_PROPERTIES "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}::${PARAM_COMPILE_FLAGS}") + endforeach() + + set_property(GLOBAL PROPERTY source_properties "${SOURCE_PROPERTIES}") +endfunction(set_compile_flags) + +# Call this macro in the same CMakeLists.txt and after add_executable(). +# This makes sure all the COMPILE_FLAGS of set_compile_flags() are set +# correctly. +# +# process_compile_flags() +# +function(process_compile_flags) + get_property(SOURCE_PROPERTIES GLOBAL PROPERTY source_properties) + + foreach(ENTRY ${SOURCE_PROPERTIES}) + string(REPLACE "::" ";" ENTRY "${ENTRY}") + list(GET ENTRY 0 FILE) + list(GET ENTRY 1 PROPERTIES) + + set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS ${PROPERTIES}) + endforeach() +endfunction(process_compile_flags) diff --git a/cmake/Static.cmake b/cmake/Static.cmake new file mode 100644 index 0000000000..7648d05e7f --- /dev/null +++ b/cmake/Static.cmake @@ -0,0 +1,14 @@ +# Set static linking if the platform requires it. +# +# set_static() +# +function(set_static_if_needed) + if (MINGW) + # Let exectutables run outside MinGW environment + # Force searching static libs + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE) + + # Force static linking + link_libraries(-static -static-libgcc -static-libstdc++) + endif() +endfunction() diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake new file mode 100644 index 0000000000..5edabeb195 --- /dev/null +++ b/cmake/scripts/FindVersion.cmake @@ -0,0 +1,134 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Finds the current version of the current folder. +# + +find_package(Git QUIET) +# ${CMAKE_SOURCE_DIR}/.git may be a directory or a regular file +if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") + # Make sure LC_ALL is set to something desirable + set(SAVED_LC_ALL "$ENV{LC_ALL}") + set(ENV{LC_ALL} C) + + # Assume the dir is not modified + set(REV_MODIFIED 0) + + # Refresh the index to make sure file stat info is in sync, then look for modifications + execute_process(COMMAND ${GIT_EXECUTABLE} update-index --refresh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_QUIET + ) + + # See if git tree is modified + execute_process(COMMAND ${GIT_EXECUTABLE} diff-index HEAD + OUTPUT_VARIABLE IS_MODIFIED + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + if (NOT IS_MODIFIED STREQUAL "") + set(REV_MODIFIED 2) + endif() + + # Get last commit hash + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify HEAD + OUTPUT_VARIABLE FULLHASH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ERROR_QUIET + ) + set(REV_HASH "${FULLHASH}") + + string(SUBSTRING "${FULLHASH}" 0 10 SHORTHASH) + + # Get the last commit date + execute_process(COMMAND ${GIT_EXECUTABLE} show -s --pretty=format:%ci HEAD + OUTPUT_VARIABLE COMMITDATE + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + string(REGEX REPLACE "([0-9]+)-([0-9]+)-([0-9]+).*" "\\1\\2\\3" COMMITDATE "${COMMITDATE}") + set(REV_ISODATE "${COMMITDATE}") + string(SUBSTRING REV_ISODATE 1 4 REV_YEAR) + + # Get the branch + execute_process(COMMAND ${GIT_EXECUTABLE} symbolic-ref -q HEAD + OUTPUT_VARIABLE BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ERROR_QUIET + ) + string(REGEX REPLACE ".*/" "" BRANCH "${BRANCH}") + + # Get the tag + execute_process(COMMAND ${GIT_EXECUTABLE} name-rev --name-only --tags --no-undefined HEAD + OUTPUT_VARIABLE TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ERROR_QUIET + ) + string(REGEX REPLACE "\^0$" "" TAG "${TAG}") + + if (REV_MODIFIED EQUAL 0) + set(HASHPREFIX "-g") + elseif (REV_MODIFIED EQUAL 2) + set(HASHPREFIX "-m") + else () + set(HASHPREFIX "-u") + endif() + + # Set the version string + if (NOT TAG STREQUAL "") + set(REV_VERSION "${TAG}") + set(REV_ISTAG 1) + + string(REGEX REPLACE "^[0-9.]*$" "" STABLETAG "${TAG}") + if (NOT STABLETAG STREQUAL "") + set(REV_ISSTABLETAG 1) + else () + set(REV_ISSTABLETAG 0) + endif () + else () + set(REV_VERSION "${REV_ISODATE}-${BRANCH}${HASHPREFIX}${SHORTHASH}") + set(REV_ISTAG 0) + set(REV_ISSTABLETAG 0) + endif () + + # Restore LC_ALL + set(ENV{LC_ALL} "${SAVED_LC_ALL}") +elseif (EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") + file(READ "${CMAKE_SOURCE_DIR}/.ottdrev" OTTDREV) + string(REPLACE "\t" ";" OTTDREV "${OTTDREV}") + list(GET OTTDREV 0 REV_VERSION) + list(GET OTTDREV 1 REV_ISODATE) + list(GET OTTDREV 2 REV_MODIFIED) + list(GET OTTDREV 3 REV_HASH) + list(GET OTTDREV 4 REV_ISTAG) + list(GET OTTDREV 5 REV_ISSTABLETAG) + list(GET OTTDREV 6 REV_YEAR) +else () + message(WARNING "No version detected; this build will NOT be network compatible") + set(REV_VERSION "norev0000") + set(REV_ISODATE "19700101") + set(REV_MODIFIED 1) + set(REV_HASH "unknown") + set(REV_ISTAG 0) + set(REV_ISSTABLETAG 0) + set(REV_YEAR "1970") +endif () + +message(STATUS "Version string: ${REV_VERSION}") + +message(STATUS "Generating rev.cpp") +configure_file("${CMAKE_SOURCE_DIR}/src/rev.cpp.in" + "${FIND_VERSION_BINARY_DIR}/rev.cpp") + +if (WIN32) + message(STATUS "Generating ottdres.rc") + configure_file("${CMAKE_SOURCE_DIR}/src/os/windows/ottdres.rc.in" + "${FIND_VERSION_BINARY_DIR}/ottdres.rc") +endif (WIN32) + +message(STATUS "Generating CPackProperties.cmake") +configure_file("${CMAKE_SOURCE_DIR}/CPackProperties.cmake.in" + "${CPACK_BINARY_DIR}/CPackProperties.cmake" @ONLY) diff --git a/media/baseset/CMakeLists.txt b/media/baseset/CMakeLists.txt index 309ac7a498..c3fe34ce4e 100644 --- a/media/baseset/CMakeLists.txt +++ b/media/baseset/CMakeLists.txt @@ -20,13 +20,13 @@ set(BASESET_OTHER_SOURCE_FILES ) # Done by the subdirectories, if nforenum / grfcodec is installed -if (NFORENUM_FOUND AND GRFCODEC_FOUND) +if (GRFCODEC_FOUND) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/openttd.grf PROPERTIES GENERATED TRUE) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf PROPERTIES GENERATED TRUE) list(APPEND BASESET_BINARY_FILES openttd.grf) list(APPEND BASESET_BINARY_FILES orig_extra.grf) -endif (NFORENUM_FOUND AND GRFCODEC_FOUND) +endif (GRFCODEC_FOUND) set(BASESET_EXTRAGRF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf) diff --git a/media/baseset/openttd/CMakeLists.txt b/media/baseset/openttd/CMakeLists.txt index 42d62dd7cc..c4f8d61ade 100644 --- a/media/baseset/openttd/CMakeLists.txt +++ b/media/baseset/openttd/CMakeLists.txt @@ -3,7 +3,7 @@ # This is mainly because not many people have both of these tools installed, # so it is cheaper to cache them in git, and only regenerate when you are # working on it / have the tools installed. -if (NFORENUM_FOUND AND GRFCODEC_FOUND) - include(CreateGrfCommand REQUIRED) +if (GRFCODEC_FOUND) + include(CreateGrfCommand) create_grf_command() -endif (NFORENUM_FOUND AND GRFCODEC_FOUND) +endif (GRFCODEC_FOUND) diff --git a/media/baseset/orig_extra/CMakeLists.txt b/media/baseset/orig_extra/CMakeLists.txt index f865a8dd0d..36a25329f5 100644 --- a/media/baseset/orig_extra/CMakeLists.txt +++ b/media/baseset/orig_extra/CMakeLists.txt @@ -3,12 +3,12 @@ # This is mainly because not many people have both of these tools installed, # so it is cheaper to cache them in git, and only regenerate when you are # working on it / have the tools installed. -if (NFORENUM_FOUND AND GRFCODEC_FOUND) - include(CreateGrfCommand REQUIRED) +if (GRFCODEC_FOUND) + include(CreateGrfCommand) create_grf_command( # We share some files with 'openttd' grf ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/airports.png ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/canals.png ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/chars.png ) -endif (NFORENUM_FOUND AND GRFCODEC_FOUND) +endif (GRFCODEC_FOUND) diff --git a/os/windows/openttd.manifest b/os/windows/openttd.manifest new file mode 100644 index 0000000000..ee1c7ea224 --- /dev/null +++ b/os/windows/openttd.manifest @@ -0,0 +1,29 @@ + + + + + + + + + + + + True/PM + + + + + + + + + + + + + + + + + diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt new file mode 100644 index 0000000000..e3927fa217 --- /dev/null +++ b/src/3rdparty/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory(md5) +add_subdirectory(squirrel) +add_subdirectory(os2) diff --git a/src/3rdparty/md5/CMakeLists.txt b/src/3rdparty/md5/CMakeLists.txt new file mode 100644 index 0000000000..58720ca2d6 --- /dev/null +++ b/src/3rdparty/md5/CMakeLists.txt @@ -0,0 +1,4 @@ +add_files( + md5.cpp + md5.h +) diff --git a/src/3rdparty/os2/CMakeLists.txt b/src/3rdparty/os2/CMakeLists.txt new file mode 100644 index 0000000000..8edc63479e --- /dev/null +++ b/src/3rdparty/os2/CMakeLists.txt @@ -0,0 +1,7 @@ +add_files( + getaddrinfo.c + getaddrinfo.h + getnameinfo.c + getnameinfo.h + CONDITION OPTION_OS2 +) diff --git a/src/3rdparty/squirrel/CMakeLists.txt b/src/3rdparty/squirrel/CMakeLists.txt new file mode 100644 index 0000000000..9602087cdf --- /dev/null +++ b/src/3rdparty/squirrel/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory(include) +add_subdirectory(sqstdlib) +add_subdirectory(squirrel) diff --git a/src/3rdparty/squirrel/include/CMakeLists.txt b/src/3rdparty/squirrel/include/CMakeLists.txt new file mode 100644 index 0000000000..5237360d31 --- /dev/null +++ b/src/3rdparty/squirrel/include/CMakeLists.txt @@ -0,0 +1,6 @@ +add_files( + sqstdaux.h + sqstdmath.h + sqstdstring.h + squirrel.h +) diff --git a/src/3rdparty/squirrel/sqstdlib/CMakeLists.txt b/src/3rdparty/squirrel/sqstdlib/CMakeLists.txt new file mode 100644 index 0000000000..2b3bd6bb31 --- /dev/null +++ b/src/3rdparty/squirrel/sqstdlib/CMakeLists.txt @@ -0,0 +1,4 @@ +add_files( + sqstdaux.cpp + sqstdmath.cpp +) diff --git a/src/3rdparty/squirrel/squirrel/CMakeLists.txt b/src/3rdparty/squirrel/squirrel/CMakeLists.txt new file mode 100644 index 0000000000..a86a92b7dd --- /dev/null +++ b/src/3rdparty/squirrel/squirrel/CMakeLists.txt @@ -0,0 +1,30 @@ +add_files( + sqapi.cpp + sqarray.h + sqbaselib.cpp + sqclass.cpp + sqclass.h + sqclosure.h + sqcompiler.cpp + sqcompiler.h + sqdebug.cpp + sqfuncproto.h + sqfuncstate.cpp + sqfuncstate.h + sqlexer.cpp + sqlexer.h + sqmem.cpp + sqobject.cpp + sqobject.h + sqopcodes.h + sqpcheader.h + sqstate.cpp + sqstate.h + sqstring.h + sqtable.cpp + sqtable.h + squserdata.h + squtils.h + sqvm.cpp + sqvm.h +) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..0ccf650abf --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,479 @@ +add_subdirectory(3rdparty) +add_subdirectory(ai) +add_subdirectory(blitter) +add_subdirectory(core) +add_subdirectory(game) +add_subdirectory(lang) +add_subdirectory(linkgraph) +add_subdirectory(misc) +add_subdirectory(music) +add_subdirectory(network) +add_subdirectory(os) +add_subdirectory(pathfinder) +add_subdirectory(saveload) +add_subdirectory(script) +add_subdirectory(settingsgen) +add_subdirectory(sound) +add_subdirectory(spriteloader) +add_subdirectory(strgen) +add_subdirectory(table) +add_subdirectory(video) +add_subdirectory(widgets) + +add_files( + viewport_sprite_sorter_sse4.cpp + CONDITION SSE_FOUND +) +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set_compile_flags( + viewport_sprite_sorter_sse4.cpp + COMPILE_FLAGS -msse4.1) +endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + +add_files( + aircraft.h + aircraft_cmd.cpp + aircraft_gui.cpp + airport.cpp + airport.h + airport_gui.cpp + animated_tile.cpp + animated_tile_func.h + articulated_vehicles.cpp + articulated_vehicles.h + autoreplace.cpp + autoreplace_base.h + autoreplace_cmd.cpp + autoreplace_func.h + autoreplace_gui.cpp + autoreplace_gui.h + autoreplace_type.h + autoslope.h + base_consist.cpp + base_consist.h + base_media_base.h + base_media_func.h + base_station_base.h + bitmap_type.h + bmp.cpp + bmp.h + bootstrap_gui.cpp + bridge.h + bridge_gui.cpp + bridge_map.cpp + bridge_map.h + build_vehicle_gui.cpp + cargo_type.h + cargoaction.cpp + cargoaction.h + cargomonitor.cpp + cargomonitor.h + cargopacket.cpp + cargopacket.h + cargotype.cpp + cargotype.h + cheat.cpp + cheat_func.h + cheat_gui.cpp + cheat_type.h + clear_cmd.cpp + clear_func.h + clear_map.h + cmd_helper.h + command.cpp + command_func.h + command_type.h + company_base.h + company_cmd.cpp + company_func.h + company_gui.cpp + company_gui.h + company_manager_face.h + company_type.h + console.cpp + console_cmds.cpp + console_func.h + console_gui.cpp + console_gui.h + console_internal.h + console_type.h + cpu.cpp + cpu.h + crashlog.cpp + crashlog.h + currency.cpp + currency.h + date.cpp + date_func.h + date_gui.cpp + date_gui.h + date_type.h + debug.cpp + debug.h + dedicated.cpp + depot.cpp + depot_base.h + depot_cmd.cpp + depot_func.h + depot_gui.cpp + depot_map.h + depot_type.h + direction_func.h + direction_type.h + disaster_vehicle.cpp + disaster_vehicle.h + dock_gui.cpp + driver.cpp + driver.h + economy.cpp + economy_base.h + economy_func.h + economy_type.h + effectvehicle.cpp + effectvehicle_base.h + effectvehicle_func.h + elrail.cpp + elrail_func.h + engine.cpp + engine_base.h + engine_func.h + engine_gui.cpp + engine_gui.h + engine_type.h + error.h + error_gui.cpp + fileio.cpp + fileio_func.h + fileio_type.h + fios.cpp + fios.h + fios_gui.cpp + fontcache.cpp + fontcache.h + fontdetection.cpp + fontdetection.h + framerate_gui.cpp + framerate_type.h + gamelog.cpp + gamelog.h + gamelog_internal.h + genworld.cpp + genworld.h + genworld_gui.cpp + gfx.cpp + gfx_func.h + gfx_layout.cpp + gfx_layout.h + gfx_type.h + gfxinit.cpp + gfxinit.h + goal.cpp + goal_base.h + goal_gui.cpp + goal_type.h + graph_gui.cpp + graph_gui.h + ground_vehicle.cpp + ground_vehicle.hpp + group.h + group_cmd.cpp + group_gui.cpp + group_gui.h + group_type.h + gui.h + guitimer_func.h + heightmap.cpp + heightmap.h + highscore.cpp + highscore.h + highscore_gui.cpp + hotkeys.cpp + hotkeys.h + house.h + house_type.h + industry.h + industry_cmd.cpp + industry_gui.cpp + industry_map.h + industry_type.h + industrytype.h + ini.cpp + ini_load.cpp + ini_type.h + intro_gui.cpp + landscape.cpp + landscape.h + landscape_type.h + language.h + livery.h + main_gui.cpp + map.cpp + map_func.h + map_type.h + misc.cpp + misc_cmd.cpp + misc_gui.cpp + mixer.cpp + mixer.h + music.cpp + music_gui.cpp + newgrf.cpp + newgrf.h + newgrf_airport.cpp + newgrf_airport.h + newgrf_airporttiles.cpp + newgrf_airporttiles.h + newgrf_animation_base.h + newgrf_animation_type.h + newgrf_callbacks.h + newgrf_canal.cpp + newgrf_canal.h + newgrf_cargo.cpp + newgrf_cargo.h + newgrf_class.h + newgrf_class_func.h + newgrf_commons.cpp + newgrf_commons.h + newgrf_config.cpp + newgrf_config.h + newgrf_debug.h + newgrf_debug_gui.cpp + newgrf_engine.cpp + newgrf_engine.h + newgrf_generic.cpp + newgrf_generic.h + newgrf_gui.cpp + newgrf_house.cpp + newgrf_house.h + newgrf_industries.cpp + newgrf_industries.h + newgrf_industrytiles.cpp + newgrf_industrytiles.h + newgrf_object.cpp + newgrf_object.h + newgrf_profiling.cpp + newgrf_profiling.h + newgrf_properties.h + newgrf_railtype.cpp + newgrf_railtype.h + newgrf_roadtype.cpp + newgrf_roadtype.h + newgrf_sound.cpp + newgrf_sound.h + newgrf_spritegroup.cpp + newgrf_spritegroup.h + newgrf_station.cpp + newgrf_station.h + newgrf_storage.cpp + newgrf_storage.h + newgrf_text.cpp + newgrf_text.h + newgrf_town.cpp + newgrf_town.h + newgrf_townname.cpp + newgrf_townname.h + news_func.h + news_gui.cpp + news_gui.h + news_type.h + object.h + object_base.h + object_cmd.cpp + object_gui.cpp + object_map.h + object_type.h + openttd.cpp + openttd.h + order_backup.cpp + order_backup.h + order_base.h + order_cmd.cpp + order_func.h + order_gui.cpp + order_type.h + osk_gui.cpp + pbs.cpp + pbs.h + progress.cpp + progress.h + querystring_gui.h + rail.cpp + rail.h + rail_cmd.cpp + rail_gui.cpp + rail_gui.h + rail_map.h + rail_type.h + rev.h + road.cpp + road.h + road_cmd.cpp + road_cmd.h + road_func.h + road_gui.cpp + road_gui.h + road_internal.h + road_map.cpp + road_map.h + road_type.h + roadstop.cpp + roadstop_base.h + roadveh.h + roadveh_cmd.cpp + roadveh_gui.cpp + safeguards.h + screenshot_gui.cpp + screenshot_gui.h + screenshot.cpp + screenshot.h + settings.cpp + settings_func.h + settings_gui.cpp + settings_gui.h + settings_internal.h + settings_type.h + ship.h + ship_cmd.cpp + ship_gui.cpp + signal.cpp + signal_func.h + signal_type.h + signs.cpp + signs_base.h + signs_cmd.cpp + signs_func.h + signs_gui.cpp + signs_type.h + slope_func.h + slope_type.h + smallmap_gui.cpp + smallmap_gui.h + sortlist_type.h + sound.cpp + sound_func.h + sound_type.h + sprite.cpp + sprite.h + spritecache.cpp + spritecache.h + station.cpp + station_base.h + station_cmd.cpp + station_func.h + station_gui.cpp + station_gui.h + station_kdtree.h + station_map.h + station_type.h + statusbar_gui.cpp + statusbar_gui.h + stdafx.h + story.cpp + story_base.h + story_gui.cpp + story_type.h + strgen/strgen.h + string.cpp + string_base.h + string_func.h + string_type.h + stringfilter.cpp + stringfilter_type.h + strings.cpp + strings_func.h + strings_type.h + subsidy.cpp + subsidy_base.h + subsidy_func.h + subsidy_gui.cpp + subsidy_type.h + tar_type.h + terraform_cmd.cpp + terraform_gui.cpp + terraform_gui.h + textbuf.cpp + textbuf_gui.h + textbuf_type.h + texteff.cpp + texteff.hpp + textfile_gui.cpp + textfile_gui.h + textfile_type.h + tgp.cpp + tgp.h + thread.h + tile_cmd.h + tile_map.cpp + tile_map.h + tile_type.h + tilearea.cpp + tilearea_type.h + tilehighlight_func.h + tilehighlight_type.h + tilematrix_type.hpp + timetable.h + timetable_cmd.cpp + timetable_gui.cpp + toolbar_gui.cpp + toolbar_gui.h + town.h + town_cmd.cpp + town_gui.cpp + town_kdtree.h + town_map.h + town_type.h + townname.cpp + townname_func.h + townname_type.h + track_func.h + track_type.h + train.h + train_cmd.cpp + train_gui.cpp + transparency.h + transparency_gui.cpp + transparency_gui.h + transport_type.h + tree_cmd.cpp + tree_gui.cpp + tree_map.h + tunnel_map.cpp + tunnel_map.h + tunnelbridge.h + tunnelbridge_cmd.cpp + tunnelbridge_map.h + vehicle.cpp + vehicle_base.h + vehicle_cmd.cpp + vehicle_func.h + vehicle_gui.cpp + vehicle_gui.h + vehicle_gui_base.h + vehicle_type.h + vehiclelist.cpp + vehiclelist.h + viewport.cpp + viewport_func.h + viewport_gui.cpp + viewport_kdtree.h + viewport_sprite_sorter.h + viewport_type.h + void_cmd.cpp + void_map.h + water.h + water_cmd.cpp + water_map.h + waypoint.cpp + waypoint_base.h + waypoint_cmd.cpp + waypoint_func.h + waypoint_gui.cpp + widget.cpp + widget_type.h + window.cpp + window_func.h + window_gui.h + window_type.h + zoom_func.h + zoom_type.h +) diff --git a/src/ai/CMakeLists.txt b/src/ai/CMakeLists.txt new file mode 100644 index 0000000000..cab886b265 --- /dev/null +++ b/src/ai/CMakeLists.txt @@ -0,0 +1,14 @@ +add_files( + ai.hpp + ai_config.cpp + ai_config.hpp + ai_core.cpp + ai_gui.cpp + ai_gui.hpp + ai_info.cpp + ai_info.hpp + ai_instance.cpp + ai_instance.hpp + ai_scanner.cpp + ai_scanner.hpp +) diff --git a/src/blitter/CMakeLists.txt b/src/blitter/CMakeLists.txt new file mode 100644 index 0000000000..2abe6aec0e --- /dev/null +++ b/src/blitter/CMakeLists.txt @@ -0,0 +1,55 @@ +add_files( + 32bpp_anim.cpp + 32bpp_anim.hpp + 32bpp_base.cpp + 32bpp_base.hpp + 32bpp_optimized.cpp + 32bpp_optimized.hpp + 32bpp_simple.cpp + 32bpp_simple.hpp + 8bpp_base.cpp + 8bpp_base.hpp + 8bpp_optimized.cpp + 8bpp_optimized.hpp + 8bpp_simple.cpp + 8bpp_simple.hpp + CONDITION NOT OPTION_DEDICATED +) + +add_files( + 32bpp_anim_sse2.cpp + 32bpp_anim_sse2.hpp + 32bpp_anim_sse4.cpp + 32bpp_anim_sse4.hpp + 32bpp_sse2.cpp + 32bpp_sse2.hpp + 32bpp_sse4.cpp + 32bpp_sse4.hpp + 32bpp_sse_func.hpp + 32bpp_sse_type.h + 32bpp_ssse3.cpp + 32bpp_ssse3.hpp + CONDITION NOT OPTION_DEDICATED AND SSE_FOUND +) + +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set_compile_flags( + 32bpp_anim_sse2.cpp + 32bpp_sse2.cpp + COMPILE_FLAGS -msse2) + set_compile_flags( + 32bpp_ssse3.cpp + COMPILE_FLAGS -mssse3) + set_compile_flags( + 32bpp_anim_sse4.cpp + 32bpp_sse4.cpp + COMPILE_FLAGS -msse4.1) +endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + +add_files( + base.hpp + common.hpp + factory.hpp + null.cpp + null.hpp +) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 0000000000..96da089326 --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1,30 @@ +add_files( + alloc_func.cpp + alloc_func.hpp + alloc_type.hpp + backup_type.hpp + bitmath_func.cpp + bitmath_func.hpp + endian_func.hpp + endian_type.hpp + enum_type.hpp + geometry_func.cpp + geometry_func.hpp + geometry_type.hpp + kdtree.hpp + math_func.cpp + math_func.hpp + mem_func.hpp + multimap.hpp + overflowsafe_type.hpp + pool_func.cpp + pool_func.hpp + pool_type.hpp + random_func.cpp + random_func.hpp + smallmap_type.hpp + smallmatrix_type.hpp + smallstack_type.hpp + smallvec_type.hpp + string_compare_type.hpp +) diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index 1b927ef45a..e1add251ed 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -23,30 +23,8 @@ /** Big endian builds use this for TTD_ENDIAN. */ #define TTD_BIG_ENDIAN 1 -/* Windows has always LITTLE_ENDIAN */ -#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -#elif defined(OSX) -# include -# if __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -# else -# define TTD_ENDIAN TTD_BIG_ENDIAN -# endif -#elif defined(__OpenBSD__) -# include -# if BYTE_ORDER == LITTLE_ENDIAN -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -# else -# define TTD_ENDIAN TTD_BIG_ENDIAN -# endif -#elif !defined(TESTING) -# include -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -# else -# define TTD_ENDIAN TTD_BIG_ENDIAN -# endif -#endif /* _WIN32 || __OS2__ */ +#if !defined(TTD_ENDIAN) +# error "TTD_ENDIAN is not defined; please set it to either TTD_LITTLE_ENDIAN or TTD_BIG_ENDIAN" +#endif /* !TTD_ENDIAN */ #endif /* ENDIAN_TYPE_HPP */ diff --git a/src/depend/depend.cpp b/src/depend/depend.cpp deleted file mode 100644 index 5a3bd868de..0000000000 --- a/src/depend/depend.cpp +++ /dev/null @@ -1,1084 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** - * @file depend/depend.cpp Custom implementation of Makedepend. - * - * We previously used makedepend, but that could not handle the amount of - * files we have and does not handle conditional includes in a sane manner. - * This caused many link problems because not enough files were recompiled. - * This has lead to the development of our own dependency generator. It is - * meant to be a substitute to the (relatively slow) dependency generation - * via gcc. It thus helps speeding up compilation. It will also ignore - * system headers making it less error prone when system headers are moved - * or renamed. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** - * Return the length of an fixed size array. - * Unlike sizeof this function returns the number of elements - * of the given type. - * - * @param x The pointer to the first element of the array - * @return The number of elements - */ -#define lengthof(x) (sizeof(x) / sizeof(x[0])) - -/** - * Get the last element of an fixed size array. - * - * @param x The pointer to the first element of the array - * @return The pointer to the last element of the array - */ -#define lastof(x) (&x[lengthof(x) - 1]) - -/** - * Copies characters from one buffer to another. - * - * Copies the source string to the destination buffer with respect of the - * terminating null-character and the last pointer to the last element in - * the destination buffer. If the last pointer is set to nullptr no boundary - * check is performed. - * - * @note usage: strecpy(dst, src, lastof(dst)); - * @note lastof() applies only to fixed size arrays - * - * @param dst The destination buffer - * @param src The buffer containing the string to copy - * @param last The pointer to the last element of the destination buffer - * @return The pointer to the terminating null-character in the destination buffer - */ -char *strecpy(char *dst, const char *src, const char *last) -{ - assert(dst <= last); - while (dst != last && *src != '\0') { - *dst++ = *src++; - } - *dst = '\0'; - - if (dst == last && *src != '\0') { - fprintf(stderr, "String too long for destination buffer\n"); - exit(-3); - } - return dst; -} - -/** - * Appends characters from one string to another. - * - * Appends the source string to the destination string with respect of the - * terminating null-character and and the last pointer to the last element - * in the destination buffer. If the last pointer is set to nullptr no - * boundary check is performed. - * - * @note usage: strecat(dst, src, lastof(dst)); - * @note lastof() applies only to fixed size arrays - * - * @param dst The buffer containing the target string - * @param src The buffer containing the string to append - * @param last The pointer to the last element of the destination buffer - * @return The pointer to the terminating null-character in the destination buffer - */ -static char *strecat(char *dst, const char *src, const char *last) -{ - assert(dst <= last); - while (*dst != '\0') { - if (dst == last) return dst; - dst++; - } - - return strecpy(dst, src, last); -} - -#if defined(__CYGWIN__) -/** - * Version of strdup copied from glibc. - * Duplicate S, returning an identical malloc'd string. - * @param s The string to duplicate. - */ -char * -strdup (const char *s) -{ - size_t len = strlen(s) + 1; - void *n = malloc(len); - - if (n == NULL) return NULL; - return (char *) memcpy(n, s, len); -} -#endif - -/** - * Version of the standard free that accepts const pointers. - * @param ptr The data to free. - */ -static inline void free(const void *ptr) -{ - free(const_cast(ptr)); -} - -#ifndef PATH_MAX -/** The maximum length of paths, if we don't know it. */ -# define PATH_MAX 260 -#endif - -/** Simple string comparator using strcmp as implementation */ -struct StringCompare { - /** - * Compare a to b using strcmp. - * @param a string to compare. - * @param b string to compare. - * @return whether a is less than b. - */ - bool operator () (const char *a, const char *b) const - { - return strcmp(a, b) < 0; - } -}; -/** Set of C-style strings. */ -typedef std::set StringSet; -/** Mapping of C-style string to a set of C-style strings. */ -typedef std::map StringMap; -/** Pair of C-style string and a set of C-style strings. */ -typedef std::pair StringMapItem; - -/** Include directory to search in. */ -static StringSet _include_dirs; -/** Files that have been parsed/handled with their dependencies. */ -static StringMap _files; -/** Dependencies of headers. */ -static StringMap _headers; -/** The current 'active' defines. */ -static StringSet _defines; - -/** - * Helper class to read a file. - */ -class File { -public: - /** - * Create the helper by opening the given file. - * @param filename the file to open - * @post the file is open; otherwise the application is killed. - */ - File(const char *filename) - { - this->fp = fopen(filename, "r"); - if (this->fp == nullptr) { - fprintf(stdout, "Could not open %s for reading\n", filename); - exit(1); - } - this->dirname = strdup(filename); - char *last = strrchr(this->dirname, '/'); - if (last != nullptr) { - *last = '\0'; - } else { - *this->dirname = '\0'; - } - } - - /** Free everything we have allocated. */ - ~File() - { - fclose(this->fp); - free(this->dirname); - } - - /** - * Get a single character from the file. - * If we are reading beyond the end of the file '\0' is returned. - * @return the read character. - */ - char GetChar() const - { - int c = fgetc(this->fp); - return (c == EOF) ? '\0' : c; - } - - /** - * Get the directory name of the file. - * @return the directory name. - */ - const char *GetDirname() const - { - return this->dirname; - } - -private: - FILE *fp; ///< The currently opened file. - char *dirname; ///< The directory of the file. -}; - -/** A token returned by the tokenizer. */ -enum Token { - TOKEN_UNKNOWN, ///< Unknown token - TOKEN_END, ///< End of document - TOKEN_EOL, ///< End of line - TOKEN_SHARP, ///< # character, usually telling something important comes. - TOKEN_LOCAL, ///< Read a local include - TOKEN_GLOBAL, ///< Read a global include - TOKEN_IDENTIFIER, ///< Identifier within the data. - TOKEN_DEFINE, ///< \c \#define in code - TOKEN_IF, ///< \c \#if in code - TOKEN_IFDEF, ///< \c \#ifdef in code - TOKEN_IFNDEF, ///< \c \#ifndef in code - TOKEN_ELIF, ///< \c \#elif in code - TOKEN_ELSE, ///< \c \#else in code - TOKEN_ENDIF, ///< \c \#endif in code - TOKEN_UNDEF, ///< \c \#undef in code - TOKEN_OR, ///< '||' within \c \#if expression - TOKEN_AND, ///< '&&' within \c \#if expression - TOKEN_DEFINED, ///< 'defined' within \c \#if expression - TOKEN_OPEN, ///< '(' within \c \#if expression - TOKEN_CLOSE, ///< ')' within \c \#if expression - TOKEN_NOT, ///< '!' within \c \#if expression - TOKEN_ZERO, ///< '0' within \c \#if expression - TOKEN_INCLUDE, ///< \c \#include in code -}; - -/** Mapping from a C-style keyword representation to a Token. */ -typedef std::map KeywordList; - -/** - * Lexer of a file. - */ -class Lexer { -public: - /** - * Create the lexer and fill the keywords table. - * @param file the file to read from. - */ - Lexer(const File *file) : file(file), current_char('\0'), string(nullptr), token(TOKEN_UNKNOWN) - { - this->keywords["define"] = TOKEN_DEFINE; - this->keywords["defined"] = TOKEN_DEFINED; - this->keywords["if"] = TOKEN_IF; - this->keywords["ifdef"] = TOKEN_IFDEF; - this->keywords["ifndef"] = TOKEN_IFNDEF; - this->keywords["include"] = TOKEN_INCLUDE; - this->keywords["elif"] = TOKEN_ELIF; - this->keywords["else"] = TOKEN_ELSE; - this->keywords["endif"] = TOKEN_ENDIF; - this->keywords["undef"] = TOKEN_UNDEF; - - /* Initialise currently read character. */ - this->Next(); - - /* Allocate the buffer. */ - this->buf_len = 32; - this->buf = (char*)malloc(sizeof(*this->buf) * this->buf_len); - } - - /** Free everything */ - ~Lexer() - { - free(this->buf); - } - - /** - * Read the next character into 'current_char'. - */ - void Next() - { - this->current_char = this->file->GetChar(); - } - - /** - * Get the current token. - * @return the token. - */ - Token GetToken() const - { - return this->token; - } - - /** - * Read the currently processed string. - * @return the string, can be nullptr. - */ - const char *GetString() const - { - return this->string; - } - - /** - * Perform the lexing/tokenizing of the file till we can return something - * that must be parsed. - */ - void Lex() - { - for (;;) { - free(this->string); - this->string = nullptr; - this->token = TOKEN_UNKNOWN; - - switch (this->current_char) { - /* '\0' means End-Of-File */ - case '\0': this->token = TOKEN_END; return; - - /* Skip some chars, as they don't do anything */ - case '\t': this->Next(); break; - case '\r': this->Next(); break; - case ' ': this->Next(); break; - - case '\\': - this->Next(); - if (this->current_char == '\n') this->Next(); - break; - - case '\n': - this->token = TOKEN_EOL; - this->Next(); - return; - - case '#': - this->token = TOKEN_SHARP; - this->Next(); - return; - - case '"': - this->ReadString('"', TOKEN_LOCAL); - this->Next(); - return; - - case '<': - this->ReadString('>', TOKEN_GLOBAL); - this->Next(); - return; - - case '&': - this->Next(); - if (this->current_char == '&') { - this->Next(); - this->token = TOKEN_AND; - return; - } - break; - - case '|': - this->Next(); - if (this->current_char == '|') { - this->Next(); - this->token = TOKEN_OR; - return; - } - break; - - case '(': - this->Next(); - this->token = TOKEN_OPEN; - return; - - case ')': - this->Next(); - this->token = TOKEN_CLOSE; - return; - - case '!': - this->Next(); - if (this->current_char != '=') { - this->token = TOKEN_NOT; - return; - } - break; - - /* Possible begin of comment */ - case '/': - this->Next(); - switch (this->current_char) { - case '*': { - this->Next(); - char previous_char = '\0'; - while ((this->current_char != '/' || previous_char != '*') && this->current_char != '\0') { - previous_char = this->current_char; - this->Next(); - } - this->Next(); - break; - } - case '/': while (this->current_char != '\n' && this->current_char != '\0') this->Next(); break; - default: break; - } - break; - - default: - if (isalpha(this->current_char) || this->current_char == '_') { - /* If the name starts with a letter, it is an identifier */ - this->ReadIdentifier(); - return; - } - if (isdigit(this->current_char)) { - bool zero = this->current_char == '0'; - this->Next(); - if (this->current_char == 'x' || this->current_char == 'X') Next(); - while (isdigit(this->current_char) || this->current_char == '.' || (this->current_char >= 'a' && this->current_char <= 'f') || (this->current_char >= 'A' && this->current_char <= 'F')) { - zero &= this->current_char == '0'; - this->Next(); - } - if (zero) this->token = TOKEN_ZERO; - return; - } - this->Next(); - break; - } - } - } - -private: - /** - * The token based on keyword with a given name. - * @param name the actual keyword. - * @return the token of the keyword. - */ - Token FindKeyword(const char *name) const - { - KeywordList::const_iterator it = this->keywords.find(name); - if (it == this->keywords.end()) return TOKEN_IDENTIFIER; - return (*it).second; - } - - /** - * Read an identifier. - */ - void ReadIdentifier() - { - size_t count = 0; - - /* Read the rest of the identifier */ - do { - this->buf[count++] = this->current_char; - this->Next(); - - if (count >= buf_len) { - /* Scale the buffer if required */ - this->buf_len *= 2; - this->buf = (char *)realloc(this->buf, sizeof(*this->buf) * this->buf_len); - } - } while ((isalpha(this->current_char) || this->current_char == '_' || isdigit(this->current_char))); - this->buf[count] = '\0'; - - free(this->string); - this->string = strdup(this->buf); - this->token = FindKeyword(this->string); - } - - /** - * Read a string up to a given character, then set the given token. - * @param end the 'marker' for the end of the string. - * @param token the token to set after returning. - */ - void ReadString(char end, Token token) - { - size_t count = 0; - this->Next(); - while (this->current_char != end && this->current_char != ')' && this->current_char != '\n' && this->current_char != '\0') { - this->buf[count++] = this->current_char; - this->Next(); - - if (count >= this->buf_len) { - /* Scale the buffer if required */ - this->buf_len *= 2; - this->buf = (char *)realloc(this->buf, sizeof(*this->buf) * this->buf_len); - } - } - this->buf[count] = '\0'; - free(this->string); - this->string = strdup(this->buf); - this->token = token; - } - - const File *file; ///< The file to read from. - char current_char; ///< The current character to process. - char *string; ///< Currently processed string. - Token token; ///< The current token to process. - char *buf; ///< Temporary buffer. - size_t buf_len; ///< Length of the temporary buffer. - KeywordList keywords; ///< All keywords we know of. -}; - -/** - * Generate a path from a directory name and a relative filename. - * If the file is not local the include directory names will be used instead - * of the passed parameter with directory name. If the file is local both will - * be queried where the parameter takes precedence. - * @param dirname the directory to look in. - * @param filename the file to look for. - * @param local whether to look locally (in dirname) for the file. - * @return the absolute path, or nullptr if the file doesn't exist. - */ -const char *GeneratePath(const char *dirname, const char *filename, bool local) -{ - /* Ignore C++ standard library headers. */ - if (strchr(filename, '.') == nullptr) return nullptr; - - if (local) { - if (access(filename, R_OK) == 0) return strdup(filename); - - char path[PATH_MAX]; - strecpy(path, dirname, lastof(path)); - const char *p = filename; - /* Remove '..' from the begin of the filename. */ - while (*p == '.') { - if (*(++p) == '.') { - char *s = strrchr(path, '/'); - if (s != nullptr) *s = '\0'; - p += 2; - } - } - strecat(path, "/", lastof(path)); - strecat(path, p, lastof(path)); - - if (access(path, R_OK) == 0) return strdup(path); - } - - for (StringSet::iterator it = _include_dirs.begin(); it != _include_dirs.end(); it++) { - char path[PATH_MAX]; - strecpy(path, *it, lastof(path)); - const char *p = filename; - /* Remove '..' from the begin of the filename. */ - while (*p == '.') { - if (*(++p) == '.') { - char *s = strrchr(path, '/'); - if (s != nullptr) *s = '\0'; - p += 2; - } - } - strecat(path, "/", lastof(path)); - strecat(path, p, lastof(path)); - - if (access(path, R_OK) == 0) return strdup(path); - } - - return nullptr; -} - -/** - * Try to parse a 'defined(expr)' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionDefined(Lexer *lexer, StringSet *defines, bool verbose); - -/** - * Try to parse a 'expr || expr' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionOr(Lexer *lexer, StringSet *defines, bool verbose); - -/** - * Try to parse a '!expr' expression. Also parses the '(expr)', '0' and - * identifiers. Finally it also consumes any unknown tokens. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionNot(Lexer *lexer, StringSet *defines, bool verbose) -{ - if (lexer->GetToken() == TOKEN_NOT) { - if (verbose) fprintf(stderr, "!"); - lexer->Lex(); - bool value = !ExpressionDefined(lexer, defines, verbose); - if (verbose) fprintf(stderr, "[%d]", value); - return value; - } - - if (lexer->GetToken() == TOKEN_OPEN) { - if (verbose) fprintf(stderr, "("); - lexer->Lex(); - bool value = ExpressionOr(lexer, defines, verbose); - if (verbose) fprintf(stderr, ")[%d]", value); - lexer->Lex(); - return value; - } - - if (lexer->GetToken() == TOKEN_ZERO) { - if (verbose) fprintf(stderr, "0"); - lexer->Lex(); - if (verbose) fprintf(stderr, "[0]"); - return false; - } - - bool first = true; - while (lexer->GetToken() == TOKEN_UNKNOWN || lexer->GetToken() == TOKEN_IDENTIFIER) { - if (verbose && first) fprintf(stderr, ""); - first = false; - lexer->Lex(); - } - - return true; -} - -/** - * Try to parse a 'defined(expr)' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionDefined(Lexer *lexer, StringSet *defines, bool verbose) -{ - bool value = ExpressionNot(lexer, defines, verbose); - - if (lexer->GetToken() != TOKEN_DEFINED) return value; - lexer->Lex(); - if (verbose) fprintf(stderr, "defined"); - bool open = (lexer->GetToken() == TOKEN_OPEN); - if (open) lexer->Lex(); - if (verbose) fprintf(stderr, open ? "(" : " "); - if (lexer->GetToken() == TOKEN_IDENTIFIER) { - if (verbose) fprintf(stderr, "%s", lexer->GetString()); - value = defines->find(lexer->GetString()) != defines->end(); - } - if (open) { - if (verbose) fprintf(stderr, ")"); - lexer->Lex(); - } - lexer->Lex(); - if (verbose) fprintf(stderr, "[%d]", value); - return value; -} - -/** - * Try to parse a 'expr && expr' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionAnd(Lexer *lexer, StringSet *defines, bool verbose) -{ - bool value = ExpressionDefined(lexer, defines, verbose); - - for (;;) { - if (lexer->GetToken() != TOKEN_AND) return value; - if (verbose) fprintf(stderr, " && "); - lexer->Lex(); - value = value && ExpressionDefined(lexer, defines, verbose); - } -} - -/** - * Try to parse a 'expr || expr' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionOr(Lexer *lexer, StringSet *defines, bool verbose) -{ - bool value = ExpressionAnd(lexer, defines, verbose); - - for (;;) { - if (lexer->GetToken() != TOKEN_OR) return value; - if (verbose) fprintf(stderr, " || "); - lexer->Lex(); - value = value || ExpressionAnd(lexer, defines, verbose); - } -} - -/** Enumerator to tell how long to ignore 'stuff'. */ -enum Ignore { - NOT_IGNORE, ///< No ignoring. - IGNORE_UNTIL_ELSE, ///< Ignore till a \c \#else is reached. - IGNORE_UNTIL_ENDIF, ///< Ignore till a \c \#endif is reached. -}; - -/** - * Scan a file for includes, defines and the lot. - * @param filename the name of the file to scan. - * @param ext the extension of the filename. - * @param header whether the file is a header or not. - * @param verbose whether to give verbose debugging information. - */ -void ScanFile(const char *filename, const char *ext, bool header, bool verbose) -{ - static StringSet defines; - static std::stack ignore; - /* Copy in the default defines (parameters of depend) */ - if (!header) { - for (StringSet::iterator it = _defines.begin(); it != _defines.end(); it++) { - defines.insert(strdup(*it)); - } - } - - File file(filename); - Lexer lexer(&file); - - /* Start the lexing! */ - lexer.Lex(); - - while (lexer.GetToken() != TOKEN_END) { - switch (lexer.GetToken()) { - /* We reached the end of the file... yay, we're done! */ - case TOKEN_END: break; - - /* The line started with a # (minus whitespace) */ - case TOKEN_SHARP: - lexer.Lex(); - switch (lexer.GetToken()) { - case TOKEN_INCLUDE: - if (verbose) fprintf(stderr, "%s #include ", filename); - lexer.Lex(); - switch (lexer.GetToken()) { - case TOKEN_LOCAL: - case TOKEN_GLOBAL: { - if (verbose) fprintf(stderr, "%s", lexer.GetString()); - if (!ignore.empty() && ignore.top() != NOT_IGNORE) { - if (verbose) fprintf(stderr, " (ignored)"); - break; - } - const char *h = GeneratePath(file.GetDirname(), lexer.GetString(), lexer.GetToken() == TOKEN_LOCAL); - if (h != nullptr) { - StringMap::iterator it = _headers.find(h); - if (it == _headers.end()) { - it = (_headers.insert(StringMapItem(strdup(h), new StringSet()))).first; - if (verbose) fprintf(stderr, "\n"); - ScanFile(h, ext, true, verbose); - } - StringMap::iterator curfile; - if (header) { - curfile = _headers.find(filename); - } else { - /* Replace the extension with the provided extension of '.o'. */ - char path[PATH_MAX]; - strecpy(path, filename, lastof(path)); - *(strrchr(path, '.')) = '\0'; - strecat(path, ext != nullptr ? ext : ".o", lastof(path)); - curfile = _files.find(path); - if (curfile == _files.end()) { - curfile = (_files.insert(StringMapItem(strdup(path), new StringSet()))).first; - } - } - if (it != _headers.end()) { - for (StringSet::iterator header = it->second->begin(); header != it->second->end(); header++) { - if (curfile->second->find(*header) == curfile->second->end()) curfile->second->insert(strdup(*header)); - } - } - if (curfile->second->find(h) == curfile->second->end()) curfile->second->insert(strdup(h)); - free(h); - } - } - /* FALL THROUGH */ - default: break; - } - break; - - case TOKEN_DEFINE: - if (verbose) fprintf(stderr, "%s #define ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - if (verbose) fprintf(stderr, "%s", lexer.GetString()); - if (!ignore.empty() && ignore.top() != NOT_IGNORE) { - if (verbose) fprintf(stderr, " (ignored)"); - break; - } - if (defines.find(lexer.GetString()) == defines.end()) defines.insert(strdup(lexer.GetString())); - lexer.Lex(); - } - break; - - case TOKEN_UNDEF: - if (verbose) fprintf(stderr, "%s #undef ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - if (verbose) fprintf(stderr, "%s", lexer.GetString()); - if (!ignore.empty() && ignore.top() != NOT_IGNORE) { - if (verbose) fprintf(stderr, " (ignored)"); - break; - } - StringSet::iterator it = defines.find(lexer.GetString()); - if (it != defines.end()) { - free(*it); - defines.erase(it); - } - lexer.Lex(); - } - break; - - case TOKEN_ENDIF: - if (verbose) fprintf(stderr, "%s #endif", filename); - lexer.Lex(); - if (!ignore.empty()) ignore.pop(); - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - - case TOKEN_ELSE: { - if (verbose) fprintf(stderr, "%s #else", filename); - lexer.Lex(); - Ignore last = ignore.empty() ? NOT_IGNORE : ignore.top(); - if (!ignore.empty()) ignore.pop(); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - ignore.push(last == IGNORE_UNTIL_ELSE ? NOT_IGNORE : IGNORE_UNTIL_ENDIF); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - } - - case TOKEN_ELIF: { - if (verbose) fprintf(stderr, "%s #elif ", filename); - lexer.Lex(); - Ignore last = ignore.empty() ? NOT_IGNORE : ignore.top(); - if (!ignore.empty()) ignore.pop(); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - bool value = ExpressionOr(&lexer, &defines, verbose); - ignore.push(last == IGNORE_UNTIL_ELSE ? (value ? NOT_IGNORE : IGNORE_UNTIL_ELSE) : IGNORE_UNTIL_ENDIF); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - } - - case TOKEN_IF: { - if (verbose) fprintf(stderr, "%s #if ", filename); - lexer.Lex(); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - bool value = ExpressionOr(&lexer, &defines, verbose); - ignore.push(value ? NOT_IGNORE : IGNORE_UNTIL_ELSE); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - } - - case TOKEN_IFDEF: - if (verbose) fprintf(stderr, "%s #ifdef ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - bool value = defines.find(lexer.GetString()) != defines.end(); - if (verbose) fprintf(stderr, "%s[%d]", lexer.GetString(), value); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - ignore.push(value ? NOT_IGNORE : IGNORE_UNTIL_ELSE); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - - case TOKEN_IFNDEF: - if (verbose) fprintf(stderr, "%s #ifndef ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - bool value = defines.find(lexer.GetString()) != defines.end(); - if (verbose) fprintf(stderr, "%s[%d]", lexer.GetString(), value); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - ignore.push(!value ? NOT_IGNORE : IGNORE_UNTIL_ELSE); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - - default: - if (verbose) fprintf(stderr, "%s #", filename); - lexer.Lex(); - break; - } - if (verbose) fprintf(stderr, "\n"); - /* FALL THROUGH */ - default: - /* Ignore the rest of the garbage on this line */ - while (lexer.GetToken() != TOKEN_EOL && lexer.GetToken() != TOKEN_END) lexer.Lex(); - lexer.Lex(); - break; - } - } - - if (!header) { - for (StringSet::iterator it = defines.begin(); it != defines.end(); it++) { - free(*it); - } - defines.clear(); - while (!ignore.empty()) ignore.pop(); - } -} - -/** - * Entry point. Arguably the most common function in all applications. - * @param argc the number of arguments. - * @param argv the actual arguments. - * @return return value for the caller to tell we succeed or not. - */ -int main(int argc, char *argv[]) -{ - bool ignorenext = true; - char *filename = nullptr; - char *ext = nullptr; - char *delimiter = nullptr; - bool append = false; - bool verbose = false; - - for (int i = 0; i < argc; i++) { - if (ignorenext) { - ignorenext = false; - continue; - } - if (argv[i][0] == '-') { - /* Append */ - if (strncmp(argv[i], "-a", 2) == 0) append = true; - /* Include dir */ - if (strncmp(argv[i], "-I", 2) == 0) { - if (argv[i][2] == '\0') { - i++; - _include_dirs.insert(strdup(argv[i])); - } else { - _include_dirs.insert(strdup(&argv[i][2])); - } - continue; - } - /* Define */ - if (strncmp(argv[i], "-D", 2) == 0) { - char *p = strchr(argv[i], '='); - if (p != nullptr) *p = '\0'; - _defines.insert(strdup(&argv[i][2])); - continue; - } - /* Output file */ - if (strncmp(argv[i], "-f", 2) == 0) { - if (filename != nullptr) continue; - filename = strdup(&argv[i][2]); - continue; - } - /* Object file extension */ - if (strncmp(argv[i], "-o", 2) == 0) { - if (ext != nullptr) continue; - ext = strdup(&argv[i][2]); - continue; - } - /* Starting string delimiter */ - if (strncmp(argv[i], "-s", 2) == 0) { - if (delimiter != nullptr) continue; - delimiter = strdup(&argv[i][2]); - continue; - } - /* Verbose */ - if (strncmp(argv[i], "-v", 2) == 0) verbose = true; - continue; - } - ScanFile(argv[i], ext, false, verbose); - } - - /* Default output file is Makefile */ - if (filename == nullptr) filename = strdup("Makefile"); - - /* Default delimiter string */ - if (delimiter == nullptr) delimiter = strdup("# DO NOT DELETE"); - - char backup[PATH_MAX]; - strecpy(backup, filename, lastof(backup)); - strecat(backup, ".bak", lastof(backup)); - - char *content = nullptr; - long size = 0; - - /* Read in the current file; so we can overwrite everything from the - * end of non-depend data marker down till the end. */ - FILE *src = fopen(filename, "rb"); - if (src != nullptr) { - fseek(src, 0, SEEK_END); - if ((size = ftell(src)) < 0) { - fprintf(stderr, "Could not read %s\n", filename); - exit(-2); - } - rewind(src); - content = (char*)malloc(size * sizeof(*content)); - if (fread(content, 1, size, src) != (size_t)size) { - fprintf(stderr, "Could not read %s\n", filename); - exit(-2); - } - fclose(src); - } - - FILE *dst = fopen(filename, "w"); - bool found_delimiter = false; - - if (size != 0) { - src = fopen(backup, "wb"); - if (fwrite(content, 1, size, src) != (size_t)size) { - fprintf(stderr, "Could not write %s\n", filename); - exit(-2); - } - fclose(src); - - /* Then append it to the real file. */ - src = fopen(backup, "r"); - while (fgets(content, size, src) != nullptr) { - fputs(content, dst); - if (!strncmp(content, delimiter, strlen(delimiter))) found_delimiter = true; - if (!append && found_delimiter) break; - } - fclose(src); - } - if (!found_delimiter) fprintf(dst, "\n%s\n", delimiter); - - for (StringMap::iterator it = _files.begin(); it != _files.end(); it++) { - for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) { - fprintf(dst, "%s: %s\n", it->first, *h); - } - } - - /* Clean up our mess. */ - fclose(dst); - - free(delimiter); - free(filename); - free(ext); - free(content); - - for (StringMap::iterator it = _files.begin(); it != _files.end(); it++) { - for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) { - free(*h); - } - it->second->clear(); - delete it->second; - free(it->first); - } - _files.clear(); - - for (StringMap::iterator it = _headers.begin(); it != _headers.end(); it++) { - for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) { - free(*h); - } - it->second->clear(); - delete it->second; - free(it->first); - } - _headers.clear(); - - for (StringSet::iterator it = _defines.begin(); it != _defines.end(); it++) { - free(*it); - } - _defines.clear(); - - for (StringSet::iterator it = _include_dirs.begin(); it != _include_dirs.end(); it++) { - free(*it); - } - _include_dirs.clear(); - - return 0; -} diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt new file mode 100644 index 0000000000..aafb5a7b8d --- /dev/null +++ b/src/game/CMakeLists.txt @@ -0,0 +1,14 @@ +add_files( + game.hpp + game_config.cpp + game_config.hpp + game_core.cpp + game_info.cpp + game_info.hpp + game_instance.cpp + game_instance.hpp + game_scanner.cpp + game_scanner.hpp + game_text.cpp + game_text.hpp +) diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt new file mode 100644 index 0000000000..00b554126f --- /dev/null +++ b/src/lang/CMakeLists.txt @@ -0,0 +1,122 @@ +set(LANG_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/afrikaans.txt + ${CMAKE_CURRENT_SOURCE_DIR}/arabic_egypt.txt + ${CMAKE_CURRENT_SOURCE_DIR}/basque.txt + ${CMAKE_CURRENT_SOURCE_DIR}/belarusian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/brazilian_portuguese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/bulgarian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/catalan.txt + ${CMAKE_CURRENT_SOURCE_DIR}/croatian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/czech.txt + ${CMAKE_CURRENT_SOURCE_DIR}/danish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/dutch.txt + ${CMAKE_CURRENT_SOURCE_DIR}/english.txt + ${CMAKE_CURRENT_SOURCE_DIR}/english_AU.txt + ${CMAKE_CURRENT_SOURCE_DIR}/english_US.txt + ${CMAKE_CURRENT_SOURCE_DIR}/esperanto.txt + ${CMAKE_CURRENT_SOURCE_DIR}/estonian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/faroese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/finnish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/french.txt + ${CMAKE_CURRENT_SOURCE_DIR}/gaelic.txt + ${CMAKE_CURRENT_SOURCE_DIR}/galician.txt + ${CMAKE_CURRENT_SOURCE_DIR}/german.txt + ${CMAKE_CURRENT_SOURCE_DIR}/greek.txt + ${CMAKE_CURRENT_SOURCE_DIR}/hebrew.txt + ${CMAKE_CURRENT_SOURCE_DIR}/hungarian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/icelandic.txt + ${CMAKE_CURRENT_SOURCE_DIR}/indonesian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/irish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/italian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/japanese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/korean.txt + ${CMAKE_CURRENT_SOURCE_DIR}/latin.txt + ${CMAKE_CURRENT_SOURCE_DIR}/latvian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/lithuanian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/luxembourgish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/malay.txt + ${CMAKE_CURRENT_SOURCE_DIR}/norwegian_bokmal.txt + ${CMAKE_CURRENT_SOURCE_DIR}/norwegian_nynorsk.txt + ${CMAKE_CURRENT_SOURCE_DIR}/polish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/portuguese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/romanian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/russian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/serbian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/simplified_chinese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/slovak.txt + ${CMAKE_CURRENT_SOURCE_DIR}/slovenian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/spanish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/spanish_MX.txt + ${CMAKE_CURRENT_SOURCE_DIR}/swedish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/tamil.txt + ${CMAKE_CURRENT_SOURCE_DIR}/thai.txt + ${CMAKE_CURRENT_SOURCE_DIR}/traditional_chinese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/turkish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/ukrainian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/vietnamese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/welsh.txt +) + +set(LANG_BINARY_DIR ${CMAKE_BINARY_DIR}/lang) + +# Walk over all the (finished) language files, and generate a command to compile them +foreach(LANG_SOURCE_FILE IN LISTS LANG_SOURCE_FILES) + get_filename_component(LANG_SOURCE_FILE_NAME_WE ${LANG_SOURCE_FILE} NAME_WE) + + set(LANG_BINARY_FILE ${LANG_BINARY_DIR}/${LANG_SOURCE_FILE_NAME_WE}.lng) + + add_custom_command(OUTPUT ${LANG_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E make_directory ${LANG_BINARY_DIR} + COMMAND strgen + -s ${CMAKE_CURRENT_SOURCE_DIR} + -d ${LANG_BINARY_DIR} + ${LANG_SOURCE_FILE} + DEPENDS strgen + MAIN_DEPENDENCY ${LANG_SOURCE_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Compiling language ${LANG_SOURCE_FILE_NAME_WE}" + ) + + list(APPEND LANG_BINARY_FILES ${LANG_BINARY_FILE}) +endforeach(LANG_SOURCE_FILE) + +# Create a new target which compiles all language files +add_custom_target(language_files + DEPENDS + ${LANG_BINARY_FILES} +) +set_target_properties(language_files + PROPERTIES LANG_SOURCE_FILES "${LANG_SOURCE_FILES}" +) + + +set(GENERATED_BINARY_DIR ${CMAKE_BINARY_DIR}/generated) +set(TABLE_BINARY_DIR ${GENERATED_BINARY_DIR}/table) + +# Generate a command and target to create the strings table +add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/strings.h + COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} + COMMAND strgen + -s ${CMAKE_CURRENT_SOURCE_DIR} + -d ${TABLE_BINARY_DIR} + DEPENDS strgen ${LANG_SOURCE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating table/strings.h" +) +add_custom_target_timestamp(table_strings + DEPENDS + ${TABLE_BINARY_DIR}/strings.h +) + +add_library(languages + INTERFACE +) +target_include_directories(languages + INTERFACE + ${GENERATED_BINARY_DIR} +) +add_dependencies(languages + language_files + table_strings +) +add_library(openttd::languages ALIAS languages) diff --git a/src/linkgraph/CMakeLists.txt b/src/linkgraph/CMakeLists.txt new file mode 100644 index 0000000000..c3d73a15e1 --- /dev/null +++ b/src/linkgraph/CMakeLists.txt @@ -0,0 +1,22 @@ +add_files( + demands.cpp + demands.h + flowmapper.cpp + flowmapper.h + init.h + linkgraph.cpp + linkgraph.h + linkgraph_base.h + linkgraph_gui.cpp + linkgraph_gui.h + linkgraph_type.h + linkgraphjob.cpp + linkgraphjob.h + linkgraphjob_base.h + linkgraphschedule.cpp + linkgraphschedule.h + mcf.cpp + mcf.h + refresh.cpp + refresh.h +) diff --git a/src/misc/CMakeLists.txt b/src/misc/CMakeLists.txt new file mode 100644 index 0000000000..3a5363e7b0 --- /dev/null +++ b/src/misc/CMakeLists.txt @@ -0,0 +1,14 @@ +add_files( + array.hpp + binaryheap.hpp + blob.hpp + countedobj.cpp + countedptr.hpp + dbg_helpers.cpp + dbg_helpers.h + fixedsizearray.hpp + getoptdata.cpp + getoptdata.h + hashtable.hpp + str.hpp +) diff --git a/src/music/CMakeLists.txt b/src/music/CMakeLists.txt new file mode 100644 index 0000000000..0ae15fde26 --- /dev/null +++ b/src/music/CMakeLists.txt @@ -0,0 +1,54 @@ +if (NOT OPTION_DEDICATED) + add_files( + allegro_m.cpp + allegro_m.h + CONDITION Allegro_FOUND + ) + + add_files( + fluidsynth.cpp + fluidsynth.h + CONDITION Fluidsynth_FOUND + ) + + add_files( + cocoa_m.cpp + cocoa_m.h + CONDITION APPLE + ) + + add_files( + dmusic.cpp + dmusic.h + win32_m.cpp + win32_m.h + CONDITION WIN32 + ) + + add_files( + extmidi.cpp + extmidi.h + CONDITION UNIX + ) + + add_files( + bemidi.cpp + bemidi.h + CONDITION OPTION_HAIKU + ) + + add_files( + os2_m.cpp + os2_m.h + CONDITION OPTION_OS2 + ) +endif (NOT OPTION_DEDICATED) + +add_files( + midi.h + midifile.cpp + midifile.hpp + music_driver.hpp + null_m.cpp + null_m.h +) diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt new file mode 100644 index 0000000000..1c27d62066 --- /dev/null +++ b/src/network/CMakeLists.txt @@ -0,0 +1,28 @@ +add_subdirectory(core) + +add_files( + network.cpp + network.h + network_admin.cpp + network_admin.h + network_base.h + network_chat_gui.cpp + network_client.cpp + network_client.h + network_command.cpp + network_content.cpp + network_content.h + network_content_gui.cpp + network_content_gui.h + network_func.h + network_gamelist.cpp + network_gamelist.h + network_gui.cpp + network_gui.h + network_internal.h + network_server.cpp + network_server.h + network_type.h + network_udp.cpp + network_udp.h +) diff --git a/src/network/core/CMakeLists.txt b/src/network/core/CMakeLists.txt new file mode 100644 index 0000000000..777d15d841 --- /dev/null +++ b/src/network/core/CMakeLists.txt @@ -0,0 +1,27 @@ +add_files( + address.cpp + address.h + config.h + core.cpp + core.h + game.h + host.cpp + host.h + os_abstraction.h + packet.cpp + packet.h + tcp.cpp + tcp.h + tcp_admin.cpp + tcp_admin.h + tcp_connect.cpp + tcp_content.cpp + tcp_content.h + tcp_game.cpp + tcp_game.h + tcp_http.cpp + tcp_http.h + tcp_listen.h + udp.cpp + udp.h +) diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt new file mode 100644 index 0000000000..e302c448b5 --- /dev/null +++ b/src/os/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(macosx) +add_subdirectory(os2) +add_subdirectory(unix) +add_subdirectory(windows) diff --git a/src/os/macosx/CMakeLists.txt b/src/os/macosx/CMakeLists.txt new file mode 100644 index 0000000000..e6b6c237b0 --- /dev/null +++ b/src/os/macosx/CMakeLists.txt @@ -0,0 +1,11 @@ +add_files( + crashlog_osx.cpp + macos.h + macos.mm + osx_stdafx.h + splash.cpp + splash.h + string_osx.cpp + string_osx.h + CONDITION APPLE +) diff --git a/src/os/os2/CMakeLists.txt b/src/os/os2/CMakeLists.txt new file mode 100644 index 0000000000..52534dbcbb --- /dev/null +++ b/src/os/os2/CMakeLists.txt @@ -0,0 +1,4 @@ +add_files( + os2.cpp + CONDITION OPTION_OS2 +) diff --git a/src/os/unix/CMakeLists.txt b/src/os/unix/CMakeLists.txt new file mode 100644 index 0000000000..b548d3bb21 --- /dev/null +++ b/src/os/unix/CMakeLists.txt @@ -0,0 +1,9 @@ +add_files( + crashlog_unix.cpp + CONDITION UNIX AND NOT APPLE AND NOT OPTION_OS2 +) + +add_files( + unix.cpp + CONDITION UNIX AND NOT OPTION_OS2 +) diff --git a/src/os/windows/CMakeLists.txt b/src/os/windows/CMakeLists.txt new file mode 100644 index 0000000000..19d1bd46e3 --- /dev/null +++ b/src/os/windows/CMakeLists.txt @@ -0,0 +1,8 @@ +add_files( + crashlog_win.cpp + string_uniscribe.cpp + string_uniscribe.h + win32.cpp + win32.h + CONDITION WIN32 +) diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index a2f8c28f57..741fa0e105 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -37,7 +37,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -100 ICON DISCARDABLE "../../../media/openttd.ico" +100 ICON DISCARDABLE "${CMAKE_SOURCE_DIR}/os/windows/openttd.ico" ///////////////////////////////////////////////////////////////////////////// // @@ -77,8 +77,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,11,0,!!ISODATE!! - PRODUCTVERSION 1,11,0,!!ISODATE!! + FILEVERSION 1,11,0,${REV_ISODATE} + PRODUCTVERSION 1,11,0,${REV_ISODATE} FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -96,14 +96,14 @@ BEGIN VALUE "Comments", "This program is licensed under the GNU General Public License version 2.\0" VALUE "CompanyName", "OpenTTD Development Team\0" VALUE "FileDescription", "OpenTTD\0" - VALUE "FileVersion", "!!VERSION!!\0" + VALUE "FileVersion", "${REV_VERSION}\0" VALUE "InternalName", "openttd\0" - VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-!!YEAR!!. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-${REV_YEAR}. All Rights Reserved.\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "openttd.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "OpenTTD\0" - VALUE "ProductVersion", "!!VERSION!!\0" + VALUE "ProductVersion", "${REV_VERSION}\0" VALUE "SpecialBuild", "-\0" END END @@ -116,7 +116,7 @@ END #endif // !_MAC #ifdef __MINGW32__ -1 24 "..\\..\\..\\projects\\dpi_aware.manifest" +1 24 "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest" #endif #endif // Neutral (Default) resources diff --git a/src/pathfinder/CMakeLists.txt b/src/pathfinder/CMakeLists.txt new file mode 100644 index 0000000000..2e275706f2 --- /dev/null +++ b/src/pathfinder/CMakeLists.txt @@ -0,0 +1,9 @@ +add_subdirectory(npf) +add_subdirectory(yapf) + +add_files( + follow_track.hpp + pathfinder_func.h + pathfinder_type.h + pf_performance_timer.hpp +) diff --git a/src/pathfinder/npf/CMakeLists.txt b/src/pathfinder/npf/CMakeLists.txt new file mode 100644 index 0000000000..e3ace57e52 --- /dev/null +++ b/src/pathfinder/npf/CMakeLists.txt @@ -0,0 +1,8 @@ +add_files( + aystar.cpp + aystar.h + npf.cpp + npf_func.h + queue.cpp + queue.h +) diff --git a/src/pathfinder/yapf/CMakeLists.txt b/src/pathfinder/yapf/CMakeLists.txt new file mode 100644 index 0000000000..170c1ad61d --- /dev/null +++ b/src/pathfinder/yapf/CMakeLists.txt @@ -0,0 +1,20 @@ +add_files( + nodelist.hpp + yapf.h + yapf.hpp + yapf_base.hpp + yapf_cache.h + yapf_common.hpp + yapf_costbase.hpp + yapf_costcache.hpp + yapf_costrail.hpp + yapf_destrail.hpp + yapf_node.hpp + yapf_node_rail.hpp + yapf_node_road.hpp + yapf_node_ship.hpp + yapf_rail.cpp + yapf_road.cpp + yapf_ship.cpp + yapf_type.hpp +) diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 3f5b126dc1..16c403a67a 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -35,7 +35,7 @@ bool IsReleasedVersion() * * shows a "M", if the binary is made from modified source code. */ -const char _openttd_revision[] = "!!VERSION!!"; +const char _openttd_revision[] = "${REV_VERSION}"; /** * The text version of OpenTTD's build date. @@ -48,12 +48,12 @@ const char _openttd_build_date[] = __DATE__ " " __TIME__; /** * The git revision hash of this version. */ -const char _openttd_revision_hash[] = "!!GITHASH!!"; +const char _openttd_revision_hash[] = "${REV_HASH}"; /** * The year of this version. */ -const char _openttd_revision_year[] = "!!YEAR!!"; +const char _openttd_revision_year[] = "${REV_YEAR}"; /** * Let us know if current build was modified. This detection @@ -63,14 +63,14 @@ const char _openttd_revision_year[] = "!!YEAR!!"; * (compiling from sources without any version control software) * and 2 is for modified revision. */ -const byte _openttd_revision_modified = !!MODIFIED!!; +const byte _openttd_revision_modified = ${REV_MODIFIED}; /** * Indicate whether this is a tagged version. * If this is non-0, then _openttd_revision is the name of the tag, * and the version is likely a beta, release candidate, or real release. */ -const byte _openttd_revision_tagged = !!ISTAG!!; +const byte _openttd_revision_tagged = ${REV_ISTAG}; /** * The NewGRF revision of OTTD: @@ -85,4 +85,4 @@ const byte _openttd_revision_tagged = !!ISTAG!!; * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. */ -const uint32 _openttd_newgrf_version = 1 << 28 | 11 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; +const uint32 _openttd_newgrf_version = 1 << 28 | 11 << 24 | 0 << 20 | ${REV_ISSTABLETAG} << 19 | 28004; diff --git a/src/saveload/CMakeLists.txt b/src/saveload/CMakeLists.txt new file mode 100644 index 0000000000..52f103fa7e --- /dev/null +++ b/src/saveload/CMakeLists.txt @@ -0,0 +1,43 @@ +add_files( + afterload.cpp + ai_sl.cpp + airport_sl.cpp + animated_tile_sl.cpp + autoreplace_sl.cpp + cargomonitor_sl.cpp + cargopacket_sl.cpp + cheat_sl.cpp + company_sl.cpp + depot_sl.cpp + economy_sl.cpp + engine_sl.cpp + game_sl.cpp + gamelog_sl.cpp + goal_sl.cpp + group_sl.cpp + industry_sl.cpp + labelmaps_sl.cpp + linkgraph_sl.cpp + map_sl.cpp + misc_sl.cpp + newgrf_sl.cpp + newgrf_sl.h + object_sl.cpp + oldloader.cpp + oldloader.h + oldloader_sl.cpp + order_sl.cpp + saveload.cpp + saveload.h + saveload_filter.h + saveload_internal.h + signs_sl.cpp + station_sl.cpp + storage_sl.cpp + strings_sl.cpp + story_sl.cpp + subsidy_sl.cpp + town_sl.cpp + vehicle_sl.cpp + waypoint_sl.cpp +) diff --git a/src/script/CMakeLists.txt b/src/script/CMakeLists.txt new file mode 100644 index 0000000000..e5915332c4 --- /dev/null +++ b/src/script/CMakeLists.txt @@ -0,0 +1,23 @@ +add_subdirectory(api) + +add_files( + script_config.cpp + script_config.hpp + script_fatalerror.hpp + script_info.cpp + script_info.hpp + script_info_dummy.cpp + script_instance.cpp + script_instance.hpp + script_scanner.cpp + script_scanner.hpp + script_storage.hpp + script_suspend.hpp + squirrel.cpp + squirrel.hpp + squirrel_class.hpp + squirrel_helper.hpp + squirrel_helper_type.hpp + squirrel_std.cpp + squirrel_std.hpp +) diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt new file mode 100644 index 0000000000..9c665293c1 --- /dev/null +++ b/src/script/api/CMakeLists.txt @@ -0,0 +1,140 @@ +add_files( + ai_changelog.hpp + game_changelog.hpp + script_accounting.hpp + script_admin.hpp + script_airport.hpp + script_base.hpp + script_basestation.hpp + script_bridge.hpp + script_bridgelist.hpp + script_cargo.hpp + script_cargolist.hpp + script_cargomonitor.hpp + script_client.hpp + script_clientlist.hpp + script_company.hpp + script_companymode.hpp + script_controller.hpp + script_date.hpp + script_depotlist.hpp + script_engine.hpp + script_enginelist.hpp + script_error.hpp + script_event.hpp + script_event_types.hpp + script_execmode.hpp + script_game.hpp + script_gamesettings.hpp + script_goal.hpp + script_group.hpp + script_grouplist.hpp + script_industry.hpp + script_industrylist.hpp + script_industrytype.hpp + script_industrytypelist.hpp + script_info_docs.hpp + script_infrastructure.hpp + script_list.hpp + script_log.hpp + script_map.hpp + script_marine.hpp + script_news.hpp + script_object.hpp + script_order.hpp + script_priorityqueue.hpp + script_rail.hpp + script_railtypelist.hpp + script_road.hpp + script_roadtypelist.hpp + script_sign.hpp + script_signlist.hpp + script_station.hpp + script_stationlist.hpp + script_story_page.hpp + script_storypagelist.hpp + script_storypageelementlist.hpp + script_subsidy.hpp + script_subsidylist.hpp + script_testmode.hpp + script_text.hpp + script_tile.hpp + script_tilelist.hpp + script_town.hpp + script_townlist.hpp + script_tunnel.hpp + script_types.hpp + script_vehicle.hpp + script_vehiclelist.hpp + script_viewport.hpp + script_waypoint.hpp + script_waypointlist.hpp + script_window.hpp + script_accounting.cpp + script_admin.cpp + script_airport.cpp + script_base.cpp + script_basestation.cpp + script_bridge.cpp + script_bridgelist.cpp + script_cargo.cpp + script_cargolist.cpp + script_cargomonitor.cpp + script_client.cpp + script_clientlist.cpp + script_company.cpp + script_companymode.cpp + script_controller.cpp + script_date.cpp + script_depotlist.cpp + script_engine.cpp + script_enginelist.cpp + script_error.cpp + script_event.cpp + script_event_types.cpp + script_execmode.cpp + script_game.cpp + script_gamesettings.cpp + script_goal.cpp + script_group.cpp + script_grouplist.cpp + script_industry.cpp + script_industrylist.cpp + script_industrytype.cpp + script_industrytypelist.cpp + script_infrastructure.cpp + script_list.cpp + script_log.cpp + script_map.cpp + script_marine.cpp + script_news.cpp + script_object.cpp + script_order.cpp + script_priorityqueue.cpp + script_rail.cpp + script_railtypelist.cpp + script_road.cpp + script_roadtypelist.cpp + script_sign.cpp + script_signlist.cpp + script_station.cpp + script_stationlist.cpp + script_story_page.cpp + script_storypagelist.cpp + script_storypageelementlist.cpp + script_subsidy.cpp + script_subsidylist.cpp + script_testmode.cpp + script_text.cpp + script_tile.cpp + script_tilelist.cpp + script_town.cpp + script_townlist.cpp + script_tunnel.cpp + script_vehicle.cpp + script_vehiclelist.cpp + script_viewport.cpp + script_waypoint.cpp + script_waypointlist.cpp + script_window.cpp +) diff --git a/src/settingsgen/CMakeLists.txt b/src/settingsgen/CMakeLists.txt new file mode 100644 index 0000000000..e17b8ad6bf --- /dev/null +++ b/src/settingsgen/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.5) + +project(settingsgen) + +set(sourcefiles + settingsgen.cpp + ../core/alloc_func.cpp + ../misc/getoptdata.cpp + ../ini_load.cpp + ../string.cpp +) +add_definitions(-DSETTINGSGEN) +add_executable(settingsgen ${sourcefiles}) diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt new file mode 100644 index 0000000000..35f65d1205 --- /dev/null +++ b/src/sound/CMakeLists.txt @@ -0,0 +1,37 @@ +if (NOT OPTION_DEDICATED) + add_files( + allegro_s.cpp + allegro_s.h + CONDITION Allegro_FOUND + ) + + add_files( + sdl_s.cpp + sdl_s.h + CONDITION SDL_FOUND + ) + + add_files( + cocoa_s.cpp + cocoa_s.h + CONDITION APPLE + ) + + add_files( + win32_s.cpp + win32_s.h + CONDITION WIN32 + ) + + add_files( + xaudio2_s.cpp + xaudio2_s.h + CONDITION WIN32 AND XAUDIO2_FOUND + ) +endif (NOT OPTION_DEDICATED) + +add_files( + sound_driver.hpp + null_s.cpp + null_s.h +) diff --git a/src/spriteloader/CMakeLists.txt b/src/spriteloader/CMakeLists.txt new file mode 100644 index 0000000000..5d6a2f865e --- /dev/null +++ b/src/spriteloader/CMakeLists.txt @@ -0,0 +1,5 @@ +add_files( + grf.cpp + grf.hpp + spriteloader.hpp +) diff --git a/src/stdafx.h b/src/stdafx.h index 4fb84a956e..c520925537 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -424,17 +424,14 @@ void NORETURN CDECL usererror(const char *str, ...) WARN_FORMAT(1, 2); void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); #define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__) -/* For non-debug builds with assertions enabled use the special assertion handler: - * - For MSVC: NDEBUG is set for all release builds and WITH_ASSERT overrides the disabling of asserts. - * - For non MSVC: NDEBUG is set when assertions are disables, _DEBUG is set for non-release builds. - */ -#if (defined(_MSC_VER) && defined(NDEBUG) && defined(WITH_ASSERT)) || (!defined(_MSC_VER) && !defined(NDEBUG) && !defined(_DEBUG)) +/* For non-debug builds with assertions enabled use the special assertion handler. */ +#if defined(NDEBUG) && defined(WITH_ASSERT) #undef assert #define assert(expression) if (!(expression)) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); #endif -/* Asserts are enabled if NDEBUG isn't defined, or if we are using MSVC and WITH_ASSERT is defined. */ -#if !defined(NDEBUG) || (defined(_MSC_VER) && defined(WITH_ASSERT)) +/* Asserts are enabled if NDEBUG isn't defined or WITH_ASSERT is defined. */ +#if !defined(NDEBUG) || defined(WITH_ASSERT) #define OTTD_ASSERT #endif diff --git a/src/strgen/CMakeLists.txt b/src/strgen/CMakeLists.txt new file mode 100644 index 0000000000..b8f61cde3b --- /dev/null +++ b/src/strgen/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.5) + +project(strgen) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") + +set(sourcefiles + strgen.cpp + strgen_base.cpp + ../core/alloc_func.cpp + ../misc/getoptdata.cpp + ../string.cpp +) +add_definitions(-DSTRGEN) +add_executable(strgen ${sourcefiles}) + +include(Endian) +add_endian_definition() + + +# Source Files +add_files(strgen_base.cpp) + +# Header Files +add_files(strgen.h) diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt new file mode 100644 index 0000000000..23b4724e33 --- /dev/null +++ b/src/table/CMakeLists.txt @@ -0,0 +1,83 @@ +set(GENERATED_BINARY_DIR ${CMAKE_BINARY_DIR}/generated) +set(TABLE_BINARY_DIR ${GENERATED_BINARY_DIR}/table) + +set(TABLE_INI_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/company_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/currency_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/gameopt_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/misc_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/win32_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/window_settings.ini +) + +# Generate a command and target to create the settings table +add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/settings.h + COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} + COMMAND settingsgen + -o ${TABLE_BINARY_DIR}/settings.h + -b ${CMAKE_SOURCE_DIR}/src/table/settings.h.preamble + -a ${CMAKE_SOURCE_DIR}/src/table/settings.h.postamble + ${TABLE_INI_SOURCE_FILES} + DEPENDS settingsgen ${TABLE_INI_SOURCE_FILES} + ${CMAKE_SOURCE_DIR}/src/table/settings.h.preamble + ${CMAKE_SOURCE_DIR}/src/table/settings.h.postamble + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating table/settings.h" +) +add_custom_target_timestamp(table_settings + DEPENDS + ${TABLE_BINARY_DIR}/settings.h +) + +add_library(settings + INTERFACE +) +target_include_directories(settings + INTERFACE + ${GENERATED_BINARY_DIR} +) +add_dependencies(settings + table_settings +) +add_library(openttd::settings ALIAS settings) + +add_files( + airport_defaults.h + airport_movement.h + airporttile_ids.h + airporttiles.h + animcursors.h + autorail.h + bridge_land.h + build_industry.h + cargo_const.h + clear_land.h + control_codes.h + elrail_data.h + engines.h + genland.h + heightmap_colours.h + industry_land.h + landscape_sprite.h + newgrf_debug_data.h + object_land.h + palette_convert.h + palettes.h + pricebase.h + railtypes.h + road_land.h + roadtypes.h + roadveh_movement.h + sprites.h + station_land.h + strgen_tables.h + string_colours.h + town_land.h + townname.h + track_land.h + train_cmd.h + tree_land.h + unicode.h + water_land.h +) diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt new file mode 100644 index 0000000000..c6251e9391 --- /dev/null +++ b/src/video/CMakeLists.txt @@ -0,0 +1,35 @@ +add_subdirectory(cocoa) + +if (NOT OPTION_DEDICATED) + add_files( + allegro_v.cpp + allegro_v.h + CONDITION Allegro_FOUND + ) + + add_files( + sdl_v.cpp + sdl_v.h + CONDITION SDL_FOUND + ) + + add_files( + sdl2_v.cpp + sdl2_v.h + CONDITION SDL2_FOUND + ) + + add_files( + win32_v.cpp + win32_v.h + CONDITION WIN32 + ) +endif (NOT OPTION_DEDICATED) + +add_files( + dedicated_v.cpp + dedicated_v.h + null_v.cpp + null_v.h + video_driver.hpp +) diff --git a/src/video/cocoa/CMakeLists.txt b/src/video/cocoa/CMakeLists.txt new file mode 100644 index 0000000000..4fff132f37 --- /dev/null +++ b/src/video/cocoa/CMakeLists.txt @@ -0,0 +1,8 @@ +add_files( + cocoa_keys.h + cocoa_v.h + cocoa_v.mm + event.mm + wnd_quartz.mm + CONDITION APPLE +) diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt new file mode 100644 index 0000000000..18ecd529e8 --- /dev/null +++ b/src/widgets/CMakeLists.txt @@ -0,0 +1,61 @@ +add_files( + ai_widget.h + airport_widget.h + autoreplace_widget.h + bootstrap_widget.h + bridge_widget.h + build_vehicle_widget.h + cheat_widget.h + company_widget.h + console_widget.h + date_widget.h + depot_widget.h + dock_widget.h + dropdown.cpp + dropdown_func.h + dropdown_type.h + dropdown_widget.h + engine_widget.h + error_widget.h + fios_widget.h + framerate_widget.h + genworld_widget.h + goal_widget.h + graph_widget.h + group_widget.h + highscore_widget.h + industry_widget.h + intro_widget.h + link_graph_legend_widget.h + main_widget.h + misc_widget.h + music_widget.h + network_chat_widget.h + network_content_widget.h + network_widget.h + newgrf_debug_widget.h + newgrf_widget.h + news_widget.h + object_widget.h + order_widget.h + osk_widget.h + rail_widget.h + road_widget.h + screenshot_widget.h + settings_widget.h + sign_widget.h + smallmap_widget.h + station_widget.h + statusbar_widget.h + story_widget.h + subsidy_widget.h + terraform_widget.h + timetable_widget.h + toolbar_widget.h + town_widget.h + transparency_widget.h + tree_widget.h + vehicle_widget.h + viewport_widget.h + waypoint_widget.h +) From b7643b1d36cb41eb6712042761c13b9819fcbe74 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 12:00:36 +0200 Subject: [PATCH 150/601] Add: create bundles via CPack CPack works closely together with CMake to do the right thing in terms of bundling (called 'package'). This generates all the packaging we need, and some more. --- CMakeLists.txt | 2 + CPackProperties.cmake.in | 12 + cmake/InstallAndPackage.cmake | 109 ++ cmake/PackageBundle.cmake | 24 + cmake/PackageDeb.cmake | 4 + cmake/PackageNSIS.cmake | 39 + os/debian/NEWS | 25 - os/debian/README.Debian | 41 - os/debian/changelog | 1087 ----------------- os/debian/compat | 1 - os/debian/control | 36 - os/debian/copyright | 106 -- os/debian/gbp.conf | 13 - os/debian/menu | 2 - os/debian/openttd-wrapper | 28 - os/debian/patches/run-openttd-wrapper.patch | 20 - os/debian/patches/series | 1 - os/debian/rules | 50 - os/debian/source/format | 1 - os/debian/watch | 5 - os/macosx/Info.plist.in | 33 + os/macosx/launch.sh | 8 + os/macosx/plistgen.sh | 46 - os/morphos/icons/OpenTTD.info | Bin 7341 -> 0 bytes os/morphos/icons/docs.info | Bin 5390 -> 0 bytes os/morphos/icons/document.info | Bin 4451 -> 0 bytes os/morphos/icons/drawer.info | Bin 5390 -> 0 bytes os/rpm/openttd-rpmlintrc | 6 - os/rpm/openttd.changes | 100 -- os/rpm/openttd.spec | 272 ----- os/windows/installer/build_installers.bat | 4 - os/windows/installer/cdfinder.ini | 26 - os/windows/installer/install.nsi | 744 ----------- os/windows/installer/version_win32.txt | 5 - os/windows/installer/version_win64.txt | 5 - os/windows/installer/version_win9x.txt | 5 - .../{installer/top.bmp => nsis-top.bmp} | Bin .../welcome.bmp => nsis-welcome.bmp} | Bin {media => os/windows}/openttd.ico | Bin 39 files changed, 231 insertions(+), 2629 deletions(-) create mode 100644 CPackProperties.cmake.in create mode 100644 cmake/InstallAndPackage.cmake create mode 100644 cmake/PackageBundle.cmake create mode 100644 cmake/PackageDeb.cmake create mode 100644 cmake/PackageNSIS.cmake delete mode 100644 os/debian/NEWS delete mode 100644 os/debian/README.Debian delete mode 100644 os/debian/changelog delete mode 100644 os/debian/compat delete mode 100644 os/debian/control delete mode 100644 os/debian/copyright delete mode 100644 os/debian/gbp.conf delete mode 100644 os/debian/menu delete mode 100644 os/debian/openttd-wrapper delete mode 100644 os/debian/patches/run-openttd-wrapper.patch delete mode 100644 os/debian/patches/series delete mode 100755 os/debian/rules delete mode 100644 os/debian/source/format delete mode 100644 os/debian/watch create mode 100644 os/macosx/Info.plist.in create mode 100644 os/macosx/launch.sh delete mode 100755 os/macosx/plistgen.sh delete mode 100644 os/morphos/icons/OpenTTD.info delete mode 100644 os/morphos/icons/docs.info delete mode 100644 os/morphos/icons/document.info delete mode 100644 os/morphos/icons/drawer.info delete mode 100644 os/rpm/openttd-rpmlintrc delete mode 100644 os/rpm/openttd.changes delete mode 100644 os/rpm/openttd.spec delete mode 100644 os/windows/installer/build_installers.bat delete mode 100644 os/windows/installer/cdfinder.ini delete mode 100644 os/windows/installer/install.nsi delete mode 100644 os/windows/installer/version_win32.txt delete mode 100644 os/windows/installer/version_win64.txt delete mode 100644 os/windows/installer/version_win9x.txt rename os/windows/{installer/top.bmp => nsis-top.bmp} (100%) rename os/windows/{installer/welcome.bmp => nsis-welcome.bmp} (100%) rename {media => os/windows}/openttd.ico (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index c1ffa9ecca..77ae77cef3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -224,3 +224,5 @@ endif (CMAKE_SIZEOF_VOID_P EQUAL 8) include(CreateRegression) create_regression() + +include(InstallAndPackage) diff --git a/CPackProperties.cmake.in b/CPackProperties.cmake.in new file mode 100644 index 0000000000..824c50f93e --- /dev/null +++ b/CPackProperties.cmake.in @@ -0,0 +1,12 @@ +# Make the current version available to CPack +set(CPACK_PACKAGE_VERSION "@REV_VERSION@") + +# Name the output file with the correct version +string(REPLACE "#CPACK_PACKAGE_VERSION#" "@REV_VERSION@" CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}") + +if (CPACK_BUNDLE_PLIST_SOURCE) + # Rewrite the Info.plist.in to contain the correct version + file(READ ${CPACK_BUNDLE_PLIST_SOURCE} INFO_PLIST_CONTENT) + string(REPLACE "#CPACK_PACKAGE_VERSION#" "@REV_VERSION@" INFO_PLIST_CONTENT "${INFO_PLIST_CONTENT}") + file(WRITE ${CPACK_BUNDLE_PLIST} "${INFO_PLIST_CONTENT}") +endif (CPACK_BUNDLE_PLIST_SOURCE) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake new file mode 100644 index 0000000000..d23fa92b7c --- /dev/null +++ b/cmake/InstallAndPackage.cmake @@ -0,0 +1,109 @@ +# If requested, use FHS layout; otherwise fall back to a flat layout. +if (OPTION_INSTALL_FHS) + set(BINARY_DESTINATION_DIR "bin") + set(DATA_DESTINATION_DIR "share/games/openttd") + set(DOCS_DESTINATION_DIR "share/doc/openttd") + set(MAN_DESTINATION_DIR "share/man/openttd") +else (OPTION_INSTALL_FHS) + set(BINARY_DESTINATION_DIR ".") + set(DATA_DESTINATION_DIR ".") + set(DOCS_DESTINATION_DIR ".") + set(MAN_DESTINATION_DIR ".") +endif (OPTION_INSTALL_FHS) + +install(TARGETS openttd + RUNTIME + DESTINATION ${BINARY_DESTINATION_DIR} + COMPONENT Runtime + ) + +install(DIRECTORY + ${CMAKE_BINARY_DIR}/lang + ${CMAKE_BINARY_DIR}/baseset + ${CMAKE_SOURCE_DIR}/bin/ai + ${CMAKE_SOURCE_DIR}/bin/game + ${CMAKE_SOURCE_DIR}/bin/scripts + DESTINATION ${DATA_DESTINATION_DIR} + COMPONENT language_files) + +install(FILES + ${CMAKE_SOURCE_DIR}/COPYING.md + ${CMAKE_SOURCE_DIR}/README.md + ${CMAKE_SOURCE_DIR}/changelog.txt + ${CMAKE_SOURCE_DIR}/docs/multiplayer.md + ${CMAKE_SOURCE_DIR}/known-bugs.txt + DESTINATION ${DOCS_DESTINATION_DIR} + COMPONENT docs) + +# A Linux manual only makes sense when using FHS. Otherwise it is a very odd +# file with little context to what it is. +if (OPTION_INSTALL_FHS) + install(FILES + ${CMAKE_SOURCE_DIR}/docs/openttd.6 + DESTINATION ${MAN_DESTINATION_DIR} + COMPONENT manual) +endif (OPTION_INSTALL_FHS) + +# TODO -- Media files +# TODO -- Menu files + +if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(ARCHITECTURE "amd64") +else (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" ARCHITECTURE) +endif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + +# Windows is a bit more annoying to detect; using the size of void pointer +# seems to be the most robust. +if (WIN32) + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCHITECTURE "win64") + else (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCHITECTURE "win32") + endif (CMAKE_SIZEOF_VOID_P EQUAL 8) +endif (WIN32) + +set(CPACK_SYSTEM_NAME "${ARCHITECTURE}") + +set(CPACK_PACKAGE_NAME "openttd") +set(CPACK_PACKAGE_VENDOR "OpenTTD") +set(CPACK_PACKAGE_DESCRIPTION "OpenTTD") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenTTD") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.openttd.org/") +set(CPACK_PACKAGE_CONTACT "OpenTTD ") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "OpenTTD") +set(CPACK_PACKAGE_CHECKSUM "SHA256") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.md") +set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") +set(CPACK_MONOLITHIC_INSTALL YES) +set(CPACK_PACKAGE_EXECUTABLES "openttd;OpenTTD") +set(CPACK_STRIP_FILES YES) +set(CPACK_OUTPUT_FILE_PREFIX "bundles") + +if (APPLE) + set(CPACK_GENERATOR "Bundle") + include(PackageBundle) + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx") +elseif (WIN32) + set(CPACK_GENERATOR "ZIP;NSIS") + include(PackageNSIS) + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-windows-${CPACK_SYSTEM_NAME}") +elseif (UNIX) + # With FHS, we can create deb/rpm/... Without it, they would be horribly broken + # and not work. The other way around is also true; with FHS they are not + # usable, and only flat formats work. + if (OPTION_INSTALL_FHS) + set(CPACK_GENERATOR "DEB") + include(PackageDeb) + else (OPTION_INSTALL_FHS) + set(CPACK_GENERATOR "TXZ") + endif (OPTION_INSTALL_FHS) + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${CPACK_SYSTEM_NAME}") +else () + message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.") +endif () + +include(CPack) diff --git a/cmake/PackageBundle.cmake b/cmake/PackageBundle.cmake new file mode 100644 index 0000000000..6d0085a32a --- /dev/null +++ b/cmake/PackageBundle.cmake @@ -0,0 +1,24 @@ +string(TIMESTAMP CURRENT_YEAR "%Y") + +set(CPACK_BUNDLE_NAME "OpenTTD") +set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/os/macosx/openttd.icns") +set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") +set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/os/macosx/launch.sh") +set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/os/macosx/splash.png") + +# Create a temporary Info.plist.in, where we will fill in the version via +# CPackProperties.cmake.in. This because at this point in time the version +# is not yet known. +configure_file("${CMAKE_SOURCE_DIR}/os/macosx/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist.in") +set(CPACK_BUNDLE_PLIST_SOURCE "${CMAKE_CURRENT_BINARY_DIR}/Info.plist.in") + +# Delay fixup_bundle() till the install step; this makes sure all executables +# exists and it can do its job. +install( + CODE + " + include(BundleUtilities) + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/openttd\" \"\" \"\") + " + DESTINATION . + COMPONENT Runtime) diff --git a/cmake/PackageDeb.cmake b/cmake/PackageDeb.cmake new file mode 100644 index 0000000000..0d635ebcb3 --- /dev/null +++ b/cmake/PackageDeb.cmake @@ -0,0 +1,4 @@ +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${ARCHITECTURE}") +set(CPACK_DEBIAN_PACKAGE_SECTION "games") +# TODO -- Fix depends +set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.15)") diff --git a/cmake/PackageNSIS.cmake b/cmake/PackageNSIS.cmake new file mode 100644 index 0000000000..1af38271f5 --- /dev/null +++ b/cmake/PackageNSIS.cmake @@ -0,0 +1,39 @@ +set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) +set(CPACK_NSIS_HELP_LINK "${CPACK_PACKAGE_HOMEPAGE_URL}") +set(CPACK_NSIS_URL_INFO_ABOUT "${CPACK_PACKAGE_HOMEPAGE_URL}") +set(CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}") + +# NSIS uses this for the icon in the top left of the installer +set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/os/windows\\\\nsis-top.bmp") + +# Set other icons and bitmaps for NSIS +set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/os/windows\\\\openttd.ico") +set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/os/windows\\\\openttd.ico") +set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/os/windows\\\\nsis-welcome.bmp") +set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/os/windows\\\\nsis-welcome.bmp") + +# Use the icon of the application +set(CPACK_NSIS_INSTALLED_ICON_NAME "openttd.exe") +# Tell NSIS the binary will be in the root +set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") + +# Add detail information on the NSIS installer executable. CPack doesn't +# support this out of the box, so we use CPACK_NSIS_DEFINES for this. + +# \\\ are needed, because this value is generated in another CPack file, +# which is used. So one \ is to escape here, the second to escape in the +# CPack file, which we have to escape here (hence: 3 \). +set(CPACK_NSIS_DEFINES " +; Version Info +Var AddWinPrePopulate +VIProductVersion \\\"0.0.0.0\\\" +VIAddVersionKey \\\"ProductName\\\" \\\"OpenTTD Installer for Windows\\\" +VIAddVersionKey \\\"Comments\\\" \\\"Installs OpenTTD \\\${VERSION}\\\" +VIAddVersionKey \\\"CompanyName\\\" \\\"OpenTTD Developers\\\" +VIAddVersionKey \\\"FileDescription\\\" \\\"Installs OpenTTD \\\${VERSION}\\\" +VIAddVersionKey \\\"ProductVersion\\\" \\\"\\\${VERSION}\\\" +VIAddVersionKey \\\"InternalName\\\" \\\"InstOpenTTD\\\" +VIAddVersionKey \\\"FileVersion\\\" \\\"0.0.0.0\\\" +VIAddVersionKey \\\"LegalCopyright\\\" \\\" \\\" +" +) diff --git a/os/debian/NEWS b/os/debian/NEWS deleted file mode 100644 index 2a5c811019..0000000000 --- a/os/debian/NEWS +++ /dev/null @@ -1,25 +0,0 @@ -openttd (1.0.0~rc3-2) unstable; urgency=low - - The openttd package has been moved from contrib into main. Since the - OpenGFX free graphics set has been packaged for Debian, one can now run - OpenTTD without needing any of the resources from the original game - (though the original resources are still supported). - - -- Matthijs Kooijman Thu, 18 Mar 2010 13:09:35 +0100 - -openttd (0.7.0-1) unstable; urgency=low - - Handling of AI players has changed in 0.7.0. This package no longer - contains any AI players, so playing against the computer is not possible - out of the box any longer. However, you can easily download AI players - through the new "Content Downloading Service", after which playing with - computer players is possible. - - Loading old savegames with computer players is supported (AI players will - be converted according to the current AI settings), but at this moment - there are no AIs that completely handle any existing infrastructure built - by the old AI, so starting a new game might be more fun (especially since - most of the new AIs are a lot less erratic). - - -- Matthijs Kooijman Mon, 13 Apr 2009 15:11:20 +0200 - diff --git a/os/debian/README.Debian b/os/debian/README.Debian deleted file mode 100644 index e7b4bdb135..0000000000 --- a/os/debian/README.Debian +++ /dev/null @@ -1,41 +0,0 @@ -OpenTTD for Debian ------------------- - -To properly play this game, you need a base graphics and sound set. -Currently, the graphics, sound and music files from the original -Transport Tycoon Deluxe game (Windows and DOS versions) are supported, -as well as the free graphics replacement set "OpenGFX", sound -replacement set "OpenSFX" (which is in non-free due to a restrictive -license) and the free music replacement set "OpenMSX". - -Normally, installing the openttd package should automatically install -openttd-opengfx as well, allowing OpenTTD to run out of the box. If you -want sound, you'll have to enable non-free sources and install the -openttd-opensfx package manually (or install the original Transport -Tyccon Deluxe sound files). - -The easiest way to install the OpenMSX music files is to use the in-game -content download system, which should offer the latest version of the -music files. - -To find out how to install the original Transport Tycoon Deluxe graphics -sound files and music files, see readme.txt, section 4.1. - --Playing Music - In addition to installing a music set (see above), you'll also need - to install the timidity midi player, available in the timidity - package. - - Remember that not all audio devices support multiple audiostreams - (music and sound), so you might have to use alsa software mixing or - pulseaudio. - --Scenarios - There are no scenarios included in this release. Scenarios can be - downloaded using OpenTTD's content service, which is available from - OpenTTD's main menu. If you have obtained a scenario through other - means, you can place it either in your ~/.openttd/scenario directory - or in the system-wide /usr/share/games/openttd/scenario directory. - - -- Matthijs Kooijman Mon, 01 Feb 2010 10:42:11 +0100 - diff --git a/os/debian/changelog b/os/debian/changelog deleted file mode 100644 index 6b24aaa7d5..0000000000 --- a/os/debian/changelog +++ /dev/null @@ -1,1087 +0,0 @@ -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 - - -- OpenTTD Tue, 29 Oct 2019 00:00:00 +0000 - -openttd (1.9.3-0) unstable; urgency=low - - * New upstream release 1.9.3 - - -- OpenTTD Mon, 16 Sep 2019 21:00:00 +0200 - -openttd (1.9.3~RC1-0) unstable; urgency=low - - * New upstream release 1.9.3-RC1 - -- OpenTTD Sat, 07 Sep 2019 23:30:00 +0200 - -openttd (1.9.2-0) unstable; urgency=low - - * New upstream release 1.9.2 - - -- OpenTTD Sun, 07 Jul 2019 23:00:00 +0200 - -openttd (1.9.1-0) unstable; urgency=low - - * New upstream release 1.9.1 - - -- OpenTTD Mon, 08 Apr 2019 20:00:00 +0100 - -openttd (1.9.0-0) unstable; urgency=low - - * New upstream release 1.9.0 - - -- OpenTTD Mon, 01 Apr 2019 00:00:00 +0200 - -openttd (1.9.0~RC2-0) unstable; urgency=low - - * New upstream release 1.9.0-RC2 - - -- OpenTTD Sun, 24 Mar 2019 23:00:00 +0000 - -openttd (1.9.0~RC1-0) unstable; urgency=low - - * New upstream release 1.9.0-RC1 - - -- OpenTTD Sun, 3 Mar 2019 23:00:00 +0000 - -openttd (1.9.0~beta3-0) unstable; urgency=low - - * New upstream release 1.9.0-beta3 - - -- OpenTTD Sun, 24 Feb 2019 23:00:00 +0000 - -openttd (1.9.0~beta2-0) unstable; urgency=low - - * New upstream release 1.9.0-beta2 - - -- OpenTTD Sat, 09 Feb 2019 23:00:00 +0000 - -openttd (1.9.0~beta1-0) unstable; urgency=low - - * New upstream release 1.9.0-beta1 - - -- OpenTTD Sat, 09 Feb 2019 16:00:00 +0000 - -openttd (1.8.0-0) unstable; urgency=low - - * New upstream release 1.8.0 - - -- OpenTTD Sun, 01 Apr 2018 14:00:00 +0200 - -openttd (1.8.0~RC1-0) unstable; urgency=low - - * New upstream release 1.8.0-RC1 - - -- OpenTTD Wed, 21 Mar 2018 21:00:00 +0100 - -openttd (1.7.2-0) unstable; urgency=low - - * New upstream release 1.7.2 - - -- OpenTTD Sun, 24 Dec 2017 14:00:00 +0100 - -openttd (1.7.2~RC1-0) unstable; urgency=low - - * New upstream release 1.7.2-RC1 - - -- OpenTTD Mon, 11 Dec 2017 21:30:00 +0100 - -openttd (1.7.1-0) unstable; urgency=low - - * New upstream release 1.7.1 - - -- OpenTTD Tue, 13 Jun 2017 21:00:00 +0200 - -openttd (1.7.1~RC1-0) unstable; urgency=low - - * New upstream release 1.7.1-RC1 - - -- OpenTTD Thu, 04 Mai 2017 21:00:00 +0200 - -openttd (1.7.0-0) unstable; urgency=low - - * New upstream release 1.7.0 - - -- OpenTTD Sat, 01 Apr 2017 19:00:00 +0200 - -openttd (1.7.0~RC1-0) unstable; urgency=low - - * New upstream release 1.7.0-RC1 - - -- OpenTTD Sat, 11 Mar 2017 22:30:00 +0100 - -openttd (1.6.1-0) unstable; urgency=low - - * New upstream release 1.6.1 - - -- OpenTTD Fri, 01 Jul 2016 00:00:00 +0200 - -openttd (1.6.1~RC1-0) unstable; urgency=low - - * New upstream release 1.6.1-RC1 - - -- OpenTTD Wed, 01 Jun 2016 21:00:00 +0200 - -openttd (1.6.0-0) unstable; urgency=low - - * New upstream release 1.6.0 - - -- OpenTTD Fri, 01 Apr 2016 21:00:00 +0200 - -openttd (1.6.0~RC1-0) unstable; urgency=low - - * New upstream release 1.6.0-RC1 - - -- OpenTTD Tue, 01 Mar 2016 21:00:00 +0100 - -openttd (1.5.3-0) unstable; urgency=low - - * New upstream release 1.5.3 - - -- OpenTTD Tue, 01 Dec 2015 21:00:00 +0100 - -openttd (1.5.3~RC1-0) unstable; urgency=low - - * New upstream release 1.5.3-RC1 - - -- OpenTTD Sun, 01 Nov 2015 14:00:00 +0100 - -openttd (1.5.2-0) unstable; urgency=low - - * New upstream release 1.5.2 - - -- OpenTTD Tue, 01 Sep 2015 21:00:00 +0200 - -openttd (1.5.2~RC1-0) unstable; urgency=low - - * New upstream release 1.5.2-RC1 - - -- OpenTTD Sat, 01 Aug 2015 13:00:00 +0200 - -openttd (1.5.1-0) unstable; urgency=low - - * New upstream release 1.5.1 - - -- OpenTTD Mon, 01 Jun 2015 21:00:00 +0200 - -openttd (1.5.1~RC1-0) unstable; urgency=low - - * New upstream release 1.5.1-RC1 - - -- OpenTTD Fri, 08 May 2015 21:00:00 +0200 - -openttd (1.5.0-0) unstable; urgency=low - - * New upstream release 1.5.0 - - -- OpenTTD Wed, 01 Apr 2015 21:00:00 +0200 - -openttd (1.5.0~RC1-0) unstable; urgency=low - - * New upstream release 1.5.0-RC1 - - -- OpenTTD Wed, 18 Mar 2015 21:00:00 +0100 - -openttd (1.5.0~beta2-0) unstable; urgency=low - - * New upstream release 1.5.0-beta2 - - -- OpenTTD Tue, 24 Feb 2015 21:00:00 +0100 - -openttd (1.5.0~beta1-0) unstable; urgency=low - - * New upstream release 1.5.0-beta1 - - -- OpenTTD Wed, 24 Dec 2014 21:00:00 +0100 - -openttd (1.4.4-0) unstable; urgency=low - - * New upstream release 1.4.4 - - -- OpenTTD Tue, 21 Oct 2014 21:00:00 +0200 - -openttd (1.4.4~RC1-0) unstable; urgency=low - - * New upstream release 1.4.4-RC1 - - -- OpenTTD Wed, 08 Oct 2014 19:00:00 +0200 - -openttd (1.4.3-0) unstable; urgency=low - - * New upstream release 1.4.3 - - -- OpenTTD Tue, 23 Sep 2014 21:00:00 +0200 - -openttd (1.4.3~RC2-0) unstable; urgency=low - - * New upstream release 1.4.3-RC2 - - -- OpenTTD Sun, 14 Sep 2014 19:00:00 +0200 - -openttd (1.4.3~RC1-0) unstable; urgency=low - - * New upstream release 1.4.3-RC1 - - -- OpenTTD Sun, 07 Sep 2014 19:00:00 +0200 - -openttd (1.4.2-0) unstable; urgency=low - - * New upstream release 1.4.2 - - -- OpenTTD Sat, 16 Aug 2014 21:00:00 +0200 - -openttd (1.4.2~RC2-0) unstable; urgency=low - - * New upstream release 1.4.2-RC2 - - -- OpenTTD Sun, 03 Aug 2014 18:00:00 +0200 - -openttd (1.4.2~RC1-0) unstable; urgency=low - - * New upstream release 1.4.2-RC1 - - -- OpenTTD Thu, 03 Jul 2014 21:00:00 +0200 - -openttd (1.4.1-0) unstable; urgency=low - - * New upstream release 1.4.1 - - -- OpenTTD Mon, 02 Jun 2014 21:00:00 +0200 - -openttd (1.4.1~RC2-0) unstable; urgency=low - - * New upstream release 1.4.1-RC2 - - -- OpenTTD Sun, 18 May 2014 21:00:00 +0200 - -openttd (1.4.1~RC1-0) unstable; urgency=low - - * New upstream release 1.4.1-RC1 - - -- OpenTTD Sun, 04 May 2014 21:00:00 +0200 - -openttd (1.4.0-0) unstable; urgency=low - - * New upstream release 1.4.0 - - -- OpenTTD Tue, 01 Apr 2014 21:00:00 +0200 - -openttd (1.4.0~RC1-0) unstable; urgency=low - - * New upstream release 1.4.0-RC1 - - -- OpenTTD Tue, 17 Mar 2014 21:00:00 +0100 - -openttd (1.4.0~beta5-0) unstable; urgency=low - - * New upstream release 1.4.0-beta5 - - -- OpenTTD Tue, 25 Feb 2014 10:15:00 +0100 - -openttd (1.4.0~beta4-0) unstable; urgency=low - - * New upstream release 1.4.0-beta4 - - -- OpenTTD Thu, 06 Feb 2014 21:00:00 +0100 - -openttd (1.4.0~beta3-0) unstable; urgency=low - - * New upstream release 1.4.0-beta3 - - -- OpenTTD Tue, 21 Jan 2014 21:00:00 +0100 - -openttd (1.4.0~beta2-0) unstable; urgency=low - - * New upstream release 1.4.0-beta2 - - -- OpenTTD Tue, 07 Jan 2014 21:00:00 +0100 - -openttd (1.4.0~beta1-0) unstable; urgency=low - - * New upstream release 1.4.0-beta1 - - -- OpenTTD Tue, 24 Dec 2013 00:00:00 +0100 - -openttd (1.3.3-0) unstable; urgency=low - - * New upstream release 1.3.3 - - -- OpenTTD Fri, 29 Nov 2013 19:00:00 +0100 - -openttd (1.3.3~RC2-0) unstable; urgency=low - - * New upstream release 1.3.3-RC2 - - -- OpenTTD Sun, 24 Nov 2013 19:00:00 +0100 - -openttd (1.3.3~RC1-0) unstable; urgency=low - - * New upstream release 1.3.3-RC1 - - -- OpenTTD Sun, 17 Nov 2013 19:00:00 +0100 - -openttd (1.3.2-0) unstable; urgency=low - - * New upstream release 1.3.2 - - -- OpenTTD Sat, 27 Jul 2013 18:00:00 +0200 - -openttd (1.3.2~RC2-0) unstable; urgency=low - - * New upstream release 1.3.2-RC2 - - -- OpenTTD Sat, 13 Jul 2013 12:00:00 +0200 - -openttd (1.3.2~RC1-0) unstable; urgency=low - - * New upstream release 1.3.2-RC1 - - -- OpenTTD Sun, 30 Jun 2013 12:00:00 +0200 - -openttd (1.3.1-0) unstable; urgency=low - - * New upstream release 1.3.1 - - -- OpenTTD Sat, 01 Jun 2013 00:00:00 +0300 - -openttd (1.3.1~RC1-0) unstable; urgency=low - - * New upstream release 1.3.1-RC1 - - -- OpenTTD Fri, 17 May 2013 22:00:00 +0200 - -openttd (1.3.0-0) unstable; urgency=low - - * New upstream release 1.3.0 - - -- OpenTTD Mon, 01 Apr 2013 00:00:00 +0200 - -openttd (1.3.0~RC3) unstable; urgency=low - - * New upstream release 1.3.0-RC3 - - -- OpenTTD Mon, 18 Mar 2013 00:00:00 +0100 - -openttd (1.3.0~RC2) unstable; urgency=low - - * New upstream release 1.3.0-RC2 - - -- OpenTTD Tue, 05 Mar 2013 00:00:00 +0100 - -openttd (1.3.0~RC1) unstable; urgency=low - - * New upstream release 1.3.0-RC1 - - -- OpenTTD Tue, 19 Feb 2013 00:00:00 +0100 - -openttd (1.3.0~beta2) unstable; urgency=low - - * New upstream release 1.3.0-beta2 - - -- OpenTTD Thu, 07 Feb 2013 00:00:00 +0100 - -openttd (1.3.0~beta1) unstable; urgency=low - - * New upstream release 1.3.0-beta1 - - -- OpenTTD Mon, 24 Dec 2012 00:00:00 +0100 - -openttd (1.2.3) unstable; urgency=low - - * New upstream release 1.2.3 - - -- OpenTTD Thu, 01 Nov 2012 00:00:00 +0200 - -openttd (1.2.3~RC1) unstable; urgency=low - - * New upstream release 1.2.3-RC1 - - -- OpenTTD Wed, 17 Oct 2012 00:00:00 +0200 - -openttd (1.2.2) unstable; urgency=low - - * New upstream release 1.2.2 - - -- OpenTTD Thu, 16 Aug 2012 20:00:00 +0200 - -openttd (1.2.2~RC1) unstable; urgency=low - - * New upstream release 1.2.2-RC1 - - -- OpenTTD Wed, 01 Aug 2012 00:00:00 +0200 - -openttd (1.2.1) unstable; urgency=low - - * New upstream release 1.2.1 - - -- OpenTTD Fri, 01 Jun 2012 00:00:00 +0200 - -openttd (1.2.1~RC1) unstable; urgency=low - - * New upstream release 1.2.1-RC1 - - -- OpenTTD Wed, 16 Apr 2012 22:00:00 +0200 - -openttd (1.2.0) unstable; urgency=low - - * New upstream release 1.2.0 - - -- OpenTTD Sun, 15 Apr 2012 14:00:00 +0200 - -openttd (1.2.0~RC4) unstable; urgency=low - - * New upstream release 1.2.0-RC4 - - -- OpenTTD Sun, 01 Apr 2012 00:00:00 +0200 - -openttd (1.2.0~RC3) unstable; urgency=low - - * New upstream release 1.2.0-RC3 - - -- OpenTTD Sun, 18 Mar 2012 18:00:00 +0100 - -openttd (1.2.0~RC2) unstable; urgency=low - - * New upstream release 1.2.0-RC2 - - -- OpenTTD Sun, 04 Mar 2012 18:00:00 +0100 - -openttd (1.2.0~RC1) unstable; urgency=low - - * New upstream release 1.2.0-RC1 - - -- OpenTTD Sun, 19 Feb 2012 23:00:00 +0100 - -openttd (1.2.0~beta4) unstable; urgency=low - - * New upstream release 1.2.0-beta4 - - -- OpenTTD Sat, 04 Feb 2012 16:00:00 +0100 - -openttd (1.2.0~beta3) unstable; urgency=low - - * New upstream release 1.2.0-beta3 - - -- OpenTTD Sat, 21 Jan 2012 16:00:00 +0100 - -openttd (1.2.0~beta2) unstable; urgency=low - - * New upstream release 1.2.0-beta2 - - -- OpenTTD Sat, 07 Jan 2012 00:00:00 +0100 - -openttd (1.2.0~beta1) unstable; urgency=low - - * New upstream release 1.2.0-beta1 - - -- OpenTTD Sat, 24 Dec 2011 00:00:00 +0100 - -openttd (1.1.4) unstable; urgency=low - - * New upstream release 1.1.4 - - -- OpenTTD Mon, 05 Dec 2011 00:00:00 +0400 - -openttd (1.1.4-RC1) unstable; urgency=low - - * New upstream release 1.1.4-RC1 - - -- OpenTTD Sun, 20 Nov 2011 17:00:00 +0100 - -openttd (1.1.3) unstable; urgency=low - - * New upstream release 1.1.3 - - -- OpenTTD Thu, 15 Sep 2011 21:00:00 +0200 - -openttd (1.1.3-RC1) unstable; urgency=low - - * New upstream release 1.1.3-RC1 - - -- OpenTTD Sun, 04 Sep 2011 17:00:00 +0200 - -openttd (1.1.2) unstable; urgency=low - - * New upstream release 1.1.2 - - -- OpenTTD Sun, 14 Aug 2011 17:00:00 +0200 - -openttd (1.1.2~RC2) unstable; urgency=low - - * New upstream release 1.1.2-RC2 - - -- OpenTTD Sat, 30 Jul 2011 21:00:00 +0200 - -openttd (1.1.2~RC1) unstable; urgency=low - - * New upstream release 1.1.2-RC1 - - -- OpenTTD Sun, 24 Jul 2011 21:00:00 +0200 - -openttd (1.1.1) unstable; urgency=low - - * New upstream release 1.1.1 - - -- OpenTTD Wed, 01 Jun 2011 00:00:00 +0200 - -openttd (1.1.1~RC1) unstable; urgency=low - - * New upstream release 1.1.1-RC1 - - -- OpenTTD Sun, 15 May 2011 21:00:00 +0200 - -openttd (1.1.0) unstable; urgency=low - - * New upstream release 1.1.0 - - -- OpenTTD Fri, 01 Apr 2011 00:00:00 +0100 - -openttd (1.1.0~RC3) unstable; urgency=low - - * New upstream release 1.1.0-RC3 - - -- OpenTTD Fri, 18 Mar 2011 22:00:00 +0100 - -openttd (1.1.0~RC2) unstable; urgency=low - - * New upstream release 1.1.0-RC2 - - -- OpenTTD Fri, 04 Mar 2011 22:00:00 +0100 - -openttd (1.1.0~RC1) unstable; urgency=low - - * New upstream release 1.1.0-RC1 - - -- OpenTTD Fri, 18 Feb 2011 22:00:00 +0100 - -openttd (1.1.0~beta5) unstable; urgency=low - - * New upstream release 1.1.0-beta5 - - -- OpenTTD Fri, 04 Feb 2011 22:00:00 +0100 - -openttd (1.1.0~beta4) unstable; urgency=low - - * New upstream release 1.1.0-beta4 - - -- OpenTTD Fri, 21 Jan 2011 00:00:00 +0100 - -openttd (1.1.0~beta3) unstable; urgency=low - - * New upstream release 1.1.0-beta3 - - -- OpenTTD Sun, 09 Jan 2011 18:00:00 +0100 - -openttd (1.1.0~beta2) unstable; urgency=low - - * New upstream release 1.1.0-beta2 - - -- OpenTTD Fri, 31 Dec 2010 18:00:00 +0100 - -openttd (1.1.0~beta1) unstable; urgency=low - - * New upstream release 1.1.0-beta1 - - -- OpenTTD Fri, 24 Dec 2010 00:00:00 +0100 - -openttd (1.0.5-0) unstable; urgency=low - - * New upstream release 1.0.5 - - -- OpenTTD Sat, 20 Nov 2010 21:00:00 +0000 - -openttd (1.0.5~rc2-0) unstable; urgency=low - - * New upstream release 1.0.5~rc2 - - -- OpenTTD Sun, 14 Nov 2010 15:00:00 +0000 - -openttd (1.0.5~rc1-0) unstable; urgency=low - - * New upstream release 1.0.5-RC1 - - -- OpenTTD Sun, 31 Oct 2010 15:00:00 +0000 - -openttd (1.0.4-0) unstable; urgency=low - - * New upstream release 1.0.4 - - -- OpenTTD Tue, 14 Sep 2010 20:00:00 +0000 - -openttd (1.0.4~rc1-0) unstable; urgency=low - - * New upstream release 1.0.4-RC1 - - -- OpenTTD Mon, 30 Aug 2010 20:00:00 +0000 - -openttd (1.0.3-0) unstable; urgency=low - - * New upstream release 1.0.3 - - -- OpenTTD Sun, 01 Aug 2010 00:00:00 +0000 - -openttd (1.0.3~rc1-0) unstable; urgency=low - - * New upstream release 1.0.3-RC1 - - -- OpenTTD Sat, 05 Jul 2010 17:37:21 +0000 - -openttd (1.0.2-0) unstable; urgency=low - - * New upstream release 1.0.2 - - -- OpenTTD Sat, 19 Jun 2010 18:36:21 +0000 - -openttd (1.0.2~rc1-0) unstable; urgency=low - - * New upstream release 1.0.2-RC1 - - -- OpenTTD Sat, 05 Jun 2010 23:36:21 +0000 - -openttd (1.0.1-0) unstable; urgency=low - - * New upstream release 1.0.1 - - -- OpenTTD Sat, 01 May 2010 00:00:00 +0200 - -openttd (1.0.1~rc2-0) unstable; urgency=low - - * New upstream release 1.0.1-RC2 - - -- OpenTTD Wed, 21 Apr 2010 21:36:21 +0200 - -openttd (1.0.1~rc1-0) unstable; urgency=low - - * New upstream release 1.0.1-RC1 - - -- OpenTTD Sat, 17 Apr 2010 23:36:21 +0000 - -openttd (1.0.0-1) unstable; urgency=low - - * [30a2162] New upstream release 1.0.0. (Closes: #570104) - * [102698a] Make openttd-wrapper work with older mktemp versions. - - -- Matthijs Kooijman Fri, 02 Apr 2010 23:36:21 +0200 - -openttd (1.0.0~rc3-2) unstable; urgency=low - - * [279c5ef] Recommend openttd-opengfx and suggest openttd-opensfx. - * [9330ad7] Update README.Debian concerning music files. - * [07bde24] Move openttd from contrib to main. (Closes: #560810) - - -- Matthijs Kooijman Thu, 18 Mar 2010 13:16:32 +0100 - -openttd (1.0.0~rc3-1) unstable; urgency=low - - * [412d153] New upstream release 1.0.0~rc3. - - -- Matthijs Kooijman Thu, 18 Mar 2010 10:09:33 +0100 - -openttd (1.0.0~rc2-1) unstable; urgency=low - - * [9c99af4] New upstream release 1.0.0~rc2. - - -- Matthijs Kooijman Thu, 04 Mar 2010 12:22:28 +0100 - -openttd (1.0.0~rc1-1) unstable; urgency=low - - * [fe4eb51] New upstream release 1.0.0~rc1. - * [6aa2be0] Note that the embedded md5 implementation has a different - license. - * [39eb336] Remove lintian override for empty gm directory. - - -- Matthijs Kooijman Fri, 19 Feb 2010 13:00:53 +0100 - -openttd (1.0.0~beta4-1) unstable; urgency=low - - * [6718224] New upstream release 1.0.0~beta4. - * [7b0fa8d] Remove some more docs that we don't want in the package. - * [bb9d744] Use liblzo2 instead of an embedded minilzo version. - * [949c06b] Explicitly disable iconv support. - - -- Matthijs Kooijman Fri, 19 Feb 2010 12:59:27 +0100 - -openttd (0.7.5-4) unstable; urgency=low - - * [174d0b1] Don't use deprecated < in Replaces. - - -- Matthijs Kooijman Mon, 15 Feb 2010 00:35:33 +0100 - -openttd (0.7.5-3) unstable; urgency=low - - * [d12fc5a] Make openttd-data replace openttd (< 0.7.5-2). - (Closes: #569679) - - -- Matthijs Kooijman Sun, 14 Feb 2010 16:56:31 +0100 - -openttd (0.7.5-2) unstable; urgency=low - - [ Matthijs Kooijman ] - * [fbab21d] Switch to source format 3.0 (quilt). - * [85c0c7d] No longer check for (and complain about missing) datafiles - on installation and upgrades. (Closes: #524651, 562574) - * [827eb61] Split the architecture independent data into openttd-data. - (Closes: #492462) - * [6fbd9c7] Update README.Debian. - * [76a5148] Support cross compilation. (Closes: #550951) - * [2005bf8] Simplify the rules file, make debhelper do more stuff. - * [fc0500e] Remove some configure arguments. - * [8ca38bb] Explicitly enable or disable all of the dependencies. - * [e38fb3e] Let the upstream Makefile install documentation. - * [5954fcf] Update the watch file to the new upstream url scheme. - * [7249594] Fix typo in copyright file. - * [660fb61] Bump the Standards-Version to 3.8.4, with no changes - required. - * [f94ab89] Move the packaging git repository to git.debian.org. - - -- Jordi Mallach Tue, 09 Feb 2010 21:40:24 +0100 - -openttd (0.7.5-1) unstable; urgency=high - - * [cdcb73a] Imported Upstream version 0.7.5. This release fixes - CVE-2009-4007. - - -- Matthijs Kooijman Thu, 24 Dec 2009 00:55:45 +0100 - -openttd (0.7.4-1) unstable; urgency=low - - * [a2c297b0] Imported Upstream version 0.7.4 - * [0232a645] Make Debian-specific patches executable. - * [76be04b] Switch the Debian packaging to git. - - -- Matthijs Kooijman Tue, 15 Dec 2009 22:11:52 +0100 - -openttd (0.7.3-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Use printf instead of echo -en in openttd-wrapper to make it POSIX - compatible (Closes: #547758). - * Remove three patches that are now included in upstream. - - -- Matthijs Kooijman Thu, 01 Oct 2009 22:52:59 +0200 - -openttd (0.7.2-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Bump Standards-Version to 3.8.3, with no changes required. - * Clean up the rules file a bit and add some lintian overrides. - * Explain why openttd is in contrib (Closes: #539381). - * Add the DM-Upload-Allowed control field. - * Re-add dpatch infrastructure. - * Fix the copyright file, since upstream only allows GPLv2, not later - versions. - * Add a section to the copyright file on the different license used by the - "Squirrel" programming language, which is shipped with OpenTTD since - 0.7.0. - * Backport upstream r17226, which removes the deprecated Encoding entry from - the .desktop file. - * Add a wrapper script for openttd, which captures any stderr output and - displays it when openttd returns an error code (Closes: #533557). - * Recommend x11-utils, since we use xmessage for displaying errors. Don't - depend on it, since openttd will still run fine without it, you just won't - see any errors. - * Backport upstream r17227 and r17229, which prevents terminal escape codes - from ending up in the captured error output. - * Backport upstream r17240, which improves stderr output when files are - missing or corrupt. - - -- Jordi Mallach Fri, 21 Aug 2009 15:27:26 +0200 - -openttd (0.7.1-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - * Link against libicu to enable right-to-left language support. - - -- Jordi Mallach Tue, 09 Jun 2009 21:46:28 +0200 - -openttd (0.7.0-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - * Remove Debian specific desktop file, upstream provides one now. - * Add debian/watch file. - - [ Jordi Mallach ] - * Bump Standards-Version to 3.8.1, with no changes required. - * Move to debhelper compat 7. Bump Build-Depends accordingly. - * Use dh_prep. - * Add "set -e" to config script. - * Remove a few extra doc files that get installed by upstream Makefile. - * Add more complete copyright information. - - -- Jordi Mallach Wed, 15 Apr 2009 18:22:10 +0200 - -openttd (0.6.3-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - - [ Jordi Mallach ] - * Add Spanish Debconf template translation, after fixing its corrupted - encoding (thanks, Germana Oliveira, closes: #499214). - - -- Jordi Mallach Thu, 02 Oct 2008 16:59:03 +0200 - -openttd (0.6.2-1) unstable; urgency=low - - * New upstream release. - - Fixes remote crash vulnerability CVE-2008-3547. Closes: #493714 - - -- Matthijs Kooijman Fri, 08 Aug 2008 11:07:05 +0200 - -openttd (0.6.2~rc2-1) experimental; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - - [ Jordi Mallach ] - * Fix typo in README.Debian (lintian). - * Remove dpatch build-dep and the empty debian/patches dir. - * Don't ignore possible "make distclean" errors. - - -- Jordi Mallach Sat, 26 Jul 2008 01:35:30 +0200 - -openttd (0.6.2~rc1-1) experimental; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - - -- Jordi Mallach Thu, 24 Jul 2008 16:09:57 +0200 - -openttd (0.6.1-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - * Remove no_install_personal.dpatch, it is included upstream now. - - -- Jordi Mallach Thu, 05 Jun 2008 00:47:36 +0200 - -openttd (0.6.0-2) unstable; urgency=low - - [ Jordi Mallach ] - * Rename XS-Vcs-* to the official Vcs-* fields. - - [ Matthijs Kooijman ] - * Don't install anything into ~ during make install, this prevented - successful builds on some architectures. Fix imported from upstream. - * Put the homepage in its own Homepage field instead of in the description. - * Bump Standards-Version to 3.7.3 - - -- Jordi Mallach Thu, 03 Apr 2008 00:07:10 +0200 - -openttd (0.6.0-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release: - - Adds note about font-configuration for non-latin languages. - Closes: #462604 - * Add .desktop file, provided by Andrea Colangelo. - Closes: #460073 - * Add Finnish Debconf translation, provided by Esko Arajärvi. - Closes: #456956 - - [ Jordi Mallach ] - * Fixes and improvements for the .desktop file according to the spec. - - -- Jordi Mallach Wed, 02 Apr 2008 14:04:40 +0200 - -openttd (0.5.3-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - - -- Jordi Mallach Tue, 18 Sep 2007 12:05:28 +0200 - -openttd (0.5.2-1) unstable; urgency=low - - [ Jordi Mallach ] - * New upstream release. - * Debconf translation updates: - - Catalan. - - [ Christian Perrier ] - * Debconf templates and debian/control reviewed by the debian-l10n- - english team as part of the Smith review project. - Closes: #422183, #419096. - * Debconf translation updates: - - Swedish. Closes: #422780 - - Basque. Closes: #422786 - - Czech. Closes: #422809 - - Galician. Closes: #422831 - - German. Closes: #422908 - - Tamil. Closes: #423079 - - Russian. Closes: #423224 - - Portuguese. Closes: #423413 - - French. Closes: #424436 - - Brazilian Portuguese. Closes: #425585 - - Dutch. Closes: #425707 - - -- Jordi Mallach Sat, 02 Jun 2007 06:24:34 +0200 - -openttd (0.5.1-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Add German and Swedish translations (Closes: #420258, #419097) - * Remove bogus fuzzy mark from the Catalan translation - - [ Jordi Mallach ] - * debian/control: add XS-Vcs-Svn and XS-Vcs-Browser fields. - - -- Jordi Mallach Mon, 23 Apr 2007 21:03:06 +0200 - -openttd (0.5.0-2) unstable; urgency=low - - * Upload to Debian. - - -- Jordi Mallach Sun, 11 Mar 2007 14:12:37 +0100 - -openttd (0.5.0-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - - [ Jordi Mallach ] - * Depend on ${misc:Depends}, not debconf directly. - - -- Jordi Mallach Thu, 8 Mar 2007 15:34:54 +0100 - -openttd (0.5.0~rc5-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Compile with freetype and fontconfig support. - - [ Jordi Mallach ] - * Convert debconf templates to podebconf. - * Add a Catalan translation. - * Minor packaging cleanups. - - -- Matthijs Kooijman Mon, 12 Feb 2007 09:25:41 +0100 - -openttd (0.5.0~rc4-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Thu, 18 Jan 2007 21:17:28 +0100 - -openttd (0.5.0~rc3-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Thu, 18 Jan 2007 20:21:04 +0100 - -openttd (0.5.0~rc2-1) unstable; urgency=low - - * New upstream release - * Removed fix for empty scenarios dir, openttd Makefile now properly handles - this. - - -- Matthijs Kooijman Sun, 31 Dec 2006 12:24:37 +0100 - -openttd (0.5.0~rc1-1) unstable; urgency=low - - * New upstream release. - - -- Matthijs Kooijman Fri, 22 Dec 2006 11:03:46 +0100 - -openttd (0.4.8-1) unstable; urgency=low - - * New upstream release - * Bump standards version to 3.7.2 - - -- Matthijs Kooijman Mon, 14 Aug 2006 16:28:50 +0200 - -openttd (0.4.7-1) unstable; urgency=low - - * New upstream release. - - -- Matthijs Kooijman Mon, 27 Mar 2006 23:40:00 +0200 - -openttd (0.4.6-1) unstable; urgency=low - - * New upstream release. - * Remove old terminal messages and make sure that debconf is always called. - - -- Matthijs Kooijman Wed, 8 Mar 2006 23:57:35 +0100 - -openttd (0.4.5-1) unstable; urgency=low - - * New upstream release - * Bump Standards-Version to 3.6.2 - * s/timdity/timidity/ in README.Debian. - * Use debconf for prompting instead of terminal. - * Fix makefile to create icon dir if necessary. - * Fix syntax error in manpage. - - -- Matthijs Kooijman Wed, 1 Feb 2006 01:56:39 +0100 - -openttd (0.4.0.1-5) unstable; urgency=low - - * Fixed capitalization of menu item. - * Install xpm icon to /usr/share/pixmaps and don't install png icon, since - it is not used. - - -- Matthijs Kooijman Thu, 22 Sep 2005 10:35:09 +0200 - -openttd (0.4.0.1-4) unstable; urgency=low - - * Changelog was distributed twice. - * Put openttd in contrib. - - -- Matthijs Kooijman Mon, 19 Sep 2005 23:49:18 +0200 - -openttd (0.4.0.1-3) unstable; urgency=low - - * Clarified installing instructions in README.Debian - - -- Matthijs Kooijman Thu, 16 Jun 2005 03:51:13 +0200 - -openttd (0.4.0.1-2) unstable; urgency=low - - * Added Suggests: timidity, freepats - - -- Matthijs Kooijman Thu, 16 Jun 2005 03:34:03 +0200 - -openttd (0.4.0.1-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Mon, 23 May 2005 13:04:24 +0200 - -openttd (0.4.0-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Mon, 16 May 2005 00:16:17 +0200 - -openttd (0.3.6-1) unstable; urgency=low - - * New upstream release - * Modified Makefile to install xpm icon and scenarios in /usr/share/games/openttd/ - * Added openttd.32.xpm, openttd.64.xpm was too big - - -- Matthijs Kooijman Tue, 25 Jan 2005 19:21:08 +0100 - -openttd (0.3.5-2) unstable; urgency=low - - * Fixed some lintian warnings. - * Added openttd.64.xpm (icon for menu). - - -- Matthijs Kooijman Mon, 27 Dec 2004 01:51:36 +0100 - -openttd (0.3.5-1) unstable; urgency=low - - * Initial Release. - - -- Matthijs Kooijman Fri, 24 Dec 2004 02:58:47 +0100 diff --git a/os/debian/compat b/os/debian/compat deleted file mode 100644 index 7f8f011eb7..0000000000 --- a/os/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/os/debian/control b/os/debian/control deleted file mode 100644 index 01b66cc494..0000000000 --- a/os/debian/control +++ /dev/null @@ -1,36 +0,0 @@ -Source: openttd -Section: games -Priority: optional -Maintainer: Matthijs Kooijman -Uploaders: Jordi Mallach -Build-Depends: debhelper (>= 7.0.50), libsdl2-dev, zlib1g-dev, libpng-dev, libfreetype6-dev, libfontconfig-dev, libicu-dev, liblzma-dev, liblzo2-dev -Standards-Version: 3.8.4 -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/openttd.git -Vcs-Git: git://anonscm.debian.org/collab-maint/openttd.git -Homepage: http://www.openttd.org/ - -Package: openttd -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Recommends: openttd-opengfx, x11-utils -Replaces: openttd-data -Conflicts: openttd-data -Suggests: openttd-opensfx, timidity, freepats -Description: reimplementation of Transport Tycoon Deluxe with enhancements - OpenTTD is a reimplementation of the Microprose game "Transport - Tycoon Deluxe" with lots of new features and enhancements. - . - OpenTTD is playable with the free graphics files from the openttd-opengfx - package and optional sound files from the openttd-opensfx package (which is in - non-free). Alternatively, OpenTTD can use the graphics files from the original - Transport Tycoon Deluxe game (See README.Debian on how to set this up). - -Package: openttd-dbg -Architecture: any -Section: debug -Priority: extra -Depends: openttd (= ${binary:Version}), ${misc:Depends} -Description: debugging symbols for openttd - This package contains the debugging symbols for OpenTTD, the reimplementation - of the Micropose game "Transport Tycoon Deluxe" with lots of new features and - enhancements. diff --git a/os/debian/copyright b/os/debian/copyright deleted file mode 100644 index 24d6d7052f..0000000000 --- a/os/debian/copyright +++ /dev/null @@ -1,106 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: OpenTTD -Upstream-Contact: info@openttd.org, #openttd on irc.oftc.net -Source: http://www.openttd.org - - -Files: * -Copyright: © 2004-2019 Ludvig Strigeous and others. -License: GPL-2.0 - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2.0 as - published by the Free Software Foundation; - . - This program 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 this package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - . - On Debian systems, the complete text of the GNU General Public License - version 2 can be found in `/usr/share/common-licenses/GPL-2'. - -Files: src/3rdparty/squirrel/* -Copyright: © 2003-2009 Alberto Demichelis -License: Zlib - -Files: src/3rdparty/md5/* -Copyright: © 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. -License: Zlib - - -License: Zlib - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - . - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - . - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software in - a product, an acknowledgment in the product documentation would be - appreciated but is not required. - . - 2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - . - 3. This notice may not be removed or altered from any source - distribution. - -Files: os/dos/exe2coff/* -Copyright: © 1998 DJ Delorie -License: GPL-2.0 with additional restrictions - This document is Copyright (C) DJ Delorie and may be distributed - verbatim, but changing it is not allowed. - . - Source code copyright DJ Delorie is distributed under the terms of the - GNU General Public Licence, with the following exceptions: - . - * Sources used to build crt0.o, gcrt0.o, libc.a, libdbg.a, and - libemu.a are distributed under the terms of the GNU Library General - Public License, rather than the GNU GPL. - . - * Any existing copyright or authorship information in any given source - file must remain intact. If you modify a source file, a notice to that - effect must be added to the authorship information in the source file. - . - * Runtime binaries, as provided by DJ in DJGPP, may be distributed - without sources ONLY if the recipient is given sufficient information - to obtain a copy of djgpp themselves. This primarily applies to - go32-v2.exe, emu387.dxe, and stubedit.exe. - . - * Runtime objects and libraries, as provided by DJ in DJGPP, when - linked into an application, may be distributed without sources ONLY - if the recipient is given sufficient information to obtain a copy of - djgpp themselves. This primarily applies to crt0.o and libc.a. - . - On Debian systems, the complete text of the GNU General Public License - version 2 can be found in `/usr/share/common-licenses/GPL-2'. -Comment: - Given only the exe2coff.c file is distributed in the source distribution (and - nothing in Debian binary distribution), it seems only the 2nd condition - applies. - -Files: os/dos/cwsdpmi/* -Source: http://homer.rice.edu/~sandmann/cwsdpmi/index.html -Copyright: © 1995-2000 Charles W Sandmann (sandmann@clio.rice.edu) -License: Custom binary-only license - This is release 5. The files in this binary distribution may be redistributed - under the GPL (with source) or without the source code provided: - . - * CWSDPMI.EXE or CWSDPR0.EXE are not modified in any way except via CWSPARAM. - . - * CWSDSTUB.EXE internal contents are not modified in any way except via - CWSPARAM or STUBEDIT. It may have a COFF image plus data appended to it. - . - * Notice to users that they have the right to receive the source code and/or - binary updates for CWSDPMI. Distributors should indicate a site for the - source in their documentation. -Comment: - Files are distributed as binary only, so the second option in the license - ("without source code provided: ...") is applicable. diff --git a/os/debian/gbp.conf b/os/debian/gbp.conf deleted file mode 100644 index 58b68d336b..0000000000 --- a/os/debian/gbp.conf +++ /dev/null @@ -1,13 +0,0 @@ -[DEFAULT] -# Use pristine-tar -pristine-tar = True - -[git-dch] -# We use metaheaders in commit messages. -meta = True -# Put git commit ids in the debian changelog. -id-length = 7 - -[git-import-orig] -# Use a custom commit message for upstream imports. -import-msg = New upstream release %(version)s. diff --git a/os/debian/menu b/os/debian/menu deleted file mode 100644 index 3afa6e08e8..0000000000 --- a/os/debian/menu +++ /dev/null @@ -1,2 +0,0 @@ -?package(openttd):needs="X11" section="Games/Simulation" title="OpenTTD"\ -command="/usr/games/openttd" icon="/usr/share/pixmaps/openttd.32.xpm" diff --git a/os/debian/openttd-wrapper b/os/debian/openttd-wrapper deleted file mode 100644 index 6f85f00b06..0000000000 --- a/os/debian/openttd-wrapper +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# This is a wrapper script that checks openttd's exit status and -# displays its stderr output - -# Get a file to capture stderr to. Use the deprecated -t option, so this -# works on the old mktemp from the mktemp package (which has been -# replaced by the version from the coreutils package). -TMPFILE=`mktemp -t openttd.errout.XXXXXXXXX` - -if [ ! -w "$TMPFILE" ]; then - xmessage "Could not create temporary file for error messages. Not starting OpenTTD." - exit 1; -fi - -# Capture stderr -openttd "$@" 2> "$TMPFILE" -ERRCODE=$? -if [ "$ERRCODE" -ne 0 ]; then - CODEMSG="OpenTTD returned with error code $ERRCODE." - if [ -s "$TMPFILE" ]; then - MESSAGE="$CODEMSG The following error messages were produced:\n\n" - printf "$MESSAGE" | cat - "$TMPFILE" | fold -s | xmessage -file - - else - xmessage "$CODEMSG No error messages were produced." - fi -fi - -rm -f "$TMPFILE" diff --git a/os/debian/patches/run-openttd-wrapper.patch b/os/debian/patches/run-openttd-wrapper.patch deleted file mode 100644 index ff8fc15aef..0000000000 --- a/os/debian/patches/run-openttd-wrapper.patch +++ /dev/null @@ -1,20 +0,0 @@ -From: Matthijs Kooijman -Subject: Use a wrapper script for running openttd - -The wrapper script captures stderr from openttd and displays this in -case of an error. This patch makes the the .desktop file call the -wrapper instead of the openttd binary directly. - -Index: media/openttd.desktop.in -=================================================================== ---- a/media/openttd.desktop.in (revision 20124) -+++ b/media/openttd.desktop.in (working copy) -@@ -5,7 +5,7 @@ - Version=1.1 - Name=!!MENU_NAME!! - Icon=openttd --Exec=!!TTD!! -+Exec=/usr/share/games/openttd/openttd-wrapper - Terminal=false - Categories=!!MENU_GROUP!! - Comment=A clone of Transport Tycoon Deluxe diff --git a/os/debian/patches/series b/os/debian/patches/series deleted file mode 100644 index f7cf2d9d58..0000000000 --- a/os/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -run-openttd-wrapper.patch diff --git a/os/debian/rules b/os/debian/rules deleted file mode 100755 index b5d67670bd..0000000000 --- a/os/debian/rules +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Makefile to build the openttd debian package. - -# Use debhelper default for all targets (but some are overridden below). -%: - dh --parallel $@ - -DEB_HOST_GNU_TYPE=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) -CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) -endif - -# This prevents linking uselessly to libicudata and silences a warning -# in the build process. -DEB_LDFLAGS_MAINT_APPEND="-Wl,-as-needed" - -# Enable all hardening options (since openttd offers a network-listening -# service that handles untrusted data). -DEB_BUILD_MAINT_OPTIONS=hardening=+all - -# Load buildflags (this uses dpkg-buildflags). Note that we don't export -# them, but instead pass them to ./configure explicitly. -include /usr/share/dpkg/buildflags.mk - -# Pass custom options to configure. Since it's not autoconf but a custom -# script, some of the option names are slightly different. We also need -# to be explicit about the dependencies, in case we're not running in a -# clean build root. -override_dh_auto_configure: - ./configure $(CROSS) --prefix-dir=/usr --install-dir=debian/openttd --without-allegro --with-zlib --with-sdl --with-png --with-freetype --with-fontconfig --with-icu-sort --with-liblzo2 --with-lzma --without-xdg-basedir --without-iconv --disable-strip CFLAGS="$(CFLAGS) $(CPPFLAGS)" CXXFLAGS="$(CXXFLAGS) $(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" CFLAGS_BUILD="$(CFLAGS) $(CPPFLAGS)" CXXFLAGS_BUILD="$(CXXFLAGS) $(CPPFLAGS)" LDFLAGS_BUILD="$(LDFLAGS)" - -# Do some extra installation -override_dh_auto_install: - $(MAKE) install DO_NOT_INSTALL_CHANGELOG=1 DO_NOT_INSTALL_LICENSE=1 - -# Don't do testing. Because the OpenTTD Makefile always does dependency -# generation (even on invalid targets), dh_auto_test thinks there is a -# "test" target, while there isn't. -override_dh_auto_test: - -# Call mrproper. Again, dh_auto_clean thinks there is a distclean -# target, while there isn't. -override_dh_auto_clean: - [ ! -f Makefile ] || $(MAKE) mrproper - -# We want to strip the debug informatiton into the -dbg package. -override_dh_strip: - dh_strip --dbg-package=openttd-dbg diff --git a/os/debian/source/format b/os/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/os/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/os/debian/watch b/os/debian/watch deleted file mode 100644 index 776381b9c2..0000000000 --- a/os/debian/watch +++ /dev/null @@ -1,5 +0,0 @@ -version=3 - -options=downloadurlmangle=s/(.*)\/index.html$/\1\/openttd-\1-source.tar.gz/ \ -http://master.binaries.openttd.org/releases/ \ -(\d+(?:\.\d+)*)/index.html diff --git a/os/macosx/Info.plist.in b/os/macosx/Info.plist.in new file mode 100644 index 0000000000..b3285589dd --- /dev/null +++ b/os/macosx/Info.plist.in @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + ${CPACK_BUNDLE_NAME} + CFBundleExecutable + ${CPACK_BUNDLE_NAME} + CFBundleGetInfoString + #CPACK_PACKAGE_VERSION#, Copyright 2004-${CURRENT_YEAR} The OpenTTD team + CFBundleIconFile + ${CPACK_BUNDLE_NAME}.icns + CFBundleIdentifier + org.openttd.openttd + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${CPACK_BUNDLE_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + #CPACK_PACKAGE_VERSION# + CFBundleVersion + #CPACK_PACKAGE_VERSION# + NSHumanReadableCopyright + Copyright 2004-${CURRENT_YEAR} The OpenTTD team + NSPrincipalClass + NSApplication + + diff --git a/os/macosx/launch.sh b/os/macosx/launch.sh new file mode 100644 index 0000000000..7b0389d8a5 --- /dev/null +++ b/os/macosx/launch.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +ROOT_DIR=$(dirname "$0")/.. + +export DYLD_LIBRARY_PATH=${ROOT_DIR}/Frameworks + +cd ${ROOT_DIR}/Resources +exec ./openttd "$@" diff --git a/os/macosx/plistgen.sh b/os/macosx/plistgen.sh deleted file mode 100755 index f492bcdcf9..0000000000 --- a/os/macosx/plistgen.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -# sets VERSION to the value if RELEASE if there are any, -# otherwise it sets VERSION to revision number -if [ "$3" ]; then -VERSION="$3" -else -VERSION="$2" -fi -date=`date +%Y` - -# Generates Info.plist while applying $VERSION - -echo " - - - CFBundleDevelopmentRegion - English - CFBundleDisplayName - OpenTTD - CFBundleExecutable - openttd - CFBundleGetInfoString - $VERSION, Copyright 2004-$date The OpenTTD team - CFBundleIconFile - openttd.icns - CFBundleIdentifier - org.openttd.openttd - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - OpenTTD - CFBundlePackageType - APPL - CFBundleShortVersionString - $VERSION - CFBundleVersion - $VERSION - NSHumanReadableCopyright - Copyright 2004-$date The OpenTTD team - NSPrincipalClass - NSApplication - -" > "$1"/Contents/Info.plist diff --git a/os/morphos/icons/OpenTTD.info b/os/morphos/icons/OpenTTD.info deleted file mode 100644 index 3a25be683063b654c571d5227b9b691eea11e3ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7341 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEOFyNx*vZ#+1R~{QH#4N`QW`% zhx&hMtD{f+)f2AGHkRJ|W&ZZ?De|{(m%UufoN-^L)hJ&=anX6*XrT}7mCu%a-tqoZ zAH(Dpf&M=?tByYLS53J1hhNI4{^{AJs_oyl#D6-$uqn!H!5W(oPCK<_slpsCGwQPQ z-$`7Pd%&r9H)rryL;LAqW7f#KIT~b{{7Jlac8p|uA8>*anipmo~tS_@rY$9PrKLpZC@qt zDK~dyG6o9G+0`Xb@YQ(!<{!6XxOaGZS-xJQ8LgOZ%r3E)o%esi^=-Y)X?L$~7OPfK26^GTiSC<%d%eSf{zF4mY8OBEP8py zcHis`u{{fC1WeRq5#Wj3!PCnxCwD?LIQ->mvuFD?TR6Nm#pkH*J>SKyA^t_)B>nX= z`Sle~r=5$jT#&2#!Kq;tM~SbaV1jq208?n_#SmWCK);{+95@=46aB z?&g=UO(5w=8|WYCkb_%gTGK6l5jr5__>%$L;iesFSm92YKnNU;0QA)_)G z4J8R4rHMDT_2%AI&^1x@>RP91p`~|N@GSGc1)aB7ZcO=<@M}x{3ni~Z4_-*r>&W~I z;D|B#F=^&&^P2L%pObGDAKuVcv0B|G)KQ~J`RLP{oi7f))&3da$U+eZTC|oo6%PTCKH@$lNm3{Hl$+^Ps3kz0knB&;L zHYxny$z)NLn*X~S=WsF}*4tfkYkKy+Ssy;6&h(MGEgWCTvHOwitW^Q8ct0N5{rco& zUy1tLb4$*>awrNCnzc;utklK#^YUU`136ikBBpr;1sPR;dzXItcd+E`)p~LHm0!MJ z{4~*GyWhKwMs0qvXXhzDZErZeWQugXKI49E&bX?dC)BU4i8W6=w1G#h*HV1{cCI}N zvtCZG-`<~-Z}d2SZ}Ypmy8_nd#hUnbN8NgQ=xOKihXz`m4X^GcBunt!$upnmF=NZI zUQ17=MhAh!NRHEM_UuWmo3+d$(rzRF%&&KQ8(W<^{OY9`!+Z8*eR^dYZ(H!^oqHcL$9*BATizdgNmJb&*7M*sU)W;f^uG1r(ZOZ?k+IO5~WFK;h*KY6mmOOZ`*D~hrugmG?`wbkIh}s|>#D={`ER`y z1P*R_D|KJ6Avf}kWrS1O>2FI+z1EgghhEmu(0FpAue9gY>@Mq~Ig1_%d3k#;mR%Td z(OF&d#~0SP+C-_Y!;vd1RAiJEyGnmL9qOQT#v_#@VP?W?j@v2$&z3vyYM=VOOilIP zMX?B#mW*%F9zR@}*6sZE%Q~!XTh*@@a-M&Fud8EeQd^c8s-h&F7=C1_q~lg!ro_or znqLcc-<`_r9sTIzk-%r%kM8dm)#(nfXiAObP~4C!efQ;~cZrcNr0+jD`+rYU-VO$X zvmBC=l2aymTo7Nw)p#Sccfx~{43WMzH8tVYud2TA9bi(Na%{ibq4Pop&-5SX{d@9R zKRxE&$+OwzbNvkj4)L@LZi}?E2s;}3ai+6JNvw0=l~dnuY;&!d(>`zdy%U$azi&*= zx9c*=p0a&8Xx zkY~^5q{&UYdvBJ@@>{G=oDLV5{ZbY3^FF|9e(%e4(bZx5%RHso^Y31s9-z=6$)%{p z5PtsHA)|vm4Y?B|-Is4!vgBGq-TwZ2wZ9CW?34VXusdjfpq1Y8#YQhVZy(vf-08_xw+=&xsb|n$4jVwod!m!&l##I+t;L>XUo^ zlUIu0&U|v)*Vjt^Cq-8+d-$3C zBL3^{-WTau^;2wJ-s(vcXZfh8OmtF6nzoKD%tKo9Etm4mP?Z~IOww1^ZYY^NJ@EZ> zp^Z;`tQAUe|_9M1MY12uv}rg&i7!U2g(UCXM|g(O!_9f`QFKs_e{SnU%5Bq`Xau6 z!Uty=)?2L(H}bn$timO9cV*Fw4~1#(%`z_J+c>+$cxL_G)zVa_^zg&_Nem0Dc|P@v z8704Baa)=F;<6g2ae`2Hc_G(@Q|DLTJ>C)6!uxSjcAEQ-gyk$L@tRMsPh~O5zqThk zFYe#*xtHefhS^o{tvt!bSihu+B};u@Fy}_qE{53Ff+LHrh%Z}W1Iij zH->ZM{K7RV}gsl zaYb4r)b-Z4Olz0vw-0Z(&rzxV<&pPJ<`AFTs?>j4`YRp^ina+e6&&2Zzj3$yWrk|L z8}-ay4I6seLar{z>t9}f;C=js#hx*rR#jV1dUA~;bV5MwDQi=43y~WWsweGVzcHik zox-L~Ru{K9i$&M{YFsvZdGS$8Pl1gG7jF8uyjG{U_d#QN+Jf*9#fbp|{z0)VTR2(& zT)AT>^x|Dbn$Mob{Slu%3vb^jD_wkLPS$EC&VobI(js|rD{mz1W&fnOK!Z)rPqXEZ z-Tf?q@VpbB#d!XIFFUo@k>@Pa=2hIQb?jEfUh0{!#{I;K`6p)V|I@m9z0^_5$hQ*a zbvC@)!RI<8 zcYpYKSYlQzqghyU`#~<{H3Bm(uAb2N)+Yx@a=i0u6pDm4RBL7pvZT zR!xLwp|+sG;swd#X&i~H6Vn*_4=bItJNR(V-v}eC{lE7-jWMYZXnlKpQ(iFR3&kao zhV|WAy}Hs-*C*bYTRCUx|2^}STaR)C`kHD6%Cbp(T#&KfgF!E12j{wIy^Jf`o!s)C z=^yq-O}J=&k$2BRj?yccoE5L^S?)1mvr_wuT zOjOv#(In{-;n*VC@o(#*`H8Kbfi)s>mMy8FJC})a8NAzfQs=5(((N++PN^$y3Y{)W zFZ?*<&ns8IXH*H@x_g!M6uEotr@uL=aM&AHa+ud_;dQH3$+)0Akz0LvvdSxoPN~Cj z`M$p@IsH0qy)SR^REdfAskEG#&-(u)-;Nr=B_-Yo2d0!flClWk zZ4}*fF_sJDxX1H2JzsS1FJMpJ(wSlwP+~Z3(ruZ3FwkEo5*(z{}<+PK> z>P1g_{MzR~=brU-PfHtbkU)b#psLR4Ll;b|;tLet?kaH)4JnCb&V0P)vV{Nig*ed;PxZGL3WY@Ru0Q{X-^-%vPFlt8u6F@pQc|If>x*ku%J#K9^PRn*Bjf6Wl1hhL zH@3BI$t{Upe?wj%Vw&sXFKQVtZ=L=fIgLLVck=$Y3d$5}X}>?E_GYVu<$77=wCzuihx0vNrTpT52zT6l z#U0s_3!J~Etj(OTDDuhkr;4gOYzp^${gb@s*B2G9Q_e?JRTgJeJvFM(5u7>Epo^jX zaO1MqN7Sz=N^G0?^U>xbZ>#1jp1gUY>F|PUEdP_`V*co9ynUQ$tkLM3FTeP`^2{$) z3Ul?<-aWtY%c!S9^zPaX-!?Mm%q-@4Ag?f=oyj3U(CLBh_uLOV?kw(0|LtwJt5E!& zvSL^H@0Irr`O-HXE5H2t|eYE4rO*NHNtBp)%HzutyekW?$A!x$-hV%P{xxO0%oEtoEPH5Yq--x>_waFd^M_{r z=567&M>ecJCcxQ#!KC+Z_4f_Ahp)5vi3nJ1=}mibasNd5^c4b;?^bi(WA9v#^85@h-ZXvwgWL5_7?ape9A{WR#VF+G zzF_UeKX&}+-fQ=M&zU+;&gcH;Qa-Oq{xW-#XJlOmYxw&IcdDf}KR)bqD=ttze&W%# z>7Qnl=-F5<>0#134Xi(YI4i_4i|j7CH(!O z=AKr*LiH8TKREATIaPDifu|JcetxxY*_YFVn7MzC6?sd~@rL zj;;Oj4>oPTRZ!t}X;7aoR5=#~^6+C1Exhy~f7Pis#=xn)G~Dz?Q?uEBTi&f4C~l zUZDD#gSBM(p=ptZA3oVWNL&!&C21AA`|oCUl|6OunU+5^DzdZwI4z*{@uuy!7GyLX zyc{i{VVHSEcizv%Wdd5pFO4^H-hF>6;n9BnM;9LK<91+qVDh+;#W%EYXUvYfc_K#} zS7rUVvoZByL$Z3}g`5+GyCr^ASbe=!vEu&0X7!_vw?%`tYdTiRzwGnh{d^mr zZM1QyV>nXv|3YT`x%F>&Se+Zc&*6Kn``cdA(0*5;`9h<~U+g-U%o9F-=%V#UQP&q$ z#maRRUky&qMv+m|q7r!_A)VE633hqM^ol*xUtGP8Dn;;(jXx;M7Ki?*=nK_63hIa$! zfx-t{rmdHGynPOTfz-Nar-u(#uXVo?tT*@Otn&6eRn5bm>p5TQ?9Jpq%ce5<(naTP z$I=K(#dceHu@A=tB<>5Zc*fb3@%y*)MCSF@vPb8(tlgP8Ng-48R?nAeZC@psfLG1k z&kp!IHrLgAKV2T)KjG5B!=lBvAL{po2t8Z5esgV};`}?Cw9BN)>?LHaZGVJvBzL0Yxuhbug|WOiFu!T`;GFMeGoil1dtDV0C|9d-UP^F~X+%#=5i7F&eu*d@(jzwzjn3^kr<;X7-#rf8OY zXnlBT=ZDzNW=4OrWgmBPnw;rUU%ArJv#dcixm;1i@%rrGn`YY;*#3DxICq~}?%acp zo`(g#T<%T&W&g9K?&kX+uD3bVb$e50X=W^&&1IcgEz6!1-8~+;X5OsxjiIhOGK}FR zY(Gy|t8nl(sl|M2d~o@&l(=7}Pq$)eKq>3ll?l;8%5hI$r0MT#;@B0P_>%YL48>yE z0^x!QD{lW!3rH{VICWuefBV@BPwv%wt1r$MYB!%!e2@9%6giF!C4cgwcvrh$>>WJgGgjV$K9O}|*WJHu)L-`)2f zhrisG@YHgipWn54WBbJJhnr(Be*0STK-ny2cSK@kUzV~Cms$12Sgu{Wmvya6>HWLf z>qo{LxkHSf-5;bWJoh;;-;j|Z(b(kTLd)g#-w!EXvz_aHbD_Xm{k87re@i{q?^FnB zd>3}pY<)vOV#kKHqA?pe_T34d%(BpRtyNlQLg2Qf#;*+yKDYMnn6WjOZ-J$#h;3A) z~&^ z-#YVEK<{;i%72S}pES4bead{i>f}Ct^NB9geeN+zF=ZtsIZ0(mPvU)YOnSnn!Y93R zML1`%7;<_rd^uI0DST^j!<)MFS$n=s_PZ2(e!_vg2QddYHR?nD+xs+3nY2wd`W4r$ z+YK^5`k#GTlzBG!!E>gS4T8$niiV2JTYO)BJaO@@3(ucq2c-uVU+*$~R8f%4i)}i= zRy9}mLwYZRrs~SxAfC{S_e?>8t5`lNP6(5&d9z;q+-06AZx?v9RB(A%$yR8pop#OLHg+$ApvIfMYpZk1Z-l<*46pBb1d}K^xuD@{#5>gQV_lGz%S`G3ow1%GeaXDszvy((&JV&>%uYKl=22{#)i zXKXaSvC;6D->d$@W1k;dKdyd$&-(l4H~nXJR@<7gaG5B4^>E);{8V!O^UC?(Yv&ig zo1xh9;Ioa)@kX7~ok<%ja`(pFU$-jj$(x&-H<#ZjJic$=?* zA2i@m{$!KS)#Si%U|X)+w5Ll{Ja5Y$zj^K6y?HO+zxVH0bmG|K!t#=ml83Xh*UjW> zb(-(b#G!b>M0djZ=j&(BpZ|ZC0>|~1!w(>8Gz7@oYAo>Q$;H)M;|O zaN@J*wQp~4fBpR2+}kTwy~@!LDY6S^5pY`Yx@t#&#+@Jy5x$IBWz!#9L|!(DbParG z%9Ffc`SSENn>TMZ7wazFs3Xn%fGI=3$%jEjgsZi>s%p~D8oN1u%cq`aWt^6pn3%Zm z?4~ugn{@0W)?a7Oz3pe&cX)$NcZ5z`hKW?4i_-V<($ZX>_QN`gM-*F3B-%D+>MFMg zOiMlLqc(ZQ{Q3U(3l8(n&t=NF-KOF>*W25>e9gLbe2hQ39$OgR-X=NkxnTcs!Cp7P z?xO;H?FS8fg06pk-E{DQ%3%Y&!v-H3m)q~0H*emJmzS6CR`L85Y&7#vj$p!VvsYiO zvTv8=uMGLswn&3r=k%^l0ihxp_9g{|i5?1a{mNq9iXvQ%sgV|a%*P8aWSAJuTJ}_V zqQ^=3pU?Q6I2?7vxXa7R(n@0anKEkBI0|CLw?_5Wf4^J4J#6*W`cr9}ze~1lJZ$27 zu{5@0QHO_0Q-n^Ni&A5N21{F_&4U&J0jC3-)~wJtbu7UkA}w;-8s{c$j;0BI%Wtcx zsomPOd-wG9T8w88iABW4{Y%;yv8Vs>j{G#EnZCQ$eO~ukNrFd7s1xMKi5?0991V#Q zJJ!8sTt44#K>2iV!eL*wzQ<2+`B8KwLkyfdbr%HLFaUWgqqUn zPw%4Ee#^bR?Y)qzVfHMw*Sqwb778d$tEjqJN<}S zyUkL7L&PP}WcC71hW?HcD_IjBWo1vH`*-i={=dqxAy<0x45>y;cwr*xqbdw!**b~b3^WJ z4G}IMyZP^5zj^bgEprw-!yO48Hs@)njo%8Sz6NNp%zM5!;@!Kt^K7fllszxy7|r~%x%Yg$4}&7hRIgTPY3bW(k=M3w zy7{K=cwyO%ZMwVGao;+8_@Tj}hXzdt6(Xj^GT-?h`K3;~qW;L=1G%@`9>{^r~ z#_}-9Xl9IvtDw&5ON(B(DGA!i^_TDYey{pqbly(a|2J4pY~s0IdUWd4srp)7MfGZv ze;)Tx*>u#z_nZL_M^i(9#*;=d7Dk=Z|01VEAFLNBsOq2O@ZPeI`ShlQ$gmwjD`QT7 zt}&GAl{&lsr4f&F#I#gvE2~F8YwTDR{)-DQ(BN9OeEDH+ZtmUH)z$JIYLov9^dH}? zdpgPYa*G1Tyi7q?!6t=@_qn}4emBPRo7Cps{x&Q7^rk)4>s~uu|GF<|-e zvv#{(FO*rndUf~7r$w2*mp?r$__0_pVV0Vjy1FnZUEI2Tdw=cS((8B66~^4!q{GJG z66j(e;i4e$VbR-ui^B#95^1~%|6hmwtPePnd;8lG|IP&|8MD;1x{MAO`0U%e_bx}P zlR`_zwp{Ox5oZEJw{8wv$sui?w`HA2L+?+Ig!UvUdHs_mDBl#tIE3^yhpZxv)XVU)#HQ$++f4XkMyK7yrYl$dVYwog4uSFVK z4+|<(1vnxWX(&zgI(mMtwfOBFg^R!JV=>XTvNkll_}b#!-P_yq>ldtD`&NxX@v_N7 z3%-bHu1XUlm}ljAL@B@9^==nehUy~GKUD`Zx6}%@FU#DJJNs6$0ng!3t*P1Et%owK z=5E`ydv|5uH<D-VSIb;6({pz#N z+FibQv9LGywhXHt2b0Y4gRfp`g@uO)uD&|qY}&!XIqX@s57uU0h~kN!dyn1qexb~Z zUHjA?@f@zOc5w|1SbyD-!%;&diK+3x*RDlAQ%|QVOYq!Uq+#{2V8)T8jaOQ^#hq4$ zcttxqEWVhLEb*-UWy!DiJck)hZ{lEK+MvVzwMw>Yk;AmqD_N#fPN(MF+QMmTYb(#S zL%w9S(lul2*NpilQgQ|MFL$k59JTh)w%m?I9DR>940G4Lu3H(kcAC<}4q2|&Hvt+c zC1qu8pMKV4eSdd1o3kKxdU&WQ+X3cvudRG8w=Bz?pu%}HNw8~?Lujaup5CJ6%h|W( zu4jDb&-(xMwQ261k^cWoezheoxR`NZ(;Cyv!<%$UV%t?bGfbo&RNlL7yGiG@XquzI zz5or8WvZS=AWQk$@A68UCFJDjEY7^8l-r(DYzSo3!vhPx zZMlnM^cII`9W0GKpTo+;*y5zf((HJ?`N-ps1@7+0^;`q3R6M<|WNi&l5O7!-@=8ih zPR!PcalzWPXC);heq23s<_yc-nJ;(o9X7DJd8uQAPIuN;uE=SLk=JJZ^KJaW+r7Wt zJodJfv9sq-g$L_iFA7?jP+2KCEmcv3tFqzm0ZqY12L_w-%5(kldD;(KuezEQGigc1 z;)?>CZ{|F@u`&7M)2C1Wt2ZP{@bK`QIkD-_>Y|-Fmo7{8J+_%(bG~|2K&YsXJlwnIAC&i=gpfp@7}$8cXrJ)rnbZi zO^44@o>zYP{=K?8&vskX`Agd(!mqq84M@JqHAgHaYcq3W1G|ri>#XPVo>+pa@wf*O z(^$`c=3r}1^u4STIW4?mUiqSnD}r^z=8DJH6y_an<9#Qkye0Scwnww`_x)Vo>h$ng zh?eN$i|G=_lCK-^SoAd?J?eU)cHjO(>$k7{DsFe# z2s~R`)bzJ4i}|s({!UZt$TfJUd^YItK1zH z1{~0@|LHAbRq|qKyIj?arMutntG3V8KdZYeJXNyIach+8(jZ5zsZq)4(Qnu8Z+o$8 z-?G$Sji)#DRPC+XX==LoHrJi^b}y^`wDmmRVY>E8X{^b46`_w6HSTM}CaZWFO**+` z_Sv+}!NI}PIW@$(D;{;K&p6!9Z_Kbo*}d=2?RR%~f8VloYwC)}i#{#hnKeu8+4JWU zebgL%C+|NV%o_0EireqysgV;@IA<-ZT-N9$g!-EM0 z#)>NYH*H$P&cx`l_@W;}@E)DhKMwNOHKw z($dlj{(ik)z4zAr@6x?&A)&3gx9>G+Hn=TrtlImoRJ7jjw|ThCaYum`(*u8J>uFWj zOP9&8w1J73S!vnhAH_VMp53I=byO)Nbg9v2rMUIi_f~JI7H|q!e|=%5l+Ni- zT(kGj_}O?l``4}fy_yA5xm{eF)zTf@WS z$B!@6;9~gU$#MSd*{AZt!od=zN{SynI{VtBM_ zmDcfodHb!Yr>Er>7Z*SDp04M3*`z?GJwSuyuz`WSegD0CaXPxXib9=x^b53VXZih` zvhaJ@Cf0fB6@3siE98Szn zlsTT5m&a#a{?27>*ylz5q7I@D&CUKDa$kDCs^p!yNy+~WavzFz>ddvT|990m{hZ9M zf`^Cx&sw&V>%cCd52h>(2j+52-pFMll z@XEUUB{PJSL5TSweNi&e5~#AH84AuxrBacf0u~PoDhlvcG+Yt2yOGTCu5A(9js_R#?LhGN;Ex%_~`szx)x|-TQ z@6fA{)EWOUbG~@<=E&yrcHF*~=S)`jH!JvgaT7y>ed((!_3v+Pe%|JzwmEcKDoeBD zi(Pz?(-b|0Zr#4U_tA^@uS<-tRE0S-21|Rd&)yo9Tvhe!&W8^liu3pX{pP(%C!Q&x zF6e;$1O~4|$^Eu&ZfthJT)`v|79M`zy6Ve|`hPFn?W<;_-fUR+dfpoEr9xFz zRSPn2&C<6Gc(B$z0Jzna?067kW+-<4{yPY;bO0?e9AW4?2E&(9Ewi`)r-k z0ecZfUDt~&0qh5)+deKAkE?k2;@#cd`vrR49*4Y|q~bU&wPVqaXEpn`?zp%%>+{a$ z(vOdhzMMF5BFN1fy_ObD6i7OjWT-y->@Idb8HIkEPbbv*{x}OdxNp|j^>2}dsp;2a z+Uxgx`p$3nOIs&%s;?^?Ip+uOVT)YBsOqMdgh2Ce+E?)5I-X{mF4XPfOjZ}a&~ zJgbFlcF%>W$KJfr`S$kq@t7S2jtl~<7b-tII4E!T^-3`R+I8zTJuQ-KbzDu9x1`73=O!PEK|&-g)PJ*U?8yUhlFxy~(e>et-3c2aZJ_9yosa{(ZgWyI)(5 zyDzFZJx%w=&-3+u-HX^3{P}cR|9{^7eYMqjdp;g}`{lyspLdx;R)FT_~!jE%OBfp;KD#)*y^8V$;l^R@p zG8POmc23;ew{L&{0j4$^Je7x3s17n@Bh(z`t<1=`|Is(-FZ@tW@dkTclY;&x#jnM9_f>{-Y3Sv zVm0f)&htti`h6SvSsr{ccDrY9|N6jQ=jr{ISg%R9Ix+75c{V>lN38JAk3zRVkvk=q zeSf?P-|zKq@AtTzTU%bfdiF!~*m1Q6zF%+dZOeT>U)GNQv9R)k&sI13{|nB4|IwUj z-8ZIn-+o9lhF3F&SO4j4SiQGlwe3It;;539IlsH&7#J8dGL!xD8W;qa85kJuG%yIT wFfcI8ZeS2#Wnf^q*1#YD8rOW@z#zcRz`(%tn`_}51_lNOPgg&ebxsLQ0L%+s=>Px# diff --git a/os/morphos/icons/document.info b/os/morphos/icons/document.info deleted file mode 100644 index 877ea3575f767b3f10d68d4da0a28e559253cd91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4451 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE8An?%B#WAGf*4f#&^QEuPJ#JsDZ0YQ!(w5Jv>qL^frmRo)hOto;!1s{gn*AW{{Hb%H8Y=CdKDwUi?{m{(W8D;*I5(OJldY zySb_H9QI(cT2MMmqvgg|*SW`91y;qI=qoLV(wja#=6Y#k!S44CvvwZe!8YS(&AuPI z@Be)l&)s?`Lq*9^TGo)s!KB?)ML;PluDj#egn<1TLN0+W5^N??ykEHwIk+Tlsri2I z?*Cs;?CpPU-??+Adc%I+Bm2yA`wL|~`uqCk{XZ=K@56idJ{e7yi|5XEFkg7tF5sej z#9jCLq>A&Oujum}&PYvt`YXTw_wD*wGiUDPtYBwsx_7vO$%9+*%Q}{Ag8P{l+%0ps zY{0{O*kFSW_hl19o@ND(FAEngEU){vdH&zeFE20O&#c1u_&u+K42!Scj=$H}#$PWj ziG6P&CU4HeeA#59PPdEF!iEpE^CwQ6sJ;KkQT=~Uzr4JhpSM0a-th%11Mh{cX|H#6 z7cP2qpoD3;tVHZ}L*L*=1;z^|y}iA>ese4epN8-Mb#?vyipRb0- zdhOR6uBXUuU}s}fv-|hsaX%Y7``o@G3mdoXt~g@3NZMl)ry|E;f%BhNTz`Ef%kZfbMZw59%rA+DpS2C`Yo?~yY;$7 z&5sXL=l}oneE+|*`E{TB`Q>bOIQMUKJ}>j(vHbrZi$k=Y=H%rGu`n`3M@O4T@#>sj z6t|xF!7jb8Rk5r#TchT>99k5kcR9mk#r4-LjtfNMtWO9n(dgo6Vz~c3(?p6xQADBB zr76W|<-G4U{Y5){)FxY&Jv%dV^5@T=jkB|}vrP`ah_zgp&QSMh^8A`D`}V!7`E*i! z&DynrT2p_#j{onaHd%4<$qz4=&ktICb;j)3$%Taz#r5Mh?Av!PeSYn+kB^W4{QJJ% ze`(OeZvA}+w&nUt^)!yubd7FRs|^uD4KMaDxu_`Og_9QcHp~ZO$uC_1d^?+p%lc#Qf*k zBo-7**tpSfk;bABt%*KrJImk8b-FMeFVvXo#o~D2!Gi@!<*IsCFHGJ)^|S747GOHP z=|k;&1D@y|s&Y}@3(n2A|Ia^NFZNgedAr|lgcWZ1iu__y=u(n7t~k}};jVQ>e(&z= zJZ$}b&*8hf%PT)VV*Ob&FKVru-TdR*a^KzG@4qlWfrClsw9@p`4}aVBJr-~koVDyN z$I@1Ttnj6K*c~q{(qFQ|!;iD6!GLF@j<&U#**CEd_unk!u3}?IC@7e4db)n`j}M9a ze!bFeYinC^{q>X2m2U3tj2ctDQj8?ys^6NneXh*9s-^BfZ%No{#g+vD8Y_;zf4~r+ zcHYFdR6o+bOX(4(BxjUF+u58T0gYP4mJ>{x-vmC-V-#>IcyU4T)6YG-rnUI^`6;y| zBqTJfT)A?Z%E^T_ak1O?>z_L%CFN9o^w_5Owo{XS_;pI`{B5*Zq)lL?M?^&> zRaVYixKPo|+&nTS=E<3v#;2rXVq%_rd3l+|@jx>>zlK=1MBBkPZ*=+|CrGgEjOn|2 zHI$8=edf%WiJ6(5AzH3V6BVX<1+ER7Ib+6w@3m>^>6#*3IeB?XEeA?%mo4)%G%)z! zrJni8#LHTO;R$!_^`o0~w5D>+dmgAY^@2(7%9WZrr;`#B8Dp(;El??=F{qIGnpak|Iy%PxT~OM@Q1xw(1C<;<+DQh_29{gyMH zNZTx9RnqbBj=|Te*v{FHEuMU?6zXJ|_dIZA$cg8lbswpfUT$PakYc<1{M_3KsV^s3 z^c|k69o~>OAxK9|Q>;7d-9qQ~D}VCTjOz4T0zU4OdH+Ph(^jF>$zJI~xR=kqlI(2n zpZDiI*F3E-b|1;={ro&bYwOcDH>Y1Lotw4w z)Q=w)eUCTn+2gY_CatDM=JvLawehWIdfk}se_t7*C1YC^(t5S;alrcPnI=-NEO=%) zUfrC2{>MT7I)}Y+$G_Jq2{tyQ7_GdgeRJRKw71d>7i<>pEPX9D?|I?xZ@HUp>MRZF z++F_u(?NE5g_Z~3-rjyymzUS~^Jis?01rQZu+~%oCj&#ngP)(D-&y%tEqs04(`RRA zvp62ObV+FPT=DB*-_AFe!oWec;SwkpGM0v zS8b@OsfkH#^|}1y&(F_4_MMN;-@EkJ)Bn@#>buWfPrd!-SR7pJ-fzIuymhPTvgOMyOJ7ZS)KL4K zIVG*kTvcQ0lx3MFQoK{I>P|mhF|R#Qf`^A^L8jE#s<}sxx-Ml|eRWmUvIrd`6O)$b zrpLREDt#-P!?0oF#)VJrf3J0Ocb_`BR6$8$?&K7slehEt`!2p1utwwN^=-L1x1TNU zw>z{+rzAE#JG;AETz`_^a?ysO!cLc_?Ca~czKO7!8|G#9?q=q!V<#u8Pj%g()7{z0 zsTa4WBXbsu;{u}-bG=ITnKBfnsIr$7#ZEq{axx`I_urkJ#W%LyopiOcx@l)jp8Fa3 z>A(G?89%(+{eG2F*S8wS{hZVG{b5jK@t<#(T3A@vep-@+@%#Jx>Dk%dsYR&^HgDLl zKy2H-edoHx^{?oiZax>Z(nZ8|&6+hDH}fpb`giU$`jJ&QF?n`Lf=s~bt3Phv|95O- z^6`ks$i&*(xeFI6s;R4ka*MaO_Y^PHW5&{_1_s<^oL%Ii`ybMwO3>B{bX zAC}wy?M&Ku;@2-LP>ap}*Tw#dKR*nMi;F|FL}RXp?s9teYw5Q2*I&=Et)3R5^_7cd zZKcg^efBSNg}3C+Ucdj}tQ@n`%jegf@~{6D>~r}@X{^uXB|$4c9Jl{B@$vC~V>2^1 zqnRnGsjTNeOGryEj?qiLZN|;bedTrOvSrI6Vq-%$HkGVNOHVJ1oqqD9XINNR$0CkO z18Y-L*QG&$swR`HRoTB>{>9zyJNe_s!lIor($dl~d#k2Ce3&S6d|`ynri~jNwWcQ3 z)XXWd^0k|P{CjO&{om5k4l5HAm#tAx+wK1-eyx%{Y_Oy1tJc-5sfXM7gV%^rg{}VJk&bPZsnR~%a>cX?dp5H zBK?;5t$R-{MxNdwFvp^BQL5kf&rC}>`PdrL{=64%W1NpmBQ?`4gtUU&A_$E!NttN&kHYNc(wqx{{Shlg6Z zpA=cHx|(%bbKRb4ofpLvZcT~UeUgROx4Ze%s%Z-Qj{Ue_%gT_DlhfngFBhmGvZL;= z)%^N@mfLbaKRGF^+P`}B>O1>tXMev}-T(UfdhG_GPL}TO?j@Hq@74de{q)oMEKB<` zQ-0rVCj-0h>+Q~Db(;2Q%URJa4HwsD?G1jtJ|O7&70w*B$%)Cy&CC7gKl*LAEOXP= ztw*n26Z={ft7=ygt3Laz+1p(gzwpVQJ-cz!rb|7yZ-zz1YMn0=i7uUSd!<9S9OH}k z2`s(u>;M0j*mds86_F2KoKkHIZ^X3ipZC1*-5twMKW*kcFMN4PwdQ`fR9x8fw;8^D z?=u%nzI)wd?epTB`(hK17f!L9bc!#)vT4U{Yg5yuzm{~%*#B(|&yiF25WJWuZvC}B znDvG@!>nZwcj|WftN>F4GoR#iobdY^K6zSMjA1(RI&cX{q> z8Rp*HcDYaZxr9mTyIb>bzvOzKZ*t?)(T+3hZ+gdmqF-z=a)n=B(;wjcMmwrp-JTmXRrb5|D*LN&mwh2vRy}Y~W0yjgTMBBU5)Ag?l zpL9{;`u<+~TAaz(yy9IU3pfuOY$@6q!zNYDc;WQ)#mu|b_4oJm%rW-;yg}g5Lk7Eq zJImEF>e6-x>P?pq*P7aXKY9TnJla_@i7wf)z}z~Uf!gW=lt^}DB? z`nE{x>GZ{(v!+h37L)%czdd7iLVtMaq1dAf!kr$4PX9l@vpu}){nf~udT;9)l?6P$ zA5V`w%D})NmYM9I*T5ja$-p4M(7+(Tm0Oxql3A9STF%hxBNYc4Eb(;pb6Mw<&;$T6 CQI^*L diff --git a/os/morphos/icons/drawer.info b/os/morphos/icons/drawer.info deleted file mode 100644 index 149ef7e101f93210509c256b4794f3c3c2fd78fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5390 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEV_lGz%S`G3ow1%GeaXDszvy((&JV&>%uYKl=22{#)i zXKXaSvC;6D->d$@W1k;dKdyd$&-(l4H~nXJR@<7gaG5B4^>E);{8V!O^UC?(Yv&ig zo1xh9;Ioa)@kX7~ok<%ja`(pFU$-jj$(x&-H<#ZjJic$=?* zA2i@m{$!KS)#Si%U|X)+w5Ll{Ja5Y$zj^K6y?HO+zxVH0bmG|K!t#=ml83Xh*UjW> zb(-(b#G!b>M0djZ=j&(BpZ|ZC0>|~1!w(>8Gz7@oYAo>Q$;H)M;|O zaN@J*wQp~4fBpR2+}kTwy~@!LDY6S^5pY`Yx@t#&#+@Jy5x$IBWz!#9L|!(DbParG z%9Ffc`SSENn>TMZ7wazFs3Xn%fGI=3$%jEjgsZi>s%p~D8oN1u%cq`aWt^6pn3%Zm z?4~ugn{@0W)?a7Oz3pe&cX)$NcZ5z`hKW?4i_-V<($ZX>_QN`gM-*F3B-%D+>MFMg zOiMlLqc(ZQ{Q3U(3l8(n&t=NF-KOF>*W25>e9gLbe2hQ39$OgR-X=NkxnTcs!Cp7P z?xO;H?FS8fg06pk-E{DQ%3%Y&!v-H3m)q~0H*emJmzS6CR`L85Y&7#vj$p!VvsYiO zvTv8=uMGLswn&3r=k%^l0ihxp_9g{|i5?1a{mNq9iXvQ%sgV|a%*P8aWSAJuTJ}_V zqQ^=3pU?Q6I2?7vxXa7R(n@0anKEkBI0|CLw?_5Wf4^J4J#6*W`cr9}ze~1lJZ$27 zu{5@0QHO_0Q-n^Ni&A5N21{F_&4U&J0jC3-)~wJtbu7UkA}w;-8s{c$j;0BI%Wtcx zsomPOd-wG9T8w88iABW4{Y%;yv8Vs>j{G#EnZCQ$eO~ukNrFd7s1xMKi5?0991V#Q zJJ!8sTt44#K>2iV!eL*wzQ<2+`B8KwLkyfdbr%HLFaUWgqqUn zPw%4Ee#^bR?Y)qzVfHMw*Sqwb778d$tEjqJN<}S zyUkL7L&PP}WcC71hW?HcD_IjBWo1vH`*-i={=dqxAy<0x45>y;cwr*xqbdw!**b~b3^WJ z4G}IMyZP^5zj^bgEprw-!yO48Hs@)njo%8Sz6NNp%zM5!;@!Kt^K7fllszxy7|r~%x%Yg$4}&7hRIgTPY3bW(k=M3w zy7{K=cwyO%ZMwVGao;+8_@Tj}hXzdt6(Xj^GT-?h`K3;~qW;L=1G%@`9>{^r~ z#_}-9Xl9IvtDw&5ON(B(DGA!i^_TDYey{pqbly(a|2J4pY~s0IdUWd4srp)7MfGZv ze;)Tx*>u#z_nZL_M^i(9#*;=d7Dk=Z|01VEAFLNBsOq2O@ZPeI`ShlQ$gmwjD`QT7 zt}&GAl{&lsr4f&F#I#gvE2~F8YwTDR{)-DQ(BN9OeEDH+ZtmUH)z$JIYLov9^dH}? zdpgPYa*G1Tyi7q?!6t=@_qn}4emBPRo7Cps{x&Q7^rk)4>s~uu|GF<|-e zvv#{(FO*rndUf~7r$w2*mp?r$__0_pVV0Vjy1FnZUEI2Tdw=cS((8B66~^4!q{GJG z66j(e;i4e$VbR-ui^B#95^1~%|6hmwtPePnd;8lG|IP&|8MD;1x{MAO`0U%e_bx}P zlR`_zwp{Ox5oZEJw{8wv$sui?w`HA2L+?+Ig!UvUdHs_mDBl#tIE3^yhpZxv)XVU)#HQ$++f4XkMyK7yrYl$dVYwog4uSFVK z4+|<(1vnxWX(&zgI(mMtwfOBFg^R!JV=>XTvNkll_}b#!-P_yq>ldtD`&NxX@v_N7 z3%-bHu1XUlm}ljAL@B@9^==nehUy~GKUD`Zx6}%@FU#DJJNs6$0ng!3t*P1Et%owK z=5E`ydv|5uH<D-VSIb;6({pz#N z+FibQv9LGywhXHt2b0Y4gRfp`g@uO)uD&|qY}&!XIqX@s57uU0h~kN!dyn1qexb~Z zUHjA?@f@zOc5w|1SbyD-!%;&diK+3x*RDlAQ%|QVOYq!Uq+#{2V8)T8jaOQ^#hq4$ zcttxqEWVhLEb*-UWy!DiJck)hZ{lEK+MvVzwMw>Yk;AmqD_N#fPN(MF+QMmTYb(#S zL%w9S(lul2*NpilQgQ|MFL$k59JTh)w%m?I9DR>940G4Lu3H(kcAC<}4q2|&Hvt+c zC1qu8pMKV4eSdd1o3kKxdU&WQ+X3cvudRG8w=Bz?pu%}HNw8~?Lujaup5CJ6%h|W( zu4jDb&-(xMwQ261k^cWoezheoxR`NZ(;Cyv!<%$UV%t?bGfbo&RNlL7yGiG@XquzI zz5or8WvZS=AWQk$@A68UCFJDjEY7^8l-r(DYzSo3!vhPx zZMlnM^cII`9W0GKpTo+;*y5zf((HJ?`N-ps1@7+0^;`q3R6M<|WNi&l5O7!-@=8ih zPR!PcalzWPXC);heq23s<_yc-nJ;(o9X7DJd8uQAPIuN;uE=SLk=JJZ^KJaW+r7Wt zJodJfv9sq-g$L_iFA7?jP+2KCEmcv3tFqzm0ZqY12L_w-%5(kldD;(KuezEQGigc1 z;)?>CZ{|F@u`&7M)2C1Wt2ZP{@bK`QIkD-_>Y|-Fmo7{8J+_%(bG~|2K&YsXJlwnIAC&i=gpfp@7}$8cXrJ)rnbZi zO^44@o>zYP{=K?8&vskX`Agd(!mqq84M@JqHAgHaYcq3W1G|ri>#XPVo>+pa@wf*O z(^$`c=3r}1^u4STIW4?mUiqSnD}r^z=8DJH6y_an<9#Qkye0Scwnww`_x)Vo>h$ng zh?eN$i|G=_lCK-^SoAd?J?eU)cHjO(>$k7{DsFe# z2s~R`)bzJ4i}|s({!UZt$TfJUd^YItK1zH z1{~0@|LHAbRq|qKyIj?arMutntG3V8KdZYeJXNyIach+8(jZ5zsZq)4(Qnu8Z+o$8 z-?G$Sji)#DRPC+XX==LoHrJi^b}y^`wDmmRVY>E8X{^b46`_w6HSTM}CaZWFO**+` z_Sv+}!NI}PIW@$(D;{;K&p6!9Z_Kbo*}d=2?RR%~f8VloYwC)}i#{#hnKeu8+4JWU zebgL%C+|NV%o_0EireqysgV;@IA<-ZT-N9$g!-EM0 z#)>NYH*H$P&cx`l_@W;}@E)DhKMwNOHKw z($dlj{(ik)z4zAr@6x?&A)&3gx9>G+Hn=TrtlImoRJ7jjw|ThCaYum`(*u8J>uFWj zOP9&8w1J73S!vnhAH_VMp53I=byO)Nbg9v2rMUIi_f~JI7H|q!e|=%5l+Ni- zT(kGj_}O?l``4}fy_yA5xm{eF)zTf@WS z$B!@6;9~gU$#MSd*{AZt!od=zN{SynI{VtBM_ zmDcfodHb!Yr>Er>7Z*SDp04M3*`z?GJwSuyuz`WSegD0CaXPxXib9=x^b53VXZih` zvhaJ@Cf0fB6@3siE98Szn zlsTT5m&a#a{?27>*ylz5q7I@D&CUKDa$kDCs^p!yNy+~WavzFz>ddvT|990m{hZ9M zf`^Cx&sw&V>%cCd52h>(2j+52-pFMll z@XEUUB{PJSL5TSweNi&e5~#AH84AuxrBacf0u~PoDhlvcG+Yt2yOGTCu5A(9js_R#?LhGN;Ex%_~`szx)x|-TQ z@6fA{)EWOUbG~@<=E&yrcHF*~=S)`jH!JvgaT7y>ed((!_3v+Pe%|JzwmEcKDoeBD zi(Pz?(-b|0Zr#4U_tA^@uS<-tRE0S-21|Rd&)yo9Tvhe!&W8^liu3pX{pP(%C!Q&x zF6e;$1O~4|$^Eu&ZfthJT)`v|79M`zy6Ve|`hPFn?W<;_-fUR+dfpoEr9xFz zRSPn2&C<6Gc(B$z0Jzna?067kW+-<4{yPY;bO0?e9AW4?2E&(9Ewi`)r-k z0ecZfUDt~&0qh5)+deKAkE?k2;@#cd`vrR49*4Y|q~bU&wPVqaXEpn`?zp%%>+{a$ z(vOdhzMMF5BFN1fy_ObD6i7OjWT-y->@Idb8HIkEPbbv*{x}OdxNp|j^>2}dsp;2a z+Uxgx`p$3nOIs&%s;?^?Ip+uOVT)YBsOqMdgh2Ce+E?)5I-X{mF4XPfOjZ}a&~ zJgbFlcF%>W$KJfr`S$kq@t7S2jtl~<7b-tII4E!T^-3`R+I8zTJuQ-KbzDu9x1`73=O!PEK|&-g)PJ*U?8yUhlFxy~(e>et-3c2aZJ_9yosa{(ZgWyI)(5 zyDzFZJx%w=&-3+u-HX^3{P}cR|9{^7eYMqjdp;g}`{lyspLdx;R)FT_~!jE%OBfp;KD#)*y^8V$;l^R@p zG8POmc23;ew{L&{0j4$^Je7x3s17n@Bh(z`t<1=`|Is(-FZ@tW@dkTclY;&x#jnM9_f>{-Y3Sv zVm0f)&htti`h6SvSsr{ccDrY9|N6jQ=jr{ISg%R9Ix+75c{V>lN38JAk3zRVkvk=q zeSf?P-|zKq@AtTzTU%bfdiF!~*m1Q6zF%+dZOeT>U)GNQv9R)k&sI13{|nB4|IwUj z-8ZIn-+o9lhF3F&SO4j4SiQGlwe3It;;539IlsH&7#J8dGL!xD8W;qa85kIv8W;pv w7#JAx8yEyw85kHIHZTZ)#x*+{7zEfE7#Ntg{R!4(U|?YIboFyt=akR{0IT3#{{R30 diff --git a/os/rpm/openttd-rpmlintrc b/os/rpm/openttd-rpmlintrc deleted file mode 100644 index f8d5fb9ed9..0000000000 --- a/os/rpm/openttd-rpmlintrc +++ /dev/null @@ -1,6 +0,0 @@ -# the man page is in the subpackage data -addFilter("openttd.*: W: no-manual-page-for-binary openttd") -# no other package depends on this package, so this should not matter -addFilter("openttd.*: W: file-contains-date-and-time /usr/bin/openttd") -addFilter("openttd.*: W: file-contains-current-date /usr/bin/openttd") - diff --git a/os/rpm/openttd.changes b/os/rpm/openttd.changes deleted file mode 100644 index 351f260799..0000000000 --- a/os/rpm/openttd.changes +++ /dev/null @@ -1,100 +0,0 @@ -------------------------------------------------------------------- -Sun Mar 6 09:36:55 UTC 2011 - ammler@openttdcoop.org - -- upstream update 1.1.0-RC2 - * Feature: XZ/LZMA2 savegame support. New default reduces - savegame size by 10 to 30% with slightly more CPU usage. - (requires xz-devel) - * Feature: Remote administration - * Feature: a lot improvements with GUI - * Feature: Customizable hotkeys - * Sources for openttd.grf are pngs (requires grfcodec >= 5.1) - -------------------------------------------------------------------- -Sun Nov 21 11:11:38 UTC 2010 - ammler@openttdcoop.org - -- upstream update 1.0.5 - * Fix: Reading (very) recently freed memory [CVE-2010-4168] - -------------------------------------------------------------------- -Sun Oct 31 17:53:41 UTC 2010 - ammler@openttdcoop.org - -- upstream update 1.0.4 - * build openttd.grf from source - -------------------------------------------------------------------- -Tue Aug 10 20:16:03 UTC 2010 - ammler@openttdcoop.org - -- upstream update 1.0.3 - -------------------------------------------------------------------- -Wed Jun 23 11:42:59 UTC 2010 - Marcel Gmür - -- upstream update 1.0.2 - * Feature: Translated desktop shortcut comments (r19884) - * many minor Bugfixes - -------------------------------------------------------------------- -Sat May 1 15:59:32 UTC 2010 - Marcel Gmür - -- upstream update 1.0.1 - * Fix: Leaking a file descriptor - * Fix a lot small bugs, like minor desync issues on Mulitplayer -- no strip on make - -------------------------------------------------------------------- -Thu Apr 1 08:53:54 UTC 2010 - Marcel Gmür - -- upstream update 1.0.0 (finally!) - * completely independent game but still working also - with ttd original gaphics, sounds and music -- Add: Recommends openmsx -- requires lzo2 - -------------------------------------------------------------------- -Fri Dec 18 2009 Marcel Gmür - 0.7.4 - -- support for different branches -- easy support for dedicated branch -- let openttd build system make the dektop file -- split the package to data and gui -- disable requires - -------------------------------------------------------------------- -Thu Oct 01 2009 Marcel Gmür - 0.7.3 - -- disable libicu for RHEL4 - -------------------------------------------------------------------- -Sat Sep 26 2009 Marcel Gmür - 0.7.2 - -- no subfolder games for datadir -- cleanup: no post and postun anymore -- Recommends: opengfx (for suse and mandriva) -- add SUSE support - -------------------------------------------------------------------- -Mon Oct 20 2008 Benedikt Brüggemeier - -- Added libicu dependency - -------------------------------------------------------------------- -Thu Sep 23 2008 Benedikt Brüggemeier - -- Merged both versions of the spec file - -------------------------------------------------------------------- -Fri Aug 29 2008 Jonathan Coome - -- Rewrite spec file from scratch. - -------------------------------------------------------------------- -Sat Aug 02 2008 Benedikt Brüggemeier - -- Updated spec file - -------------------------------------------------------------------- -Thu Mar 27 2008 Denis Burlaka - -- Universal spec file - diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec deleted file mode 100644 index 134caad38e..0000000000 --- a/os/rpm/openttd.spec +++ /dev/null @@ -1,272 +0,0 @@ -# -# spec file for package openttd -# -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. -# Copyright (c) 2007-2019 The OpenTTD developers -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# - -Name: openttd -Version: 1.11.beta1 -Release: 0 -%define srcver 1.11.0-beta1 -Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe -License: GPL-2.0 -Group: Amusements/Games/Strategy/Other -Url: http://www.openttd.org - -Source: http://binaries.openttd.org/releases/%{srcver}/%{name}-%{srcver}-source.tar.gz - -%if 0%{?suse_version} || 0%{?mdkversion} -Recommends: %{name}-gui -%endif - -BuildRequires: gcc-c++ -BuildRequires: libpng-devel -BuildRequires: zlib-devel - -%if 0%{?suse_version} || 0%{?mdkversion} -BuildRequires: update-alternatives -Requires: update-alternatives -%else -BuildRequires: chkconfig -Requires: chkconfig -%endif - -%if 0%{?mdkversion} -BuildRequires: liblzma-devel -BuildRequires: liblzo-devel -%else -BuildRequires: lzo-devel -BuildRequires: xz-devel -%endif - -# OBS workaround: needed by libdrm -%if 0%{?rhel_version} >= 600 || 0%{?centos_version} >= 600 -BuildRequires: kernel -%endif - -# for lzma detection -%if 0%{?suse_version} -BuildRequires: pkg-config -%endif - -# building openttd.grf is not required as it is a) part of source and -# b) required only, if you want to use the original set -%if 0%{?with_grfcodec} -BuildRequires: grfcodec -%endif -# Recommends would fit better but not well supported... -Requires: openttd-opengfx >= 0.4.2 - -Obsoletes: %{name}-data < %{version} -Provides: %{name}-data = %{version} - -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -%description -OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" -with lots of new features and enhancements. To play the game you need either -the original data from the game or install the recommend subackages OpenGFX for -free graphics, OpenSFX for free sounds and OpenMSX for free music. - -OpenTTD is licensed under the GNU General Public License version 2.0. For more -information, see the file 'COPYING.md' included with every release and source -download of the game. - -%package gui -Summary: OpenTTD GUI/Client (requires SDL) -Group: Amusements/Games/Strategy/Other - -Requires: %{name} -Conflicts: %{name}-dedicated - -BuildRequires: SDL2-devel -BuildRequires: fontconfig-devel - -%if 0%{?rhel_version} != 600 -BuildRequires: libicu-devel -%endif -%if 0%{?rhel_version} || 0%{?fedora} -BuildRequires: freetype-devel -%endif -%if 0%{?suse_version} || 0%{?mdkversion} -BuildRequires: freetype2-devel -%endif -%if 0%{?suse_version} -BuildRequires: update-desktop-files -%else -BuildRequires: desktop-file-utils -Requires: hicolor-icon-theme -%endif - -%if 0%{?suse_version} || 0%{?mdkversion} -Recommends: openttd-openmsx -Recommends: openttd-opensfx -%endif - -%description gui -OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" -with lots of new features and enhancements. To play the game you need either -the original data from the game or install the recommend subackages OpenGFX for -free graphics, OpenSFX for free sounds and OpenMSX for free music. - -This subpackage provides the binary which needs SDL. - -%package dedicated -Summary: OpenTTD Dedicated Server binary (without SDL) -Group: Amusements/Games/Strategy/Other - -Requires: %{name} -Conflicts: %{name}-gui - -%description dedicated -OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" -with lots of new features and enhancements. To play the game you need either -the original data from the game or the required package OpenGFX and OpenSFX. - -This subpackage provides the binary without dependency of SDL. - -%prep -%setup -qn openttd%{?branch:-%{branch}}-%{srcver} - -# we build the grfs from sources but validate the result with the existing data -%if 0%{?with_grfcodec} -md5sum bin/data/* > validate.data -%endif - -%build -# first, we build the dedicated binary and copy it to dedicated/ -./configure \ - --prefix-dir="%{_prefix}" \ - --binary-dir="bin" \ - --data-dir="share/%{name}" \ - --enable-dedicated -make %{?_smp_mflags} BUNDLE_DIR="dedicated" bundle - -# then, we build the common gui version which we install the usual way -./configure \ - --prefix-dir="%{_prefix}" \ - --binary-name="%{name}" \ - --binary-dir="bin" \ - --data-dir="share/%{name}" \ - --doc-dir="share/doc/%{name}" \ - --menu-name="OpenTTD%{?branch: %{branch}}" \ - --menu-group="Game;StrategyGame;" - -make %{?_smp_mflags} - -%install -# install the dedicated binary -install -D -m0755 dedicated/openttd %{buildroot}%{_bindir}/%{name}-dedicated -# install the gui binary and rename to openttd-gui -make install INSTALL_DIR=%{buildroot} -mv %{buildroot}%{_bindir}/%{name} %{buildroot}%{_bindir}/%{name}-gui -# we need a dummy target for /etc/alternatives/openttd -mkdir -p %{buildroot}%{_sysconfdir}/alternatives -touch %{buildroot}%{_sysconfdir}/alternatives/%{name} -ln -s -f /etc/alternatives/%{name} %{buildroot}%{_bindir}/%{name} - -%if 0%{?suse_version} -%suse_update_desktop_file -r %{name} Game StrategyGame -%else -%if 0%{?fedora} || 0%{?rhel_version} >= 600 || 0%{?centos_version} >= 600 -desktop-file-install --dir=%{buildroot}%{_datadir}/applications \ - --add-category=StrategyGame \ - media/openttd.desktop -%endif -%endif - -%if 0%{?with_grfcodec} -%check -md5sum -c validate.data -%endif - -%post gui -/usr/sbin/update-alternatives --install %{_bindir}/%{name} %{name} %{_bindir}/%{name}-gui 10 -touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : - -%post dedicated -/usr/sbin/update-alternatives --install %{_bindir}/%{name} %{name} %{_bindir}/%{name}-dedicated 0 - -%preun gui -if [ "$1" = 0 ] ; then - /usr/sbin/update-alternatives --remove %{name} %{_bindir}/%{name}-gui -fi - -%preun dedicated -if [ "$1" = 0 ] ; then - /usr/sbin/update-alternatives --remove %{name} %{_bindir}/%{name}-dedicated -fi - -%postun gui -if [ "$1" -eq 0 ] ; then - touch --no-create %{_datadir}/icons/hicolor &>/dev/null - gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -fi - -%posttrans gui -gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : - -# we need a file in the main package so it will be made -%files -%defattr(-, root, root) -%dir %{_datadir}/doc/%{name} -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/lang -%dir %{_datadir}/%{name}/baseset -%dir %{_datadir}/%{name}/scripts -%dir %{_datadir}/%{name}/ai -%dir %{_datadir}/%{name}/game -%{_datadir}/doc/%{name}/* -%{_datadir}/%{name}/lang/* -%{_datadir}/%{name}/baseset/* -%{_datadir}/%{name}/scripts/* -%{_datadir}/%{name}/ai/* -%{_datadir}/%{name}/game/* -%doc %{_mandir}/man6/%{name}.6.* - -%files gui -%defattr(-, root, root) -%ghost %{_sysconfdir}/alternatives/%{name} -%ghost %{_bindir}/%{name} -%{_bindir}/%{name}-gui -%dir %{_datadir}/icons/hicolor -%dir %{_datadir}/icons/hicolor/16x16 -%dir %{_datadir}/icons/hicolor/16x16/apps -%dir %{_datadir}/icons/hicolor/32x32 -%dir %{_datadir}/icons/hicolor/32x32/apps -%dir %{_datadir}/icons/hicolor/48x48 -%dir %{_datadir}/icons/hicolor/48x48/apps -%dir %{_datadir}/icons/hicolor/64x64 -%dir %{_datadir}/icons/hicolor/64x64/apps -%dir %{_datadir}/icons/hicolor/128x128 -%dir %{_datadir}/icons/hicolor/128x128/apps -%dir %{_datadir}/icons/hicolor/256x256 -%dir %{_datadir}/icons/hicolor/256x256/apps -%{_datadir}/applications/%{name}.desktop -%{_datadir}/icons/hicolor/16x16/apps/%{name}.png -%{_datadir}/icons/hicolor/32x32/apps/%{name}.png -%{_datadir}/icons/hicolor/48x48/apps/%{name}.png -%{_datadir}/icons/hicolor/64x64/apps/%{name}.png -%{_datadir}/icons/hicolor/128x128/apps/%{name}.png -%{_datadir}/icons/hicolor/256x256/apps/%{name}.png -%{_datadir}/pixmaps/%{name}.32.xpm - -%files dedicated -%defattr(-, root, root) -%ghost %{_bindir}/%{name} -%ghost %{_sysconfdir}/alternatives/%{name} -%{_bindir}/%{name}-dedicated - -%changelog diff --git a/os/windows/installer/build_installers.bat b/os/windows/installer/build_installers.bat deleted file mode 100644 index 73a2898da2..0000000000 --- a/os/windows/installer/build_installers.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -"c:\Program Files\NSIS\makensis.exe" /DVERSION_INCLUDE=version_win9x.txt install.nsi > win9x.log -"c:\Program Files\NSIS\makensis.exe" /DVERSION_INCLUDE=version_win32.txt install.nsi > win32.log -"c:\Program Files\NSIS\makensis.exe" /DVERSION_INCLUDE=version_win64.txt install.nsi > win64.log diff --git a/os/windows/installer/cdfinder.ini b/os/windows/installer/cdfinder.ini deleted file mode 100644 index 45f9602f13..0000000000 --- a/os/windows/installer/cdfinder.ini +++ /dev/null @@ -1,26 +0,0 @@ -; Ini file generated by the HM NIS Edit IO designer. -[Settings] -NumFields=3 - -[Field 1] -Type=Groupbox -Text=Transport Tycoon Deluxe Installation location -Left=6 -Right=294 -Top=68 -Bottom=100 - -[Field 2] -Type=DirRequest -Left=10 -Right=290 -Top=80 -Bottom=92 - -[Field 3] -Type=Label -Left=17 -Right=282 -Top=6 -Bottom=64 - diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi deleted file mode 100644 index 7b93992286..0000000000 --- a/os/windows/installer/install.nsi +++ /dev/null @@ -1,744 +0,0 @@ -# Version numbers to update -!define APPV_MAJOR 1 -!define APPV_MINOR 11 -!define APPV_MAINT 0 -!define APPV_BUILD 0 -!define APPV_EXTRA "-beta1" - -!define APPNAME "OpenTTD" ; Define application name -!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version -!define APPVERSIONINTERNAL "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}.${APPV_BUILD}" ; Define application version in X.X.X.X -!define INSTALLERVERSION ${APPV_MAJOR}${APPV_MINOR}${APPV_MAINT}${APPV_BUILD} -!include ${VERSION_INCLUDE} - -!define APPURLLINK "http://www.openttd.org" -!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}" - -!define OPENGFX_BASE_VERSION "1.2.0" -!define OPENSFX_BASE_VERSION "0.8.0" -!define OPENMSX_BASE_VERSION "1.0.0" - -!define MUI_ICON "..\..\..\media\openttd.ico" -!define MUI_UNICON "..\..\..\media\openttd.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "top.bmp" - -ManifestDPIAware true -BrandingText "OpenTTD Installer" -SetCompressor LZMA - -; Version Info -Var AddWinPrePopulate -VIProductVersion "${APPVERSIONINTERNAL}" -VIAddVersionKey "ProductName" "OpenTTD ${APPBITS}-bit Installer for Windows ${EXTRA_VERSION}" -VIAddVersionKey "Comments" "Installs ${APPNAMEANDVERSION}" -VIAddVersionKey "CompanyName" "OpenTTD Developers" -VIAddVersionKey "FileDescription" "Installs ${APPNAMEANDVERSION}" -VIAddVersionKey "ProductVersion" "${APPVERSION}" -VIAddVersionKey "InternalName" "InstOpenTTD-${APPARCH}" -VIAddVersionKey "FileVersion" "${APPVERSION}-${APPARCH}" -VIAddVersionKey "LegalCopyright" " " -; Main Install settings -Name "${APPNAMEANDVERSION} ${APPBITS}-bit for Windows ${EXTRA_VERSION}" - -; NOTE: Keep trailing backslash! -InstallDirRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Install Folder" -OutFile "openttd-${APPVERSION}-${APPARCH}.exe" -CRCCheck force - -ShowInstDetails show -ShowUninstDetails show - -RequestExecutionLevel admin - -Var SHORTCUTS -Var CDDRIVE - -; Modern interface settings -!include "MUI2.nsh" -!include "InstallOptions.nsh" -!include "WinVer.nsh" - -!define MUI_ABORTWARNING -!define MUI_WELCOMEPAGE_TITLE_3LINES -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "..\..\..\COPYING.md" - -!define MUI_COMPONENTSPAGE_SMALLDESC -!insertmacro MUI_PAGE_COMPONENTS - -;--------------------------------- -; Custom page for finding TTDLX CD -Page custom SelectCDEnter SelectCDExit ": TTD folder" - -!insertmacro MUI_PAGE_DIRECTORY - -;Start Menu Folder Page Configuration -!define MUI_STARTMENUPAGE_DEFAULTFOLDER $SHORTCUTS -!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKEY_LOCAL_MACHINE" -!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Shortcut Folder" - -!insertmacro MUI_PAGE_STARTMENU "OpenTTD" $SHORTCUTS - -!insertmacro MUI_PAGE_INSTFILES - -!define MUI_FINISHPAGE_TITLE_3LINES -!define MUI_FINISHPAGE_RUN_TEXT "Run ${APPNAMEANDVERSION} now!" -!define MUI_FINISHPAGE_RUN "$INSTDIR\openttd.exe" -!define MUI_FINISHPAGE_LINK "Visit the OpenTTD site for more information" -!define MUI_FINISHPAGE_LINK_LOCATION "${APPURLLINK}" -!define MUI_FINISHPAGE_NOREBOOTSUPPORT -!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.md" -!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED -!define MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT DisableBack - -!insertmacro MUI_PAGE_FINISH -!define MUI_PAGE_HEADER_TEXT "Uninstall ${APPNAMEANDVERSION}" -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -; Set languages (first is default language) -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_RESERVEFILE_LANGDLL - -;-------------------------------------------------------------- -; (Core) OpenTTD install section. Copies all internal game data -Section "!OpenTTD" Section1 - ; Make sure to be upgraded OpenTTD is not running - Call CheckOpenTTDRunning - - ; Overwrite files by default, but don't complain on failure - SetOverwrite try - - SetShellVarContext all - - ; Define root variable relative to installer - !define PATH_ROOT "..\..\..\" - - ; Copy language files - SetOutPath "$INSTDIR\lang\" - File ${PATH_ROOT}bin\lang\english.lng - - ; Copy AI files - SetOutPath "$INSTDIR\ai\" - File ${PATH_ROOT}bin\ai\compat_*.nut - - ; Copy Game Script files - SetOutPath "$INSTDIR\game\" - File ${PATH_ROOT}bin\game\compat_*.nut - - ; Copy data files - SetOutPath "$INSTDIR\baseset\" - File ${PATH_ROOT}bin\baseset\*.grf - File ${PATH_ROOT}bin\baseset\*.obg - File ${PATH_ROOT}bin\baseset\*.obm - File ${PATH_ROOT}bin\baseset\*.obs - File ${PATH_ROOT}bin\baseset\opntitle.dat - - ; Copy the scripts - SetOutPath "$INSTDIR\scripts\" - File ${PATH_ROOT}bin\scripts\*.* - Push "$INSTDIR\scripts\README.md" - Call unix2dos - - ; Copy some documentation files - SetOutPath "$INSTDIR\docs\" - File ${PATH_ROOT}docs\multiplayer.md - Push "$INSTDIR\docs\multiplayer.md" - Call unix2dos - - ; Copy the rest of the stuff - SetOutPath "$INSTDIR\" - - ; Copy text files - File ${PATH_ROOT}changelog.txt - Push "$INSTDIR\changelog.txt" - Call unix2dos - File ${PATH_ROOT}COPYING.md - Push "$INSTDIR\COPYING.md" - Call unix2dos - File ${PATH_ROOT}README.md - Push "$INSTDIR\README.md" - Call unix2dos - File ${PATH_ROOT}known-bugs.txt - Push "$INSTDIR\known-bugs.txt" - Call unix2dos - - ; Copy executable - File /oname=openttd.exe ${BINARY_DIR}\openttd.exe - - - ; Delete old files from the main dir. they are now placed in baseset/ and lang/ - Delete "$INSTDIR\*.lng" - Delete "$INSTDIR\*.grf" - Delete "$INSTDIR\sample.cat" - Delete "$INSTDIR\ttd.exe" - Delete "$INSTDIR\data\opntitle.dat" - Delete "$INSTDIR\data\2ccmap.grf" - Delete "$INSTDIR\data\airports.grf" - Delete "$INSTDIR\data\autorail.grf" - Delete "$INSTDIR\data\canalsw.grf" - Delete "$INSTDIR\data\dosdummy.grf" - Delete "$INSTDIR\data\elrailsw.grf" - Delete "$INSTDIR\data\nsignalsw.grf" - Delete "$INSTDIR\data\openttd.grf" - Delete "$INSTDIR\data\roadstops.grf" - Delete "$INSTDIR\data\trkfoundw.grf" - Delete "$INSTDIR\data\openttdd.grf" - Delete "$INSTDIR\data\openttdw.grf" - Delete "$INSTDIR\data\orig_win.obg" - Delete "$INSTDIR\data\orig_dos.obg" - Delete "$INSTDIR\data\orig_dos_de.obg" - Delete "$INSTDIR\data\orig_win.obs" - Delete "$INSTDIR\data\orig_dos.obs" - Delete "$INSTDIR\data\no_sound.obs" - - ; Create the Registry Entries - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Comments" "Visit ${APPURLLINK}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayIcon" "$INSTDIR\openttd.exe,0" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayName" "OpenTTD ${APPVERSION}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion" "${APPVERSION}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "HelpLink" "${APPURLLINK}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Install Folder" "$INSTDIR" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Publisher" "OpenTTD" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Shortcut Folder" "$SHORTCUTS" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString" "$INSTDIR\uninstall.exe" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "URLInfoAbout" "${APPURLLINK}" - ; This key sets the Version DWORD that new installers will check against - WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" ${INSTALLERVERSION} - - !insertmacro MUI_STARTMENU_WRITE_BEGIN "OpenTTD" - CreateShortCut "$DESKTOP\OpenTTD.lnk" "$INSTDIR\openttd.exe" - CreateDirectory "$SMPROGRAMS\$SHORTCUTS" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\OpenTTD.lnk" "$INSTDIR\openttd.exe" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk" "$INSTDIR\uninstall.exe" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" "$INSTDIR\README.md" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk" "$INSTDIR\Changelog.txt" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Known-bugs.lnk" "$INSTDIR\known-bugs.txt" - CreateDirectory "$SMPROGRAMS\$SHORTCUTS\Docs" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Docs\Multiplayer.lnk" "$INSTDIR\docs\multiplayer.md" - CreateDirectory "$SMPROGRAMS\$SHORTCUTS\Scripts" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Scripts\Readme.lnk" "$INSTDIR\scripts\README.md" - !insertmacro MUI_STARTMENU_WRITE_END -SectionEnd - -;-------------------------------------------------------------- -; OpenTTD translation install section. Copies only translations -Section "OpenTTD translations" Section6 - ; Overwrite files by default, but don't complain on failure - SetOverwrite try - - ; Copy language files - SetOutPath "$INSTDIR\lang\" - File ${PATH_ROOT}bin\lang\*.lng -SectionEnd - -;---------------------------------------------------------------------------------- -; OpenGFX files install section. Downloads OpenGFX and installs it -Section "Download OpenGFX (free graphics set)" Section3 - SetOverwrite try - - NSISdl::download "http://binaries.openttd.org/installer/opengfx-${OPENGFX_BASE_VERSION}.7z" "$INSTDIR\baseset\opengfx.7z" - Pop $R0 ;Get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Downloading of OpenGFX failed" - Goto Done - - ; Let's extract the files - SetOutPath "$INSTDIR\baseset\" - NSIS7z::Extract "$INSTDIR\baseset\opengfx.7z" - - Delete "$INSTDIR\baseset\opengfx.7z" - SetOutPath "$INSTDIR\" -Done: - -SectionEnd - -;---------------------------------------------------------------------------------- -; OpenSFX files install section. Downloads OpenSFX and installs it -Section "Download OpenSFX (free sound set)" Section4 - SetOverwrite try - - NSISdl::download "http://binaries.openttd.org/installer/opensfx-${OPENSFX_BASE_VERSION}.7z" "$INSTDIR\baseset\opensfx.7z" - Pop $R0 ;Get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Downloading of OpenSFX failed" - Goto Done - - ; Let's extract the files - SetOutPath "$INSTDIR\baseset\" - NSIS7z::Extract "$INSTDIR\baseset\opensfx.7z" - - Delete "$INSTDIR\baseset\opensfx.7z" - SetOutPath "$INSTDIR\" -Done: - -SectionEnd - -;---------------------------------------------------------------------------------- -; OpenMSX files install section. Downloads OpenMSX and installs it -Section "Download OpenMSX (free music set)" Section5 - SetOverwrite try - - NSISdl::download "http://binaries.openttd.org/installer/openmsx-${OPENMSX_BASE_VERSION}.7z" "$INSTDIR\baseset\openmsx.7z" - Pop $R0 ;Get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Downloading of OpenMSX failed" - Goto Done - - ; Let's extract the files - SetOutPath "$INSTDIR\baseset\" - NSIS7z::Extract "$INSTDIR\baseset\openmsx.7z" - - Delete "$INSTDIR\baseset\openmsx.7z" - SetOutPath "$INSTDIR\" -Done: - -SectionEnd - -;---------------------------------------------------------------------------------- -; TTDLX files install section. Copies all needed TTDLX files from CD or install dir -Section /o "Copy data from Transport Tycoon Deluxe CD-ROM" Section2 - SetOverwrite try - ; Let's copy the files with size approximation - SetOutPath "$INSTDIR\baseset" - CopyFiles "$CDDRIVE\gm\*.gm" "$INSTDIR\baseset\" 1028 - CopyFiles "$CDDRIVE\gm.cat" "$INSTDIR\baseset\gm.cat" 415 - CopyFiles "$CDDRIVE\sample.cat" "$INSTDIR\baseset\sample.cat" 1566 - ; Copy Windows files - CopyFiles "$CDDRIVE\trg1r.grf" "$INSTDIR\baseset\trg1r.grf" 2365 - CopyFiles "$CDDRIVE\trgcr.grf" "$INSTDIR\baseset\trgcr.grf" 260 - CopyFiles "$CDDRIVE\trghr.grf" "$INSTDIR\baseset\trghr.grf" 400 - CopyFiles "$CDDRIVE\trgir.grf" "$INSTDIR\baseset\trgir.grf" 334 - CopyFiles "$CDDRIVE\trgtr.grf" "$INSTDIR\baseset\trgtr.grf" 546 - ; Copy DOS files - CopyFiles "$CDDRIVE\trg1.grf" "$INSTDIR\baseset\trg1.grf" 2365 - CopyFiles "$CDDRIVE\trgc.grf" "$INSTDIR\baseset\trgc.grf" 260 - CopyFiles "$CDDRIVE\trgh.grf" "$INSTDIR\baseset\trgh.grf" 400 - CopyFiles "$CDDRIVE\trgi.grf" "$INSTDIR\baseset\trgi.grf" 334 - CopyFiles "$CDDRIVE\trgt.grf" "$INSTDIR\baseset\trgt.grf" 546 - SetOutPath "$INSTDIR\" -SectionEnd - -;------------------------------------------- -; Install the uninstaller (option is hidden) -Section -FinishSection - WriteUninstaller "$INSTDIR\uninstall.exe" -SectionEnd - -; Modern install component descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${Section1} "Minimal OpenTTD installation in English. You need at least one of the game graphics and sound sets installed." - !insertmacro MUI_DESCRIPTION_TEXT ${Section6} "Translations of OpenTTD." - !insertmacro MUI_DESCRIPTION_TEXT ${Section3} "Download the free OpenGFX game graphics set. This download is about 3 MiB." - !insertmacro MUI_DESCRIPTION_TEXT ${Section4} "Download the free OpenSFX game sound set. This download is about 10 MiB." - !insertmacro MUI_DESCRIPTION_TEXT ${Section5} "Download the free OpenMSX game music set. This download is about 200 KiB." - !insertmacro MUI_DESCRIPTION_TEXT ${Section2} "Copies the game graphics, sounds and music from the Transport Tycoon Deluxe CD." -!insertmacro MUI_FUNCTION_DESCRIPTION_END - -;----------------------------------------------- -; Uninstall section, deletes all installed files -Section "Uninstall" - SetShellVarContext all - - IfFileExists "$INSTDIR\save" 0 NoRemoveSavedGames - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Remove the save game folders located at $\"$INSTDIR\save$\"?$\n \ - If you choose Yes, your saved games will be deleted." \ - IDYES RemoveSavedGames IDNO NoRemoveSavedGames - RemoveSavedGames: - Delete "$INSTDIR\save\autosave\*" - RMDir "$INSTDIR\save\autosave" - Delete "$INSTDIR\save\*" - RMDir "$INSTDIR\save" - NoRemoveSavedGames: - - IfFileExists "$INSTDIR\scenario" 0 NoRemoveScen - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Remove the scenario folders located at $\"$INSTDIR\scenario$\"?$\n \ - If you choose Yes, your scenarios will be deleted." \ - IDYES RemoveScen IDNO NoRemoveScen - RemoveScen: - Delete "$INSTDIR\scenario\heightmap*" - RMDir "$INSTDIR\scenario\heightmap" - Delete "$INSTDIR\scenario\*" - RMDir "$INSTDIR\scenario" - NoRemoveScen: - - ; Remove from registry... - !insertmacro MUI_STARTMENU_GETFOLDER "OpenTTD" $SHORTCUTS - ReadRegStr $SHORTCUTS HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Shortcut Folder" - - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" - - ; Delete self - Delete "$INSTDIR\uninstall.exe" - - ; Delete Shortcuts - Delete "$DESKTOP\OpenTTD.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\OpenTTD.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Known-bugs.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Docs\Multiplayer.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Docs\32bpp.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Scripts\Readme.lnk" - - ; Clean up OpenTTD dir - Delete "$INSTDIR\changelog.txt" - Delete "$INSTDIR\README.md" - Delete "$INSTDIR\known-bugs.txt" - Delete "$INSTDIR\openttd.exe" - Delete "$INSTDIR\COPYING.md" - Delete "$INSTDIR\INSTALL.LOG" - Delete "$INSTDIR\crash.log" - Delete "$INSTDIR\crash.dmp" - Delete "$INSTDIR\openttd.cfg" - Delete "$INSTDIR\hs.dat" - Delete "$INSTDIR\cached_sprites.*" - Delete "$INSTDIR\save\autosave\network*.tmp" ; temporary network file - - ; AI files - Delete "$INSTDIR\ai\compat_*.nut" - - ; Game Script files - Delete "$INSTDIR\game\compat_*.nut" - - ; Baseset files - Delete "$INSTDIR\baseset\opntitle.dat" - Delete "$INSTDIR\baseset\openttd.grf" - Delete "$INSTDIR\baseset\orig_extra.grf" - Delete "$INSTDIR\baseset\orig_win.obg" - Delete "$INSTDIR\baseset\orig_dos.obg" - Delete "$INSTDIR\baseset\orig_dos_de.obg" - Delete "$INSTDIR\baseset\orig_win.obs" - Delete "$INSTDIR\baseset\orig_dos.obs" - Delete "$INSTDIR\baseset\no_sound.obs" - Delete "$INSTDIR\baseset\sample.cat" - Delete "$INSTDIR\baseset\trg1r.grf" - Delete "$INSTDIR\baseset\trghr.grf" - Delete "$INSTDIR\baseset\trgtr.grf" - Delete "$INSTDIR\baseset\trgcr.grf" - Delete "$INSTDIR\baseset\trgir.grf" - Delete "$INSTDIR\baseset\trg1.grf" - Delete "$INSTDIR\baseset\trgh.grf" - Delete "$INSTDIR\baseset\trgt.grf" - Delete "$INSTDIR\baseset\trgc.grf" - Delete "$INSTDIR\baseset\trgi.grf" - Delete "$INSTDIR\baseset\gm.cat" - Delete "$INSTDIR\baseset\gm-tto.cat" - Delete "$INSTDIR\baseset\*.gm" - - Delete "$INSTDIR\data\sample.cat" - Delete "$INSTDIR\data\trg1r.grf" - Delete "$INSTDIR\data\trghr.grf" - Delete "$INSTDIR\data\trgtr.grf" - Delete "$INSTDIR\data\trgcr.grf" - Delete "$INSTDIR\data\trgir.grf" - Delete "$INSTDIR\data\trg1.grf" - Delete "$INSTDIR\data\trgh.grf" - Delete "$INSTDIR\data\trgt.grf" - Delete "$INSTDIR\data\trgc.grf" - Delete "$INSTDIR\data\trgi.grf" - Delete "$INSTDIR\gm\*.gm" - - ; Downloaded OpenGFX/OpenSFX/OpenMSX - Delete "$INSTDIR\baseset\opengfx\*" - RMDir "$INSTDIR\baseset\opengfx" - Delete "$INSTDIR\baseset\opensfx\*" - RMDir "$INSTDIR\baseset\opensfx" - Delete "$INSTDIR\baseset\openmsx\*" - RMDir "$INSTDIR\baseset\openmsx" - - Delete "$INSTDIR\data\opengfx\*" - RMDir "$INSTDIR\data\opengfx" - Delete "$INSTDIR\data\opensfx\*" - RMDir "$INSTDIR\data\opensfx" - Delete "$INSTDIR\gm\openmsx\*" - RMDir "$INSTDIR\gm\openmsx" - - ; Language files - Delete "$INSTDIR\lang\*.lng" - - ; Scripts - Delete "$INSTDIR\scripts\*.*" - - ; Documentation - Delete "$INSTDIR\docs\*.*" - - ; Base sets for music - Delete "$INSTDIR\gm\orig_win.obm" - Delete "$INSTDIR\gm\orig_dos.obm" - Delete "$INSTDIR\gm\no_music.obm" - Delete "$INSTDIR\baseset\orig_win.obm" - Delete "$INSTDIR\baseset\orig_dos.obm" - Delete "$INSTDIR\baseset\no_music.obm" - - ; Remove remaining directories - RMDir "$SMPROGRAMS\$SHORTCUTS\Extras\" - RMDir "$SMPROGRAMS\$SHORTCUTS\Scripts\" - RMDir "$SMPROGRAMS\$SHORTCUTS\Docs\" - RMDir "$SMPROGRAMS\$SHORTCUTS" - RMDir "$INSTDIR\ai" - RMDir "$INSTDIR\game" - RMDir "$INSTDIR\data" - RMDir "$INSTDIR\baseset" - RMDir "$INSTDIR\gm" - RMDir "$INSTDIR\lang" - RMDir "$INSTDIR\scripts" - RMDir "$INSTDIR\docs" - RMDir "$INSTDIR" - -SectionEnd - -;------------------------------------------------------------ -; Custom page function to find the TTDLX CD/install location -Function SelectCDEnter - SectionGetFlags ${Section2} $0 - IntOp $1 $0 & 0x80 ; bit 7 set by upgrade, no need to copy files - IntCmp $1 1 DoneCD ; Upgrade doesn't need copy files - - IntOp $0 $0 & 1 - IntCmp $0 1 NoAbort - Abort -NoAbort: - - GetTempFileName $R0 - !insertmacro MUI_HEADER_TEXT "Locate TTD" "Setup needs the location of Transport Tycoon Deluxe in order to continue." - !insertmacro INSTALLOPTIONS_EXTRACT_AS "CDFinder.ini" "CDFinder" - - ClearErrors - ; Now, let's populate $CDDRIVE - ReadRegStr $R0 HKLM "SOFTWARE\Fish Technology Group\Transport Tycoon Deluxe" "HDPath" - IfErrors NoTTD - StrCmp $CDDRIVE "" 0 Populated - StrCpy $CDDRIVE $R0 -Populated: - StrCpy $AddWinPrePopulate "Setup has detected your TTD folder. Don't change the folder. Simply press Next." - Goto TruFinish -NoTTD: - StrCpy $AddWinPrePopulate "Setup couldn't find TTD. Please enter the path where the graphics files from TTD are stored and press Next to continue." -TruFinish: - ClearErrors - !insertmacro INSTALLOPTIONS_WRITE "CDFinder" "Field 2" "State" $CDDRIVE ; TTDLX path - !insertmacro INSTALLOPTIONS_WRITE "CDFinder" "Field 3" "Text" $AddWinPrePopulate ; Caption -DoneCD: - ; Initialize the dialog *AFTER* we've changed the text otherwise we won't see the changes - !insertmacro INSTALLOPTIONS_INITDIALOG "CDFinder" - !insertmacro INSTALLOPTIONS_SHOW -FunctionEnd - -;---------------------------------------------------------------- -; Custom page function when 'next' is selected for the TTDLX path -Function SelectCDExit - !insertmacro INSTALLOPTIONS_READ $CDDRIVE "CDFinder" "Field 2" "State" - ; If trg1r.grf does not exist at the path, retry with DOS version - IfFileExists $CDDRIVE\trg1r.grf "" DosCD - IfFileExists $CDDRIVE\trgir.grf "" NoCD - IfFileExists $CDDRIVE\sample.cat hasCD NoCD -DosCD: - IfFileExists $CDDRIVE\TRG1.GRF "" NoCD - IfFileExists $CDDRIVE\TRGI.GRF "" NoCD - IfFileExists $CDDRIVE\SAMPLE.CAT hasCD NoCD -NoCD: - MessageBox MB_OK "Setup cannot continue without the Transport Tycoon Deluxe location!" - Abort -hasCD: -FunctionEnd - -;------------------------------------------------------------------------------- -; Determine windows version, returns "win9x" if Win9x/Me/2000/XP SP2- or "winnt" for the rest on the stack -Function GetWindowsVersion - GetVersion::WindowsPlatformArchitecture - Pop $R0 - IntCmp $R0 64 WinNT 0 - ClearErrors - StrCpy $R0 "win9x" - ${If} ${IsNT} - ${If} ${IsWinXP} - ${AndIf} ${AtLeastServicePack} 3 - ${OrIf} ${AtLeastWin2003} - GoTo WinNT - ${EndIf} - ${EndIf} - GoTo Done -WinNT: - StrCpy $R0 "winnt" -Done: - Push $R0 -FunctionEnd - -;------------------------------------------------------------------------------- -; Check whether we're not running an installer for 64 bits on 32 bits and vice versa -Function CheckProcessorArchitecture - GetVersion::WindowsPlatformArchitecture - Pop $R0 - IntCmp $R0 64 Win64 0 - ClearErrors - IntCmp ${APPBITS} 64 0 Done - MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the 64-bit OpenTTD on a 32-bit operating system. This is not going to work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort - GoTo Done -Win64: - ClearErrors - IntCmp ${APPBITS} 64 Done 0 - MessageBox MB_YESNO|MB_ICONINFORMATION "You are trying to install the 32-bit OpenTTD on a 64-bit operating system. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort - GoTo Done -Abort: - Quit -Done: -FunctionEnd - -;------------------------------------------------------------------------------- -; Check whether we're not running an installer for NT on 9x and vice versa -Function CheckWindowsVersion - Call GetWindowsVersion - Pop $R0 - StrCmp $R0 "win9x" 0 WinNT - ClearErrors - StrCmp ${APPARCH} "win9x" Done 0 - MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the Windows XP SP3 and newer version on Windows 95, 98, ME, 2000, or XP without SP3. This will not work - please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort - GoTo Done -WinNT: - ClearErrors - StrCmp ${APPARCH} "win9x" 0 Done - MessageBox MB_YESNO|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98, 2000 and XP without SP3 version on Windows XP SP3 or newer. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort -Abort: - Quit -Done: -FunctionEnd - -;------------------------------------------------------------------------------- -; Check whether OpenTTD is running -Function CheckOpenTTDRunning - IfFileExists "$INSTDIR\openttd.exe" 0 Done -Retry: - FindProcDLL::FindProc "openttd.exe" - Pop $R0 - IntCmp $R0 1 0 Done - ClearErrors - Delete "$INSTDIR\openttd.exe" - IfErrors 0 Done - ClearErrors - MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "OpenTTD is running. Please close it and retry." IDRETRY Retry - Abort -Done: -FunctionEnd - -;------------------------------------------------------------------------------- -; strips all CRs -; and then converts all LFs into CRLFs -; (this is roughly equivalent to "cat file | dos2unix | unix2dos") -; -; usage: -; Push "infile" -; Call unix2dos -; -; beware that this function destroys $0 $1 $2 -Function unix2dos - ClearErrors - - Pop $2 - Rename $2 $2.U2D - FileOpen $1 $2 w - - FileOpen $0 $2.U2D r - - Push $2 ; save name for deleting - - IfErrors unix2dos_done - - ; $0 = file input (opened for reading) - ; $1 = file output (opened for writing) - -unix2dos_loop: - ; read a byte (stored in $2) - FileReadByte $0 $2 - IfErrors unix2dos_done ; EOL - ; skip CR - StrCmp $2 13 unix2dos_loop - ; if LF write an extra CR - StrCmp $2 10 unix2dos_cr unix2dos_write - -unix2dos_cr: - FileWriteByte $1 13 - -unix2dos_write: - ; write byte - FileWriteByte $1 $2 - ; read next byte - Goto unix2dos_loop - -unix2dos_done: - ; close files - FileClose $0 - FileClose $1 - - ; delete original - Pop $0 - Delete $0.U2D - -FunctionEnd - - -Var OLDVERSION -Var UninstallString - -;----------------------------------------------------------------------------------- -; NSIS Initialize function, determine if we are going to install/upgrade or uninstall -Function .onInit - StrCpy $SHORTCUTS "OpenTTD" - - SectionSetSize ${Section3} 6144 - SectionSetSize ${Section4} 13312 - SectionSetSize ${Section5} 1024 - - SectionSetFlags 0 17 - - ; Starts Setup - let's look for an older version of OpenTTD - ReadRegDWORD $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" - - IfErrors ShowWelcomeMessage ShowUpgradeMessage -ShowWelcomeMessage: - ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" - ; In the event someone still has OpenTTD 0.1, this will detect that (that installer used a string instead of dword entry) - IfErrors FinishCallback - -ShowUpgradeMessage: - IntCmp ${INSTALLERVERSION} $R8 VersionsAreEqual InstallerIsOlder WelcomeToSetup -WelcomeToSetup: - ; An older version was found. Let's let the user know there's an upgrade that will take place. - ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion" - ; Gets the older version then displays it in a message box - MessageBox MB_OK|MB_ICONINFORMATION \ - "Welcome to ${APPNAMEANDVERSION} Setup.$\nThis will allow you to upgrade from version $OLDVERSION." - SectionSetFlags ${Section2} 0x80 ; set bit 7 - SectionSetFlags ${Section3} 0x80 ; set bit 7 - SectionSetFlags ${Section4} 0x80 ; set bit 7 - SectionSetFlags ${Section5} 0x80 ; set bit 7 - Goto FinishCallback - -VersionsAreEqual: - ReadRegStr $UninstallString HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString" - IfFileExists "$UninstallString" "" FinishCallback - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Setup detected ${APPNAMEANDVERSION} on your system. This is the same version that this program will install.$\nAre you trying to uninstall it?" \ - IDYES DoUninstall IDNO FinishCallback -DoUninstall: ; You have the same version as this installer. This allows you to uninstall. - Exec "$UninstallString" - Quit - -InstallerIsOlder: - MessageBox MB_OK|MB_ICONSTOP \ - "You have a newer version of ${APPNAME}.$\nSetup will now exit." - Quit - -FinishCallback: - ClearErrors - Call CheckProcessorArchitecture - Call CheckWindowsVersion -FunctionEnd -; eof - diff --git a/os/windows/installer/version_win32.txt b/os/windows/installer/version_win32.txt deleted file mode 100644 index 0ac06d0d19..0000000000 --- a/os/windows/installer/version_win32.txt +++ /dev/null @@ -1,5 +0,0 @@ -!define APPBITS 32 ; Define number of bits for the architecture -!define EXTRA_VERSION "XP SP3 and newer" -!define APPARCH "win32" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}objs\win32\Release" -InstallDir "$PROGRAMFILES32\OpenTTD\" diff --git a/os/windows/installer/version_win64.txt b/os/windows/installer/version_win64.txt deleted file mode 100644 index 15ef51096b..0000000000 --- a/os/windows/installer/version_win64.txt +++ /dev/null @@ -1,5 +0,0 @@ -!define APPBITS 64 ; Define number of bits for the architecture -!define EXTRA_VERSION "XP and newer" -!define APPARCH "win64" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}objs\x64\Release" -InstallDir "$PROGRAMFILES64\OpenTTD\" diff --git a/os/windows/installer/version_win9x.txt b/os/windows/installer/version_win9x.txt deleted file mode 100644 index 603778d73c..0000000000 --- a/os/windows/installer/version_win9x.txt +++ /dev/null @@ -1,5 +0,0 @@ -!define APPBITS 32 ; Define number of bits for the architecture -!define EXTRA_VERSION "95, 98, ME, 2000 and XP SP2 or older" -!define APPARCH "win9x" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}objs\release" -InstallDir "$PROGRAMFILES32\OpenTTD\" diff --git a/os/windows/installer/top.bmp b/os/windows/nsis-top.bmp similarity index 100% rename from os/windows/installer/top.bmp rename to os/windows/nsis-top.bmp diff --git a/os/windows/installer/welcome.bmp b/os/windows/nsis-welcome.bmp similarity index 100% rename from os/windows/installer/welcome.bmp rename to os/windows/nsis-welcome.bmp diff --git a/media/openttd.ico b/os/windows/openttd.ico similarity index 100% rename from media/openttd.ico rename to os/windows/openttd.ico From 4218ebc932950a8751146784ea5dad127bc27b10 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 12:01:32 +0200 Subject: [PATCH 151/601] Fix: [AzurePipelines] switch the CI / CD to CMake too This also means dropping Debian/jessie, as it has a CMake that is too old (3.0), with no real path to upgrade. --- azure-pipelines-ci.yml | 41 +++++++++++---- azure-pipelines/templates/ci-opengfx.yml | 13 +++-- azure-pipelines/templates/linux-build.yml | 5 +- .../templates/linux-claim-bundles.yml | 2 +- azure-pipelines/templates/osx-build.yml | 10 ++-- .../templates/osx-dependencies.yml | 7 --- azure-pipelines/templates/release-bundles.yml | 11 +++- .../templates/release-manifest.yml | 4 +- .../templates/release-prepare-source.yml | 4 +- azure-pipelines/templates/release.yml | 50 ++++++++++--------- azure-pipelines/templates/windows-build.yml | 11 ++-- .../templates/windows-dependency-nsis.yml | 26 ---------- cmake/scripts/FindVersion.cmake | 27 ++++++---- 13 files changed, 117 insertions(+), 94 deletions(-) delete mode 100644 azure-pipelines/templates/windows-dependency-nsis.yml diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index 719ac84b56..463d09b8b4 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -14,23 +14,34 @@ jobs: strategy: matrix: Win32: - BuildPlatform: 'Win32' + BuildArch: 'Win32' + VcpkgTargetTriplet: 'x86-windows-static' Win64: - BuildPlatform: 'x64' + BuildArch: 'x64' + VcpkgTargetTriplet: 'x64-windows-static' steps: - template: azure-pipelines/templates/ci-git-rebase.yml - template: azure-pipelines/templates/windows-dependencies.yml - template: azure-pipelines/templates/ci-opengfx.yml + parameters: + SharedFolder: C:/Users/Public/Documents/OpenTTD - template: azure-pipelines/templates/windows-build.yml parameters: - BuildPlatform: $(BuildPlatform) - BuildConfiguration: Debug - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 - cd projects - call regression.bat + BuildArch: $(BuildArch) + VcpkgTargetTriplet: $(VcpkgTargetTriplet) + BuildConfiguration: 'Debug' + - task: VSBuild@1 + displayName: 'Prepare regression files' + inputs: + solution: build/regression_files.vcxproj + configuration: 'Debug' + - task: VSBuild@1 displayName: 'Test' + inputs: + solution: build/RUN_TESTS.vcxproj + configuration: 'Debug' + - job: linux displayName: 'Linux' @@ -49,7 +60,10 @@ jobs: steps: - template: azure-pipelines/templates/ci-git-rebase.yml # The dockers already have the dependencies installed - # The dockers already have OpenGFX installed + - template: azure-pipelines/templates/ci-opengfx.yml + parameters: + SharedFolder: /usr/local/share/games/openttd + PrefixCommand: sudo - template: azure-pipelines/templates/linux-build.yml parameters: Image: compile-farm-ci @@ -67,6 +81,13 @@ jobs: - template: azure-pipelines/templates/ci-git-rebase.yml - template: azure-pipelines/templates/osx-dependencies.yml - template: azure-pipelines/templates/ci-opengfx.yml + parameters: + SharedFolder: /Library/Application Support/OpenTTD + PrefixCommand: sudo - template: azure-pipelines/templates/osx-build.yml - - script: 'make regression' + - script: | + set -ex + + cd build + CTEST_OUTPUT_ON_FAILURE=1 make test displayName: 'Test' diff --git a/azure-pipelines/templates/ci-opengfx.yml b/azure-pipelines/templates/ci-opengfx.yml index cdee9feca8..60231e3869 100644 --- a/azure-pipelines/templates/ci-opengfx.yml +++ b/azure-pipelines/templates/ci-opengfx.yml @@ -1,8 +1,13 @@ +parameters: + SharedFolder: '/usr/local/share/games/openttd' + PrefixCommand: '' + steps: - bash: | set -ex - cd bin/baseset - curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip > opengfx-all.zip - unzip opengfx-all.zip - rm -f opengfx-all.zip + ${{ parameters.PrefixCommand }} mkdir -p "${{ parameters.SharedFolder }}/baseset" + cd "${{ parameters.SharedFolder }}/baseset" + ${{ parameters.PrefixCommand }} curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + ${{ parameters.PrefixCommand }} unzip opengfx-all.zip + ${{ parameters.PrefixCommand }} rm -f opengfx-all.zip displayName: 'Install OpenGFX' diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml index a173f3364d..88095c9d32 100644 --- a/azure-pipelines/templates/linux-build.yml +++ b/azure-pipelines/templates/linux-build.yml @@ -28,9 +28,12 @@ steps: inputs: command: 'Run an image' imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }} - volumes: '$(Build.SourcesDirectory):$(Build.SourcesDirectory)' + volumes: | + $(Build.SourcesDirectory):$(Build.SourcesDirectory) + /usr/local/share/games/openttd:/usr/local/share/games/openttd workingDirectory: '$(Build.SourcesDirectory)' containerCommand: ${{ parameters.ContainerCommand }} runInBackground: false envVars: | TARGET_BRANCH + CTEST_OUTPUT_ON_FAILURE=1 diff --git a/azure-pipelines/templates/linux-claim-bundles.yml b/azure-pipelines/templates/linux-claim-bundles.yml index 4434dfcc7d..162584f237 100644 --- a/azure-pipelines/templates/linux-claim-bundles.yml +++ b/azure-pipelines/templates/linux-claim-bundles.yml @@ -1,5 +1,5 @@ steps: # Because we run the compile in a docker (under root), we are not owner # of the 'bundles' folder. Fix that by executing a chown on it. -- bash: sudo chown -R $(id -u):$(id -g) bundles +- bash: sudo chown -R $(id -u):$(id -g) build/bundles displayName: 'Claim bundles folder back' diff --git a/azure-pipelines/templates/osx-build.yml b/azure-pipelines/templates/osx-build.yml index ae1724125d..2baabf9327 100644 --- a/azure-pipelines/templates/osx-build.yml +++ b/azure-pipelines/templates/osx-build.yml @@ -1,5 +1,9 @@ steps: -- script: './configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-static' - displayName: 'Configure' -- script: 'make -j2' +- script: | + set -ex + + mkdir build + cd build + cmake .. + make -j2 displayName: 'Build' diff --git a/azure-pipelines/templates/osx-dependencies.yml b/azure-pipelines/templates/osx-dependencies.yml index 0393a56621..d918d12c52 100644 --- a/azure-pipelines/templates/osx-dependencies.yml +++ b/azure-pipelines/templates/osx-dependencies.yml @@ -2,11 +2,4 @@ steps: - script: | set -ex HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng freetype - # Remove the dynamic libraries of these libraries, to ensure we use - # the static versions. That is important, as it is unlikely any - # end-user has these brew libraries installed. - rm /usr/local/Cellar/lzo/*/lib/*.dylib - rm /usr/local/Cellar/xz/*/lib/*.dylib - rm /usr/local/Cellar/libpng/*/lib/*.dylib - rm /usr/local/Cellar/freetype/*/lib/*.dylib displayName: 'Install dependencies' diff --git a/azure-pipelines/templates/release-bundles.yml b/azure-pipelines/templates/release-bundles.yml index 9c5a48b966..f9f9fdcdd9 100644 --- a/azure-pipelines/templates/release-bundles.yml +++ b/azure-pipelines/templates/release-bundles.yml @@ -5,7 +5,14 @@ steps: - ${{ if eq(parameters.CalculateChecksums, true) }}: - bash: | set -ex - cd bundles + cd build/bundles + + # CPack generates sha256, but with a slightly different name than + # our own convention. Also, because we rename files, the content + # might be out of date. To be safe, we remove it and replace it + # with our own version. + rm -f *.sha256 + for i in $(ls); do openssl dgst -r -md5 -hex $i > $i.md5sum openssl dgst -r -sha1 -hex $i > $i.sha1sum @@ -15,5 +22,5 @@ steps: - task: PublishBuildArtifacts@1 displayName: 'Publish bundles' inputs: - PathtoPublish: bundles/ + PathtoPublish: build/bundles/ ArtifactName: bundles diff --git a/azure-pipelines/templates/release-manifest.yml b/azure-pipelines/templates/release-manifest.yml index 9e8b486d5c..9fe30717b4 100644 --- a/azure-pipelines/templates/release-manifest.yml +++ b/azure-pipelines/templates/release-manifest.yml @@ -15,6 +15,6 @@ steps: - script: | set -ex ./azure-pipelines/manifest.sh ../a/bundles/ - mkdir -p bundles - mv manifest.yaml bundles/ + mkdir -p build/bundles + mv manifest.yaml build/bundles/ displayName: 'Create manifest.yaml' diff --git a/azure-pipelines/templates/release-prepare-source.yml b/azure-pipelines/templates/release-prepare-source.yml index b20bf0b350..3eb148aef5 100644 --- a/azure-pipelines/templates/release-prepare-source.yml +++ b/azure-pipelines/templates/release-prepare-source.yml @@ -17,7 +17,9 @@ steps: git checkout -B ${BUILD_SOURCEBRANCHNAME} fi - ./findversion.sh > .ottdrev + # Generate .ottdrev, which contains the version information + cmake -DGENERATE_OTTDREV=1 -P cmake/scripts/FindVersion.cmake + ./azure-pipelines/changelog.sh > .changelog TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date cat .ottdrev | cut -f 1 -d$'\t' > .version diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index b9a5597269..60e2ff5fd1 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -22,9 +22,9 @@ jobs: # Copy back release_date, as it is needed for the template 'release-bundles' cp openttd-$(Build.BuildNumber)/.release_date .release_date - mkdir bundles - tar --xz -cf bundles/openttd-$(Build.BuildNumber)-source.tar.xz openttd-$(Build.BuildNumber) - zip -9 -r -q bundles/openttd-$(Build.BuildNumber)-source.zip openttd-$(Build.BuildNumber) + mkdir -p build/bundles + tar --xz -cf build/bundles/openttd-$(Build.BuildNumber)-source.tar.xz openttd-$(Build.BuildNumber) + zip -9 -r -q build/bundles/openttd-$(Build.BuildNumber)-source.zip openttd-$(Build.BuildNumber) displayName: 'Create bundle' - template: release-bundles.yml @@ -39,10 +39,10 @@ jobs: - script: | set -ex - mkdir -p bundles - cp .changelog bundles/changelog.txt - cp .release_date bundles/released.txt - cp README.md bundles/README.md + mkdir -p build/bundles + cp .changelog build/bundles/changelog.txt + cp .release_date build/bundles/released.txt + cp README.md build/bundles/README.md displayName: 'Copy meta files' - template: release-bundles.yml parameters: @@ -73,33 +73,33 @@ jobs: strategy: matrix: Win32: - BuildPlatform: 'Win32' BundlePlatform: 'win32' + BuildArch: 'Win32' + VcpkgTargetTriplet: 'x86-windows-static' Win64: - BuildPlatform: 'x64' BundlePlatform: 'win64' + BuildArch: 'x64' + VcpkgTargetTriplet: 'x64-windows-static' steps: - template: release-fetch-source.yml - template: windows-dependencies.yml - template: windows-dependency-zip.yml - - ${{ if eq(parameters.IsStableRelease, true) }}: - - template: windows-dependency-nsis.yml - template: windows-build.yml parameters: - BuildPlatform: $(BuildPlatform) - BuildConfiguration: Release + BuildArch: $(BuildArch) + VcpkgTargetTriplet: $(VcpkgTargetTriplet) + BuildConfiguration: 'RelWithDebInfo' + - task: VSBuild@1 + displayName: 'Create bundles' + inputs: + solution: build/PACKAGE.vcxproj + configuration: 'RelWithDebInfo' - bash: | set -ex - make -f Makefile.msvc bundle_pdb bundle_zip PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform) - displayName: 'Create bundles' - - ${{ if eq(parameters.IsStableRelease, true) }}: - - bash: | - set -ex - # NSIS will be part of the Hosted image in the next update. Till then, we set the PATH ourself - export PATH="${PATH}:/c/Program Files (x86)/NSIS" - make -f Makefile.msvc bundle_exe PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform) - displayName: 'Create installer bundle' + + cp build/RelWithDebInfo/openttd.pdb build/bundles/openttd-$(Build.BuildNumber)-windows-$(BundlePlatform).pdb + displayName: 'Copy PDB to bundles folder' - template: release-bundles.yml - ${{ if eq(parameters.IsStableRelease, true) }}: @@ -153,7 +153,11 @@ jobs: - template: release-fetch-source.yml - template: osx-dependencies.yml - template: osx-build.yml - - script: 'make bundle_zip bundle_dmg BUNDLE_NAME=openttd-$(Build.BuildNumber)-macosx' + - script: | + set -ex + + cd build + make package displayName: 'Create bundles' - template: release-bundles.yml diff --git a/azure-pipelines/templates/windows-build.yml b/azure-pipelines/templates/windows-build.yml index 117dd062c1..fccf62d7b9 100644 --- a/azure-pipelines/templates/windows-build.yml +++ b/azure-pipelines/templates/windows-build.yml @@ -1,11 +1,16 @@ parameters: - BuildPlatform: '' + BuildArch: '' + VcpkgTargetTriplet: '' + BuildConfiguration: '' steps: +- task: CMake@1 + displayName: 'Configure' + inputs: + cmakeArgs: '.. -G "Visual Studio 15 2017" -A ${{ parameters.BuildArch }} -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="${{ parameters.VcpkgTargetTriplet }}"' - task: VSBuild@1 displayName: 'Build' inputs: - solution: 'projects/openttd_vs141.sln' - platform: ${{ parameters.BuildPlatform }} + solution: build/openttd.vcxproj configuration: ${{ parameters.BuildConfiguration }} maximumCpuCount: true diff --git a/azure-pipelines/templates/windows-dependency-nsis.yml b/azure-pipelines/templates/windows-dependency-nsis.yml deleted file mode 100644 index 9b54a3ac5f..0000000000 --- a/azure-pipelines/templates/windows-dependency-nsis.yml +++ /dev/null @@ -1,26 +0,0 @@ -parameters: - condition: true - -steps: -- bash: | - set -ex - - mkdir nsis-plugin; cd nsis-plugin - curl -L https://devs.openttd.org/~truebrain/nsis-plugins/Nsis7z.zip > Nsis7z.zip - unzip Nsis7z.zip - cp -R Plugins/* "/c/Program Files (x86)/NSIS/Plugins/" - cd ..; rm -rf nsis-plugin - - mkdir nsis-plugin; cd nsis-plugin - curl -L https://devs.openttd.org/~truebrain/nsis-plugins/NsisGetVersion.zip > NsisGetVersion.zip - unzip NsisGetVersion.zip - cp -R Plugins/* "/c/Program Files (x86)/NSIS/Plugins/x86-ansi/" - cd ..; rm -rf nsis-plugin - - mkdir nsis-plugin; cd nsis-plugin - curl -L https://devs.openttd.org/~truebrain/nsis-plugins/NsisFindProc.zip > NsisFindProc.zip - unzip NsisFindProc.zip - cp -R *.dll "/c/Program Files (x86)/NSIS/Plugins/x86-ansi/" - cd ..; rm -rf nsis-plugin - displayName: 'Install NSIS with the 7z, GetVersion, and FindProc plugins' - condition: and(succeeded(), ${{ parameters.condition }}) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index 5edabeb195..00afa15ca4 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -119,16 +119,21 @@ endif () message(STATUS "Version string: ${REV_VERSION}") -message(STATUS "Generating rev.cpp") -configure_file("${CMAKE_SOURCE_DIR}/src/rev.cpp.in" - "${FIND_VERSION_BINARY_DIR}/rev.cpp") +if (GENERATE_OTTDREV) + message(STATUS "Generating .ottdrev") + file(WRITE ${CMAKE_SOURCE_DIR}/.ottdrev "${REV_VERSION}\t${REV_ISODATE}\t${REV_MODIFIED}\t${REV_HASH}\t${REV_ISTAG}\t${REV_ISSTABLETAG}\t${REV_YEAR}\n") +else (GENERATE_OTTDREV) + message(STATUS "Generating rev.cpp") + configure_file("${CMAKE_SOURCE_DIR}/src/rev.cpp.in" + "${FIND_VERSION_BINARY_DIR}/rev.cpp") -if (WIN32) - message(STATUS "Generating ottdres.rc") - configure_file("${CMAKE_SOURCE_DIR}/src/os/windows/ottdres.rc.in" - "${FIND_VERSION_BINARY_DIR}/ottdres.rc") -endif (WIN32) + if (WIN32) + message(STATUS "Generating ottdres.rc") + configure_file("${CMAKE_SOURCE_DIR}/src/os/windows/ottdres.rc.in" + "${FIND_VERSION_BINARY_DIR}/ottdres.rc") + endif (WIN32) -message(STATUS "Generating CPackProperties.cmake") -configure_file("${CMAKE_SOURCE_DIR}/CPackProperties.cmake.in" - "${CPACK_BINARY_DIR}/CPackProperties.cmake" @ONLY) + message(STATUS "Generating CPackProperties.cmake") + configure_file("${CMAKE_SOURCE_DIR}/CPackProperties.cmake.in" + "${CPACK_BINARY_DIR}/CPackProperties.cmake" @ONLY) +endif (GENERATE_OTTDREV) From 4d04009d12932270da0e492b155cb2e699389c30 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 12:02:04 +0200 Subject: [PATCH 152/601] Codechange: remove #ifdef from .cpp files to exclude features With CMake, these files are simply not compiled to start with. --- src/music/dmusic.cpp | 5 ----- src/os/windows/string_uniscribe.cpp | 4 ---- src/os/windows/string_uniscribe.h | 4 ---- src/sound/xaudio2_s.cpp | 4 ---- 4 files changed, 17 deletions(-) diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 780666142c..b7bee4a4fe 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -7,8 +7,6 @@ /** @file dmusic.cpp Playing music via DirectMusic. */ -#ifdef WIN32_ENABLE_DIRECTMUSIC_SUPPORT - #define INITGUID #include "../stdafx.h" #ifdef WIN32_LEAN_AND_MEAN @@ -1241,6 +1239,3 @@ void MusicDriver_DMusic::SetVolume(byte vol) { _playback.new_volume = vol; } - - -#endif /* WIN32_ENABLE_DIRECTMUSIC_SUPPORT */ diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index ce433364a1..42a003ae17 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -7,8 +7,6 @@ /** @file string_uniscribe.cpp Functions related to laying out text on Win32. */ -#if defined(WITH_UNISCRIBE) - #include "../../stdafx.h" #include "../../debug.h" #include "string_uniscribe.h" @@ -620,5 +618,3 @@ const int *UniscribeParagraphLayout::UniscribeVisualRun::GetGlyphToCharMap() con return this->utf16_to_utf8[this->cur_pos]; } - -#endif /* defined(WITH_UNISCRIBE) */ diff --git a/src/os/windows/string_uniscribe.h b/src/os/windows/string_uniscribe.h index 9470b44b0c..7ec7ca6708 100644 --- a/src/os/windows/string_uniscribe.h +++ b/src/os/windows/string_uniscribe.h @@ -10,8 +10,6 @@ #ifndef STRING_UNISCRIBE_H #define STRING_UNISCRIBE_H -#if defined(WITH_UNISCRIBE) - #include "../../gfx_layout.h" #include "../../string_base.h" #include @@ -85,6 +83,4 @@ public: size_t Prev(IterType what) override; }; -#endif /* defined(WITH_UNISCRIBE) */ - #endif /* STRING_UNISCRIBE_H */ diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp index 5aa0580407..e89e28a78f 100644 --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -7,8 +7,6 @@ /** @file xaudio2_s.cpp XAudio2 sound driver. */ -#ifdef WITH_XAUDIO2 - #include "../stdafx.h" #include "../openttd.h" #include "../driver.h" @@ -267,5 +265,3 @@ void SoundDriver_XAudio2::Stop() FreeLibrary(_xaudio_dll_handle); CoUninitialize(); } - -#endif From 945508b8549505482fd186cc185a93f3fb3e3726 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 7 Apr 2019 12:02:34 +0200 Subject: [PATCH 153/601] Fix: update COMPILING.md stating what changed with CMake --- COMPILING.md | 120 +++++++++++++++++++++------------------------------ 1 file changed, 50 insertions(+), 70 deletions(-) diff --git a/COMPILING.md b/COMPILING.md index 46de5e09e2..64f25f9c22 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -23,7 +23,7 @@ no graphical user interface; you would be building a dedicated server. ## Windows: -You need Microsoft Visual Studio 2015 Update 3 or newer. +You need Microsoft Visual Studio 2017 or more recent. You can download the free Visual Studio Community Edition from Microsoft at https://visualstudio.microsoft.com/vs/community/. @@ -56,86 +56,66 @@ To install both the x64 (64bit) and x86 (32bit) variants (though only one is nec .\vcpkg install liblzma:x86-windows-static libpng:x86-windows-static lzo:x86-windows-static zlib:x86-windows-static ``` -Open the relevant project file and it should build automatically. -- VS 2015: projects/openttd_vs140.sln -- VS 2017: projects/openttd_vs141.sln -- VS 2019: projects/openttd_vs142.sln +You can open the folder (as a CMake project). CMake will be detected, and you can compile from there. -Set the build mode to `Release` in -`Build > Configuration manager > Active solution configuration`. -You can now compile. +Alternatively, you can create a MSVC project file via CMake. For this +either download CMake from https://cmake.org/download/ or use the version +that comes with vcpkg. After that, you can run something similar to this: -If everything works well the binary should be in `objs\Win[32|64]\Release\openttd.exe` -and in `bin\openttd.exe` +```powershell +mkdir build +cd build +cmake.exe .. -G'Visual Studio 16 2019' -DCMAKE_TOOLCHAIN_FILE="\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static" +``` -The OpenTTD wiki may provide additional help with [compiling for Windows](https://wiki.openttd.org/Compiling_on_Windows_using_Microsoft_Visual_C%2B%2B_2015). +Change `` to where you have installed vcpkg. After this +in the build folder are MSVC project files. MSVC can rebuild the project +files himself via the `ZERO_CHECK` project. -You can also build OpenTTD with MSYS2/MinGW-w64 or Cygwin/MinGW using the Makefile. The OpenTTD wiki may provide additional help with [MSYS2](https://wiki.openttd.org/Compiling_on_Windows_using_MSYS2) +## All other platforms -## Linux, Unix, Solaris: - -OpenTTD can be built with GNU '`make`'. On non-GNU systems it is called '`gmake`'. -However, for the first build one has to do a '`./configure`' first. - -The OpenTTD wiki may provide additional help with: - -- [compiling for Linux and *BSD](https://wiki.openttd.org/Compiling_on_%28GNU/%29Linux_and_*BSD) -- [compiling for Solaris](https://wiki.openttd.org/Compiling_on_Solaris) - - -## macOS: - -Use '`make`' or Xcode (which will then call make for you) -This will give you a binary for your CPU type (PPC/Intel) -However, for the first build one has to do a '`./configure`' first. -To make a universal binary type '`./configure --enable-universal`' -instead of '`./configure`'. - -The OpenTTD wiki may provide additional help with [compiling for macOS](https://wiki.openttd.org/Compiling_on_Mac_OS_X). - -## Haiku: - -Use '`make`', but do a '`./configure`' before the first build. - -The OpenTTD wiki may provide additional help with [compiling for Haiku](https://wiki.openttd.org/Compiling_on_Haiku). - -## OS/2: - -A comprehensive GNU build environment is required to build the OS/2 version. - -The OpenTTD wiki may provide additional help with [compiling for OS/2](https://wiki.openttd.org/Compiling_on_OS/2). +```bash +mkdir build +cd build +cmake .. +make +``` ## Supported compilers -The following compilers are tested with and known to compile OpenTTD: - -- Microsoft Visual C++ (MSVC) 2015, 2017 and 2019. -- GNU Compiler Collection (GCC) 4.8 - 9. -- Clang/LLVM 3.9 - 8 - -The following compilers are known not to compile OpenTTD: - -In general, this is because these old versions do not (fully) support modern -C++11 language features. - -- Microsoft Visual C++ (MSVC) 2013 and earlier. -- GNU Compiler Collection (GCC) 4.7 and earlier. -- Clang/LLVM 3.8 and earlier. - -If any of these, or any other, compilers can compile OpenTTD, let us know. -Pull requests to support more compilers are welcome. +Every compiler that is supported by CMake and supports C++11, should be +able to compile OpenTTD. As the exact list of compilers changes constantly, +we refer to the compiler manual to see if it supports C++11, and to CMake +to see if it supports your compiler. ## Compilation of base sets To recompile the extra graphics needed to play with the original Transport Tycoon Deluxe graphics you need GRFCodec (which includes NFORenum) as well. -GRFCodec can be found at https://www.openttd.org/download-grfcodec. -The compilation of these extra graphics does generally not happen, unless -you remove the graphics file using '`make maintainer-clean`'. +GRFCodec can be found at +https://www.openttd.org/downloads/grfcodec-releases/latest.html. -Re-compilation of the base sets, thus also use of '`--maintainer-clean`' can -leave the repository in a modified state as different grfcodec versions can -cause binary differences in the resulting grf. Also translations might have -been added for the base sets which are not yet included in the base set -information files. Use the configure option '`--without-grfcodec`' to avoid -modification of the base set files by the build process. +Having GRFCodec installed can cause regeneration of the `.grf` files, which +are written in the source directory. This can leave your repository in a +modified state, as different GRFCodec versions can cause binary differences +in the resulting `.grf` files. Also translations might have been added for +the base sets which are not yet included in the base set information files. +To avoid this behaviour, disable GRFCodec (and NFORenum) in CMake cache +(`GRFCODEC_EXECUTABLE` and `NFORENUM_EXECUTABLE`). + +## Developers settings + +You can control some flags directly via `CXXFLAGS` (any combination +of these flags will work fine too): + +- `-DRANDOM_DEBUG`: this helps with debugging desyncs. +- `-fno-inline`: this avoids creating inline functions; this can make + debugging a lot easier. +- `-O0`: this disables all optimizations; this can make debugging a + lot easier. +- `-p`: this enables profiling. + +Always use a clean buildfolder if you changing `CXXFLAGS`, as this +value is otherwise cached. Example use: + +`CXXFLAGS="-fno-inline" cmake ..` From 877d196ef5c28321d94c9dfd978b7cae35672533 Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 5 Jun 2020 21:43:22 +0200 Subject: [PATCH 154/601] Fix: Incorrect REV_YEAR, and parsing of .ottdrev --- cmake/scripts/FindVersion.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index 00afa15ca4..d48664fc89 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -49,7 +49,7 @@ if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") ) string(REGEX REPLACE "([0-9]+)-([0-9]+)-([0-9]+).*" "\\1\\2\\3" COMMITDATE "${COMMITDATE}") set(REV_ISODATE "${COMMITDATE}") - string(SUBSTRING REV_ISODATE 1 4 REV_YEAR) + string(SUBSTRING "${REV_ISODATE}" 0 4 REV_YEAR) # Get the branch execute_process(COMMAND ${GIT_EXECUTABLE} symbolic-ref -q HEAD @@ -98,6 +98,7 @@ if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") set(ENV{LC_ALL} "${SAVED_LC_ALL}") elseif (EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") file(READ "${CMAKE_SOURCE_DIR}/.ottdrev" OTTDREV) + string(REPLACE "\n" "" OTTDREV "${OTTDREV}") string(REPLACE "\t" ";" OTTDREV "${OTTDREV}") list(GET OTTDREV 0 REV_VERSION) list(GET OTTDREV 1 REV_ISODATE) From b145ee310c042212ce5d6520383f7ef2e5691c21 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 6 Jun 2020 17:48:18 +0200 Subject: [PATCH 155/601] Fix: MacOS bundle creation --- cmake/PackageBundle.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/PackageBundle.cmake b/cmake/PackageBundle.cmake index 6d0085a32a..a443da3c4b 100644 --- a/cmake/PackageBundle.cmake +++ b/cmake/PackageBundle.cmake @@ -18,6 +18,7 @@ install( CODE " include(BundleUtilities) + set(BU_CHMOD_BUNDLE_ITEMS TRUE) fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/openttd\" \"\" \"\") " DESTINATION . From 3d8597d42ef5ef10325389aa866c8c136cde9412 Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Thu, 4 Jun 2020 14:25:23 +1200 Subject: [PATCH 156/601] Cleanup: Add undocumented parameter to GetSpriteSize. --- src/gfx.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gfx.cpp b/src/gfx.cpp index 0768373416..a5e5772050 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -902,6 +902,7 @@ void DrawCharCentered(WChar c, int x, int y, TextColour colour) * Get the size of a sprite. * @param sprid Sprite to examine. * @param[out] offset Optionally returns the sprite position offset. + * @param zoom The zoom level applicable to the sprite. * @return Sprite size in pixels. * @note The size assumes (0, 0) as top-left coordinate and ignores any part of the sprite drawn at the left or above that position. */ From fe1925931d671f7ff02c29558b2c61ae9fc8fbb5 Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Sat, 6 Jun 2020 16:15:23 +1200 Subject: [PATCH 157/601] Cleanup: Correct typographic errors in code comments. --- src/cargopacket.h | 4 ++-- src/video/null_v.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cargopacket.h b/src/cargopacket.h index e34298895c..9892956211 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -423,7 +423,7 @@ public: uint Reroute(uint max_move, VehicleCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge); /** - * Are two the two CargoPackets mergeable in the context of + * Are the two CargoPackets mergeable in the context of * a list of CargoPackets for a Vehicle? * @param cp1 First CargoPacket. * @param cp2 Second CargoPacket. @@ -486,7 +486,7 @@ public: while (!next.IsEmpty()) { if (this->packets.find(next.Pop()) != this->packets.end()) return true; } - /* Packets for INVALID_STTION can go anywhere. */ + /* Packets for INVALID_STATION can go anywhere. */ return this->packets.find(INVALID_STATION) != this->packets.end(); } diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp index 2fa45e1bc8..707045040d 100644 --- a/src/video/null_v.cpp +++ b/src/video/null_v.cpp @@ -5,7 +5,7 @@ * 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 null_v.cpp The videio driver that doesn't blit. */ +/** @file null_v.cpp The video driver that doesn't blit. */ #include "../stdafx.h" #include "../gfx_func.h" From 90e849198fbac0136ca9bb9149e53f25265eeab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Sun, 7 Jun 2020 12:06:40 +0200 Subject: [PATCH 158/601] Fix: [CMake] Error when SDL2 provides SDL2Config --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 77ae77cef3..7b9788f2e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,7 +157,7 @@ link_package(XDG_basedir) if (NOT OPTION_DEDICATED) link_package(Fluidsynth) link_package(SDL) - link_package(SDL2) + link_package(SDL2 TARGET SDL2::SDL2) link_package(Allegro) link_package(FREETYPE TARGET Freetype::Freetype) link_package(Fontconfig TARGET Fontconfig::Fontconfig) From f51e66f697e2956d57671afd90a57ca932356756 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 7 Jun 2020 02:52:37 +0200 Subject: [PATCH 159/601] Fix: Restore zip bundle for MacOS --- cmake/InstallAndPackage.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index d23fa92b7c..1994c07089 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -81,7 +81,7 @@ set(CPACK_STRIP_FILES YES) set(CPACK_OUTPUT_FILE_PREFIX "bundles") if (APPLE) - set(CPACK_GENERATOR "Bundle") + set(CPACK_GENERATOR "ZIP;Bundle") include(PackageBundle) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx") From 3d766775948fefa9ffe6e564dce844b24e2f11e0 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 7 Jun 2020 04:34:50 +0200 Subject: [PATCH 160/601] Fix: Generate windows installer only for stable releases --- azure-pipelines/templates/release.yml | 2 ++ azure-pipelines/templates/windows-build.yml | 3 ++- cmake/InstallAndPackage.cmake | 7 +++++-- cmake/Options.cmake | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index 60e2ff5fd1..9c126a8f37 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -90,6 +90,8 @@ jobs: BuildArch: $(BuildArch) VcpkgTargetTriplet: $(VcpkgTargetTriplet) BuildConfiguration: 'RelWithDebInfo' + ${{ if eq(parameters.IsStableRelease, true) }}: + OptionUseNSIS: "YES" - task: VSBuild@1 displayName: 'Create bundles' inputs: diff --git a/azure-pipelines/templates/windows-build.yml b/azure-pipelines/templates/windows-build.yml index fccf62d7b9..07e42a7cee 100644 --- a/azure-pipelines/templates/windows-build.yml +++ b/azure-pipelines/templates/windows-build.yml @@ -2,12 +2,13 @@ parameters: BuildArch: '' VcpkgTargetTriplet: '' BuildConfiguration: '' + OptionUseNSIS: 'NO' steps: - task: CMake@1 displayName: 'Configure' inputs: - cmakeArgs: '.. -G "Visual Studio 15 2017" -A ${{ parameters.BuildArch }} -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="${{ parameters.VcpkgTargetTriplet }}"' + cmakeArgs: '.. -G "Visual Studio 15 2017" -A ${{ parameters.BuildArch }} -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="${{ parameters.VcpkgTargetTriplet }}" -DOPTION_USE_NSIS="${{ parameters.OptionUseNSIS }}"' - task: VSBuild@1 displayName: 'Build' inputs: diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 1994c07089..1cc539d2d3 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -86,8 +86,11 @@ if (APPLE) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx") elseif (WIN32) - set(CPACK_GENERATOR "ZIP;NSIS") - include(PackageNSIS) + set(CPACK_GENERATOR "ZIP") + if (OPTION_USE_NSIS) + list(APPEND CPACK_GENERATOR "NSIS") + include(PackageNSIS) + endif (OPTION_USE_NSIS) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-windows-${CPACK_SYSTEM_NAME}") elseif (UNIX) diff --git a/cmake/Options.cmake b/cmake/Options.cmake index b292567f04..51c8b78860 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -50,6 +50,7 @@ function(set_options) option(OPTION_INSTALL_FHS "Install with Filesstem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" YES) option(OPTION_USE_THREADS "Use threads" YES) + option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" NO) endfunction() # Show the values of the generic options. @@ -61,6 +62,7 @@ function(show_options) message(STATUS "Option Install FHS - ${OPTION_INSTALL_FHS}") message(STATUS "Option Use assert - ${OPTION_USE_ASSERTS}") message(STATUS "Option Use threads - ${OPTION_USE_THREADS}") + message(STATUS "Option Use NSIS - ${OPTION_USE_NSIS}") endfunction() # Add the definitions for the options that are selected. From 1e01982a2e36b532d0bdf3768827eb7233b0ecee Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 7 Jun 2020 15:03:55 +0200 Subject: [PATCH 161/601] Fix: Restore compression of pdb --- azure-pipelines/templates/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index 9c126a8f37..8a666ad5a8 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -101,6 +101,7 @@ jobs: set -ex cp build/RelWithDebInfo/openttd.pdb build/bundles/openttd-$(Build.BuildNumber)-windows-$(BundlePlatform).pdb + xz -9 build/bundles/openttd-$(Build.BuildNumber)-windows-$(BundlePlatform).pdb displayName: 'Copy PDB to bundles folder' - template: release-bundles.yml From 0b86bd8b03a333b2c0a1900901c3535a188e475d Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 7 Jun 2020 16:11:36 +0200 Subject: [PATCH 162/601] Fix: CMake option values should be ON/OFF --- azure-pipelines/templates/release.yml | 2 +- azure-pipelines/templates/windows-build.yml | 2 +- cmake/Options.cmake | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index 8a666ad5a8..f6a00b7cf2 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -91,7 +91,7 @@ jobs: VcpkgTargetTriplet: $(VcpkgTargetTriplet) BuildConfiguration: 'RelWithDebInfo' ${{ if eq(parameters.IsStableRelease, true) }}: - OptionUseNSIS: "YES" + OptionUseNSIS: "ON" - task: VSBuild@1 displayName: 'Create bundles' inputs: diff --git a/azure-pipelines/templates/windows-build.yml b/azure-pipelines/templates/windows-build.yml index 07e42a7cee..ae3b894144 100644 --- a/azure-pipelines/templates/windows-build.yml +++ b/azure-pipelines/templates/windows-build.yml @@ -2,7 +2,7 @@ parameters: BuildArch: '' VcpkgTargetTriplet: '' BuildConfiguration: '' - OptionUseNSIS: 'NO' + OptionUseNSIS: 'OFF' steps: - task: CMake@1 diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 51c8b78860..0e8063fac0 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -41,16 +41,16 @@ endfunction() # function(set_options) if (UNIX AND NOT APPLE) - set(DEFAULT_OPTION_INSTALL_FHS YES) + set(DEFAULT_OPTION_INSTALL_FHS ON) else (UNIX AND NOT APPLE) - set(DEFAULT_OPTION_INSTALL_FHS NO) + set(DEFAULT_OPTION_INSTALL_FHS OFF) endif (UNIX AND NOT APPLE) - option(OPTION_DEDICATED "Build dedicated server only (no GUI)" NO) + option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) option(OPTION_INSTALL_FHS "Install with Filesstem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) - option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" YES) - option(OPTION_USE_THREADS "Use threads" YES) - option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" NO) + option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) + option(OPTION_USE_THREADS "Use threads" ON) + option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF) endfunction() # Show the values of the generic options. From 40436019fd05abf5c92daf8a6d0388d32a36c5a3 Mon Sep 17 00:00:00 2001 From: Miguel Horta Date: Mon, 8 Jun 2020 21:22:49 +0100 Subject: [PATCH 163/601] Fix: Display banlist's indexes correctly Bug introduced via commit ab711e6942 --- src/console_cmds.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 4706bfd914..857dc61ad9 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -606,6 +606,7 @@ DEF_CONSOLE_CMD(ConBanList) uint i = 1; for (const auto &entry : _network_ban_list) { IConsolePrintF(CC_DEFAULT, " %d) %s", i, entry.c_str()); + i++; } return true; From caab095e4ea202ccbe09b4c3f2ea6e36070bef29 Mon Sep 17 00:00:00 2001 From: arikover Date: Tue, 9 Jun 2020 11:58:02 +0200 Subject: [PATCH 164/601] Fix: [CMake] SDL2 Sound was not included --- src/sound/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt index 35f65d1205..24a38e409f 100644 --- a/src/sound/CMakeLists.txt +++ b/src/sound/CMakeLists.txt @@ -11,6 +11,12 @@ if (NOT OPTION_DEDICATED) CONDITION SDL_FOUND ) + add_files( + sdl2_s.cpp + sdl_s.h + CONDITION SDL2_FOUND + ) + add_files( cocoa_s.cpp cocoa_s.h From 8652a4db76c978598918bfdb600a3453d794930a Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Mon, 8 Jun 2020 10:38:06 +1200 Subject: [PATCH 165/601] Cleanup: Give `SetDirtyBlocks` a more descriptive name. --- src/gfx.cpp | 27 ++++++++++++++++++--------- src/gfx_func.h | 2 +- src/news_gui.cpp | 2 +- src/viewport.cpp | 2 +- src/widget.cpp | 2 +- src/window.cpp | 4 ++-- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index a5e5772050..6039946fc6 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1416,6 +1416,16 @@ void DrawMouseCursor() _cursor.dirty = false; } +/** + * Repaints a specific rectangle of the screen. + * + * @param left,top,right,bottom The area of the screen that needs repainting + * @pre The rectangle should have been previously marked dirty with \c AddDirtyBlock. + * @see AddDirtyBlock + * @see DrawDirtyBlocks + * @ingroup dirty + * + */ void RedrawScreenRect(int left, int top, int right, int bottom) { assert(right <= _screen.width && bottom <= _screen.height); @@ -1438,7 +1448,9 @@ void RedrawScreenRect(int left, int top, int right, int bottom) /** * Repaints the rectangle blocks which are marked as 'dirty'. * - * @see SetDirtyBlocks + * @see AddDirtyBlock + * + * @ingroup dirty */ void DrawDirtyBlocks() { @@ -1541,21 +1553,18 @@ void DrawDirtyBlocks() } /** - * This function extends the internal _invalid_rect rectangle as it - * now contains the rectangle defined by the given parameters. Note - * the point (0,0) is top left. + * Extend the internal _invalid_rect rectangle to contain the rectangle + * defined by the given parameters. Note the point (0,0) is top left. * * @param left The left edge of the rectangle * @param top The top edge of the rectangle * @param right The right edge of the rectangle * @param bottom The bottom edge of the rectangle * @see DrawDirtyBlocks + * @ingroup dirty * - * @todo The name of the function should be called like @c AddDirtyBlock as - * it neither set a dirty rect nor add several dirty rects although - * the function name is in plural. (Progman) */ -void SetDirtyBlocks(int left, int top, int right, int bottom) +void AddDirtyBlock(int left, int top, int right, int bottom) { byte *b; int width; @@ -1600,7 +1609,7 @@ void SetDirtyBlocks(int left, int top, int right, int bottom) */ void MarkWholeScreenDirty() { - SetDirtyBlocks(0, 0, _screen.width, _screen.height); + AddDirtyBlock(0, 0, _screen.width, _screen.height); } /** diff --git a/src/gfx_func.h b/src/gfx_func.h index 0ccdabac3d..0edbf722a1 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -131,7 +131,7 @@ Point GetCharPosInString(const char *str, const char *ch, FontSize start_fontsiz const char *GetCharAtPosition(const char *str, int x, FontSize start_fontsize = FS_NORMAL); void DrawDirtyBlocks(); -void SetDirtyBlocks(int left, int top, int right, int bottom); +void AddDirtyBlock(int left, int top, int right, int bottom); void MarkWholeScreenDirty(); void GfxInitPalettes(); diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 01b69677e3..9993645c43 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -571,7 +571,7 @@ private: if (this->viewport != nullptr) this->viewport->top += newtop - this->top; this->top = newtop; - SetDirtyBlocks(this->left, mintop, this->left + this->width, maxtop + this->height); + AddDirtyBlock(this->left, mintop, this->left + this->width, maxtop + this->height); } StringID GetCompanyMessageString() const diff --git a/src/viewport.cpp b/src/viewport.cpp index 1c9dca1ef6..28345db607 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1886,7 +1886,7 @@ static void MarkViewportDirty(const ViewPort *vp, int left, int top, int right, if (top >= vp->virtual_height) return; - SetDirtyBlocks( + AddDirtyBlock( UnScaleByZoomLower(left, vp->zoom) + vp->left, UnScaleByZoomLower(top, vp->zoom) + vp->top, UnScaleByZoom(right, vp->zoom) + vp->left + 1, diff --git a/src/widget.cpp b/src/widget.cpp index eb683c4128..579b7efb64 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -774,7 +774,7 @@ void NWidgetBase::SetDirty(const Window *w) const { int abs_left = w->left + this->pos_x; int abs_top = w->top + this->pos_y; - SetDirtyBlocks(abs_left, abs_top, abs_left + this->current_x, abs_top + this->current_y); + AddDirtyBlock(abs_left, abs_top, abs_left + this->current_x, abs_top + this->current_y); } /** diff --git a/src/window.cpp b/src/window.cpp index 30fa4d3d12..e7bc6d2c4b 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -983,7 +983,7 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom) */ void Window::SetDirty() const { - SetDirtyBlocks(this->left, this->top, this->left + this->width, this->top + this->height); + AddDirtyBlock(this->left, this->top, this->left + this->width, this->top + this->height); } /** @@ -3493,7 +3493,7 @@ static int PositionWindow(Window *w, WindowClass clss, int setting) default: w->left = 0; break; } if (w->viewport != nullptr) w->viewport->left += w->left - old_left; - SetDirtyBlocks(0, w->top, _screen.width, w->top + w->height); // invalidate the whole row + AddDirtyBlock(0, w->top, _screen.width, w->top + w->height); // invalidate the whole row return w->left; } From ee570e1b6dbd3b8e0f55f31f05c774e57c9a1e8f Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Tue, 9 Jun 2020 10:18:23 +1200 Subject: [PATCH 166/601] Cleanup: Fix typos in code comments. --- src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index e7bc6d2c4b..9fea6d1026 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -655,7 +655,7 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count) WidgetType widget_type = (nw != nullptr) ? nw->type : WWT_EMPTY; bool focused_widget_changed = false; - /* If clicked on a window that previously did dot have focus */ + /* If clicked on a window that previously did not have focus */ if (_focused_window != w && // We already have focus, right? (w->window_desc->flags & WDF_NO_FOCUS) == 0 && // Don't lose focus to toolbars widget_type != WWT_CLOSEBOX) { // Don't change focused window if 'X' (close button) was clicked From 8ef3d8f584fdc97c02bdc25e6d13d4c8bb4251ff Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 9 Jun 2020 01:20:43 +0200 Subject: [PATCH 167/601] Revert f51e66f6: creating zip bundle fails for MacOS --- cmake/InstallAndPackage.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 1cc539d2d3..a84707bc22 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -81,7 +81,7 @@ set(CPACK_STRIP_FILES YES) set(CPACK_OUTPUT_FILE_PREFIX "bundles") if (APPLE) - set(CPACK_GENERATOR "ZIP;Bundle") + set(CPACK_GENERATOR "Bundle") include(PackageBundle) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx") From fb7723a9d7b2e702ecab3514c84f9c8137a69cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Fri, 12 Jun 2020 16:33:04 +0200 Subject: [PATCH 168/601] Add: [CMake] Always export compile commands (#8199) --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b9788f2e8..605f4b0a25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,6 +91,8 @@ endif (MSVC) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) +set(CMAKE_EXPORT_COMPILE_COMMANDS YES) + list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp") if (WIN32) list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") From 208614343fa6f5f190ea821ab9a0b420c3e0d636 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 12 Jun 2020 19:45:39 +0200 Subject: [PATCH 169/601] Update: Translations from eints polish: 1 change by MaksOPENTTD1 danish: 1 change by beruic --- src/lang/danish.txt | 1 + src/lang/polish.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index f501b89c45..f240ff3a7f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -935,6 +935,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk Peso STR_GAME_OPTIONS_CURRENCY_NTD :Ny Taiwan dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kinesisk Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupi (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vejkøretøjer diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 463f21b0d0..257648067c 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1315,6 +1315,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso meksykańs STR_GAME_OPTIONS_CURRENCY_NTD :Nowy dolar tajwański (TWD) STR_GAME_OPTIONS_CURRENCY_CNY :Juan chiński (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Dolar hongkoński (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rupia Indyjska (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Pojazdy drogowe From c9aff698d037c8e29620a9666ed37425f75abf62 Mon Sep 17 00:00:00 2001 From: nikolas Date: Thu, 18 Jun 2020 03:53:06 -0400 Subject: [PATCH 170/601] Fix #8104: Always add WINDOW_RESIZABLE flag to SDL2 (#8211) This fixes a bug that can reproduced with these steps: * Start openttd in fullscreen mode * Turn off fullscreen mode * Try to resize the window. The window can't be resized. --- src/video/sdl2_v.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 0dff1af4c5..c599de65e2 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -258,12 +258,10 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h, bool resize) seprintf(caption, lastof(caption), "OpenTTD %s", _openttd_revision); if (_sdl_window == nullptr) { - Uint32 flags = SDL_WINDOW_SHOWN; + Uint32 flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE; if (_fullscreen) { flags |= SDL_WINDOW_FULLSCREEN; - } else { - flags |= SDL_WINDOW_RESIZABLE; } _sdl_window = SDL_CreateWindow( From 9895ced6af96b2e6d2e2569383c72a4c6b930286 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 6 Jun 2020 19:25:42 +0200 Subject: [PATCH 171/601] Fix: Silence some warnings when building with clang-cl on VS 2019 Clang-cl presents as both _MSC_VER and __clang__ in the preprocessor which makes some things confusing. --- src/3rdparty/squirrel/squirrel/sqcompiler.h | 2 +- src/stdafx.h | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.h b/src/3rdparty/squirrel/squirrel/sqcompiler.h index b29917390b..08946fb60c 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.h +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.h @@ -72,7 +72,7 @@ struct SQVM; #define TK_CONST 324 /* MSVC doesn't like NORETURN for function prototypes, but we kinda need it for GCC. */ -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__clang__) typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s); #else typedef NORETURN void(*CompilerErrorFunc)(void *ud, const SQChar *s); diff --git a/src/stdafx.h b/src/stdafx.h index c520925537..dcea753830 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -10,6 +10,13 @@ #ifndef STDAFX_H #define STDAFX_H +#ifdef _MSC_VER + /* Stop Microsoft (and clang-cl) compilers from complaining about potentially-unsafe/potentially-non-standard functions */ +# define _CRT_SECURE_NO_DEPRECATE +# define _CRT_SECURE_NO_WARNINGS +# define _CRT_NONSTDC_NO_WARNINGS +#endif + #if defined(__APPLE__) #include "os/macosx/osx_stdafx.h" #endif /* __APPLE__ */ @@ -177,7 +184,6 @@ #endif /* (_MSC_VER < 1400) */ #pragma warning(disable: 4291) // no matching operator delete found; memory will not be freed if initialization throws an exception (reason: our overloaded functions never throw an exception) #pragma warning(disable: 4996) // 'function': was declared deprecated - #define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions #pragma warning(disable: 6308) // code analyzer: 'realloc' might return null pointer: assigning null pointer to 't_ptr', which is passed as an argument to 'realloc', will cause the original memory block to be leaked #pragma warning(disable: 6011) // code analyzer: Dereferencing NULL pointer 'pfGetAddrInfo': Lines: 995, 996, 998, 999, 1001 #pragma warning(disable: 6326) // code analyzer: potential comparison of a constant with another constant @@ -198,7 +204,11 @@ #define CDECL _cdecl #define WARN_FORMAT(string, args) - #define FINAL sealed +# ifndef __clang__ +# define FINAL sealed +# else +# define FINAL +# endif /* fallthrough attribute, VS 2017 */ #if (_MSC_VER >= 1910) From d8182b7e1533027d43da6508652ecfc1b056548f Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 14 Jun 2020 13:04:26 +0200 Subject: [PATCH 172/601] Change: Allow command cost-estimation while paused. --- src/command.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/command.cpp b/src/command.cpp index 8890381784..453f305d38 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -575,7 +575,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac int x = TileX(tile) * TILE_SIZE; int y = TileY(tile) * TILE_SIZE; - if (_pause_mode != PM_UNPAUSED && !IsCommandAllowedWhilePaused(cmd)) { + if (_pause_mode != PM_UNPAUSED && !IsCommandAllowedWhilePaused(cmd) && !estimate_only) { ShowErrorMessage(GB(cmd, 16, 16), STR_ERROR_NOT_ALLOWED_WHILE_PAUSED, WL_INFO, x, y); return false; } From 084b073e57817199fc679179d8b0e4520b10e606 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 15 Jun 2020 18:53:13 +0100 Subject: [PATCH 173/601] Codechange: Use template type for GUIList::Sort comparator --- src/sortlist_type.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sortlist_type.h b/src/sortlist_type.h index a8730d96d9..e5bfe06a91 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -250,7 +250,8 @@ public: * @return true if the list sequence has been altered * */ - bool Sort(SortFunction *compare) + template + bool Sort(Comp compare) { /* Do not sort if the resort bit is not set */ if (!(this->flags & VL_RESORT)) return false; From d830a34394a1ef9e9fa574914a01a9dd79c5c2f9 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 15 Jun 2020 18:36:33 +0100 Subject: [PATCH 174/601] Fix: Violation of strict weak ordering in engine name sorter This could be caused by an engine being renamed, and the old name being cached from a previous sort. See: #7838 --- src/build_vehicle_gui.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index c3252f7b9e..a761e9b136 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -125,6 +125,9 @@ static bool EngineIntroDateSorter(const EngineID &a, const EngineID &b) return _engine_sort_direction ? r > 0 : r < 0; } +/* cached values for EngineNameSorter to spare many GetString() calls */ +static EngineID _last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE }; + /** * Determines order of engines by name * @param a first engine to compare @@ -133,17 +136,16 @@ static bool EngineIntroDateSorter(const EngineID &a, const EngineID &b) */ static bool EngineNameSorter(const EngineID &a, const EngineID &b) { - static EngineID last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE }; - static char last_name[2][64] = { "\0", "\0" }; + static char last_name[2][64] = { "", "" }; - if (a != last_engine[0]) { - last_engine[0] = a; + if (a != _last_engine[0]) { + _last_engine[0] = a; SetDParam(0, a); GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0])); } - if (b != last_engine[1]) { - last_engine[1] = b; + if (b != _last_engine[1]) { + _last_engine[1] = b; SetDParam(0, b); GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1])); } @@ -1292,6 +1294,9 @@ struct BuildVehicleWindow : Window { this->SelectEngine(sel_id); + /* invalidate cached values for name sorter - engine names could change */ + _last_engine[0] = _last_engine[1] = INVALID_ENGINE; + /* make engines first, and then wagons, sorted by selected sort_criteria */ _engine_sort_direction = false; EngList_Sort(&this->eng_list, TrainEnginesThenWagonsSorter); From c167648d75428e6ff93f903de65df0cab0370bb6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 15 Jun 2020 18:40:51 +0100 Subject: [PATCH 175/601] Fix: Violation of strict weak ordering in group name sorters This could be caused by a group being renamed, and the old name being cached from a previous sort. See: #7838 --- src/company_gui.cpp | 44 +++++++++++++++++++++----------------------- src/group_gui.cpp | 45 +++++++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 423efcb01f..f4fe7f8030 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -615,28 +615,6 @@ private: ShowDropDownList(this, std::move(list), sel, widget); } - static bool GroupNameSorter(const Group * const &a, const Group * const &b) - { - static const Group *last_group[2] = { nullptr, nullptr }; - static char last_name[2][64] = { "", "" }; - - if (a != last_group[0]) { - last_group[0] = a; - SetDParam(0, a->index); - GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0])); - } - - if (b != last_group[1]) { - last_group[1] = b; - SetDParam(0, b->index); - GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1])); - } - - int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting). - if (r == 0) return a->index < b->index; - return r < 0; - } - void AddChildren(GUIGroupList *source, GroupID parent, int indent) { for (const Group *g : *source) { @@ -665,7 +643,27 @@ private: } list.ForceResort(); - list.Sort(&GroupNameSorter); + + /* Sort the groups by their name */ + const Group *last_group[2] = { nullptr, nullptr }; + char last_name[2][64] = { "", "" }; + list.Sort([&](const Group * const &a, const Group * const &b) -> bool { + if (a != last_group[0]) { + last_group[0] = a; + SetDParam(0, a->index); + GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0])); + } + + if (b != last_group[1]) { + last_group[1] = b; + SetDParam(0, b->index); + GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1])); + } + + int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting). + if (r == 0) return a->index < b->index; + return r < 0; + }); AddChildren(&list, INVALID_GROUP, 0); } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 0bf8589ac5..8d0bba8fbb 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -141,29 +141,6 @@ private: } } - /** Sort the groups by their name */ - static bool GroupNameSorter(const Group * const &a, const Group * const &b) - { - static const Group *last_group[2] = { nullptr, nullptr }; - static char last_name[2][64] = { "", "" }; - - if (a != last_group[0]) { - last_group[0] = a; - SetDParam(0, a->index); - GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0])); - } - - if (b != last_group[1]) { - last_group[1] = b; - SetDParam(0, b->index); - GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1])); - } - - int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting). - if (r == 0) return a->index < b->index; - return r < 0; - } - /** * (Re)Build the group list. * @@ -185,7 +162,27 @@ private: } list.ForceResort(); - list.Sort(&GroupNameSorter); + + /* Sort the groups by their name */ + const Group *last_group[2] = { nullptr, nullptr }; + char last_name[2][64] = { "", "" }; + list.Sort([&](const Group * const &a, const Group * const &b) { + if (a != last_group[0]) { + last_group[0] = a; + SetDParam(0, a->index); + GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0])); + } + + if (b != last_group[1]) { + last_group[1] = b; + SetDParam(0, b->index); + GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1])); + } + + int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting). + if (r == 0) return a->index < b->index; + return r < 0; + }); AddChildren(&list, INVALID_GROUP, 0); From b0f192abc4e8bdd9f5f46f6932b8308e32b7b4b6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 6 May 2020 23:41:25 +0100 Subject: [PATCH 176/601] Fix: Racy use of flags in TCPConnecter::CheckCallbacks conected and aborted flags are used concurrently from multiple threads. --- src/network/core/tcp.h | 6 ++++-- src/network/core/tcp_connect.cpp | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index 08a09ca1a2..ffa231497e 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -15,6 +15,8 @@ #include "address.h" #include "packet.h" +#include + /** The states of sending the packets. */ enum SendPacketsState { SPS_CLOSED, ///< The connection got closed. @@ -61,8 +63,8 @@ public: */ class TCPConnecter { private: - bool connected; ///< Whether we succeeded in making the connection - bool aborted; ///< Whether we bailed out (i.e. connection making failed) + std::atomic connected;///< Whether we succeeded in making the connection + std::atomic aborted; ///< Whether we bailed out (i.e. connection making failed) bool killed; ///< Whether we got killed SOCKET sock; ///< The socket we're connecting with diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index 9448acb830..b4485cfe96 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -66,19 +66,21 @@ void TCPConnecter::Connect() { for (auto iter = _tcp_connecters.begin(); iter < _tcp_connecters.end(); /* nothing */) { TCPConnecter *cur = *iter; - if ((cur->connected || cur->aborted) && cur->killed) { + const bool connected = cur->connected.load(); + const bool aborted = cur->aborted.load(); + if ((connected || aborted) && cur->killed) { iter = _tcp_connecters.erase(iter); if (cur->sock != INVALID_SOCKET) closesocket(cur->sock); delete cur; continue; } - if (cur->connected) { + if (connected) { iter = _tcp_connecters.erase(iter); cur->OnConnect(cur->sock); delete cur; continue; } - if (cur->aborted) { + if (aborted) { iter = _tcp_connecters.erase(iter); cur->OnFailure(); delete cur; From 506598a80a5285fd5f3b164afbcb69bd9e98c6cc Mon Sep 17 00:00:00 2001 From: Dan Church Date: Thu, 18 Jun 2020 11:34:19 -0500 Subject: [PATCH 177/601] Fix: [CMake] Fix install paths using GNUInstallDirs --- CMakeLists.txt | 7 +++++++ cmake/InstallAndPackage.cmake | 12 +++++++----- cmake/Options.cmake | 4 +++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 605f4b0a25..825ba3dcd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,13 @@ endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") +# Use GNUInstallDirs to allow customisation +# but set our own default data dir +if (NOT CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "share/games") +endif (NOT CMAKE_INSTALL_DATADIR) +include(GNUInstallDirs) + include(Options) set_options() set_directory_options() diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index a84707bc22..71b80e6843 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -1,9 +1,11 @@ +include(GNUInstallDirs) + # If requested, use FHS layout; otherwise fall back to a flat layout. if (OPTION_INSTALL_FHS) - set(BINARY_DESTINATION_DIR "bin") - set(DATA_DESTINATION_DIR "share/games/openttd") - set(DOCS_DESTINATION_DIR "share/doc/openttd") - set(MAN_DESTINATION_DIR "share/man/openttd") + set(BINARY_DESTINATION_DIR "${CMAKE_INSTALL_BINDIR}") + set(DATA_DESTINATION_DIR "${CMAKE_INSTALL_DATADIR}/openttd") + set(DOCS_DESTINATION_DIR "${CMAKE_INSTALL_DOCDIR}") + set(MAN_DESTINATION_DIR "${CMAKE_INSTALL_MANDIR}") else (OPTION_INSTALL_FHS) set(BINARY_DESTINATION_DIR ".") set(DATA_DESTINATION_DIR ".") @@ -40,7 +42,7 @@ install(FILES if (OPTION_INSTALL_FHS) install(FILES ${CMAKE_SOURCE_DIR}/docs/openttd.6 - DESTINATION ${MAN_DESTINATION_DIR} + DESTINATION ${MAN_DESTINATION_DIR}/man6 COMPONENT manual) endif (OPTION_INSTALL_FHS) diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 0e8063fac0..478f1b2b24 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -1,3 +1,5 @@ +include(GNUInstallDirs) + # Set the options for the directories (personal, shared, global). # # set_directory_options() @@ -14,7 +16,7 @@ function(set_directory_options) elseif (UNIX) set(DEFAULT_PERSONAL_DIR ".openttd") set(DEFAULT_SHARED_DIR "(not set)") - set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_PREFIX}/share/games/openttd") + set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/openttd") else () message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.") endif () From 9aca6ff971e95fbeaff9302cf5d8d44a80ed0206 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 19 Jun 2020 19:45:40 +0200 Subject: [PATCH 178/601] Update: Translations from eints swedish: 33 changes by Joel_A --- src/lang/swedish.txt | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 64bd3679a4..3efe13f451 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -934,6 +934,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexikansk peso STR_GAME_OPTIONS_CURRENCY_NTD :Nya Taiwanesisk dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kinesisk Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongdollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupie (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vägfordon @@ -1160,7 +1161,7 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp STR_CONFIG_SETTING_INTEREST_RATE :Räntenivå: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Räntenivå för lån; styr även inflationen om sådan är aktiverad STR_CONFIG_SETTING_RUNNING_COSTS :Driftkostnader: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Sätt nivån för underhålls- och driftkostnader för fordon och infrastruktur +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Sätt nivån för underhålls- och driftskostnader för fordon och infrastruktur STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Konstruktionshastighet: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begränsar antalet konstruktionshandlingar för AI-spelare STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Fordonshaverier: {STRING} @@ -1308,6 +1309,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Visa invånaran STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Visa antal invånare efter stadsnamnen på kartan STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Linjetjocklek i grafer: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjernas bredd i grafernas kurvor. En tunn linje är lättare att läsa av mer precist, medan en tjockare linje är lättare att se och gör det lättare att skilja mellan de olika färgerna +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Visa NewGRF:ens namn i fordonsbyggnadsfönstret: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lägg till en rad i fordonsbyggnadsfönstret som visar vilken NewGRF det valda fordonet kommer ifrån. STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definiera grundläggande gameplay scenarier med olika last och krav stad tillväxt. NewGRF och Game skript tillåter finare kontroll. @@ -1319,8 +1322,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terrängtyp: {S STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis endast) Hilliness av landskapet STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industritäthet: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Ange hur många industrier som ska genereras och vilken nivå som ska bibehållas under spelet -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximalt avstånd mellan oljeraffinaderier och kartans kant: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Oljeraffinaderier byggs bara nära kartans kanter, alltså vid kusten om det är en ö-karta +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximalt avstånd mellan oljeindustrier och kartans kant: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Begränsar hur långt från kartans kant oljeraffinaderier och oljeplattformar kan byggas. På ö-kartor säkerställer detta att de är nära kusten. På kartor större än 256 rutor skalas detta värde upp. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrollerar på vilken höjd snön börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING} @@ -1545,10 +1548,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :På STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Nyheter i färg visas efter: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Årtal då tidningens nyhetsartiklar börjar tryckas i färg. Innan detta år används monokromt svart/vitt STR_CONFIG_SETTING_STARTING_YEAR :Startår: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Slutår för poängräkning: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årtal då spelet slutar räkna poäng. Vid slutet av detta år sparas företagets poäng och listan med de bästa spelresultaten visas, men därefter kan spelarna fortsätta att spela.{}Om årtalet är satt till innan startåret visas aldrig de bästa spelresultaten. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig STR_CONFIG_SETTING_SMOOTH_ECONOMY :Lugn ekonomi (flera små ändringar): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :När det är aktiverat ändras industriproduktionen oftare och i mindre steg. Den här inställningen har vanligtvis ingen effekt om de olika industrityperna kommer från en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillåt köp av aktier från andra företag: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :När det är aktiverat blir det tillåtet att köpa och sälja andelar i företag. För att dess andelar ska bli tillgängliga måste ett företag ha uppnått en viss ålder +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Lägsta företagsålder för aktiehandel: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Ställ in den lägsta ålder från vilken ett företags aktier kan köpas och säljas av andra företag. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Inkomstprocent per etapp i matarsystem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentandel av inkomsten som ges till de mellanliggande etapperna i matarsystem. Ger mer kontroll över inkomsterna STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Vid dragning med verktyget, placera en signal per: {STRING} @@ -1590,7 +1599,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Förbjuden STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tillåten STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tillåten, vanlig stads-layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Fraktgods som genereras i staden: {STRING} -STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hur mycket fraktgods produceras av hus i städer, i förhållande till den totala befolkningen i staden.{}Kvadratisk tillväxt: En stad dubbelt så stor genererar fyra gånger så många passagerare.{}Linjär tillväxt: En stad dubbelt så stor genererar dubbelt så många passagerare. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hur mycket fraktgods som produceras av hus i städer, i förhållande till den totala befolkningen i staden.{}Kvadratisk tillväxt: En dubbelt så stor stad genererar fyra gånger så många passagerare.{}Linjär tillväxt: En dubbelt så stor stad genererar dubbelt så många passagerare. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linjär @@ -2159,6 +2168,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Fel lös STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Servern är full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du är bannlyst från den här servern STR_NETWORK_ERROR_KICKED :{WHITE}Du blev utkastad från spelet +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Orsak: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Fusk är inte tillåtet på denna server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du skickade för många kommandon till servern STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du tog för lång tid på dig att mata in löserondet @@ -2218,6 +2228,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ga STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** You gave {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Servern avslutade sessionen STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Servern startar om...{}Var vänlig vänta... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} kastades ut. Orsak: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Nedladdning av innehåll @@ -3045,7 +3056,7 @@ STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Kapacite STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tåg '{VEHICLE}' som tillhör '{COMPANY}' har ogiltig längd. Detta orsakas förmodligen av problem med en NewGRF. Spelet kan desynkroniseras eller krascha STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' ger felaktig information -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Last/återställnings information för '{1:ENGINE}' är skilld ifrån köp lista efter konstruktion. Detta kan leda till att utomatisk förnyelse/uppgradering misslyckas med att anpassa fordonen/vagnarna korrekt +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Last-/återställningsinformationen för '{1:ENGINE}' skiljer sig från köplistan efter konstruktion. Detta kan leda till att automatisk förnyelse/uppgradering misslyckas med att anpassa fordonen/vagnarna korrekt STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' skapade en oändlig loop i en produktions-callback-funktion STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback-funktion {1:HEX} returnerade ett okänt/ogiltligt resultat {2:HEX} STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returnerade ogiltig lasttyp i produktions-callback vid {2:HEX} @@ -3210,7 +3221,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Inga - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Markera alla inrättningar -STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Välj alla last-typer (inklusive icke väntande last) +STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Välj alla typer av last (inklusive icke väntande last) STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Ingen sorts last väntar # Station view window @@ -3383,8 +3394,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrier STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Inga - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transporterat){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} och {NUM} till... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinamn - klicka på namnet för att centrera huvudvyn över industrin. Ctrl+klick öppnar en ny vy över industrins läge +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Accepterat gods: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Producerat fraktgods: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Alla typer av last +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Inga # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4159,6 +4179,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Välj ma STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ändra inte datorspelare +STR_SCREENSHOT_CAPTION :{WHITE}Ta en skärmdump +STR_SCREENSHOT_SCREENSHOT :{BLACK}Vanlig skärmdump +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Fullt inzoomad skärmdump +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Skärmdump med grundinställd zoomnivå +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skärmdump med hela kartan +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Skärmdump av höjdkarta +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Skärmdump av miniatyrkartan # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametrar From 1ac0d4a5b2c8f5e5c9a4629091c81e3f41a4c126 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 6 May 2020 23:23:03 +0100 Subject: [PATCH 179/601] Fix: Thread unsafe use of NetworkAddress::GetAddressAsString Remove static buffer form of NetworkAddress::GetAddressAsString. This is used in multiple threads concurrently, and is not thread-safe. Replace it with a form returning std::string. --- src/network/core/address.cpp | 13 +++++++------ src/network/core/address.h | 4 +++- src/network/core/tcp_content.cpp | 6 +++--- src/network/core/udp.cpp | 12 ++++++------ src/network/network_gui.cpp | 4 +++- src/network/network_udp.cpp | 12 ++++++------ 6 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index 44ba453856..c2fecc7ff2 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -96,12 +96,11 @@ void NetworkAddress::GetAddressAsString(char *buffer, const char *last, bool wit * Get the address as a string, e.g. 127.0.0.1:12345. * @param with_family whether to add the family (e.g. IPvX). * @return the address - * @note NOT thread safe */ -const char *NetworkAddress::GetAddressAsString(bool with_family) +std::string NetworkAddress::GetAddressAsString(bool with_family) { /* 6 = for the : and 5 for the decimal port number */ - static char buf[NETWORK_HOSTNAME_LENGTH + 6 + 7]; + char buf[NETWORK_HOSTNAME_LENGTH + 6 + 7]; this->GetAddressAsString(buf, lastof(buf), with_family); return buf; } @@ -289,7 +288,8 @@ static SOCKET ConnectLoopProc(addrinfo *runp) { const char *type = NetworkAddress::SocketTypeAsString(runp->ai_socktype); const char *family = NetworkAddress::AddressFamilyAsString(runp->ai_family); - const char *address = NetworkAddress(runp->ai_addr, (int)runp->ai_addrlen).GetAddressAsString(); + char address[NETWORK_HOSTNAME_LENGTH + 6 + 7]; + NetworkAddress(runp->ai_addr, (int)runp->ai_addrlen).GetAddressAsString(address, lastof(address)); SOCKET sock = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol); if (sock == INVALID_SOCKET) { @@ -319,7 +319,7 @@ static SOCKET ConnectLoopProc(addrinfo *runp) */ SOCKET NetworkAddress::Connect() { - DEBUG(net, 1, "Connecting to %s", this->GetAddressAsString()); + DEBUG(net, 1, "Connecting to %s", this->GetAddressAsString().c_str()); return this->Resolve(AF_UNSPEC, SOCK_STREAM, AI_ADDRCONFIG, nullptr, ConnectLoopProc); } @@ -333,7 +333,8 @@ static SOCKET ListenLoopProc(addrinfo *runp) { const char *type = NetworkAddress::SocketTypeAsString(runp->ai_socktype); const char *family = NetworkAddress::AddressFamilyAsString(runp->ai_family); - const char *address = NetworkAddress(runp->ai_addr, (int)runp->ai_addrlen).GetAddressAsString(); + char address[NETWORK_HOSTNAME_LENGTH + 6 + 7]; + NetworkAddress(runp->ai_addr, (int)runp->ai_addrlen).GetAddressAsString(address, lastof(address)); SOCKET sock = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol); if (sock == INVALID_SOCKET) { diff --git a/src/network/core/address.h b/src/network/core/address.h index 980d7227df..65546818b2 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -15,6 +15,8 @@ #include "../../string_func.h" #include "../../core/smallmap_type.hpp" +#include + class NetworkAddress; typedef std::vector NetworkAddressList; ///< Type for a list of addresses. typedef SmallMap SocketList; ///< Type for a mapping between address and socket. @@ -91,7 +93,7 @@ public: const char *GetHostname(); void GetAddressAsString(char *buffer, const char *last, bool with_family = true); - const char *GetAddressAsString(bool with_family = true); + std::string GetAddressAsString(bool with_family = true); const sockaddr_storage *GetAddress(); /** diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index 989fbefaf4..6fb3b33794 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -171,9 +171,9 @@ bool NetworkContentSocketHandler::HandlePacket(Packet *p) default: if (this->HasClientQuit()) { - DEBUG(net, 0, "[tcp/content] received invalid packet type %d from %s", type, this->client_addr.GetAddressAsString()); + DEBUG(net, 0, "[tcp/content] received invalid packet type %d from %s", type, this->client_addr.GetAddressAsString().c_str()); } else { - DEBUG(net, 0, "[tcp/content] received illegal packet from %s", this->client_addr.GetAddressAsString()); + DEBUG(net, 0, "[tcp/content] received illegal packet from %s", this->client_addr.GetAddressAsString().c_str()); } return false; } @@ -224,7 +224,7 @@ bool NetworkContentSocketHandler::ReceivePackets() */ bool NetworkContentSocketHandler::ReceiveInvalidPacket(PacketContentType type) { - DEBUG(net, 0, "[tcp/content] received illegal packet type %d from %s", type, this->client_addr.GetAddressAsString()); + DEBUG(net, 0, "[tcp/content] received illegal packet type %d from %s", type, this->client_addr.GetAddressAsString().c_str()); return false; } diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 1236838732..57352412b4 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -100,10 +100,10 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a /* Send the buffer */ int res = sendto(s.second, (const char*)p->buffer, p->size, 0, (const struct sockaddr *)send.GetAddress(), send.GetAddressLength()); - DEBUG(net, 7, "[udp] sendto(%s)", send.GetAddressAsString()); + DEBUG(net, 7, "[udp] sendto(%s)", send.GetAddressAsString().c_str()); /* Check for any errors, but ignore it otherwise */ - if (res == -1) DEBUG(net, 1, "[udp] sendto(%s) failed with: %i", send.GetAddressAsString(), GET_LAST_ERROR()); + if (res == -1) DEBUG(net, 1, "[udp] sendto(%s) failed with: %i", send.GetAddressAsString().c_str(), GET_LAST_ERROR()); if (!all) break; } @@ -136,7 +136,7 @@ void NetworkUDPSocketHandler::ReceivePackets() /* If the size does not match the packet must be corrupted. * Otherwise it will be marked as corrupted later on. */ if (nbytes != p.size) { - DEBUG(net, 1, "received a packet with mismatching size from %s", address.GetAddressAsString()); + DEBUG(net, 1, "received a packet with mismatching size from %s", address.GetAddressAsString().c_str()); continue; } @@ -313,9 +313,9 @@ void NetworkUDPSocketHandler::HandleUDPPacket(Packet *p, NetworkAddress *client_ default: if (this->HasClientQuit()) { - DEBUG(net, 0, "[udp] received invalid packet type %d from %s", type, client_addr->GetAddressAsString()); + DEBUG(net, 0, "[udp] received invalid packet type %d from %s", type, client_addr->GetAddressAsString().c_str()); } else { - DEBUG(net, 0, "[udp] received illegal packet from %s", client_addr->GetAddressAsString()); + DEBUG(net, 0, "[udp] received illegal packet from %s", client_addr->GetAddressAsString().c_str()); } break; } @@ -328,7 +328,7 @@ void NetworkUDPSocketHandler::HandleUDPPacket(Packet *p, NetworkAddress *client_ */ void NetworkUDPSocketHandler::ReceiveInvalidPacket(PacketUDPType type, NetworkAddress *client_addr) { - DEBUG(net, 0, "[udp] received packet type %d on wrong port from %s", type, client_addr->GetAddressAsString()); + DEBUG(net, 0, "[udp] received packet type %d on wrong port from %s", type, client_addr->GetAddressAsString().c_str()); } void NetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER(Packet *p, NetworkAddress *client_addr) { this->ReceiveInvalidPacket(PACKET_UDP_CLIENT_FIND_SERVER, client_addr); } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index c4488f35d9..ab72d9521c 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -664,7 +664,9 @@ public: DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_SERVER_LIST_SERVER_VERSION); // server version y += FONT_HEIGHT_NORMAL; - SetDParamStr(0, sel->address.GetAddressAsString()); + char network_addr_buffer[NETWORK_HOSTNAME_LENGTH + 6 + 7]; + sel->address.GetAddressAsString(network_addr_buffer, lastof(network_addr_buffer)); + SetDParamStr(0, network_addr_buffer); DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_SERVER_LIST_SERVER_ADDRESS); // server address y += FONT_HEIGHT_NORMAL; diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 03344fe579..0fd20b5f45 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -244,7 +244,7 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_GET_NEWGRFS(Packet *p, Networ uint8 in_reply_count = 0; size_t packet_len = 0; - DEBUG(net, 6, "[udp] newgrf data request from %s", client_addr->GetAddressAsString()); + DEBUG(net, 6, "[udp] newgrf data request from %s", client_addr->GetAddressAsString().c_str()); num_grfs = p->Recv_uint8 (); if (num_grfs > NETWORK_MAX_GRF_COUNT) return; @@ -307,7 +307,7 @@ void ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(Packet *p, NetworkAd /* Just a fail-safe.. should never happen */ if (_network_udp_server) return; - DEBUG(net, 4, "[udp] server response from %s", client_addr->GetAddressAsString()); + DEBUG(net, 4, "[udp] server response from %s", client_addr->GetAddressAsString().c_str()); /* Find next item */ item = NetworkGameListAddItem(*client_addr); @@ -407,7 +407,7 @@ void ClientNetworkUDPSocketHandler::Receive_SERVER_NEWGRFS(Packet *p, NetworkAdd uint8 num_grfs; uint i; - DEBUG(net, 6, "[udp] newgrf data reply from %s", client_addr->GetAddressAsString()); + DEBUG(net, 6, "[udp] newgrf data reply from %s", client_addr->GetAddressAsString().c_str()); num_grfs = p->Recv_uint8 (); if (num_grfs > NETWORK_MAX_GRF_COUNT) return; @@ -477,7 +477,7 @@ void NetworkUDPQueryMasterServer() _udp_client_socket->SendPacket(&p, &out_addr, true); - DEBUG(net, 2, "[udp] master server queried at %s", out_addr.GetAddressAsString()); + DEBUG(net, 2, "[udp] master server queried at %s", out_addr.GetAddressAsString().c_str()); } /** Find all servers */ @@ -541,8 +541,8 @@ static void NetworkUDPAdvertiseThread() if (_session_key == 0 && session_key_retries++ == 2) { DEBUG(net, 0, "[udp] advertising to the master server is failing"); DEBUG(net, 0, "[udp] we are not receiving the session key from the server"); - DEBUG(net, 0, "[udp] please allow udp packets from %s to you to be delivered", out_addr.GetAddressAsString(false)); - DEBUG(net, 0, "[udp] please allow udp packets from you to %s to be delivered", out_addr.GetAddressAsString(false)); + DEBUG(net, 0, "[udp] please allow udp packets from %s to you to be delivered", out_addr.GetAddressAsString(false).c_str()); + DEBUG(net, 0, "[udp] please allow udp packets from you to %s to be delivered", out_addr.GetAddressAsString(false).c_str()); } if (_session_key != 0 && _network_advertise_retries == 0) { DEBUG(net, 0, "[udp] advertising to the master server is failing"); From e6f3e15c32b51f4cc430a9bc9d0b1fc708135a77 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 21 Jun 2020 23:47:45 +0100 Subject: [PATCH 180/601] Fix 63ccb36e: Incorrect string type for OrderBackup::name save/load In 63ccb36e BaseConsist::name was changed from a malloced char* to a std::string. OrderBackup inherits from BaseConsist. The saveload of OrderBackup::name was not updated. --- src/saveload/order_sl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index c8747d36bb..1292c1b056 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -241,7 +241,7 @@ const SaveLoad *GetOrderBackupDescription() SLE_VAR(OrderBackup, group, SLE_UINT16), SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, SL_MIN_VERSION, SLV_192), SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, SLV_192, SL_MAX_VERSION), - SLE_STR(OrderBackup, name, SLE_STR, 0), + SLE_SSTR(OrderBackup, name, SLE_STR), SLE_CONDNULL(2, SL_MIN_VERSION, SLV_192), // clone (2 bytes of pointer, i.e. garbage) SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, SLV_192, SL_MAX_VERSION), SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8), From 87a069c887267ff375c35fdbe5d95fbe71ff0579 Mon Sep 17 00:00:00 2001 From: glx22 Date: Mon, 22 Jun 2020 14:21:11 +0200 Subject: [PATCH 181/601] Fix #8230: Resolve ".." when opening files in .tar (#8231) --- src/fileio.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/fileio.cpp b/src/fileio.cpp index f17a0ffc0e..7340fa1722 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -25,6 +25,7 @@ #endif #include #include +#include #ifdef WITH_XDG_BASEDIR #include @@ -481,6 +482,28 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, strecpy(resolved_name, filename, lastof(resolved_name)); strtolower(resolved_name); + /* Resolve ".." */ + std::istringstream ss(resolved_name); + std::vector tokens; + std::string token; + while (std::getline(ss, token, PATHSEPCHAR)) { + if (token == "..") { + if (tokens.size() < 2) return nullptr; + tokens.pop_back(); + } else { + tokens.push_back(token); + } + } + resolved_name[0] = '\0'; + bool first = true; + for (const std::string &token : tokens) { + if (!first) { + strecat(resolved_name, PATHSEP, lastof(resolved_name)); + } + strecat(resolved_name, token.c_str(), lastof(resolved_name)); + first = false; + } + size_t resolved_len = strlen(resolved_name); /* Resolve ONE directory link */ From 6d135d4b01d80d8f42038c80d2d53210955a7c56 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 22 Jun 2020 19:45:40 +0200 Subject: [PATCH 182/601] Update: Translations from eints ukrainian: 1 change by nsergiy korean: 1 change by telk5093 --- src/lang/korean.txt | 2 +- src/lang/ukrainian.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 077deaec7c..9823599b33 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1663,7 +1663,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :장갑 화물 STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :다른 화물에 대한 분배 형식: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"불균형"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "불균형"이나 "수동"으로 설정하십시오. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :분배 정확도: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :값이 높으면 높을수록 CPU가 연결 상태를 계산하는 시간이 더 오래 걸립니다. 만약 이 시간이 너무 오래 걸리면 랙 현상이 나타날 것입니다. 하지만, 낮은 값으로 설정하면 분배가 부정확하게 일어나서, 화물이 원하는 곳으로 분배되지 않을 수 있습니다. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :값이 높으면 높을수록 CPU가 연결 상태를 계산하는 시간이 더 오래 걸립니다. 만약 이 시간이 너무 오래 걸리면 게임이 버벅일 것입니다. 하지만, 낮은 값으로 설정하면 분배가 부정확하게 일어나서, 화물이 원하는 곳으로 분배되지 않을 수 있습니다. STR_CONFIG_SETTING_DEMAND_DISTANCE :거리에 따른 수요 효과: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :이 값을 0보다 크게 설정하면, 어떤 화물이 있는 A역과 목적지가 될 수 있는 역 B 사이의 거리는 A에서 B로 가는 화물의 양에 영향을 미치게 됩니다. A역에서 B역이 더 멀리 떨어질 수록 이동하는 화물의 양은 적어질 것입니다. 값이 크면 클 수록 화물은 멀리 이동하지 않고 가까운 역으로 가게 됩니다. STR_CONFIG_SETTING_DEMAND_SIZE :균형 모드에서 되돌아오는 화물의 양: {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 855995759d..ecc43503ff 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4299,6 +4299,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Вибр STR_AI_LIST_CANCEL :{BLACK}Відміна STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не міняти скрипт +STR_SCREENSHOT_CAPTION :{WHITE}Зробити знімок екрану # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри From 78b6587c4048886bec976476c781fe7059f601cd Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 24 Jun 2020 19:45:42 +0200 Subject: [PATCH 183/601] Update: Translations from eints swedish: 3 changes by Joel_A --- src/lang/swedish.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 3efe13f451..6c265b85ab 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -864,6 +864,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Öppna gruppfönstret fokuserat på fordonets grupp 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} @@ -3126,6 +3127,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Byt namn på st # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} lokala myndigheter +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zon +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Visa zonen som ryms inom de lokala myndigheternas gränser STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Transportföretags värderingar: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Tillgängliga åtgärder: From b84d61ef6ed5cb79273b752b6031d9574ed735ab Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 25 Jun 2020 19:45:42 +0200 Subject: [PATCH 184/601] Update: Translations from eints indonesian: 16 changes by adjayanto --- src/lang/indonesian.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 3096e17f8c..d8acc468e6 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -988,6 +988,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Kali empat STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Ukuran font STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kali dua STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4 kali STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set Grafik Dasar @@ -1523,10 +1524,12 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Penuh STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Berita berwarna tampil pada: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Tahun saat surat kabar/koran menjadi berwarna. Sebelum tahun ini, koran menggunakan warna hitam-putih STR_CONFIG_SETTING_STARTING_YEAR :Tahun mulai: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Tidak pernah STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktifkan pertumbuhan ekonomi yang stabil (jarang berubah): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ketika diaktifkan, produksi industri mengalami perubahan lebih sering, dalam gerakan kecil. Pengaturan tidak berpengaruh jika jenis industri disediakan oleh NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Ijinkan pembelian saham perusahaan lain: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Jika diaktifkan, pemain dibolehkan membeli saham suatu perusahaan. Saham hanya bisa dibeli saat perusahaan memasuki umur tertentu +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set umur minimal perusahaan saat sahamnya dapat dibeli atau dijual. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Persentase keuntungan akhir dari sistem pengisi: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Persentase pendapatan yang diberikan dari sistem pengisi, memberikan lebih banyak kendali pendapatan STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Saat menyeret, tempatkan sinyal setiap: {STRING} @@ -2700,10 +2703,12 @@ STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Rata sim STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Jumlah detak permainan tersimulasi per detik. STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beberapa cepat permainan lagi berjalan, dibanding dengan kecepatan diharapkan memakai rata simulasi biasa. STR_FRAMERATE_CURRENT :{WHITE}Sekarang +STR_FRAMERATE_MEMORYUSE :{WHITE}Memori STR_FRAMERATE_DATA_POINTS :{WHITE}Data tergantung oleh ukuran {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} bingkai/dtk STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! @@ -2713,6 +2718,7 @@ STR_FRAMERATE_GL_ROADVEHS :{WHITE} Titik k STR_FRAMERATE_GL_SHIPS :{WHITE} Titik kapal: STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Titik pesawat: STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Titik dunia: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Jarak tunda linkgraph: STR_FRAMERATE_DRAWING :{BLACK}Render grafis: STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Viewport dunia: STR_FRAMERATE_VIDEO :{BLACK}Keluaran Video: @@ -2869,6 +2875,8 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versi: { STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versi kompatibel min.: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet/warna: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standar (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standar (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Tidak ada informasi yang tersedia @@ -2917,6 +2925,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Lanjutka STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Mewakili sprite yang sedang dipilih. Penjajaran diabaikan ketika sprite ini digambar STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pindahkan sprite, mengubah offset X dan Y STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relatif +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset offset relatif saat ini STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Pilih sprite STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Pilih sebuah sprite di manapun pada layar @@ -3119,6 +3128,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik pad # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Buku Cerita STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Buku Cerita Global +STR_STORY_BOOK_SPECTATOR :Buku Cerita Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Halaman {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Loncat ke halaman yang dipilih dari daftar drop-down ini @@ -3311,6 +3321,7 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Tidak Ada - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nama-nama industri - klik di nama untuk mengarahkan pandangan utama pada industri. Ctrl+Click akan membuka viewport baru pada lokasi industri +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Muatan diterima: {SILVER}{STRING} # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3322,6 +3333,7 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industr STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} menunggu{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Perubahan produksi (kelipatan 8, hingga 2040) @@ -3559,10 +3571,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Pesan da STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Kami telah mendesain {STRING} baru - apakah anda tertarik mempergunakan kendaraan ini secara eksklusif , sehingga kami dapat melihat bagaimana kemampuannya sebelum dijual secara masal? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :lokomotif kereta +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :lokomotif rel kereta listrik STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :lokomotif monorel STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :lokomotif maglev STR_ENGINE_PREVIEW_ROAD_VEHICLE :kendaraan jalan raya +STR_ENGINE_PREVIEW_TRAM_VEHICLE :kendaraan jalan trem STR_ENGINE_PREVIEW_AIRCRAFT :pesawat STR_ENGINE_PREVIEW_SHIP :kapal @@ -4063,6 +4077,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 +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Tangkapan layar Peta Ketinggian # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4355,6 +4370,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Tidak da STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Tidak dapat membongkar jalur trem disini... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... tidak ada jalan STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tidak ada jalur trem +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Jalur Tram tidak ada yang cocok # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tidak dapat membangun kanal disini... From a2e1102b15cd7f5ae86ab3ea5da4a534b6b58389 Mon Sep 17 00:00:00 2001 From: dP Date: Wed, 24 Jun 2020 15:58:12 +0300 Subject: [PATCH 185/601] Feature: Increase max possible distance from border for oil refineries and rigs --- src/table/settings.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/table/settings.ini b/src/table/settings.ini index 43bd3aec32..c7dbd2128b 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2250,7 +2250,7 @@ type = SLE_UINT8 from = SLV_30 def = 32 min = 12 -max = 48 +max = 128 str = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE strval = STR_CONFIG_SETTING_TILE_LENGTH strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT From ed6f31f601ef92e098f5555e9bb2b1492c5a7e79 Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Thu, 18 Jun 2020 09:50:22 +1200 Subject: [PATCH 186/601] Cleanup: Remove redundant implementation of TakeScreenshot --- src/screenshot.cpp | 39 +++++++++++++++++++++++++++++++- src/screenshot.h | 1 + src/screenshot_gui.cpp | 50 +++++++----------------------------------- src/toolbar_gui.cpp | 49 +++++++---------------------------------- 4 files changed, 55 insertions(+), 84 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 1db7cceae0..d2bb6a1f35 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -20,6 +20,7 @@ #include "company_func.h" #include "strings_func.h" #include "error.h" +#include "textbuf_gui.h" #include "window_gui.h" #include "window_func.h" #include "tile_map.h" @@ -831,11 +832,47 @@ bool MakeHeightmapScreenshot(const char *filename) return sf->proc(filename, HeightmapCallback, nullptr, MapSizeX(), MapSizeY(), 8, palette); } +static ScreenshotType _confirmed_screenshot_type; ///< Screenshot type the current query is about to confirm. + /** - * Make an actual screenshot. + * 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(_confirmed_screenshot_type, nullptr); +} + +/** + * Take a screenshot. + * Ask for confirmation if the screenshot will be huge. Delegates to \c MakeScreenshot to perform the action. + * @param t Screenshot type: World, defaultzoom, heightmap or viewport screenshot + * @see MakeScreenshot + */ +void TakeScreenshot(ScreenshotType t) +{ + ViewPort vp; + SetupScreenshotViewport(t, &vp); + if ((uint64)vp.width * (uint64)vp.height > 8192 * 8192) { + /* Ask for confirmation */ + _confirmed_screenshot_type = t; + SetDParam(0, vp.width); + SetDParam(1, vp.height); + ShowQuery(STR_WARNING_SCREENSHOT_SIZE_CAPTION, STR_WARNING_SCREENSHOT_SIZE_MESSAGE, nullptr, ScreenshotConfirmationCallback); + } else { + /* Less than 64M pixels, just do it */ + MakeScreenshot(t, nullptr); + } +} + +/** + * Make a screenshot. + * No questions asked, just do it. * @param t the type of screenshot to make. * @param name the name to give to the screenshot. * @return true iff the screenshot was made successfully + * @see TakeScreenshot */ bool MakeScreenshot(ScreenshotType t, const char *name) { diff --git a/src/screenshot.h b/src/screenshot.h index aea08a8d5f..2f6324c222 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -27,6 +27,7 @@ enum ScreenshotType { void SetupScreenshotViewport(ScreenshotType t, struct ViewPort *vp); bool MakeHeightmapScreenshot(const char *filename); +void TakeScreenshot(ScreenshotType t); bool MakeScreenshot(ScreenshotType t, const char *name); bool MakeMinimapWorldScreenshot(); diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 3230020245..ae5854fb7b 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -8,31 +8,26 @@ /** @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 "strings_func.h" - #include "widgets/screenshot_widget.h" - #include "table/strings.h" -static ScreenshotType _screenshot_type; - struct ScreenshotWindow : Window { - ScreenshotWindow(WindowDesc *desc) : Window(desc) { + ScreenshotWindow(WindowDesc *desc) : Window(desc) + { this->CreateNestedTree(); this->FinishInitNested(); } - void OnPaint() override { + void OnPaint() override + { this->DrawWidgets(); } - void OnClick(Point pt, int widget, int click_count) override { + void OnClick(Point pt, int widget, int click_count) override + { if (widget < 0) return; ScreenshotType st; switch (widget) { @@ -46,36 +41,6 @@ struct ScreenshotWindow : Window { } 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; - SetDParam(0, vp.width); - SetDParam(1, vp.height); - 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[] = { @@ -102,7 +67,8 @@ static WindowDesc _screenshot_window_desc( _nested_screenshot, lengthof(_nested_screenshot) ); -void ShowScreenshotWindow() { +void ShowScreenshotWindow() +{ DeleteWindowById(WC_SCREENSHOT, 0); new ScreenshotWindow(&_screenshot_window_desc); } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 303e4c7293..4d97abb729 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -66,8 +66,6 @@ RailType _last_built_railtype; RoadType _last_built_roadtype; RoadType _last_built_tramtype; -static ScreenshotType _confirmed_screenshot_type; ///< Screenshot type the current query is about to confirm. - /** Toobar modes */ enum ToolbarMode { TB_NORMAL, @@ -1071,37 +1069,6 @@ static CallBackFunction ToolbarHelpClick(Window *w) return CBF_NONE; } -/** - * Callback on the confirmation window for huge screenshots. - * @param w Window with viewport - * @param confirmed true on confirmation - */ -static void ScreenshotConfirmCallback(Window *w, bool confirmed) -{ - if (confirmed) MakeScreenshot(_confirmed_screenshot_type, nullptr); -} - -/** - * Make a screenshot of the world. - * Ask for confirmation if the screenshot will be huge. - * @param t Screenshot type: World or viewport screenshot - */ -static void MenuClickScreenshot(ScreenshotType t) -{ - ViewPort vp; - SetupScreenshotViewport(t, &vp); - if ((uint64)vp.width * (uint64)vp.height > 8192 * 8192) { - /* Ask for confirmation */ - SetDParam(0, vp.width); - SetDParam(1, vp.height); - _confirmed_screenshot_type = t; - ShowQuery(STR_WARNING_SCREENSHOT_SIZE_CAPTION, STR_WARNING_SCREENSHOT_SIZE_MESSAGE, nullptr, ScreenshotConfirmCallback); - } else { - /* Less than 64M pixels, just do it */ - MakeScreenshot(t, nullptr); - } -} - /** * Toggle drawing of sprites' bounding boxes. * @note has only an effect when newgrf_developer_tools are active. @@ -2119,10 +2086,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: 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_SMALL_SCREENSHOT: TakeScreenshot(SC_VIEWPORT); break; + case MTHK_ZOOMEDIN_SCREENSHOT: TakeScreenshot(SC_ZOOMEDIN); break; + case MTHK_DEFAULTZOOM_SCREENSHOT: TakeScreenshot(SC_DEFAULTZOOM); break; + case MTHK_GIANT_SCREENSHOT: TakeScreenshot(SC_WORLD); break; case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break; case MTHK_TERRAFORM: ShowTerraformToolbar(); break; case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; @@ -2494,10 +2461,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: 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_SMALL_SCREENSHOT: TakeScreenshot(SC_VIEWPORT); break; + case MTEHK_ZOOMEDIN_SCREENSHOT: TakeScreenshot(SC_ZOOMEDIN); break; + case MTEHK_DEFAULTZOOM_SCREENSHOT: TakeScreenshot(SC_DEFAULTZOOM); break; + case MTEHK_GIANT_SCREENSHOT: TakeScreenshot(SC_WORLD); break; case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break; case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break; case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break; From 3c8d0aa3544602dd8e34ec8ffcdc12cfc7f73b3f Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Sat, 20 Jun 2020 17:12:31 +1200 Subject: [PATCH 187/601] Cleanup: Give `TakeScreenshot` a more sensible name --- src/screenshot.cpp | 10 +++++----- src/screenshot.h | 2 +- src/screenshot_gui.cpp | 2 +- src/toolbar_gui.cpp | 16 ++++++++-------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index d2bb6a1f35..c895862265 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -845,12 +845,12 @@ static void ScreenshotConfirmationCallback(Window *w, bool confirmed) } /** - * Take a screenshot. - * Ask for confirmation if the screenshot will be huge. Delegates to \c MakeScreenshot to perform the action. + * Make a screenshot. + * Ask for confirmation first if the screenshot will be huge. * @param t Screenshot type: World, defaultzoom, heightmap or viewport screenshot * @see MakeScreenshot */ -void TakeScreenshot(ScreenshotType t) +void MakeScreenshotWithConfirm(ScreenshotType t) { ViewPort vp; SetupScreenshotViewport(t, &vp); @@ -868,11 +868,11 @@ void TakeScreenshot(ScreenshotType t) /** * Make a screenshot. - * No questions asked, just do it. + * Unconditionally take a screenshot of the requested type. * @param t the type of screenshot to make. * @param name the name to give to the screenshot. * @return true iff the screenshot was made successfully - * @see TakeScreenshot + * @see MakeScreenshotWithConfirm */ bool MakeScreenshot(ScreenshotType t, const char *name) { diff --git a/src/screenshot.h b/src/screenshot.h index 2f6324c222..b872593638 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -27,7 +27,7 @@ enum ScreenshotType { void SetupScreenshotViewport(ScreenshotType t, struct ViewPort *vp); bool MakeHeightmapScreenshot(const char *filename); -void TakeScreenshot(ScreenshotType t); +void MakeScreenshotWithConfirm(ScreenshotType t); bool MakeScreenshot(ScreenshotType t, const char *name); bool MakeMinimapWorldScreenshot(); diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index ae5854fb7b..c0e65f13d0 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -39,7 +39,7 @@ struct ScreenshotWindow : Window { case WID_SC_TAKE_HEIGHTMAP: st = SC_HEIGHTMAP; break; case WID_SC_TAKE_MINIMAP: st = SC_MINIMAP; break; } - TakeScreenshot(st); + MakeScreenshotWithConfirm(st); } }; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 4d97abb729..f471ac1158 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2086,10 +2086,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: TakeScreenshot(SC_VIEWPORT); break; - case MTHK_ZOOMEDIN_SCREENSHOT: TakeScreenshot(SC_ZOOMEDIN); break; - case MTHK_DEFAULTZOOM_SCREENSHOT: TakeScreenshot(SC_DEFAULTZOOM); break; - case MTHK_GIANT_SCREENSHOT: TakeScreenshot(SC_WORLD); break; + case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break; + case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break; + case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break; + case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break; case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break; case MTHK_TERRAFORM: ShowTerraformToolbar(); break; case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; @@ -2461,10 +2461,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: TakeScreenshot(SC_VIEWPORT); break; - case MTEHK_ZOOMEDIN_SCREENSHOT: TakeScreenshot(SC_ZOOMEDIN); break; - case MTEHK_DEFAULTZOOM_SCREENSHOT: TakeScreenshot(SC_DEFAULTZOOM); break; - case MTEHK_GIANT_SCREENSHOT: TakeScreenshot(SC_WORLD); break; + case MTEHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break; + case MTEHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break; + case MTEHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break; + case MTEHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break; case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break; case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break; case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break; From 8a655c7fb6375ad47b951b5011657dfa31cc76a6 Mon Sep 17 00:00:00 2001 From: Abdurrahmaan Iqbal Date: Tue, 23 Jun 2020 15:20:02 +0100 Subject: [PATCH 188/601] Fix #8232: 'Huge screenshot' warning being shown incorrectly --- src/screenshot.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index c895862265..8cf83ae5bc 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -854,11 +854,16 @@ void MakeScreenshotWithConfirm(ScreenshotType t) { ViewPort vp; SetupScreenshotViewport(t, &vp); - if ((uint64)vp.width * (uint64)vp.height > 8192 * 8192) { + + bool heightmap_or_minimap = t == SC_HEIGHTMAP || t == SC_MINIMAP; + uint64_t width = (heightmap_or_minimap ? MapSizeX() : vp.width); + uint64_t height = (heightmap_or_minimap ? MapSizeY() : vp.height); + + if (width * height > 8192 * 8192) { /* Ask for confirmation */ _confirmed_screenshot_type = t; - SetDParam(0, vp.width); - SetDParam(1, vp.height); + SetDParam(0, width); + SetDParam(1, height); ShowQuery(STR_WARNING_SCREENSHOT_SIZE_CAPTION, STR_WARNING_SCREENSHOT_SIZE_MESSAGE, nullptr, ScreenshotConfirmationCallback); } else { /* Less than 64M pixels, just do it */ From 224acb78b03defd075aafec9d3340b3bc0dcedfc Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 08:29:40 +0100 Subject: [PATCH 189/601] Fix: Compiler warnings about memsetting non-trivial classes --- src/cargotype.cpp | 2 +- src/network/network_gui.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cargotype.cpp b/src/cargotype.cpp index 52dd196c84..8421c482ed 100644 --- a/src/cargotype.cpp +++ b/src/cargotype.cpp @@ -42,8 +42,8 @@ void SetupCargoForClimate(LandscapeID l) assert(l < lengthof(_default_climate_cargo)); /* Reset and disable all cargo types */ - memset(CargoSpec::array, 0, sizeof(CargoSpec::array)); for (CargoID i = 0; i < lengthof(CargoSpec::array); i++) { + *CargoSpec::Get(i) = {}; CargoSpec::Get(i)->bitnum = INVALID_CARGO; /* Set defaults for newer properties, which old GRFs do not know */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index ab72d9521c..c430c47e5e 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1580,7 +1580,7 @@ struct NetworkLobbyWindow : public Window { NetworkTCPQueryServer(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port)); // company info NetworkUDPQueryServer(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port)); // general data /* Clear the information so removed companies don't remain */ - memset(this->company_info, 0, sizeof(this->company_info)); + for (auto &company : this->company_info) company = {}; break; } } From 64b1c70fddc8b7ef2e8f629d6e5e1749f21a0e4b Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 09:01:31 +0100 Subject: [PATCH 190/601] Codechange: Add WARN_FORMAT to vseprintf and fix the cascade of warnings that followed --- src/3rdparty/squirrel/squirrel/sqcompiler.cpp | 6 +++--- src/3rdparty/squirrel/squirrel/sqvm.cpp | 2 +- src/3rdparty/squirrel/squirrel/sqvm.h | 2 +- src/misc/str.hpp | 2 +- src/saveload/saveload.h | 2 +- src/script/squirrel.hpp | 4 ++-- src/string_func.h | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp index 854d080d2b..9eb71d457f 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp @@ -65,9 +65,9 @@ public: } NORETURN static void ThrowError(void *ud, const SQChar *s) { SQCompiler *c = (SQCompiler *)ud; - c->Error(s); + c->Error("%s", s); } - NORETURN void Error(const SQChar *s, ...) + NORETURN void Error(const SQChar *s, ...) WARN_FORMAT(2, 3) { static SQChar temp[256]; va_list vl; @@ -122,7 +122,7 @@ public: } Error("expected '%s'", etypename); } - Error("expected '%c'", tok); + Error("expected '%c'", (char)tok); } } SQObjectPtr ret; diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp index 03ffea2303..ee1acbf328 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.cpp +++ b/src/3rdparty/squirrel/squirrel/sqvm.cpp @@ -94,7 +94,7 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1, if(!StringCat(o1, o2, trg)) return false; } else if(!ArithMetaMethod(op,o1,o2,trg)) { - Raise_Error("arith op %c on between '%s' and '%s'",op,GetTypeName(o1),GetTypeName(o2)); return false; + Raise_Error("arith op %c on between '%s' and '%s'",(char)op,GetTypeName(o1),GetTypeName(o2)); return false; } } return true; diff --git a/src/3rdparty/squirrel/squirrel/sqvm.h b/src/3rdparty/squirrel/squirrel/sqvm.h index 97557b1332..9c8e986fbc 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.h +++ b/src/3rdparty/squirrel/squirrel/sqvm.h @@ -81,7 +81,7 @@ public: SQString *PrintObjVal(const SQObject &o); - void Raise_Error(const SQChar *s, ...); + void Raise_Error(const SQChar *s, ...) WARN_FORMAT(2, 3); void Raise_Error(SQObjectPtr &desc); void Raise_IdxError(const SQObject &o); void Raise_CompareError(const SQObject &o1, const SQObject &o2); diff --git a/src/misc/str.hpp b/src/misc/str.hpp index e93ce5efc3..9555681dfa 100644 --- a/src/misc/str.hpp +++ b/src/misc/str.hpp @@ -90,7 +90,7 @@ struct CStrA : public CBlobT } /** Add formatted string (like vsprintf) at the end of existing contents. */ - int AddFormatL(const char *format, va_list args) + int AddFormatL(const char *format, va_list args) WARN_FORMAT(2, 0) { size_t addSize = max(strlen(format), 16); addSize += addSize / 2; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 01a074bd80..af2de11893 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -896,7 +896,7 @@ void SlObject(void *object, const SaveLoad *sld); bool SlObjectMember(void *object, const SaveLoad *sld); void NORETURN SlError(StringID string, const char *extra_msg = nullptr); void NORETURN SlErrorCorrupt(const char *msg); -void NORETURN SlErrorCorruptFmt(const char *format, ...); +void NORETURN SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2); bool SaveloadCrashWithMissingNewGRFs(); diff --git a/src/script/squirrel.hpp b/src/script/squirrel.hpp index cfe54b36ec..412011cccc 100644 --- a/src/script/squirrel.hpp +++ b/src/script/squirrel.hpp @@ -63,12 +63,12 @@ protected: /** * If a user runs 'print' inside a script, this function gets the params. */ - static void PrintFunc(HSQUIRRELVM vm, const SQChar *s, ...); + static void PrintFunc(HSQUIRRELVM vm, const SQChar *s, ...) WARN_FORMAT(2, 3); /** * If an error has to be print, this function is called. */ - static void ErrorPrintFunc(HSQUIRRELVM vm, const SQChar *s, ...); + static void ErrorPrintFunc(HSQUIRRELVM vm, const SQChar *s, ...) WARN_FORMAT(2, 3); public: Squirrel(const char *APIName); diff --git a/src/string_func.h b/src/string_func.h index febdf7c2a4..6c226c6104 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -35,7 +35,7 @@ char *strecpy(char *dst, const char *src, const char *last); char *stredup(const char *src, const char *last = nullptr); int CDECL seprintf(char *str, const char *last, const char *format, ...) WARN_FORMAT(3, 4); -int CDECL vseprintf(char *str, const char *last, const char *format, va_list ap); +int CDECL vseprintf(char *str, const char *last, const char *format, va_list ap) WARN_FORMAT(3, 0); char *CDECL str_fmt(const char *str, ...) WARN_FORMAT(1, 2); From e5f931ef42ca169003d2282a8a585ea208b5f943 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 11:00:53 +0100 Subject: [PATCH 191/601] Fix: Warning about using the wrong enum type --- src/script/api/script_story_page.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/script/api/script_story_page.cpp b/src/script/api/script_story_page.cpp index 8fda69e6f5..4ee90e218d 100644 --- a/src/script/api/script_story_page.cpp +++ b/src/script/api/script_story_page.cpp @@ -119,16 +119,16 @@ static inline bool StoryPageElementTypeRequiresText(StoryPageElementType type) uint32 refid = 0; TileIndex reftile = 0; switch (type) { - case SPET_LOCATION: + case ::SPET_LOCATION: reftile = reference; break; - case SPET_GOAL: - case SPET_BUTTON_PUSH: - case SPET_BUTTON_TILE: - case SPET_BUTTON_VEHICLE: + case ::SPET_GOAL: + case ::SPET_BUTTON_PUSH: + case ::SPET_BUTTON_TILE: + case ::SPET_BUTTON_VEHICLE: refid = reference; break; - case SPET_TEXT: + case ::SPET_TEXT: break; default: NOT_REACHED(); From 887b912af123b5a9bf2339a98e724afe99e6a03d Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 12:17:05 +0100 Subject: [PATCH 192/601] Codechange: Only apply FORTIFY_SOURCE in non-debug builds It requires -O1 (or greater) and GCC spews out warnings if you try using it with -O0 --- cmake/CompileFlags.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index 05c19abab9..9287ca2490 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -31,7 +31,7 @@ macro(compile_flags) # it does not appear to support the $<> tags. add_compile_options( "$<$:-D_DEBUG>" - "$<$:-D_FORTIFY_SOURCE=2>" + "$<$>:-D_FORTIFY_SOURCE=2>" # FORTIFY_SOURCE should only be used in non-debug builds (requires -O1+) ) # Prepare a generator that checks if we are not a debug, and don't have asserts From dc8d0089e95a0fb9a77330fe890f72ac3bb430ea Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 13:59:15 +0100 Subject: [PATCH 193/601] Codechange: Make sure script enums are the same size as their normal counterparts --- src/script/api/script_company.hpp | 2 +- src/script/api/script_goal.hpp | 2 +- src/script/api/script_rail.hpp | 2 +- src/script/api/script_road.hpp | 2 +- src/script/api/script_story_page.hpp | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp index ed1d78f1e1..ea2f0cdd14 100644 --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -99,7 +99,7 @@ public: * Types of expenses. * @api -ai */ - enum ExpensesType { + enum ExpensesType : byte { EXPENSES_CONSTRUCTION = ::EXPENSES_CONSTRUCTION, ///< Construction costs. EXPENSES_NEW_VEHICLES = ::EXPENSES_NEW_VEHICLES, ///< New vehicles. EXPENSES_TRAIN_RUN = ::EXPENSES_TRAIN_RUN, ///< Running costs trains. diff --git a/src/script/api/script_goal.hpp b/src/script/api/script_goal.hpp index 372d6e8b49..2261dcc00f 100644 --- a/src/script/api/script_goal.hpp +++ b/src/script/api/script_goal.hpp @@ -36,7 +36,7 @@ public: /** * Goal types that can be given to a goal. */ - enum GoalType { + enum GoalType : byte { /* Note: these values represent part of the in-game GoalType enum */ GT_NONE = ::GT_NONE, ///< Destination is not linked. GT_TILE = ::GT_TILE, ///< Destination is a tile. diff --git a/src/script/api/script_rail.hpp b/src/script/api/script_rail.hpp index f82765a706..ec056dacb5 100644 --- a/src/script/api/script_rail.hpp +++ b/src/script/api/script_rail.hpp @@ -40,7 +40,7 @@ public: /** * Types of rail known to the game. */ - enum RailType { + enum RailType : byte { /* Note: these values represent part of the in-game static values */ RAILTYPE_INVALID = ::INVALID_RAILTYPE, ///< Invalid RailType. }; diff --git a/src/script/api/script_road.hpp b/src/script/api/script_road.hpp index 5a952d91a2..64b7833862 100644 --- a/src/script/api/script_road.hpp +++ b/src/script/api/script_road.hpp @@ -60,7 +60,7 @@ public: /** * Road/tram types */ - enum RoadTramTypes { + enum RoadTramTypes : uint8 { ROADTRAMTYPES_ROAD = ::RTTB_ROAD, ///< Road road types. ROADTRAMTYPES_TRAM = ::RTTB_TRAM, ///< Tram road types. }; diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp index 23e4e03b14..c87ef7cb37 100644 --- a/src/script/api/script_story_page.hpp +++ b/src/script/api/script_story_page.hpp @@ -57,7 +57,7 @@ public: /** * Story page element types. */ - enum StoryPageElementType { + enum StoryPageElementType : byte { SPET_TEXT = ::SPET_TEXT, ///< An element that displays a block of text. SPET_LOCATION = ::SPET_LOCATION, ///< An element that displays a single line of text along with a button to view the referenced location. SPET_GOAL = ::SPET_GOAL, ///< An element that displays a goal. @@ -75,7 +75,7 @@ public: * Formatting and layout flags for story page buttons. * The SPBF_FLOAT_LEFT and SPBF_FLOAT_RIGHT flags can not be combined. */ - enum StoryPageButtonFlags { + enum StoryPageButtonFlags : byte { SPBF_NONE = ::SPBF_NONE, ///< No special formatting for button. SPBF_FLOAT_LEFT = ::SPBF_FLOAT_LEFT, ///< Button is placed to the left of the following paragraph. SPBF_FLOAT_RIGHT = ::SPBF_FLOAT_RIGHT, ///< Button is placed to the right of the following paragraph. @@ -84,7 +84,7 @@ public: /** * Mouse cursors usable by story page buttons. */ - enum StoryPageButtonCursor { + enum StoryPageButtonCursor : byte { SPBC_MOUSE = ::SPBC_MOUSE, SPBC_ZZZ = ::SPBC_ZZZ, SPBC_BUOY = ::SPBC_BUOY, From 4c45448fa9d9bc7dabe7e971bf4b56ba7e595693 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 14:14:21 +0100 Subject: [PATCH 194/601] Fix #8129: Crash if a news message expires while viewing the endgame screen --- src/news_gui.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 9993645c43..0b4c41a2a9 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -671,6 +671,11 @@ static bool ReadyForNextNewsItem() /** Move to the next ticker item */ static void MoveToNextTickerItem() { + /* There is no status bar, so no reason to show news; + * especially important with the end game screen when + * there is no status bar but possible news. */ + if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; + InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar /* if we're not at the last item, then move on */ @@ -702,6 +707,11 @@ static void MoveToNextTickerItem() /** Move to the next news item */ static void MoveToNextNewsItem() { + /* There is no status bar, so no reason to show news; + * especially important with the end game screen when + * there is no status bar but possible news. */ + if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; + DeleteWindowById(WC_NEWS_WINDOW, 0); // close the newspapers window if shown _forced_news = nullptr; @@ -995,11 +1005,6 @@ void NewsLoop() /* no news item yet */ if (_total_news == 0) return; - /* There is no status bar, so no reason to show news; - * especially important with the end game screen when - * there is no status bar but possible news. */ - if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; - static byte _last_clean_month = 0; if (_last_clean_month != _cur_month) { From 75a2ae2f48a88a7496f135b020aeb5cf1c2924bb Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 15:30:22 +0100 Subject: [PATCH 195/601] Change: Also make roadside trees match the tree transparency option --- src/road_cmd.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 5a9efb8567..29d7f69bd7 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1474,14 +1474,15 @@ void DrawRoadCatenary(const TileInfo *ti) * @param dx the offset from the top of the BB of the tile * @param dy the offset from the top of the BB of the tile * @param h the height of the sprite to draw + * @param transparent whether the sprite should be transparent (used for roadside trees) */ -static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int dx, int dy, int h) +static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int dx, int dy, int h, bool transparent) { int x = ti->x | dx; int y = ti->y | dy; int z = ti->z; if (ti->tileh != SLOPE_FLAT) z = GetSlopePixelZ(x, y); - AddSortableSpriteToDraw(img, PAL_NONE, x, y, 2, 2, h, z); + AddSortableSpriteToDraw(img, PAL_NONE, x, y, 2, 2, h, z, transparent); } /** @@ -1634,9 +1635,12 @@ static void DrawRoadBits(TileInfo *ti) /* If there are no road bits, return, as there is nothing left to do */ if (HasAtMostOneBit(road)) return; + if (roadside == ROADSIDE_TREES && IsInvisibilitySet(TO_TREES)) return; + bool is_transparent = roadside == ROADSIDE_TREES && IsTransparencySet(TO_TREES); + /* Draw extra details. */ for (const DrawRoadTileStruct *drts = _road_display_table[roadside][road | tram]; drts->image != 0; drts++) { - DrawRoadDetail(drts->image, ti, drts->subcoord_x, drts->subcoord_y, 0x10); + DrawRoadDetail(drts->image, ti, drts->subcoord_x, drts->subcoord_y, 0x10, is_transparent); } } From 1bc7047af724f9d6282f7cc79289ecdffe084d1c Mon Sep 17 00:00:00 2001 From: duck Date: Sat, 27 Jun 2020 16:21:17 +0000 Subject: [PATCH 196/601] Doc: Acknowledge integer type mismatch in certain admin packets using AdminUpdateType (#8238) --- docs/admin_network.md | 14 ++++++++++++++ src/network/core/tcp_admin.h | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/admin_network.md b/docs/admin_network.md index ff5ea7c27a..4703df322a 100644 --- a/docs/admin_network.md +++ b/docs/admin_network.md @@ -86,6 +86,9 @@ Last updated: 2011-01-20 Note: not every update type supports every frequency. If in doubt, you can verify against the data received in `ADMIN_PACKET_SERVER_PROTOCOL`. + Please note the potential gotcha in the "Certain packet information" section below + when using the `ADMIN_UPDATE_FREQUENCY` packet. + The server will not confirm your registered update. However, asking for an invalid `AdminUpdateType` or a not supported `AdminUpdateFrequency` you will be disconnected from the server with `NETWORK_ERROR_ILLEGAL_PACKET`. @@ -143,6 +146,9 @@ Last updated: 2011-01-20 - ADMIN_UPDATE_COMPANY_STATS - ADMIN_UPDATE_CMD_NAMES + Please note the potential gotcha in the "Certain packet information" section below + when using the `ADMIN_POLL` packet. + `ADMIN_UPDATE_CLIENT_INFO` and `ADMIN_UPDATE_COMPANY_INFO` accept an additional parameter. This parameter is used to specify a certain client or company. Setting this parameter to `UINT32_MAX (0xFFFFFFFF)` will tell the server you @@ -213,6 +219,14 @@ Last updated: 2011-01-20 ## 7.0) Certain packet information + `ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY` and `ADMIN_PACKET_ADMIN_POLL` + + Potential gotcha: the AdminUpdateType integer type used is a + uint16 for `UPDATE_FREQUENCY`, and a uint8 for `POLL`. + This is due to boring legacy reasons. + It is safe to cast between the two when sending + (i.e cast from a uint8 to a uint16). + All `ADMIN_PACKET_SERVER_*` packets have an enum value greater 100. `ADMIN_PACKET_SERVER_WELCOME` diff --git a/src/network/core/tcp_admin.h b/src/network/core/tcp_admin.h index 979e5963f0..dc9753e89f 100644 --- a/src/network/core/tcp_admin.h +++ b/src/network/core/tcp_admin.h @@ -134,7 +134,7 @@ protected: /** * Register updates to be sent at certain frequencies (as announced in the PROTOCOL packet): - * uint16 Update type (see #AdminUpdateType). + * uint16 Update type (see #AdminUpdateType). Note integer type - see "Certain Packet Information" in docs/admin_network.md. * uint16 Update frequency (see #AdminUpdateFrequency), setting #ADMIN_FREQUENCY_POLL is always ignored. * @param p The packet that was just received. * @return The state the network should have. @@ -143,7 +143,7 @@ protected: /** * Poll the server for certain updates, an invalid poll (e.g. not existent id) gets silently dropped: - * uint8 #AdminUpdateType the server should answer for, only if #AdminUpdateFrequency #ADMIN_FREQUENCY_POLL is advertised in the PROTOCOL packet. + * uint8 #AdminUpdateType the server should answer for, only if #AdminUpdateFrequency #ADMIN_FREQUENCY_POLL is advertised in the PROTOCOL packet. Note integer type - see "Certain Packet Information" in docs/admin_network.md. * uint32 ID relevant to the packet type, e.g. * - the client ID for #ADMIN_UPDATE_CLIENT_INFO. Use UINT32_MAX to show all clients. * - the company ID for #ADMIN_UPDATE_COMPANY_INFO. Use UINT32_MAX to show all companies. From 218db00c4c75d0452dd76996a1925775ebdc4e70 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Jun 2020 15:13:13 +0100 Subject: [PATCH 197/601] Fix #8216: Don't show floating text on autoreplace if cost is 0 --- src/vehicle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 72ef5a31ad..30ac096b4a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1045,7 +1045,7 @@ void CallVehicleTicks() if (!IsLocalCompany()) continue; - if (res.Succeeded()) { + if (res.Succeeded() && res.GetCost() != 0) { ShowCostOrIncomeAnimation(x, y, z, res.GetCost()); continue; } From 63d20c029bd283e03a93d3ab93e1565ac427cdce Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 28 Jun 2020 01:18:28 +0200 Subject: [PATCH 198/601] Fix 887b912af: MinGW requires an extra link flag with _FORTIFY_SOURCE (#8246) see #7860 --- cmake/CompileFlags.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index 9287ca2490..e7d470c7d3 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -33,6 +33,11 @@ macro(compile_flags) "$<$:-D_DEBUG>" "$<$>:-D_FORTIFY_SOURCE=2>" # FORTIFY_SOURCE should only be used in non-debug builds (requires -O1+) ) + if (MINGW) + add_link_options( + "$<$>:-fstack-protector>" # Prevent undefined references when _FORTIFY_SOURCE > 0 + ) + endif (MINGW) # Prepare a generator that checks if we are not a debug, and don't have asserts # on. We need this later on to set some compile options for stable releases. From a4a9908a51a00277eae764148b33095ffbf0699d Mon Sep 17 00:00:00 2001 From: TrevorShelton <54145769+TrevorShelton@users.noreply.github.com> Date: Sun, 28 Jun 2020 04:53:56 -0700 Subject: [PATCH 199/601] Fix #8221: Missing specific error message for bridge too long (#8240) --- src/bridge_gui.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index f10b52f66b..44cc99ba3e 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -426,9 +426,12 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo default: break; } + bool any_available = false; + CommandCost type_check; /* loop for all bridgetypes */ for (BridgeType brd_type = 0; brd_type != MAX_BRIDGES; brd_type++) { - if (CheckBridgeAvailability(brd_type, bridge_len).Succeeded()) { + type_check = CheckBridgeAvailability(brd_type, bridge_len); + if (type_check.Succeeded()) { /* bridge is accepted, add to list */ /*C++17: BuildBridgeData &item = */ bl->emplace_back(); BuildBridgeData &item = bl->back(); @@ -437,8 +440,14 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo /* Add to terraforming & bulldozing costs the cost of the * bridge itself (not computed with DC_QUERY_COST) */ item.cost = ret.GetCost() + (((int64)tot_bridgedata_len * _price[PR_BUILD_BRIDGE] * item.spec->price) >> 8) + infra_cost; + any_available = true; } } + /* give error cause if no bridges available here*/ + if (!any_available) + { + errmsg = type_check.GetErrorMessage(); + } } if (bl != nullptr && bl->size() != 0) { From cf8ccf4b08a0ad27079b91cacd8af01112646aa4 Mon Sep 17 00:00:00 2001 From: ilayaraja97 Date: Sat, 16 May 2020 20:35:37 +0530 Subject: [PATCH 200/601] Fix #8131: small bridges also have pillars drawn --- src/tunnelbridge_cmd.cpp | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index c5e2f8d9bb..1a66d530f0 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1623,22 +1623,7 @@ void DrawBridgeMiddle(const TileInfo *ti) if (IsInvisibilitySet(TO_BRIDGES)) return; psid++; - if (ti->z + 5 == z) { - /* draw poles below for small bridges */ - if (psid->sprite != 0) { - SpriteID image = psid->sprite; - SpriteID pal = psid->pal; - if (IsTransparencySet(TO_BRIDGES)) { - SetBit(image, PALETTE_MODIFIER_TRANSPARENT); - pal = PALETTE_TO_TRANSPARENT; - } - - DrawGroundSpriteAt(image, pal, x - ti->x, y - ti->y, z - ti->z); - } - } else { - /* draw pillars below for high bridges */ - DrawBridgePillars(psid, ti, axis, drawfarpillar, x, y, z); - } + DrawBridgePillars(psid, ti, axis, drawfarpillar, x, y, z); } From 54237b0e98894008168285109634479dddb1bc16 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 17 May 2020 22:24:59 +0100 Subject: [PATCH 201/601] Codechange: Move SlSkipBytes to saveload.h --- src/saveload/saveload.cpp | 10 ---------- src/saveload/saveload.h | 10 ++++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 4da89aa847..8cf6a39238 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -467,16 +467,6 @@ static inline void SlWriteUint64(uint64 x) SlWriteUint32((uint32)x); } -/** - * Read in bytes from the file/data structure but don't do - * anything with them, discarding them in effect - * @param length The amount of bytes that is being treated this way - */ -static inline void SlSkipBytes(size_t length) -{ - for (; length != 0; length--) SlReadByte(); -} - /** * Read in the header descriptor of an object or an array. * If the highest bit is set (7), then the index is bigger than 127 diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index af2de11893..26462cdaa4 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -900,6 +900,16 @@ void NORETURN SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2); bool SaveloadCrashWithMissingNewGRFs(); +/** + * Read in bytes from the file/data structure but don't do + * anything with them, discarding them in effect + * @param length The amount of bytes that is being treated this way + */ +static inline void SlSkipBytes(size_t length) +{ + for (; length != 0; length--) SlReadByte(); +} + extern char _savegame_format[8]; extern bool _do_autosave; From 7a09413a1aabc934c201c19bcae3ad03d7b801c7 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 17 May 2020 22:13:08 +0100 Subject: [PATCH 202/601] Fix: Incorrect save/load array size of Town::cargo_accepted In 11ab3c4e the number of cargo types was changed from 32 to 64. The save/load of Town::cargo_accepted was not updated, such that only half of the data structure is saved/loaded in savegame versions 199 to 218. Discard and regenerate data from all savegame versions prior to 219. --- src/saveload/afterload.cpp | 2 +- src/saveload/saveload.h | 1 + src/saveload/town_sl.cpp | 27 +++++++++++++++++---------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index cc2a671a2f..e9c1cdb90c 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2830,7 +2830,7 @@ bool AfterLoadGame() * which is done by StartupEngines(). */ if (gcf_res != GLC_ALL_GOOD) StartupEngines(); - if (IsSavegameVersionBefore(SLV_166)) { + if (IsSavegameVersionBefore(SLV_FIX_TOWN_ACCEPTANCE)) { /* Update cargo acceptance map of towns. */ for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_HOUSE)) continue; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 26462cdaa4..dcf8a41d85 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -302,6 +302,7 @@ enum SaveLoadVersion : uint16 { 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 v1.10 Configurable ending year. + SLV_FIX_TOWN_ACCEPTANCE, ///< 219 PR#8157 Fix Town::cargo_accepted savegame format. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index cbf7205d07..7e41ef6cc3 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -256,7 +256,7 @@ static void RealSave_Town(Town *t) SlObject(&t->cargo_accepted, GetTileMatrixDesc()); if (t->cargo_accepted.area.w != 0) { uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; - SlArray(t->cargo_accepted.data, arr_len, SLE_UINT32); + SlArray(t->cargo_accepted.data, arr_len, SLE_UINT64); } } @@ -288,16 +288,23 @@ static void Load_TOWN() SlErrorCorrupt("Invalid town name generator"); } - if (IsSavegameVersionBefore(SLV_166)) continue; + if (!IsSavegameVersionBefore(SLV_FIX_TOWN_ACCEPTANCE)) { + SlObject(&t->cargo_accepted, GetTileMatrixDesc()); + if (t->cargo_accepted.area.w != 0) { + uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; + t->cargo_accepted.data = MallocT(arr_len); + SlArray(t->cargo_accepted.data, arr_len, SLE_UINT64); - SlObject(&t->cargo_accepted, GetTileMatrixDesc()); - if (t->cargo_accepted.area.w != 0) { - uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; - t->cargo_accepted.data = MallocT(arr_len); - SlArray(t->cargo_accepted.data, arr_len, SLE_UINT32); - - /* Rebuild total cargo acceptance. */ - UpdateTownCargoTotal(t); + /* Rebuild total cargo acceptance. */ + UpdateTownCargoTotal(t); + } + } else if (!IsSavegameVersionBefore(SLV_166)) { + AcceptanceMatrix cargo_accepted; + SlObject(&cargo_accepted, GetTileMatrixDesc()); + if (cargo_accepted.area.w != 0) { + uint arr_len = cargo_accepted.area.w / AcceptanceMatrix::GRID * cargo_accepted.area.h / AcceptanceMatrix::GRID; + SlSkipBytes(4 * arr_len); + } } } } From 6d3c2edc599c3f74cf1aa3e69ddb6d301af62fa0 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sat, 11 Apr 2020 17:12:26 +0200 Subject: [PATCH 203/601] Add: [NewGRF] Industry behaviour flag to override second cargo production clamping for water industries when using smooth economy. Smooth economy is only used when the corresponding setting is enabled and the industries does not use the production callback. --- src/industry_cmd.cpp | 2 +- src/industrytype.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 35def46098..bd1d28ef6c 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2677,7 +2677,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) /* Prevent production to overflow or Oil Rig passengers to be over-"produced" */ new_prod = Clamp(new_prod, 1, 255); - if (((indspec->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0) && j == 1) { + if (((indspec->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0) && j == 1 && !(indspec->behaviour & INDUSTRYBEH_WATER_NO_CLAMP_PROD)) { new_prod = Clamp(new_prod, 0, 16); } diff --git a/src/industrytype.h b/src/industrytype.h index ec4f8f85df..8af486c210 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -80,6 +80,7 @@ enum IndustryBehaviour { INDUSTRYBEH_NOBUILT_MAPCREATION = 1 << 16, ///< Do not force one instance of this type to appear on map generation INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17, ///< Allow closing down the last instance of this type INDUSTRYBEH_CARGOTYPES_UNLIMITED = 1 << 18, ///< Allow produced/accepted cargoes callbacks to supply more than 2 and 3 types + INDUSTRYBEH_WATER_NO_CLAMP_PROD = 1 << 19, ///< Do not clamp production of second cargo for water industries }; DECLARE_ENUM_AS_BIT_SET(IndustryBehaviour) From ca2604c4e2cc972c2081db91a5e7b0bcdd092203 Mon Sep 17 00:00:00 2001 From: dP Date: Sun, 28 Jun 2020 19:04:55 +0300 Subject: [PATCH 204/601] Revert #8157: Redundant change --- src/saveload/afterload.cpp | 2 +- src/saveload/saveload.h | 1 - src/saveload/town_sl.cpp | 27 ++++++++++----------------- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index e9c1cdb90c..cc2a671a2f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2830,7 +2830,7 @@ bool AfterLoadGame() * which is done by StartupEngines(). */ if (gcf_res != GLC_ALL_GOOD) StartupEngines(); - if (IsSavegameVersionBefore(SLV_FIX_TOWN_ACCEPTANCE)) { + if (IsSavegameVersionBefore(SLV_166)) { /* Update cargo acceptance map of towns. */ for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_HOUSE)) continue; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index dcf8a41d85..26462cdaa4 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -302,7 +302,6 @@ enum SaveLoadVersion : uint16 { 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 v1.10 Configurable ending year. - SLV_FIX_TOWN_ACCEPTANCE, ///< 219 PR#8157 Fix Town::cargo_accepted savegame format. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 7e41ef6cc3..cbf7205d07 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -256,7 +256,7 @@ static void RealSave_Town(Town *t) SlObject(&t->cargo_accepted, GetTileMatrixDesc()); if (t->cargo_accepted.area.w != 0) { uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; - SlArray(t->cargo_accepted.data, arr_len, SLE_UINT64); + SlArray(t->cargo_accepted.data, arr_len, SLE_UINT32); } } @@ -288,23 +288,16 @@ static void Load_TOWN() SlErrorCorrupt("Invalid town name generator"); } - if (!IsSavegameVersionBefore(SLV_FIX_TOWN_ACCEPTANCE)) { - SlObject(&t->cargo_accepted, GetTileMatrixDesc()); - if (t->cargo_accepted.area.w != 0) { - uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; - t->cargo_accepted.data = MallocT(arr_len); - SlArray(t->cargo_accepted.data, arr_len, SLE_UINT64); + if (IsSavegameVersionBefore(SLV_166)) continue; - /* Rebuild total cargo acceptance. */ - UpdateTownCargoTotal(t); - } - } else if (!IsSavegameVersionBefore(SLV_166)) { - AcceptanceMatrix cargo_accepted; - SlObject(&cargo_accepted, GetTileMatrixDesc()); - if (cargo_accepted.area.w != 0) { - uint arr_len = cargo_accepted.area.w / AcceptanceMatrix::GRID * cargo_accepted.area.h / AcceptanceMatrix::GRID; - SlSkipBytes(4 * arr_len); - } + SlObject(&t->cargo_accepted, GetTileMatrixDesc()); + if (t->cargo_accepted.area.w != 0) { + uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; + t->cargo_accepted.data = MallocT(arr_len); + SlArray(t->cargo_accepted.data, arr_len, SLE_UINT32); + + /* Rebuild total cargo acceptance. */ + UpdateTownCargoTotal(t); } } } From 380fd8cab41bce0954bcd38eba5befe7057c8fa2 Mon Sep 17 00:00:00 2001 From: dP Date: Mon, 18 May 2020 16:12:20 +0300 Subject: [PATCH 205/601] Fix: Make subsidies scan tiles for town acceptance and production instead of using desync-prone town caches --- src/subsidy.cpp | 28 ++++++++++++++++++---------- src/subsidy_base.h | 1 + 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/subsidy.cpp b/src/subsidy.cpp index e3913a2891..25651a91ef 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -328,20 +328,27 @@ bool FindSubsidyTownCargoRoute() const Town *src_town = Town::GetRandom(); if (src_town->cache.population < SUBSIDY_CARGO_MIN_POPULATION) return false; - CargoTypes town_cargo_produced = src_town->cargo_produced; + CargoArray town_cargo_produced = GetProductionAroundTiles(src_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); /* Passenger subsidies are not handled here. */ - ClrBit(town_cargo_produced, CT_PASSENGERS); + town_cargo_produced[CT_PASSENGERS] = 0; + + uint8 cargo_count = 0; + for (CargoID i = 0; i < NUM_CARGO; i++) { + if (town_cargo_produced[i] > 0) cargo_count++; + } /* No cargo produced at all? */ - if (town_cargo_produced == 0) return false; + if (cargo_count == 0) return false; /* Choose a random cargo that is produced in the town. */ - uint8 cargo_number = RandomRange(CountBits(town_cargo_produced)); + uint8 cargo_number = RandomRange(cargo_count); CargoID cid; - FOR_EACH_SET_CARGO_ID(cid, town_cargo_produced) { - if (cargo_number == 0) break; - cargo_number--; + for (cid = 0; cid < NUM_CARGO; cid++) { + if (town_cargo_produced[cid] > 0) { + if (cargo_number == 0) break; + cargo_number--; + } } /* Avoid using invalid NewGRF cargoes. */ @@ -416,17 +423,18 @@ bool FindSubsidyIndustryCargoRoute() */ bool FindSubsidyCargoDestination(CargoID cid, SourceType src_type, SourceID src) { - /* Choose a random destination. Only consider towns if they can accept the cargo. */ - SourceType dst_type = (HasBit(_town_cargoes_accepted, cid) && Chance16(1, 2)) ? ST_TOWN : ST_INDUSTRY; + /* Choose a random destination. */ + SourceType dst_type = Chance16(1, 2) ? ST_TOWN : ST_INDUSTRY; SourceID dst; switch (dst_type) { case ST_TOWN: { /* Select a random town. */ const Town *dst_town = Town::GetRandom(); + CargoArray town_cargo_accepted = GetAcceptanceAroundTiles(dst_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); /* Check if the town can accept this cargo. */ - if (!HasBit(dst_town->cargo_accepted_total, cid)) return false; + if (town_cargo_accepted[cid] >= 8) return false; dst = dst_town->index; break; diff --git a/src/subsidy_base.h b/src/subsidy_base.h index ef26f64167..ef9276433f 100644 --- a/src/subsidy_base.h +++ b/src/subsidy_base.h @@ -57,5 +57,6 @@ static const uint SUBSIDY_PAX_MIN_POPULATION = 400; ///< Min. population of to static const uint SUBSIDY_CARGO_MIN_POPULATION = 900; ///< Min. population of destination town for cargo route 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) +static const uint SUBSIDY_TOWN_CARGO_RADIUS = 6; ///< Extent of a tile area around town center when scanning for town cargo acceptance and production (6 ~= min catchmement + min station / 2) #endif /* SUBSIDY_BASE_H */ From 7045186594d947b53312a0e72c901f3889757437 Mon Sep 17 00:00:00 2001 From: dP Date: Mon, 18 May 2020 17:32:05 +0300 Subject: [PATCH 206/601] Change #8159: Remove now unused town cargo caches without bumping the savegame version --- src/saveload/afterload.cpp | 12 ------ src/saveload/town_sl.cpp | 32 +++++++------- src/subsidy.cpp | 2 +- src/town.h | 12 ------ src/town_cmd.cpp | 86 -------------------------------------- 5 files changed, 16 insertions(+), 128 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index cc2a671a2f..163ded73cd 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2830,18 +2830,6 @@ bool AfterLoadGame() * which is done by StartupEngines(). */ if (gcf_res != GLC_ALL_GOOD) StartupEngines(); - if (IsSavegameVersionBefore(SLV_166)) { - /* Update cargo acceptance map of towns. */ - for (TileIndex t = 0; t < map_size; t++) { - if (!IsTileType(t, MP_HOUSE)) continue; - Town::Get(GetTownIndex(t))->cargo_accepted.Add(t); - } - - for (Town *town : Town::Iterate()) { - UpdateTownCargoes(town); - } - } - /* The road owner of standard road stops was not properly accounted for. */ if (IsSavegameVersionBefore(SLV_172)) { for (TileIndex t = 0; t < map_size; t++) { diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index cbf7205d07..78765dbdaf 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -13,12 +13,16 @@ #include "../landscape.h" #include "../subsidy_func.h" #include "../strings_func.h" +#include "../tilematrix_type.hpp" #include "saveload.h" #include "newgrf_sl.h" #include "../safeguards.h" +/* TODO: Remove acceptance matrix from the savegame completely. */ +typedef TileMatrix AcceptanceMatrix; + /** * Rebuild all the cached variables of towns. */ @@ -48,9 +52,7 @@ void RebuildTownCaches() /* Update the population and num_house dependent values */ for (Town *town : Town::Iterate()) { UpdateTownRadius(town); - UpdateTownCargoes(town); } - UpdateTownCargoBitmap(); } /** @@ -190,8 +192,8 @@ static const SaveLoad _town_desc[] = { SLE_CONDLST(Town, psa_list, REF_STORAGE, SLV_161, SL_MAX_VERSION), - SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, SLV_166, SLV_EXTEND_CARGOTYPES), - SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), + SLE_CONDNULL(4, SLV_166, SLV_EXTEND_CARGOTYPES), ///< cargo_produced, no longer in use + SLE_CONDNULL(8, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), ///< cargo_produced, no longer in use /* reserve extra space in savegame here. (currently 30 bytes) */ SLE_CONDNULL(30, SLV_2, SL_MAX_VERSION), @@ -253,11 +255,9 @@ static void RealSave_Town(Town *t) if (IsSavegameVersionBefore(SLV_166)) return; - SlObject(&t->cargo_accepted, GetTileMatrixDesc()); - if (t->cargo_accepted.area.w != 0) { - uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; - SlArray(t->cargo_accepted.data, arr_len, SLE_UINT32); - } + /* Write an empty matrix to avoid bumping savegame version. */ + AcceptanceMatrix dummy; + SlObject(&dummy, GetTileMatrixDesc()); } static void Save_TOWN() @@ -290,14 +290,12 @@ static void Load_TOWN() if (IsSavegameVersionBefore(SLV_166)) continue; - SlObject(&t->cargo_accepted, GetTileMatrixDesc()); - if (t->cargo_accepted.area.w != 0) { - uint arr_len = t->cargo_accepted.area.w / AcceptanceMatrix::GRID * t->cargo_accepted.area.h / AcceptanceMatrix::GRID; - t->cargo_accepted.data = MallocT(arr_len); - SlArray(t->cargo_accepted.data, arr_len, SLE_UINT32); - - /* Rebuild total cargo acceptance. */ - UpdateTownCargoTotal(t); + /* Discard acceptance matrix to avoid bumping savegame version. */ + AcceptanceMatrix dummy; + SlObject(&dummy, GetTileMatrixDesc()); + if (dummy.area.w != 0) { + uint arr_len = dummy.area.w / AcceptanceMatrix::GRID * dummy.area.h / AcceptanceMatrix::GRID; + for (arr_len *= 4; arr_len != 0; arr_len--) SlReadByte(); } } } diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 25651a91ef..0a1af3c666 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -434,7 +434,7 @@ bool FindSubsidyCargoDestination(CargoID cid, SourceType src_type, SourceID src) CargoArray town_cargo_accepted = GetAcceptanceAroundTiles(dst_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); /* Check if the town can accept this cargo. */ - if (town_cargo_accepted[cid] >= 8) return false; + if (town_cargo_accepted[cid] < 8) return false; dst = dst_town->index; break; diff --git a/src/town.h b/src/town.h index af06fa03c3..3bb9e10d66 100644 --- a/src/town.h +++ b/src/town.h @@ -15,7 +15,6 @@ #include "subsidy_type.h" #include "newgrf_storage.h" #include "cargotype.h" -#include "tilematrix_type.hpp" #include template @@ -24,8 +23,6 @@ struct BuildingCounts { T class_count[HOUSE_CLASS_MAX]; }; -typedef TileMatrix AcceptanceMatrix; - static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY = 4; ///< value for custom town number in difficulty settings static const uint CUSTOM_TOWN_MAX_NUMBER = 5000; ///< this is the maximum number of towns a user can specify in customisation @@ -83,10 +80,6 @@ struct Town : TownPool::PoolItem<&_town_pool> { inline byte GetPercentTransported(CargoID cid) const { return this->supplied[cid].old_act * 256 / (this->supplied[cid].old_max + 1); } - /* Cargo production and acceptance stats. */ - CargoTypes cargo_produced; ///< Bitmap of all cargoes produced by houses in this town. - AcceptanceMatrix cargo_accepted; ///< Bitmap of cargoes accepted by houses for each 4*4 map square of the town. - CargoTypes cargo_accepted_total; ///< NOSAVE: Bitmap of all cargoes accepted by houses in this town. StationList stations_near; ///< NOSAVE: List of nearby stations. uint16 time_until_rebuild; ///< time until we rebuild a house @@ -203,9 +196,6 @@ void ResetHouses(); void ClearTownHouse(Town *t, TileIndex tile); void UpdateTownMaxPass(Town *t); void UpdateTownRadius(Town *t); -void UpdateTownCargoes(Town *t); -void UpdateTownCargoTotal(Town *t); -void UpdateTownCargoBitmap(); CommandCost CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlag flags); Town *ClosestTownFromTile(TileIndex tile, uint threshold); void ChangeTownRating(Town *t, int add, int max, DoCommandFlag flags); @@ -313,8 +303,6 @@ static inline uint16 TownTicksToGameTicks(uint16 ticks) { } -extern CargoTypes _town_cargoes_accepted; - RoadType GetTownRoadType(const Town *t); #endif /* TOWN_H */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 39dfa7db17..374601cad2 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -55,7 +55,6 @@ #include "safeguards.h" TownID _new_town_id; -CargoTypes _town_cargoes_accepted; ///< Bitmap of all cargoes accepted by houses. /* Initialize the town-pool */ TownPool _town_pool("Town"); @@ -782,85 +781,6 @@ static void ChangeTileOwner_Town(TileIndex tile, Owner old_owner, Owner new_owne /* not used */ } -/** Update the total cargo acceptance of the whole town. - * @param t The town to update. - */ -void UpdateTownCargoTotal(Town *t) -{ - t->cargo_accepted_total = 0; - - const TileArea &area = t->cargo_accepted.GetArea(); - TILE_AREA_LOOP(tile, area) { - if (TileX(tile) % AcceptanceMatrix::GRID == 0 && TileY(tile) % AcceptanceMatrix::GRID == 0) { - t->cargo_accepted_total |= t->cargo_accepted[tile]; - } - } -} - -/** - * Update accepted town cargoes around a specific tile. - * @param t The town to update. - * @param start Update the values around this tile. - * @param update_total Set to true if the total cargo acceptance should be updated. - */ -static void UpdateTownCargoes(Town *t, TileIndex start, bool update_total = true) -{ - CargoArray accepted, produced; - CargoTypes dummy = 0; - - /* Gather acceptance for all houses in an area around the start tile. - * The area is composed of the square the tile is in, extended one square in all - * directions as the coverage area of a single station is bigger than just one square. */ - TileArea area = AcceptanceMatrix::GetAreaForTile(start, 1); - TILE_AREA_LOOP(tile, area) { - if (!IsTileType(tile, MP_HOUSE) || GetTownIndex(tile) != t->index) continue; - - AddAcceptedCargo_Town(tile, accepted, &dummy); - AddProducedCargo_Town(tile, produced); - } - - /* Create bitmap of produced and accepted cargoes. */ - CargoTypes acc = 0; - for (uint cid = 0; cid < NUM_CARGO; cid++) { - if (accepted[cid] >= 8) SetBit(acc, cid); - if (produced[cid] > 0) SetBit(t->cargo_produced, cid); - } - t->cargo_accepted[start] = acc; - - if (update_total) UpdateTownCargoTotal(t); -} - -/** Update cargo acceptance for the complete town. - * @param t The town to update. - */ -void UpdateTownCargoes(Town *t) -{ - t->cargo_produced = 0; - - const TileArea &area = t->cargo_accepted.GetArea(); - if (area.tile == INVALID_TILE) return; - - /* Update acceptance for each grid square. */ - TILE_AREA_LOOP(tile, area) { - if (TileX(tile) % AcceptanceMatrix::GRID == 0 && TileY(tile) % AcceptanceMatrix::GRID == 0) { - UpdateTownCargoes(t, tile, false); - } - } - - /* Update the total acceptance. */ - UpdateTownCargoTotal(t); -} - -/** Updates the bitmap of all cargoes accepted by houses. */ -void UpdateTownCargoBitmap() -{ - _town_cargoes_accepted = 0; - - for (const Town *town : Town::Iterate()) { - _town_cargoes_accepted |= town->cargo_accepted_total; - } -} - static bool GrowTown(Town *t); static void TownTickHandler(Town *t) @@ -2588,7 +2508,6 @@ static bool BuildTownHouse(Town *t, TileIndex tile) MakeTownHouse(tile, t, construction_counter, construction_stage, house, random_bits); UpdateTownRadius(t); UpdateTownGrowthRate(t); - UpdateTownCargoes(t, tile); return true; } @@ -2673,9 +2592,6 @@ void ClearTownHouse(Town *t, TileIndex tile) RemoveNearbyStations(t, tile, hs->building_flags); UpdateTownRadius(t); - - /* Update cargo acceptance. */ - UpdateTownCargoes(t, tile); } /** @@ -3698,10 +3614,8 @@ void TownsMonthlyLoop() UpdateTownGrowth(t); UpdateTownRating(t); UpdateTownUnwanted(t); - UpdateTownCargoes(t); } - UpdateTownCargoBitmap(); } void TownsYearlyLoop() From 04c050f93ed1ea60409f53bea96a1790245851e0 Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Thu, 4 Jun 2020 09:48:59 +0200 Subject: [PATCH 207/601] Fix: don't use ICU on macOS --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 825ba3dcd4..675246f5ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,9 @@ if (NOT WIN32) find_package(Fluidsynth) find_package(Freetype) find_package(Fontconfig) - find_package(ICU OPTIONAL_COMPONENTS i18n lx) + if (NOT APPLE) + find_package(ICU OPTIONAL_COMPONENTS i18n lx) + endif (NOT APPLE) find_package(XDG_basedir) endif (NOT WIN32) if (APPLE) From 0d46e20bd4ab4e66e5801b731e0d2b4cb9014ad2 Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Thu, 4 Jun 2020 14:38:56 +0200 Subject: [PATCH 208/601] Add: add option for forcing coloured compiler output (useful for Ninja) --- cmake/CompileFlags.cmake | 13 +++++++++++++ cmake/Options.cmake | 2 ++ 2 files changed, 15 insertions(+) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index e7d470c7d3..d200b3f500 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -82,6 +82,19 @@ macro(compile_flags) "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>" ) + # Ninja processes the output so the output from the compiler + # isn't directly to a terminal; hence, the default is + # non-coloured output. We can override this to get nicely + # coloured output, but since that might yield odd results with + # IDEs, we extract it to an option. + if (OPTION_FORCE_COLORED_OUTPUT) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + add_compile_options (-fdiagnostics-color=always) + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + add_compile_options (-fcolor-diagnostics) + endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + endif (OPTION_FORCE_COLORED_OUTPUT) + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-flifetime-dse=1" LIFETIME_DSE_FOUND) diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 478f1b2b24..4210c5b490 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -48,6 +48,8 @@ function(set_options) set(DEFAULT_OPTION_INSTALL_FHS OFF) endif (UNIX AND NOT APPLE) + option(OPTION_FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF) + option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) option(OPTION_INSTALL_FHS "Install with Filesstem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) From 241e3adae8d387618fb52a75273feed9830de64a Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Thu, 4 Jun 2020 20:44:57 +0200 Subject: [PATCH 209/601] Fix: use proper flags for suppressing warnings in Clang --- cmake/CompileFlags.cmake | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index d200b3f500..6fe185df85 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -73,14 +73,21 @@ macro(compile_flags) -fno-strict-aliasing ) - add_compile_options( - # When we are a stable release (Release build + USE_ASSERTS not set), - # assertations are off, which trigger a lot of warnings. We disable - # these warnings for these releases. - "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" - "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-parameter>" - "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>" - ) + # When we are a stable release (Release build + USE_ASSERTS not set), + # assertations are off, which trigger a lot of warnings. We disable + # these warnings for these releases. + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options( + "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-parameter>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>" + ) + else (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options( + "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-parameter>" + ) + endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Ninja processes the output so the output from the compiler # isn't directly to a terminal; hence, the default is From c593893b56f310055c39c1d3c110a0843fc5ba8e Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Thu, 4 Jun 2020 21:59:30 +0200 Subject: [PATCH 210/601] Fix: set Mac deployment target This silences an awful lot of warnings. --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 675246f5ee..bd2111e53f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) # Use GNUInstallDirs to allow customisation # but set our own default data dir From 70905ee82e4c341cbc0efb0ddb2d9508a6806b8c Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Fri, 5 Jun 2020 03:42:31 +0200 Subject: [PATCH 211/601] Fix: fix building release tags I tried building a tag, and got this error: CMake Error at cmake/scripts/FindVersion.cmake:85 (string): string sub-command REGEX, mode REPLACE: regex "^[0-9.]*$" matched an empty string. --- cmake/scripts/FindVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index d48664fc89..b53f77032f 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -82,7 +82,7 @@ if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") set(REV_VERSION "${TAG}") set(REV_ISTAG 1) - string(REGEX REPLACE "^[0-9.]*$" "" STABLETAG "${TAG}") + string(REGEX REPLACE "^[0-9.]+$" "" STABLETAG "${TAG}") if (NOT STABLETAG STREQUAL "") set(REV_ISSTABLETAG 1) else () From e6be8be19d5b9b2b21175bad0d8bb22c64e596a4 Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Fri, 5 Jun 2020 20:26:47 +0200 Subject: [PATCH 212/601] Fix: remove remainining usages of FALSE in CMake files --- cmake/FindIconv.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake index 5185601ab7..23c7a86f91 100644 --- a/cmake/FindIconv.cmake +++ b/cmake/FindIconv.cmake @@ -58,7 +58,7 @@ elseif(CMAKE_CXX_COMPILER_LOADED) include(CheckCXXSourceCompiles) else() # If neither C nor CXX are loaded, implicit iconv makes no sense. - set(Iconv_IS_BUILT_IN FALSE) + set(Iconv_IS_BUILT_IN NO) endif() # iconv can only be provided in libc on a POSIX system. @@ -94,7 +94,7 @@ if(NOT DEFINED Iconv_IS_BUILT_IN) endif() cmake_pop_check_state() else() - set(Iconv_IS_BUILT_IN FALSE) + set(Iconv_IS_BUILT_IN NO) endif() endif() From 7fd7b515933b85a0b78da4e5e30db957f90aaec5 Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Thu, 18 Jun 2020 14:24:29 +0200 Subject: [PATCH 213/601] Fix: don't search for SDL, etc., on macOS --- CMakeLists.txt | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bd2111e53f..06cd71c3a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,27 +32,27 @@ find_package(ZLIB) find_package(LibLZMA) find_package(LZO) find_package(PNG) -if (NOT WIN32) - find_package(SDL2) - if (NOT SDL2_FOUND) - find_package(SDL) - endif( NOT SDL2_FOUND) - find_package(Allegro) - find_package(Fluidsynth) - find_package(Freetype) - find_package(Fontconfig) - if (NOT APPLE) - find_package(ICU OPTIONAL_COMPONENTS i18n lx) - endif (NOT APPLE) - find_package(XDG_basedir) -endif (NOT WIN32) -if (APPLE) - find_package(Iconv) - find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) - find_library(AUDIOUNIT_LIBRARY AudioUnit) - find_library(COCOA_LIBRARY Cocoa) -endif (APPLE) +if (NOT WIN32) + find_package(Allegro) + if (NOT APPLE) + find_package(SDL2) + if (NOT SDL2_FOUND) + find_package(SDL) + endif( NOT SDL2_FOUND) + find_package(Fluidsynth) + find_package(Freetype) + find_package(Fontconfig) + find_package(ICU OPTIONAL_COMPONENTS i18n lx) + find_package(XDG_basedir) + else (NOT APPLE) + find_package(Iconv) + + find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) + find_library(AUDIOUNIT_LIBRARY AudioUnit) + find_library(COCOA_LIBRARY Cocoa) + endif (NOT APPLE) +endif (NOT WIN32) if (MSVC) find_package(Editbin REQUIRED) From 94d5fcab4bd61183bf735e317423d90179ba8035 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 1 Jul 2020 19:45:39 +0200 Subject: [PATCH 214/601] Update: Translations from eints czech: 3 changes by djst --- src/lang/czech.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index fd7bb561e1..556245a529 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1021,6 +1021,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexické peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Nový taiwanský dolar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Čínský renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongský dolar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indická rupie (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Silniční vozidla jezdí @@ -2254,6 +2255,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Špatné STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server je plný STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Jsi blokován serverem STR_NETWORK_ERROR_KICKED :{WHITE}Byl jsi vyhozen ze hry +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Důvod: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Používání cheatů není na tomto serveru povoleno STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Posíláte serveru příliš mnoho příkazů STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Vložení hesla ti trvalo příliš dlouho @@ -2313,6 +2315,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} po STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dal(a) jsi {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server ukončil relaci STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server se restartuje...{}Počkejte prosím... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} byl vyhozen. Důvod: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Součásti ke stažení From 816fada2b18140b579e6b1d46740f46e2daeae83 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Thu, 2 Jul 2020 12:35:28 +0200 Subject: [PATCH 215/601] Fix #8250: [NRT] Company infrastructure window always omits last road/tramtype --- src/company_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index f4fe7f8030..dd8a17ce05 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1882,7 +1882,7 @@ struct CompanyInfrastructureWindow : Window switch (widget) { case WID_CI_RAIL_DESC: { - uint lines = 1; + uint lines = 1; // Starts at 1 because a line is also required for the section title size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width); @@ -1905,7 +1905,7 @@ struct CompanyInfrastructureWindow : Window case WID_CI_ROAD_DESC: case WID_CI_TRAM_DESC: { - uint lines = 0; + uint lines = 1; // Starts at 1 because a line is also required for the section title size->width = max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width); From 53de5b5c55f22c3f37db44c4e5ca2c609cbf7b27 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 11 Jun 2020 21:57:14 +0200 Subject: [PATCH 216/601] Fix: [CMake] Restore man file compression --- cmake/InstallAndPackage.cmake | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 71b80e6843..6292ecf5a6 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -40,8 +40,16 @@ install(FILES # A Linux manual only makes sense when using FHS. Otherwise it is a very odd # file with little context to what it is. if (OPTION_INSTALL_FHS) + set(MAN_SOURCE_FILE ${CMAKE_SOURCE_DIR}/docs/openttd.6) + set(MAN_BINARY_FILE ${CMAKE_BINARY_DIR}/docs/openttd.6) + install(CODE + " + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${MAN_SOURCE_FILE} ${MAN_BINARY_FILE}) + execute_process(COMMAND gzip -9 -f ${MAN_BINARY_FILE}) + " + COMPONENT manual) install(FILES - ${CMAKE_SOURCE_DIR}/docs/openttd.6 + ${MAN_BINARY_FILE}.gz DESTINATION ${MAN_DESTINATION_DIR}/man6 COMPONENT manual) endif (OPTION_INSTALL_FHS) From 97592c409378c2d353a1cdd6b50f80b7e81b67c2 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 11 Jun 2020 21:57:14 +0200 Subject: [PATCH 217/601] Add: [CMake] Allow renaming of openttd binary --- CMakeLists.txt | 7 ++++++- cmake/InstallAndPackage.cmake | 4 ++-- cmake/Options.cmake | 6 +++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 06cd71c3a2..364236c86c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,10 @@ cmake_minimum_required(VERSION 3.5) -project(OpenTTD) +if (NOT BINARY_NAME) + set(BINARY_NAME openttd) +endif (NOT BINARY_NAME) + +project(${BINARY_NAME}) if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory") @@ -131,6 +135,7 @@ include(CompileFlags) compile_flags() add_executable(openttd WIN32 ${GENERATED_SOURCE_FILES}) +set_target_properties(openttd PROPERTIES OUTPUT_NAME "${BINARY_NAME}") # All other files are added via target_sources() include(AddCustomXXXTimestamp) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 6292ecf5a6..c8cd6b44ac 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -3,7 +3,7 @@ include(GNUInstallDirs) # If requested, use FHS layout; otherwise fall back to a flat layout. if (OPTION_INSTALL_FHS) set(BINARY_DESTINATION_DIR "${CMAKE_INSTALL_BINDIR}") - set(DATA_DESTINATION_DIR "${CMAKE_INSTALL_DATADIR}/openttd") + set(DATA_DESTINATION_DIR "${CMAKE_INSTALL_DATADIR}/${BINARY_NAME}") set(DOCS_DESTINATION_DIR "${CMAKE_INSTALL_DOCDIR}") set(MAN_DESTINATION_DIR "${CMAKE_INSTALL_MANDIR}") else (OPTION_INSTALL_FHS) @@ -41,7 +41,7 @@ install(FILES # file with little context to what it is. if (OPTION_INSTALL_FHS) set(MAN_SOURCE_FILE ${CMAKE_SOURCE_DIR}/docs/openttd.6) - set(MAN_BINARY_FILE ${CMAKE_BINARY_DIR}/docs/openttd.6) + set(MAN_BINARY_FILE ${CMAKE_BINARY_DIR}/docs/${BINARY_NAME}.6) install(CODE " execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${MAN_SOURCE_FILE} ${MAN_BINARY_FILE}) diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 4210c5b490..4f2404b2d4 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -14,9 +14,9 @@ function(set_directory_options) set(DEFAULT_SHARED_DIR "(not set)") set(DEFAULT_GLOBAL_DIR "(not set)") elseif (UNIX) - set(DEFAULT_PERSONAL_DIR ".openttd") + set(DEFAULT_PERSONAL_DIR ".${BINARY_NAME}") set(DEFAULT_SHARED_DIR "(not set)") - set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/openttd") + set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${BINARY_NAME}") else () message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.") endif () @@ -51,7 +51,7 @@ function(set_options) option(OPTION_FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF) option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) - option(OPTION_INSTALL_FHS "Install with Filesstem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) + option(OPTION_INSTALL_FHS "Install with Filesystem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) option(OPTION_USE_THREADS "Use threads" ON) option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF) From 716c883737b76757e0f3bcddeacc1e276dfff13b Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Fri, 3 Jul 2020 09:36:10 +1200 Subject: [PATCH 218/601] Fix: Globally apply preprocessor directive coding style Global; except for the 32-bit SSE blitter, which has some #DEFINEs in not-very-nice places. --- src/core/endian_func.hpp | 40 ++-- src/core/endian_type.hpp | 4 +- src/core/geometry_type.hpp | 4 +- src/core/random_func.hpp | 18 +- src/ini.cpp | 2 +- src/landscape.cpp | 4 +- src/map_func.h | 4 +- src/misc/binaryheap.hpp | 4 +- src/music/dmusic.cpp | 2 +- src/os/os2/os2.cpp | 4 +- src/os/unix/unix.cpp | 6 +- src/stdafx.h | 288 ++++++++++++++-------------- src/viewport_sprite_sorter_sse4.cpp | 4 +- 13 files changed, 192 insertions(+), 192 deletions(-) diff --git a/src/core/endian_func.hpp b/src/core/endian_func.hpp index b1a584785b..e077d977ac 100644 --- a/src/core/endian_func.hpp +++ b/src/core/endian_func.hpp @@ -15,27 +15,27 @@ /* Setup alignment and conversion macros */ #if TTD_ENDIAN == TTD_BIG_ENDIAN - #define FROM_BE16(x) (x) - #define FROM_BE32(x) (x) - #define TO_BE16(x) (x) - #define TO_BE32(x) (x) - #define TO_BE32X(x) (x) - #define FROM_LE16(x) BSWAP16(x) - #define FROM_LE32(x) BSWAP32(x) - #define TO_LE16(x) BSWAP16(x) - #define TO_LE32(x) BSWAP32(x) - #define TO_LE32X(x) BSWAP32(x) +# define FROM_BE16(x) (x) +# define FROM_BE32(x) (x) +# define TO_BE16(x) (x) +# define TO_BE32(x) (x) +# define TO_BE32X(x) (x) +# define FROM_LE16(x) BSWAP16(x) +# define FROM_LE32(x) BSWAP32(x) +# define TO_LE16(x) BSWAP16(x) +# define TO_LE32(x) BSWAP32(x) +# define TO_LE32X(x) BSWAP32(x) #else - #define FROM_BE16(x) BSWAP16(x) - #define FROM_BE32(x) BSWAP32(x) - #define TO_BE16(x) BSWAP16(x) - #define TO_BE32(x) BSWAP32(x) - #define TO_BE32X(x) BSWAP32(x) - #define FROM_LE16(x) (x) - #define FROM_LE32(x) (x) - #define TO_LE16(x) (x) - #define TO_LE32(x) (x) - #define TO_LE32X(x) (x) +# define FROM_BE16(x) BSWAP16(x) +# define FROM_BE32(x) BSWAP32(x) +# define TO_BE16(x) BSWAP16(x) +# define TO_BE32(x) BSWAP32(x) +# define TO_BE32X(x) BSWAP32(x) +# define FROM_LE16(x) (x) +# define FROM_LE32(x) (x) +# define TO_LE16(x) (x) +# define TO_LE32(x) (x) +# define TO_LE32X(x) (x) #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ static inline uint16 ReadLE16Aligned(const void *x) diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index e1add251ed..f7cae53a8f 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -12,10 +12,10 @@ #if defined(ARM) || defined(__arm__) || defined(__alpha__) /** The architecture requires aligned access. */ - #define OTTD_ALIGNMENT 1 +# define OTTD_ALIGNMENT 1 #else /** The architecture does not require aligned access. */ - #define OTTD_ALIGNMENT 0 +# define OTTD_ALIGNMENT 0 #endif /** Little endian builds use this for TTD_ENDIAN. */ diff --git a/src/core/geometry_type.hpp b/src/core/geometry_type.hpp index 0e9f86e674..92a1d97df6 100644 --- a/src/core/geometry_type.hpp +++ b/src/core/geometry_type.hpp @@ -12,8 +12,8 @@ #if defined(__APPLE__) /* Mac OS X already has both Rect and Point declared */ - #define Rect OTTD_Rect - #define Point OTTD_Point +# define Rect OTTD_Rect +# define Point OTTD_Point #endif /* __APPLE__ */ diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp index 7a40c9b740..ece90ccc35 100644 --- a/src/core/random_func.hpp +++ b/src/core/random_func.hpp @@ -12,7 +12,7 @@ #if defined(__APPLE__) /* Apple already has Random declared */ - #define Random OTTD_Random +# define Random OTTD_Random #endif /* __APPLE__ */ /** @@ -57,13 +57,13 @@ static inline void RestoreRandomSeeds(const SavedRandomSeeds &storage) void SetRandomSeed(uint32 seed); #ifdef RANDOM_DEBUG - #ifdef __APPLE__ - #define OTTD_Random() DoRandom(__LINE__, __FILE__) - #else - #define Random() DoRandom(__LINE__, __FILE__) - #endif +# ifdef __APPLE__ +# define OTTD_Random() DoRandom(__LINE__, __FILE__) +# else +# define Random() DoRandom(__LINE__, __FILE__) +# endif uint32 DoRandom(int line, const char *file); - #define RandomRange(limit) DoRandomRange(limit, __LINE__, __FILE__) +# define RandomRange(limit) DoRandomRange(limit, __LINE__, __FILE__) uint32 DoRandomRange(uint32 limit, int line, const char *file); #else static inline uint32 Random() @@ -126,7 +126,7 @@ static inline bool Chance16I(const uint a, const uint b, const uint32 r) * @return True with (a/b) probability */ #ifdef RANDOM_DEBUG - #define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__)) +# define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__)) #else static inline bool Chance16(const uint a, const uint b) { @@ -150,7 +150,7 @@ static inline bool Chance16(const uint a, const uint b) * @return True in (a/b) percent */ #ifdef RANDOM_DEBUG - #define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r)) +# define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r)) #else static inline bool Chance16R(const uint a, const uint b, uint32 &r) { diff --git a/src/ini.cpp b/src/ini.cpp index f81d109ff2..6948bc1ea3 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -90,7 +90,7 @@ bool IniFile::SaveToDisk(const char *filename) #if defined(_WIN32) /* _tcsncpy = strcpy is TCHAR is char, but isn't when TCHAR is wchar. */ - #undef strncpy +# undef strncpy /* Allocate space for one more \0 character. */ TCHAR tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1]; _tcsncpy(tfilename, OTTD2FS(filename), MAX_PATH); diff --git a/src/landscape.cpp b/src/landscape.cpp index e97d9cff03..f09bdcafff 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1186,8 +1186,8 @@ static void BuildRiver(TileIndex begin, TileIndex end) */ static bool FlowRiver(TileIndex spring, TileIndex begin) { - #define SET_MARK(x) marks.insert(x) - #define IS_MARKED(x) (marks.find(x) != marks.end()) +# define SET_MARK(x) marks.insert(x) +# define IS_MARKED(x) (marks.find(x) != marks.end()) uint height = TileHeight(begin); if (IsWaterTile(begin)) return DistanceManhattan(spring, begin) > _settings_game.game_creation.min_river_length; diff --git a/src/map_func.h b/src/map_func.h index 0c8fda7be9..b02ba57773 100644 --- a/src/map_func.h +++ b/src/map_func.h @@ -241,11 +241,11 @@ static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) * @param y Another tile to add * @return The resulting tile(index) */ - #define TILE_ADD(x, y) ((x) + (y)) +# define TILE_ADD(x, y) ((x) + (y)) #else extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add, const char *exp, const char *file, int line); - #define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__)) +# define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__)) #endif /** diff --git a/src/misc/binaryheap.hpp b/src/misc/binaryheap.hpp index a967ebdf23..067ad1f291 100644 --- a/src/misc/binaryheap.hpp +++ b/src/misc/binaryheap.hpp @@ -17,10 +17,10 @@ #if BINARYHEAP_CHECK /** Check for consistency. */ - #define CHECK_CONSISTY() this->CheckConsistency() +# define CHECK_CONSISTY() this->CheckConsistency() #else /** Don't check for consistency. */ - #define CHECK_CONSISTY() ; +# define CHECK_CONSISTY() ; #endif /** diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index b7bee4a4fe..e8b0952252 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -10,7 +10,7 @@ #define INITGUID #include "../stdafx.h" #ifdef WIN32_LEAN_AND_MEAN - #undef WIN32_LEAN_AND_MEAN // Don't exclude rarely-used stuff from Windows headers +# undef WIN32_LEAN_AND_MEAN // Don't exclude rarely-used stuff from Windows headers #endif #include "../debug.h" #include "../os/windows/win32.h" diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp index a44c10a3b7..f1128b0c61 100644 --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -26,7 +26,7 @@ #include #include #ifndef __INNOTEK_LIBC__ - #include +# include #endif #include "../../safeguards.h" @@ -36,7 +36,7 @@ #include #ifndef __INNOTEK_LIBC__ - #include +# include #endif bool FiosIsRoot(const char *file) diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index e4e1d687c2..2bcd6151a3 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -29,13 +29,13 @@ #endif #ifdef __APPLE__ - #include +# include #elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__) - #define HAS_STATVFS +# define HAS_STATVFS #endif #if defined(OPENBSD) || defined(__NetBSD__) || defined(__FreeBSD__) - #define HAS_SYSCTL +# define HAS_SYSCTL #endif #ifdef HAS_STATVFS diff --git a/src/stdafx.h b/src/stdafx.h index dcea753830..c421c55aa2 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -18,14 +18,14 @@ #endif #if defined(__APPLE__) - #include "os/macosx/osx_stdafx.h" +# include "os/macosx/osx_stdafx.h" #endif /* __APPLE__ */ #if defined(__HAIKU__) - #include - #include - #define _GNU_SOURCE - #define TROUBLED_INTS +# include +# include +# define _GNU_SOURCE +# define TROUBLED_INTS #endif #if defined(__HAIKU__) || defined(__CYGWIN__) @@ -37,52 +37,52 @@ * does not have stdint.h. * For OSX the inclusion is already done in osx_stdafx.h. */ #if !defined(__APPLE__) && (!defined(_MSC_VER) || _MSC_VER >= 1600) - #if defined(SUNOS) +# if defined(SUNOS) /* SunOS/Solaris does not have stdint.h, but inttypes.h defines everything * stdint.h defines and we need. */ - #include - #else - #define __STDC_LIMIT_MACROS - #include - #endif +# include +# else +# define __STDC_LIMIT_MACROS +# include +# endif #endif /* The conditions for these constants to be available are way too messy; so check them one by one */ #if !defined(UINT64_MAX) - #define UINT64_MAX (18446744073709551615ULL) +# define UINT64_MAX (18446744073709551615ULL) #endif #if !defined(INT64_MAX) - #define INT64_MAX (9223372036854775807LL) +# define INT64_MAX (9223372036854775807LL) #endif #if !defined(INT64_MIN) - #define INT64_MIN (-INT64_MAX - 1) +# define INT64_MIN (-INT64_MAX - 1) #endif #if !defined(UINT32_MAX) - #define UINT32_MAX (4294967295U) +# define UINT32_MAX (4294967295U) #endif #if !defined(INT32_MAX) - #define INT32_MAX (2147483647) +# define INT32_MAX (2147483647) #endif #if !defined(INT32_MIN) - #define INT32_MIN (-INT32_MAX - 1) +# define INT32_MIN (-INT32_MAX - 1) #endif #if !defined(UINT16_MAX) - #define UINT16_MAX (65535U) +# define UINT16_MAX (65535U) #endif #if !defined(INT16_MAX) - #define INT16_MAX (32767) +# define INT16_MAX (32767) #endif #if !defined(INT16_MIN) - #define INT16_MIN (-INT16_MAX - 1) +# define INT16_MIN (-INT16_MAX - 1) #endif #if !defined(UINT8_MAX) - #define UINT8_MAX (255) +# define UINT8_MAX (255) #endif #if !defined(INT8_MAX) - #define INT8_MAX (127) +# define INT8_MAX (127) #endif #if !defined(INT8_MIN) - #define INT8_MIN (-INT8_MAX - 1) +# define INT8_MIN (-INT8_MAX - 1) #endif #include @@ -94,116 +94,116 @@ #include #ifndef SIZE_MAX - #define SIZE_MAX ((size_t)-1) +# define SIZE_MAX ((size_t)-1) #endif #if defined(UNIX) || defined(__MINGW32__) - #include +# include #endif #if defined(__OS2__) - #include - #define strcasecmp stricmp +# include +# define strcasecmp stricmp #endif #if defined(SUNOS) || defined(HPUX) || defined(__CYGWIN__) - #include +# include #endif /* Stuff for GCC */ #if defined(__GNUC__) - #define NORETURN __attribute__ ((noreturn)) - #define CDECL - #define __int64 long long +# define NORETURN __attribute__ ((noreturn)) +# define CDECL +# define __int64 long long /* Warn about functions using 'printf' format syntax. First argument determines which parameter * is the format string, second argument is start of values passed to printf. */ - #define WARN_FORMAT(string, args) __attribute__ ((format (printf, string, args))) - #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) - #define FINAL final - #else - #define FINAL - #endif +# define WARN_FORMAT(string, args) __attribute__ ((format (printf, string, args))) +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) +# define FINAL final +# else +# define FINAL +# endif /* Use fallthrough attribute where supported */ - #if __GNUC__ >= 7 - #if __cplusplus > 201402L // C++17 - #define FALLTHROUGH [[fallthrough]] - #else - #define FALLTHROUGH __attribute__((fallthrough)) - #endif - #else - #define FALLTHROUGH - #endif +# if __GNUC__ >= 7 +# if __cplusplus > 201402L // C++17 +# define FALLTHROUGH [[fallthrough]] +# else +# define FALLTHROUGH __attribute__((fallthrough)) +# endif +# else +# define FALLTHROUGH +# endif #endif /* __GNUC__ */ #if defined(__WATCOMC__) - #define NORETURN - #define CDECL - #define WARN_FORMAT(string, args) - #define FINAL - #define FALLTHROUGH - #include +# define NORETURN +# define CDECL +# define WARN_FORMAT(string, args) +# define FINAL +# define FALLTHROUGH +# include #endif /* __WATCOMC__ */ #if defined(__MINGW32__) - #include // alloca() +# include // alloca() #endif #if defined(_WIN32) - #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #endif /* Stuff for MSVC */ #if defined(_MSC_VER) - #pragma once - #ifdef _WIN64 +# pragma once +# ifdef _WIN64 /* No 64-bit Windows below XP, so we can safely assume it as the target platform. */ - #define NTDDI_VERSION NTDDI_WINXP // Windows XP - #define _WIN32_WINNT 0x501 // Windows XP - #define _WIN32_WINDOWS 0x501 // Windows XP - #define WINVER 0x0501 // Windows XP - #define _WIN32_IE_ 0x0600 // 6.0 (XP+) - #else +# define NTDDI_VERSION NTDDI_WINXP // Windows XP +# define _WIN32_WINNT 0x501 // Windows XP +# define _WIN32_WINDOWS 0x501 // Windows XP +# define WINVER 0x0501 // Windows XP +# define _WIN32_IE_ 0x0600 // 6.0 (XP+) +# else /* Define a win32 target platform, to override defaults of the SDK * We need to define NTDDI version for Vista SDK, but win2k is minimum */ - #define NTDDI_VERSION NTDDI_WIN2K // Windows 2000 - #define _WIN32_WINNT 0x0500 // Windows 2000 - #define _WIN32_WINDOWS 0x400 // Windows 95 - #define WINVER 0x0400 // Windows NT 4.0 / Windows 95 - #define _WIN32_IE_ 0x0401 // 4.01 (win98 and NT4SP5+) - #endif - #define NOMINMAX // Disable min/max macros in windows.h. +# define NTDDI_VERSION NTDDI_WIN2K // Windows 2000 +# define _WIN32_WINNT 0x0500 // Windows 2000 +# define _WIN32_WINDOWS 0x400 // Windows 95 +# define WINVER 0x0400 // Windows NT 4.0 / Windows 95 +# define _WIN32_IE_ 0x0401 // 4.01 (win98 and NT4SP5+) +# endif +# define NOMINMAX // Disable min/max macros in windows.h. - #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data - #pragma warning(disable: 4761) // integral size mismatch in argument : conversion supplied - #pragma warning(disable: 4200) // nonstandard extension used : zero-sized array in struct/union - #pragma warning(disable: 4355) // 'this' : used in base member initializer list +# pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data +# pragma warning(disable: 4761) // integral size mismatch in argument : conversion supplied +# pragma warning(disable: 4200) // nonstandard extension used : zero-sized array in struct/union +# pragma warning(disable: 4355) // 'this' : used in base member initializer list - #if (_MSC_VER < 1400) // MSVC 2005 safety checks - #error "Only MSVC 2005 or higher are supported. MSVC 2003 and earlier are not! Upgrade your compiler." - #endif /* (_MSC_VER < 1400) */ - #pragma warning(disable: 4291) // no matching operator delete found; memory will not be freed if initialization throws an exception (reason: our overloaded functions never throw an exception) - #pragma warning(disable: 4996) // 'function': was declared deprecated - #pragma warning(disable: 6308) // code analyzer: 'realloc' might return null pointer: assigning null pointer to 't_ptr', which is passed as an argument to 'realloc', will cause the original memory block to be leaked - #pragma warning(disable: 6011) // code analyzer: Dereferencing NULL pointer 'pfGetAddrInfo': Lines: 995, 996, 998, 999, 1001 - #pragma warning(disable: 6326) // code analyzer: potential comparison of a constant with another constant - #pragma warning(disable: 6031) // code analyzer: Return value ignored: 'ReadFile' - #pragma warning(disable: 6255) // code analyzer: _alloca indicates failure by raising a stack overflow exception. Consider using _malloca instead - #pragma warning(disable: 6246) // code analyzer: Local declaration of 'statspec' hides declaration of the same name in outer scope. For additional information, see previous declaration at ... +# if (_MSC_VER < 1400) // MSVC 2005 safety checks +# error "Only MSVC 2005 or higher are supported. MSVC 2003 and earlier are not! Upgrade your compiler." +# endif /* (_MSC_VER < 1400) */ +# pragma warning(disable: 4291) // no matching operator delete found; memory will not be freed if initialization throws an exception (reason: our overloaded functions never throw an exception) +# pragma warning(disable: 4996) // 'function': was declared deprecated +# pragma warning(disable: 6308) // code analyzer: 'realloc' might return null pointer: assigning null pointer to 't_ptr', which is passed as an argument to 'realloc', will cause the original memory block to be leaked +# pragma warning(disable: 6011) // code analyzer: Dereferencing NULL pointer 'pfGetAddrInfo': Lines: 995, 996, 998, 999, 1001 +# pragma warning(disable: 6326) // code analyzer: potential comparison of a constant with another constant +# pragma warning(disable: 6031) // code analyzer: Return value ignored: 'ReadFile' +# pragma warning(disable: 6255) // code analyzer: _alloca indicates failure by raising a stack overflow exception. Consider using _malloca instead +# pragma warning(disable: 6246) // code analyzer: Local declaration of 'statspec' hides declaration of the same name in outer scope. For additional information, see previous declaration at ... - #if (_MSC_VER == 1500) // Addresses item #13 on http://blogs.msdn.com/b/vcblog/archive/2008/08/11/tr1-fixes-in-vc9-sp1.aspx, for Visual Studio 2008 - #define _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY - #include - #endif +# if (_MSC_VER == 1500) // Addresses item #13 on http://blogs.msdn.com/b/vcblog/archive/2008/08/11/tr1-fixes-in-vc9-sp1.aspx, for Visual Studio 2008 +# define _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY +# include +# endif - #include // alloca() - #define NORETURN __declspec(noreturn) - #if (_MSC_VER < 1900) - #define inline __forceinline - #endif +# include // alloca() +# define NORETURN __declspec(noreturn) +# if (_MSC_VER < 1900) +# define inline __forceinline +# endif - #define CDECL _cdecl - #define WARN_FORMAT(string, args) +# define CDECL _cdecl +# define WARN_FORMAT(string, args) # ifndef __clang__ # define FINAL sealed # else @@ -211,23 +211,23 @@ # endif /* fallthrough attribute, VS 2017 */ - #if (_MSC_VER >= 1910) - #define FALLTHROUGH [[fallthrough]] - #else - #define FALLTHROUGH - #endif +# if (_MSC_VER >= 1910) +# define FALLTHROUGH [[fallthrough]] +# else +# define FALLTHROUGH +# endif # if defined(_WIN32) && !defined(_WIN64) - #if !defined(_W64) - #define _W64 - #endif +# if !defined(_W64) +# define _W64 +# endif typedef _W64 int INT_PTR, *PINT_PTR; typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; # endif /* _WIN32 && !_WIN64 */ # if defined(_WIN64) - #define fseek _fseeki64 +# define fseek _fseeki64 # endif /* _WIN64 */ /* zlib from vcpkg use cdecl calling convention without enforcing it in the headers */ @@ -251,13 +251,13 @@ # endif # endif - #define strcasecmp stricmp - #define strncasecmp strnicmp - #define strtoull _strtoui64 +# define strcasecmp stricmp +# define strncasecmp strnicmp +# define strtoull _strtoui64 /* MSVC doesn't have these :( */ - #define S_ISDIR(mode) (mode & S_IFDIR) - #define S_ISREG(mode) (mode & S_IFREG) +# define S_ISDIR(mode) (mode & S_IFDIR) +# define S_ISREG(mode) (mode & S_IFREG) #endif /* defined(_MSC_VER) */ @@ -266,28 +266,28 @@ #if !defined(STRGEN) && !defined(SETTINGSGEN) # if defined(_WIN32) char *getcwd(char *buf, size_t size); - #include - #include +# include +# include namespace std { using ::_tfopen; } - #define fopen(file, mode) _tfopen(OTTD2FS(file), _T(mode)) - #define unlink(file) _tunlink(OTTD2FS(file)) +# define fopen(file, mode) _tfopen(OTTD2FS(file), _T(mode)) +# define unlink(file) _tunlink(OTTD2FS(file)) const char *FS2OTTD(const TCHAR *name); const TCHAR *OTTD2FS(const char *name, bool console_cp = false); # else - #define fopen(file, mode) fopen(OTTD2FS(file), mode) +# define fopen(file, mode) fopen(OTTD2FS(file), mode) const char *FS2OTTD(const char *name); const char *OTTD2FS(const char *name); # endif /* _WIN32 */ #endif /* STRGEN || SETTINGSGEN */ #if defined(_WIN32) || defined(__OS2__) && !defined(__INNOTEK_LIBC__) - #define PATHSEP "\\" - #define PATHSEPCHAR '\\' +# define PATHSEP "\\" +# define PATHSEPCHAR '\\' #else - #define PATHSEP "/" - #define PATHSEPCHAR '/' +# define PATHSEP "/" +# define PATHSEPCHAR '/' #endif #if defined(_MSC_VER) || defined(__WATCOMC__) @@ -345,22 +345,22 @@ typedef unsigned char byte; #endif /* !TROUBLED_INTS */ #if !defined(WITH_PERSONAL_DIR) - #define PERSONAL_DIR "" +# define PERSONAL_DIR "" #endif /* Compile time assertions. Prefer c++0x static_assert(). * Older compilers cannot evaluate some expressions at compile time, * typically when templates are involved, try assert_tcompile() in those cases. */ #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600) - #define assert_compile(expr) static_assert(expr, #expr ) - #define assert_tcompile(expr) assert_compile(expr) +# define assert_compile(expr) static_assert(expr, #expr ) +# define assert_tcompile(expr) assert_compile(expr) #elif defined(__OS2__) /* Disabled for OS/2 */ - #define assert_compile(expr) - #define assert_tcompile(expr) assert_compile(expr) +# define assert_compile(expr) +# define assert_tcompile(expr) assert_compile(expr) #else - #define assert_compile(expr) typedef int __ct_assert__[1 - 2 * !(expr)] - #define assert_tcompile(expr) assert(expr) +# define assert_compile(expr) typedef int __ct_assert__[1 - 2 * !(expr)] +# define assert_tcompile(expr) assert(expr) #endif /* Check if the types have the bitsizes like we are using them */ @@ -403,7 +403,7 @@ assert_compile(SIZE_MAX >= UINT32_MAX); #define cpp_offsetof(s, m) (((size_t)&reinterpret_cast((((s*)(char*)8)->m))) - 8) #if !defined(offsetof) - #define offsetof(s, m) cpp_offsetof(s, m) +# define offsetof(s, m) cpp_offsetof(s, m) #endif /* offsetof */ /** @@ -425,9 +425,9 @@ assert_compile(SIZE_MAX >= UINT32_MAX); /* take care of some name clashes on MacOS */ #if defined(__APPLE__) - #define GetString OTTD_GetString - #define DrawString OTTD_DrawString - #define CloseConnection OTTD_CloseConnection +# define GetString OTTD_GetString +# define DrawString OTTD_DrawString +# define CloseConnection OTTD_CloseConnection #endif /* __APPLE__ */ void NORETURN CDECL usererror(const char *str, ...) WARN_FORMAT(1, 2); @@ -436,28 +436,28 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); /* For non-debug builds with assertions enabled use the special assertion handler. */ #if defined(NDEBUG) && defined(WITH_ASSERT) - #undef assert - #define assert(expression) if (!(expression)) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); +# undef assert +# define assert(expression) if (!(expression)) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); #endif /* Asserts are enabled if NDEBUG isn't defined or WITH_ASSERT is defined. */ #if !defined(NDEBUG) || defined(WITH_ASSERT) - #define OTTD_ASSERT +# define OTTD_ASSERT #endif #if defined(OPENBSD) /* OpenBSD uses strcasecmp(3) */ - #define _stricmp strcasecmp +# define _stricmp strcasecmp #endif #if defined(MAX_PATH) /* It's already defined, no need to override */ #elif defined(PATH_MAX) && PATH_MAX > 0 /* Use the value from PATH_MAX, if it exists */ - #define MAX_PATH PATH_MAX +# define MAX_PATH PATH_MAX #else /* If all else fails, hardcode something :( */ - #define MAX_PATH 260 +# define MAX_PATH 260 #endif /** @@ -476,24 +476,24 @@ static inline void free(const void *ptr) #define MAX_UVALUE(type) ((type)~(type)0) #if defined(_MSC_VER) && !defined(_DEBUG) - #define IGNORE_UNINITIALIZED_WARNING_START __pragma(warning(push)) __pragma(warning(disable:4700)) - #define IGNORE_UNINITIALIZED_WARNING_STOP __pragma(warning(pop)) +# define IGNORE_UNINITIALIZED_WARNING_START __pragma(warning(push)) __pragma(warning(disable:4700)) +# define IGNORE_UNINITIALIZED_WARNING_STOP __pragma(warning(pop)) #elif defined(__GNUC__) && !defined(_DEBUG) - #define HELPER0(x) #x - #define HELPER1(x) HELPER0(GCC diagnostic ignored x) - #define HELPER2(y) HELPER1(#y) +# define HELPER0(x) #x +# define HELPER1(x) HELPER0(GCC diagnostic ignored x) +# define HELPER2(y) HELPER1(#y) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) - #define IGNORE_UNINITIALIZED_WARNING_START \ +# define IGNORE_UNINITIALIZED_WARNING_START \ _Pragma("GCC diagnostic push") \ _Pragma(HELPER2(-Wuninitialized)) \ _Pragma(HELPER2(-Wmaybe-uninitialized)) - #define IGNORE_UNINITIALIZED_WARNING_STOP _Pragma("GCC diagnostic pop") +# define IGNORE_UNINITIALIZED_WARNING_STOP _Pragma("GCC diagnostic pop") #endif #endif #ifndef IGNORE_UNINITIALIZED_WARNING_START - #define IGNORE_UNINITIALIZED_WARNING_START - #define IGNORE_UNINITIALIZED_WARNING_STOP +# define IGNORE_UNINITIALIZED_WARNING_START +# define IGNORE_UNINITIALIZED_WARNING_STOP #endif #endif /* STDAFX_H */ diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index 46068c41d2..6d1a2ceee4 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -18,9 +18,9 @@ #ifdef _SQ64 assert_compile((sizeof(ParentSpriteToDraw) % 16) == 0); - #define LOAD_128 _mm_load_si128 +# define LOAD_128 _mm_load_si128 #else - #define LOAD_128 _mm_loadu_si128 +# define LOAD_128 _mm_loadu_si128 #endif /** Sort parent sprites pointer array using SSE4.1 optimizations. */ From de4dc792a9e8e1740a82cb8ef6e9884d26d23f87 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 5 Jul 2020 17:33:51 +0200 Subject: [PATCH 219/601] Fix: [CMake] Re-enable multi-threaded compilation for MSVC project files. --- cmake/CompileFlags.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index 6fe185df85..4adc4a31a1 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -23,6 +23,9 @@ macro(compile_flags) # C++11 standard". We need C++11 for the way we use threads. add_compile_options(/Zc:rvalueCast) + # Enable multi-threaded compilation. + add_compile_options(/MP) + # Add DPI manifest to project; other WIN32 targets get this via ottdres.rc list(APPEND GENERATED_SOURCE_FILES "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest") endif (MSVC) From 053d4f3bff97014bbf68b499302e93c6a9aea8b8 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 18 Jun 2020 17:23:50 +0100 Subject: [PATCH 220/601] Fix: Thread unsafe use of SendPacket for PACKET_SERVER_MAP_SIZE NetworkTCPSocketHandler::SendPacket is not thread safe and may not be used concurrently from multiple threads without suitable locking --- src/network/network_server.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 36a15d3ae3..c82c51cfd4 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -153,6 +153,16 @@ struct PacketWriter : SaveFilter { this->current = nullptr; } + /** Prepend the current packet to the queue. */ + void PrependQueue() + { + if (this->current == nullptr) return; + + this->current->next = this->packets; + this->packets = this->current; + this->current = nullptr; + } + void Write(byte *buf, size_t size) override { /* We want to abort the saving when the socket is closed. */ @@ -193,9 +203,9 @@ struct PacketWriter : SaveFilter { this->AppendQueue(); /* Fast-track the size to the client. */ - Packet *p = new Packet(PACKET_SERVER_MAP_SIZE); - p->Send_uint32((uint32)this->total_size); - this->cs->NetworkTCPSocketHandler::SendPacket(p); + this->current = new Packet(PACKET_SERVER_MAP_SIZE); + this->current->Send_uint32((uint32)this->total_size); + this->PrependQueue(); } }; From c7e391da93e85ded007493711951e2263cfe39d6 Mon Sep 17 00:00:00 2001 From: TrevorShelton <54145769+TrevorShelton@users.noreply.github.com> Date: Sun, 28 Jun 2020 01:55:57 -0700 Subject: [PATCH 221/601] Change #8162: Conversion of Town Road, Impr. Error This changes the error when you attempt to convert a road owned by a town to another road, specifying that it's owned by the town rather than simply being incompatible. As the original poster of the issue pointed out, these seemed to be the only occurences of the incompatible road string, so now it's unused, but they would be left untouched in case of future use or since changing it to a different error would do the work of removing it then. If requested, it likely wouldn't be too difficult to remove the string entirely. --- src/road_cmd.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 29d7f69bd7..b8aee88d60 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -2399,7 +2399,8 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } if (rtt == RTT_ROAD && owner == OWNER_TOWN) { - error.MakeError(STR_ERROR_INCOMPATIBLE_ROAD); + error.MakeError(STR_ERROR_OWNED_BY); + GetNameOfOwner(OWNER_TOWN, tile); continue; } } @@ -2445,7 +2446,8 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } if (rtt == RTT_ROAD && owner == OWNER_TOWN) { - error.MakeError(STR_ERROR_INCOMPATIBLE_ROAD); + error.MakeError(STR_ERROR_OWNED_BY); + GetNameOfOwner(OWNER_TOWN, tile); continue; } } From c39d62c245f51a67b6c212453777378d18bb9059 Mon Sep 17 00:00:00 2001 From: TrevorShelton <54145769+TrevorShelton@users.noreply.github.com> Date: Sun, 28 Jun 2020 03:02:36 -0700 Subject: [PATCH 222/601] Update: Disuse of STR_ERROR_INCOMPATIBLE_ROAD --- src/lang/afrikaans.txt | 1 - src/lang/basque.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.txt | 1 - src/lang/english_US.txt | 1 - src/lang/estonian.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/galician.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/italian.txt | 1 - src/lang/korean.txt | 1 - src/lang/latvian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/russian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/vietnamese.txt | 1 - src/script/api/ai/ai_road.hpp.sq | 1 - src/script/api/game/game_road.hpp.sq | 1 - src/script/api/script_road.hpp | 2 +- 31 files changed, 1 insertion(+), 31 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 4fbca76b54..76648bbcec 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -4451,7 +4451,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}kan nie STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kan nie tremtipe hier omskakel nie ... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Geen geskikte pad STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Geen geskikte tremweg nie -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... onverenigbare pad STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... onversoenbare tremweg # Waterway construction errors diff --git a/src/lang/basque.txt b/src/lang/basque.txt index f1d50f7839..ec593bd55b 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -4174,7 +4174,6 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Ezin da STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Ezin da hemen tranbiarik ezabatu... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... ez dago biderik STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... ez dago tranbia biderik -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... errepidea ez da bateragarria # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Ezin dira hemen urbideak eraiki... diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 0f30221559..78a431ee39 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4434,7 +4434,6 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Aquí no STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No puc treure la via de tramvia d'aquí... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... no hi ha carretera STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... no hi ha via de tramvia -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... la carretera és incompatible. STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... El tipus de tramvia és incompatible. # Waterway construction errors diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 0bf3fab71a..3592916ad6 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -4582,7 +4582,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Ovdje ni STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Ovdje nije moguće pretvoriti tramvajsku prugu... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nema prikladne ceste STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nema prikladne tramvajske pruge -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... nekompatibilna cesta STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nekompatibilna tramvajska pruga # Waterway construction errors diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 556245a529..e885a93f66 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -4579,7 +4579,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Zde nelz STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Zde nelze změnit druh tramvajové tratě... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Neexistuje vhodná silnice STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Neexistuje vhodná tramvajová trať -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... nevhodný druh silnice STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nevhodný typ tramvajové tratě # Waterway construction errors diff --git a/src/lang/danish.txt b/src/lang/danish.txt index f240ff3a7f..895e6620a3 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4486,7 +4486,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kan ikke STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kan ikke konvertere sporvejstype her... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Ingen passende vej STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Ingen egnet sporvej -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... inkompatibel vej STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... inkompatibel sporvej # Waterway construction errors diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 5fa1fb4628..c2ddba6fd3 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4486,7 +4486,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kan wegt STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kan tramtype hier niet converteren... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Geen geschikte weg STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Geen geschikt tramspoor -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... weg niet geschikt STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... treinspoor niet geschikt # Waterway construction errors diff --git a/src/lang/english.txt b/src/lang/english.txt index e478dc6e1c..a0b146c9bf 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4486,7 +4486,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Can't co STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Can't convert tram type here... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}No suitable road STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}No suitable tramway -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... incompatible road STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... incompatible tramway # Waterway construction errors diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index d35b02b246..e770b4bf3b 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4473,7 +4473,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Can't co STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Can't convert streetcar type here... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}No suitable road STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}No suitable streetcar line -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... incompatible road STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... incompatible streetcar line # Waterway construction errors diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index d96fd0fc0c..5f9b3e4455 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -4399,7 +4399,6 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Siinset STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Siinset trammiteed ei saa lammutada... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... siin pole autoteed STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... siin pole trammiteed -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... sobimatu tee # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Siia ei saa kanaleid ehitada... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 52cabab66a..4780b8c9aa 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4483,7 +4483,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Tien tyy STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Raitiotien tyyppiä ei voi muuntaa tässä... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Ei sopivaa tietä STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Ei sopivaa raitiotietä -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... yhteensopimaton tie STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... yhteensopimaton raitiotie # Waterway construction errors diff --git a/src/lang/french.txt b/src/lang/french.txt index 811fdeac8c..5ba67d4afb 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4486,7 +4486,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Impossib STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Impossible de convertir le type de voie de tramway... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Aucune route convenable STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Aucune voie de tramway convenable -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... route incompatible STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... voie de tramway incompatible # Waterway construction errors diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 9f1b0cf3d4..9185638ee4 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -4466,7 +4466,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Non se p STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Non se pode converter o tipo de tranvía aquí... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Estrada inválida STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Vía de tranvía inadecuada -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... estrada incompatíbel STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... tranvía incompatible # Waterway construction errors diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 89f79ff21a..8a98f311e3 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -4549,7 +4549,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Nem lehe STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Nem lehet itt a villamospálya típusát átalakítani... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nincs megfelelő út STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nincs megfelelő villamospálya -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... nem kompatibilis az út STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nem kompatibilis a villamospálya # Waterway construction errors diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 2556c68304..ff593ff229 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -4515,7 +4515,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Impossib STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Impossibile convertire il tipo di tram qui... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nessuna strada adatta STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nessuna tranvia adatta -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... strada non compatibile STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... tranvia non compatibile # Waterway construction errors diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 9823599b33..356193a01d 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4487,7 +4487,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}이곳 STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}이곳의 전찻길을 바꿀 수 없습니다... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}적합한 도로가 없습니다 STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}적합한 전찻길이 없습니다 -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... 적합하지 않은 도로입니다 STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... 적합하지 않은 전찻길입니다 # Waterway construction errors diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 821f065efe..66f2b1f547 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -4497,7 +4497,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Šeit ne STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Šeit nevar pārveidot tramvaja veidu... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Nav piemērota ceļa STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nav piemērotu tramvaju -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... nesavietojams ceļš STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nesavietojami tramvaji # Waterway construction errors diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 0d23f442eb..81878c248f 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -4485,7 +4485,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kann den 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 diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 27f6bb6264..8eac74055c 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4461,7 +4461,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kan ikke STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kan ikke konvertere trikketype her... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Ingen passende vei STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Ingen passende trikkespor -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... inkompatibel vei STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... ingen passende trikkespor # Waterway construction errors diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 257648067c..5c58ac7a7d 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -4872,7 +4872,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Nie moż STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Nie można zmienić typu torów tramwajowych w tym miejscu... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Brak właściwej drogi STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Brak właściwej linii tramwajowej -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... niekompatybilna droga STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... niekompatybilne tory tramwajowe # Waterway construction errors diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d6666eaca2..ace5bb4c60 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4449,7 +4449,6 @@ 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 diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 3d0a3bfed9..a2d3a8516a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4678,7 +4678,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Здес STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Невозможно сменить тип трамвайных рельсов... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Нет подходящего дорожного полотна STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Нет подходящих трамвайных путей -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... несовместимый тип дороги STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... несовместимый тип трамвайных путей # Waterway construction errors diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 6d0161c314..b2ef0d07f3 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4486,7 +4486,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}无法 STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}无法转换电车道类型 STR_ERROR_NO_SUITABLE_ROAD :{WHITE}没有合适的道路 STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}没有合适的电车道 -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... 不兼容的道路 STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... 不兼容的电车道 # Waterway construction errors diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 0a2a34b880..d0e1a68755 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4458,7 +4458,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}No es po STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}No se puede convertir el tipo de tranvía aquí... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}No hay carretera adecuada STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}No hay un tranvía adecuado -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... carretera incompatible STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... tranvía incompatible # Waterway construction errors diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index fcce72e0b2..8ccb46eea0 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -4487,7 +4487,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}No es po STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}No es posible transformar esta vía de tranvía... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Carretera no apta STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Tranvía no apto -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... carretera no compatible STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... tranvía no compatible # Waterway construction errors diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 6c265b85ab..19da5154f7 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -4486,7 +4486,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kan inte STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kan inte konvertera spårvagnstyp här... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Ingen lämplig väg STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Ingen passande spårväg -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... oförenlig väg STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... oförenlig spårväg # Waterway construction errors diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index ecc43503ff..e104c2c69d 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4597,7 +4597,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Тут STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Тут не можна перетворити тип трамваю ... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Немає підходящої дороги STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Немає підходящої трамвайної колії -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... несумісна дорога STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... несумісний трамвай # Waterway construction errors diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 33d14a64d5..9e488ed866 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4465,7 +4465,6 @@ STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Không t STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Không thể chuyển đổi kiểu xe điện ở đây... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Không có đường ô-tô thích hợp STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Không có đường xe điện phù hợp -STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... đường không tương thích STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... xe điện không phù hợp # Waterway construction errors diff --git a/src/script/api/ai/ai_road.hpp.sq b/src/script/api/ai/ai_road.hpp.sq index 99b1d1dd0b..b42c54801e 100644 --- a/src/script/api/ai/ai_road.hpp.sq +++ b/src/script/api/ai/ai_road.hpp.sq @@ -45,7 +45,6 @@ void SQAIRoad_Register(Squirrel *engine) ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED_ROAD, ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING); ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_ROAD, ScriptRoad::ERR_UNSUITABLE_ROAD); ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_TRAMWAY, ScriptRoad::ERR_UNSUITABLE_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_INCOMPATIBLE_ROAD, ScriptRoad::ERR_UNSUITABLE_ROAD); ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS"); ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION"); diff --git a/src/script/api/game/game_road.hpp.sq b/src/script/api/game/game_road.hpp.sq index 938dd5eabb..4398b21df4 100644 --- a/src/script/api/game/game_road.hpp.sq +++ b/src/script/api/game/game_road.hpp.sq @@ -45,7 +45,6 @@ void SQGSRoad_Register(Squirrel *engine) ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED_ROAD, ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING); ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_ROAD, ScriptRoad::ERR_UNSUITABLE_ROAD); ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_TRAMWAY, ScriptRoad::ERR_UNSUITABLE_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_INCOMPATIBLE_ROAD, ScriptRoad::ERR_UNSUITABLE_ROAD); ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS"); ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION"); diff --git a/src/script/api/script_road.hpp b/src/script/api/script_road.hpp index 64b7833862..769c4a7728 100644 --- a/src/script/api/script_road.hpp +++ b/src/script/api/script_road.hpp @@ -42,7 +42,7 @@ public: ERR_ROADTYPE_DISALLOWS_CROSSING, // [STR_ERROR_CROSSING_DISALLOWED_ROAD] /** No suitable road could be found */ - ERR_UNSUITABLE_ROAD, // [STR_ERROR_NO_SUITABLE_ROAD, STR_ERROR_NO_SUITABLE_TRAMWAY, STR_ERROR_INCOMPATIBLE_ROAD] + ERR_UNSUITABLE_ROAD, // [STR_ERROR_NO_SUITABLE_ROAD, STR_ERROR_NO_SUITABLE_TRAMWAY] }; /** From 7d2db99bfdf915b81bbd02ecbdcbf20a6d0973c9 Mon Sep 17 00:00:00 2001 From: Abdurrahmaan Iqbal Date: Tue, 23 Jun 2020 20:50:41 +0100 Subject: [PATCH 223/601] Fix #7772: Show destination on mouseover when vehicle stopped (and not in depot) --- src/vehicle_gui.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 79ffffcf09..84ff890d15 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2430,6 +2430,7 @@ private: SEL_DC_BASEPLANE = SEL_DC_GOTO_DEPOT, ///< First plane of the #WID_VV_SELECT_DEPOT_CLONE stacked widget. SEL_RT_BASEPLANE = SEL_RT_REFIT, ///< First plane of the #WID_VV_SELECT_REFIT_TURN stacked widget. }; + bool mouse_over_start_stop = false; /** * Display a plane in the window. @@ -2575,7 +2576,7 @@ public: str = STR_VEHICLE_STATUS_CRASHED; } else if (v->type != VEH_AIRCRAFT && v->breakdown_ctr == 1) { // check for aircraft necessary? str = STR_VEHICLE_STATUS_BROKEN_DOWN; - } else if (v->vehstatus & VS_STOPPED) { + } else if (v->vehstatus & VS_STOPPED && (!mouse_over_start_stop || v->IsStoppedInDepot())) { if (v->type == VEH_TRAIN) { if (v->cur_speed == 0) { if (Train::From(v)->gcache.cached_power == 0) { @@ -2731,6 +2732,15 @@ public: } } + void OnMouseOver(Point pt, int widget) override + { + bool start_stop = widget == WID_VV_START_STOP; + if (start_stop != mouse_over_start_stop) { + mouse_over_start_stop = start_stop; + this->SetWidgetDirty(WID_VV_START_STOP); + } + } + void OnResize() override { if (this->viewport != nullptr) { From c434387794ea208318f980d1e9a1d2a60764f9c3 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 6 Jun 2020 22:01:34 +0200 Subject: [PATCH 224/601] Fix: Adjust .gitignore to CMake build system. --- .gitignore | 46 +--------------------------------------------- .hgignore | 34 ---------------------------------- 2 files changed, 1 insertion(+), 79 deletions(-) delete mode 100644 .hgignore diff --git a/.gitignore b/.gitignore index 156a9f7a66..dbb28c0f45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,48 +1,4 @@ -bin/* -!bin/ai -bin/ai/* -!bin/ai/compat*.nut -!bin/ai/regression -!bin/data -bin/baseset/* -!bin/baseset/openttd.grf -!bin/baseset/opntitle.dat -!bin/baseset/orig_extra.grf -!bin/baseset/orig_*.obg -!bin/baseset/orig_*.obs -!bin/baseset/no_sound.obs -!bin/baseset/no_music.obm -!bin/baseset/orig_*.obm -!bin/game -bin/game/* -!bin/game/compat*.nut -!bin/scripts -bin/scripts/* -!bin/scripts/*.example -!bin/scripts/readme.txt - -bundle/* -bundles/* +/build docs/aidocs/* docs/gamedocs/* docs/source/* -media/openttd.desktop -media/openttd.desktop.install -projects/.vs -projects/Debug -projects/Release -projects/*.ncb -projects/*.suo -projects/*.sdf -projects/*.opensdf -projects/*.vcproj.*.user -projects/*.vcxproj.user -projects/*.VC.db -projects/*.VC.opendb - -/Makefile* -!/Makefile.msvc -/config.* -!/config.lib -!*.in -*.tmp diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 03d99c6f29..0000000000 --- a/.hgignore +++ /dev/null @@ -1,34 +0,0 @@ -syntax: glob - -.svn -*.aps -bin/baseset/openttd.32.bmp -bin/lang/* -bin/openttd* -bin/*.cfg -bundle/* -bundles/* -config.cache* -config.log -config.pwd -docs/aidocs/* -docs/gamedocs/* -docs/source/* -.kdev4 -.kdev4/* -*.kdev4 -Makefile -Makefile.am -Makefile.bundle -media/openttd.desktop -media/openttd.desktop.install -objs/* -projects/.vs -projects/*.ncb -projects/*.suo -projects/*.sdf -projects/*.opensdf -projects/*.vcproj.*.user -projects/*.vcxproj.user -src/rev.cpp -src/os/windows/ottdres.rc From db0bf20fbbcdbe98c5c0fcac8c38c18cf9419fd1 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 6 Jun 2020 22:54:39 +0200 Subject: [PATCH 225/601] Fix: ignore more things --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index dbb28c0f45..1e68f57074 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ +/.vs /build +CMakeSettings.json docs/aidocs/* docs/gamedocs/* docs/source/* +/out From 00eccbe298ad7f7d656e121ce58c2a6326dabe2f Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 5 Jul 2020 14:39:39 +0200 Subject: [PATCH 226/601] Add: [CMake] Source group definitions to create file filters in generated project files (like the old MSVC projects). --- CMakeLists.txt | 2 ++ cmake/MSVCFilters.cmake | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 cmake/MSVCFilters.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 364236c86c..1400179ffa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,8 @@ include_directories(${CMAKE_SOURCE_DIR}/src) # Needed by everything that uses Squirrel include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/squirrel/include) +include(MSVCFilters) + include(CompileFlags) compile_flags() diff --git a/cmake/MSVCFilters.cmake b/cmake/MSVCFilters.cmake new file mode 100644 index 0000000000..14c7b2c351 --- /dev/null +++ b/cmake/MSVCFilters.cmake @@ -0,0 +1,37 @@ +# Add source group filters for use in generated projects. + +source_group("AI Core" REGULAR_EXPRESSION "src/ai/") +source_group("Blitters" REGULAR_EXPRESSION "src/blitter/") +source_group("Core Source Code" REGULAR_EXPRESSION "src/core/") +source_group("Game Core" REGULAR_EXPRESSION "src/game/") +source_group("MD5" REGULAR_EXPRESSION "src/3rdparty/md5/") +source_group("Misc" REGULAR_EXPRESSION "src/misc/") +source_group("Music" REGULAR_EXPRESSION "src/music/") +source_group("Network Core" REGULAR_EXPRESSION "src/network/core/") +source_group("Pathfinder" REGULAR_EXPRESSION "src/pathfinder/") +source_group("Save/Load handlers" REGULAR_EXPRESSION "src/saveload/") +source_group("Sound" REGULAR_EXPRESSION "src/sound/") +source_group("Sprite loaders" REGULAR_EXPRESSION "src/spriteloader/") +source_group("Squirrel" REGULAR_EXPRESSION "src/3rdparty/squirrel/squirrel/") +source_group("Tables" REGULAR_EXPRESSION "src/table/") +source_group("Video" REGULAR_EXPRESSION "src/video/") +source_group("Widgets" REGULAR_EXPRESSION "src/widgets/") +source_group("Windows files" REGULAR_EXPRESSION "src/os/windows/|\.rc$") + +# Last directive for each file wins, so make sure NPF/YAPF are after the generic pathfinder filter. +source_group("NPF" REGULAR_EXPRESSION "src/pathfinder/npf/") +source_group("YAPF" REGULAR_EXPRESSION "src/pathfinder/yapf/") + +source_group("Script" REGULAR_EXPRESSION "src/script/") +source_group("Script API Implementation" REGULAR_EXPRESSION "src/script/api/") +source_group("Script API" REGULAR_EXPRESSION "src/script/api/.*\.hpp$") +source_group("AI API" REGULAR_EXPRESSION "src/script/api/ai_") +source_group("Game API" REGULAR_EXPRESSION "src/script/api/game_") + +# Placed last to ensure any of the previous directory filters are overridden. +source_group("Command handlers" REGULAR_EXPRESSION "_cmd\.cpp$") +source_group("Drivers" REGULAR_EXPRESSION "_driver\.hpp$") +source_group("GUI Source Code" REGULAR_EXPRESSION "_gui\.cpp$") +source_group("Map Accessors" REGULAR_EXPRESSION "_map\.(cpp|h)$") +source_group("NewGRF" REGULAR_EXPRESSION "newgrf.*cpp$") +source_group("Squirrel headers" REGULAR_EXPRESSION "src/3rdparty/squirrel/squirrel/.*\.h$") From 954d0b4e5b1261468ce0c1f64d3c885e1405fc1f Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 12 Jul 2020 19:45:40 +0200 Subject: [PATCH 227/601] 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 356193a01d..fbfc4e7ddf 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -164,7 +164,7 @@ STR_ABBREV_NONE :{TINY_FONT}X STR_ABBREV_ALL :{TINY_FONT}모두 # 'Mode' of transport for cargoes -STR_PASSENGERS :{G=m}승객 {COMMA}{NBSP}명 +STR_PASSENGERS :{G=m}{COMMA}{NBSP}명 STR_BAGS :{G=f}{COMMA}{NBSP}자루 STR_TONS :{G=m}{COMMA}{NBSP}톤 STR_LITERS :{G=f}{COMMA}{NBSP}리터 From 706c47265e3abf88341be8376532133bde582828 Mon Sep 17 00:00:00 2001 From: dP Date: Sun, 12 Jul 2020 16:38:35 +0300 Subject: [PATCH 228/601] Fix: Set invalid road and tram types for rail tunnel ends --- src/tunnel_map.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tunnel_map.h b/src/tunnel_map.h index 0fdfcecae2..c347626d55 100644 --- a/src/tunnel_map.h +++ b/src/tunnel_map.h @@ -10,6 +10,7 @@ #ifndef TUNNEL_MAP_H #define TUNNEL_MAP_H +#include "rail_map.h" #include "road_map.h" @@ -79,7 +80,9 @@ static inline void MakeRailTunnel(TileIndex t, Owner o, DiagDirection d, RailTyp _m[t].m5 = TRANSPORT_RAIL << 2 | d; SB(_me[t].m6, 2, 4, 0); _me[t].m7 = 0; - _me[t].m8 = r; + _me[t].m8 = 0; + SetRailType(t, r); + SetRoadTypes(t, INVALID_ROADTYPE, INVALID_ROADTYPE); } #endif /* TUNNEL_MAP_H */ From 26b91192a3100c697dc63f96e724d10189c10f13 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Wed, 15 Jul 2020 17:57:31 +0300 Subject: [PATCH 229/601] Feature: Center text and icons in the status bar vertically (#8273) --- src/statusbar_gui.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 322e196dfa..a437f9fa8d 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -137,11 +137,13 @@ struct StatusBarWindow : Window { void DrawWidget(const Rect &r, int widget) const override { + int text_offset = max(0, ((int)(r.bottom - r.top + 1) - FONT_HEIGHT_NORMAL) / 2); // Offset for rendering the text vertically centered + int text_top = r.top + text_offset; switch (widget) { case WID_S_LEFT: /* Draw the date */ SetDParam(0, _date); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_WHITE_DATE_LONG, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_WHITE_DATE_LONG, TC_FROMSTRING, SA_HOR_CENTER); break; case WID_S_RIGHT: { @@ -149,7 +151,7 @@ struct StatusBarWindow : Window { const Company *c = Company::GetIfValid(_local_company); if (c != nullptr) { SetDParam(0, c->money); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER); } break; } @@ -157,11 +159,11 @@ struct StatusBarWindow : Window { case WID_S_MIDDLE: /* Draw status bar */ if (this->saving) { // true when saving is active - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_SAVING_GAME, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_SAVING_GAME, TC_FROMSTRING, SA_HOR_CENTER | SA_VERT_CENTER); } else if (_do_autosave) { - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER); } else if (_pause_mode != PM_UNPAUSED) { - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_PAUSED, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_PAUSED, TC_FROMSTRING, SA_HOR_CENTER); } else if (this->ticker_scroll < TICKER_STOP && _statusbar_news_item != nullptr && _statusbar_news_item->string_id != 0) { /* Draw the scrolling news text */ if (!DrawScrollingStatusText(_statusbar_news_item, ScaleGUITrad(this->ticker_scroll), r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, r.bottom)) { @@ -169,20 +171,20 @@ struct StatusBarWindow : Window { if (Company::IsValidID(_local_company)) { /* This is the default text */ SetDParam(0, _local_company); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER); } } } else { if (Company::IsValidID(_local_company)) { /* This is the default text */ SetDParam(0, _local_company); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER); } } if (!this->reminder_timeout.HasElapsed()) { Dimension icon_size = GetSpriteSize(SPR_UNREAD_NEWS); - DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + WD_FRAMERECT_TOP + (int)(FONT_HEIGHT_NORMAL - icon_size.height) / 2); + DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + max(0, ((int)(r.bottom - r.top + 1) - (int)icon_size.height) / 2)); } break; } From 8794c61f25dfe055296ed500c54d22613fbcb73f Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 5 Mar 2019 15:52:41 +0100 Subject: [PATCH 230/601] Change: rewrote generate_widget in CMake --- CMakeLists.txt | 1 + cmake/scripts/GenerateWidget.cmake | 119 ++ src/script/api/CMakeLists.txt | 42 +- src/script/api/Doxyfile_AI | 2 +- src/script/api/Doxyfile_Game | 2 +- src/script/api/generate_widget.awk | 114 -- src/script/api/generate_widget.sh | 22 - src/script/api/generate_widget.vbs | 190 -- src/script/api/script_window.hpp | 2684 --------------------------- src/script/api/script_window.hpp.in | 171 ++ 10 files changed, 334 insertions(+), 3013 deletions(-) create mode 100644 cmake/scripts/GenerateWidget.cmake delete mode 100644 src/script/api/generate_widget.awk delete mode 100755 src/script/api/generate_widget.sh delete mode 100644 src/script/api/generate_widget.vbs delete mode 100644 src/script/api/script_window.hpp create mode 100644 src/script/api/script_window.hpp.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 1400179ffa..bf39fba384 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,6 +151,7 @@ target_link_libraries(openttd openttd::languages openttd::settings openttd::basesets + openttd::script_api Threads::Threads ) diff --git a/cmake/scripts/GenerateWidget.cmake b/cmake/scripts/GenerateWidget.cmake new file mode 100644 index 0000000000..0bb3490955 --- /dev/null +++ b/cmake/scripts/GenerateWidget.cmake @@ -0,0 +1,119 @@ +cmake_minimum_required(VERSION 3.5) + +# +# CMake script to automatically generate the enums in script_window.hpp +# +# The file is scanned for @enum tokens, and the placeholder is filled with an enum from a different file. +# +# Example: +# // @enum enumname filename@placeholder@ +# ... content here is replaced ... +# // @endenum +# +# The parameter "enumname" specifies the enumeration to extract. This can also be a regular expression. +# The parameter "filename" specifies the relative path to the file, where the enumeration is extracted from. This can also be a glob expression. +# +# + +if (NOT GENERATE_SOURCE_FILE) + message(FATAL_ERROR "Script needs GENERATE_SOURCE_FILE defined") +endif (NOT GENERATE_SOURCE_FILE) +if (NOT GENERATE_BINARY_FILE) + message(FATAL_ERROR "Script needs GENERATE_BINARY_FILE defined") +endif (NOT GENERATE_BINARY_FILE) + +file(STRINGS ${GENERATE_SOURCE_FILE} ENUM_LINES REGEX "@enum") + +foreach(ENUM IN LISTS ENUM_LINES) + string(REGEX REPLACE "^( )// @enum ([^ ]+) ([^ ]+)@([^ ]+)@" "\\4" PLACE_HOLDER "${ENUM}") + set(ADD_INDENT "${CMAKE_MATCH_1}") + set(ENUM_PATTERN "${CMAKE_MATCH_2}") + + file(GLOB FILENAMES "${CMAKE_MATCH_3}") + list(SORT FILENAMES) + + foreach(FILE IN LISTS FILENAMES) + unset(ACTIVE) + unset(ACTIVE_COMMENT) + unset(COMMENT) + + file(STRINGS ${FILE} SOURCE_LINES) + + string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" FILE ${FILE}) + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}/* automatically generated from ${FILE} */") + + foreach(LINE IN LISTS SOURCE_LINES) + string(REPLACE "${RM_INDENT}" "" LINE "${LINE}") + + # Remember possible doxygen comment before enum declaration + if ((NOT ACTIVE) AND "${LINE}" MATCHES "/\\*\\*") + set(COMMENT "${ADD_INDENT}${LINE}") + set(ACTIVE_COMMENT 1) + elseif (ACTIVE_COMMENT EQUAL 1) + string(APPEND COMMENT "\n${ADD_INDENT}${LINE}") + endif() + + # Check for enum match + if ("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") + # REGEX REPLACE does a REGEX MATCHALL and fails if an empty string is matched + string(REGEX MATCH "[^ ]*" RESULT "${LINE}") + string(REPLACE "${RESULT}" "" RM_INDENT "${LINE}") + + set(ACTIVE 1) + if (ACTIVE_COMMENT GREATER 0) + string(APPEND ${PLACE_HOLDER} "\n${COMMENT}") + endif (ACTIVE_COMMENT GREATER 0) + unset(ACTIVE_COMMENT) + unset(COMMENT) + endif ("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") + + # Forget doxygen comment, if no enum follows + if (ACTIVE_COMMENT EQUAL 2 AND NOT "${LINE}" STREQUAL "") + unset(ACTIVE_COMMENT) + unset(COMMENT) + endif (ACTIVE_COMMENT EQUAL 2 AND NOT "${LINE}" STREQUAL "") + if (ACTIVE_COMMENT EQUAL 1 AND "${LINE}" MATCHES "\\*/") + set(ACTIVE_COMMENT 2) + endif (ACTIVE_COMMENT EQUAL 1 AND "${LINE}" MATCHES "\\*/") + + if (ACTIVE) + if ("${LINE}" MATCHES "^ *[A-Za-z0-9_]* *[,=]") + # Transform enum values + # REGEX REPLACE does a REGEX MATCHALL and replaces too much + string(REGEX MATCH " *=[^,]*" RESULT "${LINE}") + string(REPLACE "${RESULT}" "" LINE "${LINE}") + + string(REGEX REPLACE " *//" " //" LINE "${LINE}") + + string(REGEX MATCH "^( *)([A-Za-z0-9_]+),(.*)" RESULT "${LINE}") + + string(LENGTH "${CMAKE_MATCH_2}" LEN) + math(EXPR LEN "43 - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + + if (CMAKE_MATCH_3) + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${CMAKE_MATCH_1}${CMAKE_MATCH_2}${SPACES} = ::${CMAKE_MATCH_2},${SPACES}${CMAKE_MATCH_3}") + else (CMAKE_MATCH_3) + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${CMAKE_MATCH_1}${CMAKE_MATCH_2}${SPACES} = ::${CMAKE_MATCH_2},") + endif (CMAKE_MATCH_3) + elseif ("${LINE}" STREQUAL "") + string(APPEND ${PLACE_HOLDER} "\n") + else () + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${LINE}") + endif () + endif (ACTIVE) + + if ("${LINE}" MATCHES "^ *\};") + if (ACTIVE) + string(APPEND ${PLACE_HOLDER} "\n") + endif (ACTIVE) + unset(ACTIVE) + endif ("${LINE}" MATCHES "^ *\};") + endforeach(LINE) + endforeach(FILE) + endforeach(ENUM) + +configure_file(${GENERATE_SOURCE_FILE} ${GENERATE_BINARY_FILE}) diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index 9c665293c1..f9f5fb7c84 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -1,3 +1,44 @@ +# Get script_window.hpp dependencies +file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/script_window.hpp.in ENUM_LINES REGEX "@enum") +foreach(ENUM IN LISTS ENUM_LINES) + string(REGEX REPLACE ".* ([^ @]+)@.*" "\\1" FILE_PATTERN "${ENUM}") + file(GLOB FILENAMES "${FILE_PATTERN}") + list(APPEND DEPENDENCIES ${FILENAMES}) +endforeach(ENUM) +list(REMOVE_DUPLICATES DEPENDENCIES) + +# Add a command to generate script_window.hpp +add_custom_command_timestamp(OUTPUT ${CMAKE_BINARY_DIR}/generated/script/api/script_window.hpp + COMMAND ${CMAKE_COMMAND} + -DGENERATE_SOURCE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/script_window.hpp.in + -DGENERATE_BINARY_FILE=${CMAKE_BINARY_DIR}/generated/script/api/script_window.hpp + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/GenerateWidget.cmake + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/generated/script/api/dummy # dummy directory for #include "../script_window.hpp" + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/script_window.hpp.in + DEPENDS ${CMAKE_SOURCE_DIR}/cmake/scripts/GenerateWidget.cmake ${DEPENDENCIES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Generating script_window.hpp" +) +add_custom_target_timestamp(script_window + DEPENDS + ${CMAKE_BINARY_DIR}/generated/script/api/script_window.hpp +) + +add_library(script_api + INTERFACE +) +target_include_directories(script_api + INTERFACE + ${CMAKE_BINARY_DIR}/generated/script/api/ + ${CMAKE_BINARY_DIR}/generated/script/api/dummy # dummy path so #include "../script_window.hpp" works + ${CMAKE_CURRENT_SOURCE_DIR} +) +add_dependencies(script_api + script_window +) +add_library(openttd::script_api ALIAS script_api) + + add_files( ai_changelog.hpp game_changelog.hpp @@ -69,7 +110,6 @@ add_files( script_viewport.hpp script_waypoint.hpp script_waypointlist.hpp - script_window.hpp script_accounting.cpp script_admin.cpp script_airport.cpp diff --git a/src/script/api/Doxyfile_AI b/src/script/api/Doxyfile_AI index d882599152..fbd935b414 100644 --- a/src/script/api/Doxyfile_AI +++ b/src/script/api/Doxyfile_AI @@ -91,7 +91,7 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = . +INPUT = . $(GENERATED_API_DIR) INPUT_ENCODING = UTF-8 FILE_PATTERNS = script_*.hpp \ ai_*.hpp diff --git a/src/script/api/Doxyfile_Game b/src/script/api/Doxyfile_Game index 99b2ab05eb..238b47f7d1 100644 --- a/src/script/api/Doxyfile_Game +++ b/src/script/api/Doxyfile_Game @@ -91,7 +91,7 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = . +INPUT = . $(GENERATED_API_DIR) INPUT_ENCODING = UTF-8 FILE_PATTERNS = script_*.hpp \ game_*.hpp diff --git a/src/script/api/generate_widget.awk b/src/script/api/generate_widget.awk deleted file mode 100644 index fe9fbe8345..0000000000 --- a/src/script/api/generate_widget.awk +++ /dev/null @@ -1,114 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -# -# Awk script to automatically generate the enums in script_window.hpp -# -# The file is scanned for @enum and @endenum tokens, and the content between them is replaced by an enum from a different file. -# -# Example: -# // @enum enumname filename -# ... content here is replaced ... -# // @endenum -# -# The parameter "enumname" specifies the enumeration to extract. This can also be a regular expression. -# The parameter "filename" specifies the relative path to the file, where the enumeration is extracted from. This can also be a glob expression. -# -# - -BEGIN { - skiptillend = 0; -} - -{ CR = (match($0, "\\r$") > 0 ? "\r" : "") } - -/@enum/ { - print; - add_indent = gensub("[^ ]*", "", "g"); - sub(".*@enum *", ""); - enum = $1; - pattern = $2; - - files = "echo " pattern; - files | getline filelist; - close(files); - - split(filelist, filearray); - count = asort(filearray); - for (i = 1; i <= count; i++) { - active = 0; - active_comment = 0; - comment = ""; - file = filearray[i]; - print add_indent "/* automatically generated from " file " */" CR - while ((getline < file) > 0) { - sub(rm_indent, ""); - - # Remember possible doxygen comment before enum declaration - if ((active == 0) && (match($0, "/\\*\\*") > 0)) { - comment = add_indent $0; - active_comment = 1; - } else if (active_comment == 1) { - comment = comment "\n" add_indent $0; - } - - # Check for enum match - if (match($0, "^ *enum *" enum " *\\{") > 0) { - rm_indent = $0; - gsub("[^ ]*", "", rm_indent); - active = 1; - if (active_comment > 0) print comment; - active_comment = 0; - comment = ""; - } - - # Forget doxygen comment, if no enum follows - if (active_comment == 2 && $0 != "" CR) { - active_comment = 0; - comment = ""; - } - if (active_comment == 1 && match($0, "\\*/") > 0) active_comment = 2; - - if (active != 0) { - if (match($0, "^ *[A-Za-z0-9_]* *[,=]") > 0) { - # Transform enum values - sub(" *=[^,]*", ""); - sub(" *//", " //"); - - match($0, "^( *)([A-Za-z0-9_]+),(.*)", parts); - - if (parts[3] == "" CR) { - printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] "," CR) - } else { - printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), (parts[3]); - } - } else if ($0 == "" CR) { - print "" CR; - } else { - print add_indent $0; - } - } - - if (match($0, "^ *\\};") > 0) { - if (active != 0) print "" CR; - active = 0; - } - } - close(file); - } - - skiptillend = 1; - next; -} - -/@endenum/ { - print; - skiptillend = 0; - next; -} - -{ - if (skiptillend == 0) print; -} diff --git a/src/script/api/generate_widget.sh b/src/script/api/generate_widget.sh deleted file mode 100755 index bd5fdab1d4..0000000000 --- a/src/script/api/generate_widget.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# 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 . - -# Set neutral locale so sort behaves the same everywhere -LC_ALL=C -export LC_ALL - -# We really need gawk for this! -AWK=gawk - -${AWK} --version > /dev/null 2> /dev/null -if [ "$?" != "0" ]; then - echo "This script needs gawk to run properly" - exit 1 -fi - -${AWK} -v BINMODE=1 -f generate_widget.awk script_window.hpp > script_window.tmp -mv script_window.tmp script_window.hpp diff --git a/src/script/api/generate_widget.vbs b/src/script/api/generate_widget.vbs deleted file mode 100644 index c737bcf4de..0000000000 --- a/src/script/api/generate_widget.vbs +++ /dev/null @@ -1,190 +0,0 @@ -Option Explicit - -' 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 . - -Dim FSO, filename, skiptillend, eof -Set FSO = CreateObject("Scripting.FileSystemObject") - -filename = "script_window.hpp" -skiptillend = False -eof = vbCrLf - -If Not FSO.FileExists(filename) Then - WScript.Echo filename & " not found" - WScript.Quit 1 -End If - -Function GetFiles(pattern) - Dim parent, re, files, f - Set files = CreateObject("Scripting.Dictionary") - Set re = New RegExp - - parent = FSO.GetParentFolderName(pattern) - pattern = FSO.GetFileName(pattern) - - ' Convert pattern to a valid regex - re.Global = True - re.Pattern = "\." - pattern = re.Replace(pattern, "\.") - re.Pattern = "\*" - pattern = re.Replace(pattern, ".*") - re.Pattern = pattern - - ' Get the file list - For Each f In FSO.GetFolder(parent).Files - If re.Test(f.Path) Then - f = parent & "/" & f.Name - files.Add f, f - End If - Next - - ' Sort the file list - Set GetFiles = CreateObject("Scripting.Dictionary") - While files.Count <> 0 - Dim first - first = "" - For Each f in files - If first = "" Or StrComp(first, f) = 1 Then first = f - Next - GetFiles.Add first, first - files.Remove(First) - Wend -End Function - -Sub Generate(line, file) - Dim re, add_indent, enum_pattern, file_pattern, f, active, active_comment, comment, rm_indent - Set re = New RegExp - - re.Global = True - re.Pattern = "[^ ]*" - add_indent = re.Replace(line, "") - re.Global = False - re.Pattern = ".*@enum *" - line = Split(re.Replace(line, "")) - enum_pattern = line(0) - file_pattern = line(1) - For Each f In GetFiles(file_pattern).Items - active = 0 - active_comment = 0 - comment = "" - file.Write add_indent & "/* automatically generated from " & f & " */" & eof - Set f = FSO.OpenTextFile(f, 1) - While Not f.AtEndOfStream - re.Pattern = rm_indent - line = re.Replace(f.ReadLine, "") - - ' Remember possible doxygen comment before enum declaration - re.Pattern = "/\*\*" - If active = 0 And re.Test(line) Then - comment = add_indent & line - active_comment = 1 - ElseIf active_comment = 1 Then - comment = comment & vbCrLf & add_indent & line - End If - - ' Check for enum match - re.Pattern = "^ *enum *" & enum_pattern & " *\{" - If re.Test(line) Then - re.Global = True - re.Pattern = "[^ ]*" - rm_indent = re.Replace(line, "") - re.Global = False - active = 1 - If active_comment > 0 Then file.Write comment & eof - active_comment = 0 - comment = "" - End If - - ' Forget doxygen comment, if no enum follows - If active_comment = 2 And line <> "" Then - active_comment = 0 - comment = "" - End If - re.Pattern = "\*/" - If active_comment = 1 And re.Test(line) Then active_comment = 2 - - If active <> 0 Then - re.Pattern = "^ *[A-Za-z0-9_]* *[,=]" - If re.Test(line) Then - Dim parts - ' Transform enum values - re.Pattern = " *=[^,]*" - line = re.Replace(line, "") - re.Pattern = " *//" - line = re.Replace(line, " //") - - re.Pattern = "^( *)([A-Za-z0-9_]+),(.*)" - Set parts = re.Execute(line) - - With parts.Item(0).SubMatches - If .Item(2) = "" Then - file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & eof - Else - file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & String(44 - Len(.Item(1)), " ") & .Item(2) & eof - End If - End With - ElseIf line = "" Then - file.Write eof - Else - file.Write add_indent & line & eof - End If - End If - - re.Pattern = "^ *\};" - If re.Test(line) Then - If active <> 0 Then file.Write eof - active = 0 - End If - Wend - f.Close - Next -End Sub - -Sub Parse(line, file) - Dim re - Set re = New RegExp - - re.pattern = "@enum" - If re.Test(line) Then - file.Write line & eof - Generate line, file - skiptillend = True - Exit Sub - End If - - re.pattern = "@endenum" - If re.Test(line) Then - file.Write line & eof - skiptillend = False - Exit Sub - End If - - If Not skiptillend Then - file.Write line & eof - End If -End Sub - -Dim file, source, lines, i - -WScript.Echo "Starting to parse " & filename -Set file = FSO.OpenTextFile(filename, 1) -If Not file.AtEndOfStream Then - source = file.ReadAll -End IF -file.Close - -lines = Split(source, eof) -If UBound(lines) = 0 Then - eof = vbLf - lines = Split(source, eof) -End If - -Set file = FSO.OpenTextFile(filename, 2) -For i = LBound(lines) To UBound(lines) - 1 ' Split adds an extra line, we must ignore it - Parse lines(i), file -Next -file.Close -WScript.Echo "Done" diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp deleted file mode 100644 index 39a64034b9..0000000000 --- a/src/script/api/script_window.hpp +++ /dev/null @@ -1,2684 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file script_window.hpp Everything to handle window interaction. */ - -#ifndef SCRIPT_WINDOW_HPP -#define SCRIPT_WINDOW_HPP - -#include "script_object.hpp" -#include "../../window_type.h" -#include "../../gfx_type.h" - -#include "../../widgets/ai_widget.h" -#include "../../widgets/airport_widget.h" -#include "../../widgets/autoreplace_widget.h" -#include "../../widgets/bootstrap_widget.h" -#include "../../widgets/bridge_widget.h" -#include "../../widgets/build_vehicle_widget.h" -#include "../../widgets/cheat_widget.h" -#include "../../widgets/company_widget.h" -#include "../../widgets/console_widget.h" -#include "../../widgets/date_widget.h" -#include "../../widgets/depot_widget.h" -#include "../../widgets/dock_widget.h" -#include "../../widgets/dropdown_widget.h" -#include "../../widgets/engine_widget.h" -#include "../../widgets/error_widget.h" -#include "../../widgets/fios_widget.h" -#include "../../widgets/framerate_widget.h" -#include "../../widgets/genworld_widget.h" -#include "../../widgets/goal_widget.h" -#include "../../widgets/graph_widget.h" -#include "../../widgets/group_widget.h" -#include "../../widgets/highscore_widget.h" -#include "../../widgets/industry_widget.h" -#include "../../widgets/intro_widget.h" -#include "../../widgets/main_widget.h" -#include "../../widgets/misc_widget.h" -#include "../../widgets/music_widget.h" -#include "../../widgets/network_chat_widget.h" -#include "../../widgets/network_content_widget.h" -#include "../../widgets/network_widget.h" -#include "../../widgets/newgrf_debug_widget.h" -#include "../../widgets/newgrf_widget.h" -#include "../../widgets/news_widget.h" -#include "../../widgets/object_widget.h" -#include "../../widgets/order_widget.h" -#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" -#include "../../widgets/station_widget.h" -#include "../../widgets/statusbar_widget.h" -#include "../../widgets/subsidy_widget.h" -#include "../../widgets/terraform_widget.h" -#include "../../widgets/timetable_widget.h" -#include "../../widgets/toolbar_widget.h" -#include "../../widgets/town_widget.h" -#include "../../widgets/transparency_widget.h" -#include "../../widgets/tree_widget.h" -#include "../../widgets/vehicle_widget.h" -#include "../../widgets/viewport_widget.h" -#include "../../widgets/waypoint_widget.h" -#include "../../widgets/link_graph_legend_widget.h" -#include "../../widgets/story_widget.h" - -/** - * Class that handles window interaction. A Window in OpenTTD has two imporant - * values. The WindowClass, and a Window number. The first indicates roughly - * which window it is. WC_TOWN_VIEW for example, is the view of a town. - * The Window number is a bit more complex, as it depends mostly on the - * WindowClass. For example for WC_TOWN_VIEW it is the TownID. In general a - * good rule of thumb is: either the number is always 0, or the ID of the - * object in question. - * In the comment at the widget enum, it is mentioned how the number is used. - * - * Note, that the detailed window layout is very version specific. - * Enum values might be added, changed or removed in future versions without notice - * in the changelog, and there won't be any means of compatibility. - * - * @api game - */ -class ScriptWindow : public ScriptObject { -public: - // @enum WindowNumberEnum ../../window_type.h - /* automatically generated from ../../window_type.h */ - /** %Window numbers. */ - enum WindowNumberEnum { - WN_GAME_OPTIONS_AI = ::WN_GAME_OPTIONS_AI, ///< AI settings. - WN_GAME_OPTIONS_ABOUT = ::WN_GAME_OPTIONS_ABOUT, ///< About window. - WN_GAME_OPTIONS_NEWGRF_STATE = ::WN_GAME_OPTIONS_NEWGRF_STATE, ///< NewGRF settings. - WN_GAME_OPTIONS_GAME_OPTIONS = ::WN_GAME_OPTIONS_GAME_OPTIONS, ///< Game options. - WN_GAME_OPTIONS_GAME_SETTINGS = ::WN_GAME_OPTIONS_GAME_SETTINGS, ///< Game settings. - - WN_QUERY_STRING = ::WN_QUERY_STRING, ///< Query string. - WN_QUERY_STRING_SIGN = ::WN_QUERY_STRING_SIGN, ///< Query string for signs. - - WN_CONFIRM_POPUP_QUERY = ::WN_CONFIRM_POPUP_QUERY, ///< Query popup confirm. - WN_CONFIRM_POPUP_QUERY_BOOTSTRAP = ::WN_CONFIRM_POPUP_QUERY_BOOTSTRAP, ///< Query popup confirm for bootstrap. - - WN_NETWORK_WINDOW_GAME = ::WN_NETWORK_WINDOW_GAME, ///< Network game window. - WN_NETWORK_WINDOW_LOBBY = ::WN_NETWORK_WINDOW_LOBBY, ///< Network lobby window. - WN_NETWORK_WINDOW_CONTENT_LIST = ::WN_NETWORK_WINDOW_CONTENT_LIST, ///< Network content list. - WN_NETWORK_WINDOW_START = ::WN_NETWORK_WINDOW_START, ///< Network start server. - - WN_NETWORK_STATUS_WINDOW_JOIN = ::WN_NETWORK_STATUS_WINDOW_JOIN, ///< Network join status. - WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD = ::WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD, ///< Network content download status. - }; - - // @endenum - - // @enum WindowClass ../../window_type.h - /* automatically generated from ../../window_type.h */ - /** %Window classes. */ - enum WindowClass { - WC_NONE = ::WC_NONE, ///< No window, redirects to WC_MAIN_WINDOW. - - /** - * Main window; %Window numbers: - * - 0 = #MainWidgets - */ - WC_MAIN_WINDOW = ::WC_MAIN_WINDOW, - - /** - * Main toolbar (the long bar at the top); %Window numbers: - * - 0 = #ToolbarNormalWidgets - * - 0 = #ToolbarEditorWidgets - */ - WC_MAIN_TOOLBAR = ::WC_MAIN_TOOLBAR, - - /** - * Statusbar (at the bottom of your screen); %Window numbers: - * - 0 = #StatusbarWidgets - */ - WC_STATUS_BAR = ::WC_STATUS_BAR, - - /** - * Build toolbar; %Window numbers: - * - #TRANSPORT_RAIL = #RailToolbarWidgets - * - #TRANSPORT_AIR = #AirportToolbarWidgets - * - #TRANSPORT_WATER = #DockToolbarWidgets - * - #TRANSPORT_ROAD = #RoadToolbarWidgets - */ - WC_BUILD_TOOLBAR = ::WC_BUILD_TOOLBAR, - - /** - * Scenario build toolbar; %Window numbers: - * - #TRANSPORT_WATER = #DockToolbarWidgets - * - #TRANSPORT_ROAD = #RoadToolbarWidgets - */ - WC_SCEN_BUILD_TOOLBAR = ::WC_SCEN_BUILD_TOOLBAR, - - /** - * Build trees toolbar; %Window numbers: - * - 0 = #BuildTreesWidgets - */ - WC_BUILD_TREES = ::WC_BUILD_TREES, - - /** - * Transparency toolbar; %Window numbers: - * - 0 = #TransparencyToolbarWidgets - */ - WC_TRANSPARENCY_TOOLBAR = ::WC_TRANSPARENCY_TOOLBAR, - - /** - * Build signal toolbar; %Window numbers: - * - #TRANSPORT_RAIL = #BuildSignalWidgets - */ - WC_BUILD_SIGNAL = ::WC_BUILD_SIGNAL, - - /** - * Small map; %Window numbers: - * - 0 = #SmallMapWidgets - */ - WC_SMALLMAP = ::WC_SMALLMAP, - - /** - * Error message; %Window numbers: - * - 0 = #ErrorMessageWidgets - */ - WC_ERRMSG = ::WC_ERRMSG, - - /** - * Tooltip window; %Window numbers: - * - 0 = #ToolTipsWidgets - */ - WC_TOOLTIPS = ::WC_TOOLTIPS, - - /** - * Query string window; %Window numbers: - * - #WN_QUERY_STRING = #QueryStringWidgets - * - #WN_QUERY_STRING_SIGN = #QueryEditSignWidgets - */ - WC_QUERY_STRING = ::WC_QUERY_STRING, - - /** - * Popup with confirm question; %Window numbers: - * - #WN_CONFIRM_POPUP_QUERY = #QueryWidgets - * - #WN_CONFIRM_POPUP_QUERY_BOOTSTRAP = #BootstrapAskForDownloadWidgets - */ - WC_CONFIRM_POPUP_QUERY = ::WC_CONFIRM_POPUP_QUERY, - - /** - * Popup with a set of buttons, designed to ask the user a question - * from a GameScript. %Window numbers: - * - uniqueid = #GoalQuestionWidgets - */ - WC_GOAL_QUESTION = ::WC_GOAL_QUESTION, - - - /** - * Saveload window; %Window numbers: - * - 0 = #SaveLoadWidgets - */ - WC_SAVELOAD = ::WC_SAVELOAD, - - /** - * Land info window; %Window numbers: - * - 0 = #LandInfoWidgets - */ - WC_LAND_INFO = ::WC_LAND_INFO, - - /** - * Drop down menu; %Window numbers: - * - 0 = #DropdownMenuWidgets - */ - WC_DROPDOWN_MENU = ::WC_DROPDOWN_MENU, - - /** - * On Screen Keyboard; %Window numbers: - * - 0 = #OnScreenKeyboardWidgets - */ - WC_OSK = ::WC_OSK, - - /** - * Set date; %Window numbers: - * - #VehicleID = #SetDateWidgets - */ - WC_SET_DATE = ::WC_SET_DATE, - - - /** - * AI settings; %Window numbers: - * - 0 = #AISettingsWidgets - */ - WC_AI_SETTINGS = ::WC_AI_SETTINGS, - - /** - * NewGRF parameters; %Window numbers: - * - 0 = #NewGRFParametersWidgets - */ - WC_GRF_PARAMETERS = ::WC_GRF_PARAMETERS, - - /** - * textfile; %Window numbers: - * - 0 = #TextfileWidgets - */ - WC_TEXTFILE = ::WC_TEXTFILE, - - - /** - * Town authority; %Window numbers: - * - #TownID = #TownAuthorityWidgets - */ - WC_TOWN_AUTHORITY = ::WC_TOWN_AUTHORITY, - - /** - * Vehicle details; %Window numbers: - * - #VehicleID = #VehicleDetailsWidgets - */ - WC_VEHICLE_DETAILS = ::WC_VEHICLE_DETAILS, - - /** - * Vehicle refit; %Window numbers: - * - #VehicleID = #VehicleRefitWidgets - */ - WC_VEHICLE_REFIT = ::WC_VEHICLE_REFIT, - - /** - * Vehicle orders; %Window numbers: - * - #VehicleID = #OrderWidgets - */ - WC_VEHICLE_ORDERS = ::WC_VEHICLE_ORDERS, - - /** - * Replace vehicle window; %Window numbers: - * - #VehicleType = #ReplaceVehicleWidgets - */ - WC_REPLACE_VEHICLE = ::WC_REPLACE_VEHICLE, - - /** - * Vehicle timetable; %Window numbers: - * - #VehicleID = #VehicleTimetableWidgets - */ - WC_VEHICLE_TIMETABLE = ::WC_VEHICLE_TIMETABLE, - - /** - * Company colour selection; %Window numbers: - * - #CompanyID = #SelectCompanyLiveryWidgets - */ - WC_COMPANY_COLOUR = ::WC_COMPANY_COLOUR, - - /** - * Alter company face window; %Window numbers: - * - #CompanyID = #SelectCompanyManagerFaceWidgets - */ - WC_COMPANY_MANAGER_FACE = ::WC_COMPANY_MANAGER_FACE, - - /** - * Select station (when joining stations); %Window numbers: - * - 0 = #JoinStationWidgets - */ - WC_SELECT_STATION = ::WC_SELECT_STATION, - - /** - * News window; %Window numbers: - * - 0 = #NewsWidgets - */ - WC_NEWS_WINDOW = ::WC_NEWS_WINDOW, - - /** - * Town directory; %Window numbers: - * - 0 = #TownDirectoryWidgets - */ - WC_TOWN_DIRECTORY = ::WC_TOWN_DIRECTORY, - - /** - * Subsidies list; %Window numbers: - * - 0 = #SubsidyListWidgets - */ - WC_SUBSIDIES_LIST = ::WC_SUBSIDIES_LIST, - - /** - * Industry directory; %Window numbers: - * - 0 = #IndustryDirectoryWidgets - */ - WC_INDUSTRY_DIRECTORY = ::WC_INDUSTRY_DIRECTORY, - - /** - * News history list; %Window numbers: - * - 0 = #MessageHistoryWidgets - */ - WC_MESSAGE_HISTORY = ::WC_MESSAGE_HISTORY, - - /** - * Sign list; %Window numbers: - * - 0 = #SignListWidgets - */ - WC_SIGN_LIST = ::WC_SIGN_LIST, - - /** - * AI list; %Window numbers: - * - 0 = #AIListWidgets - */ - WC_AI_LIST = ::WC_AI_LIST, - - /** - * Goals list; %Window numbers: - * - 0 ; #GoalListWidgets - */ - WC_GOALS_LIST = ::WC_GOALS_LIST, - - /** - * Story book; %Window numbers: - * - CompanyID = #StoryBookWidgets - */ - WC_STORY_BOOK = ::WC_STORY_BOOK, - - /** - * Station list; %Window numbers: - * - #CompanyID = #StationListWidgets - */ - WC_STATION_LIST = ::WC_STATION_LIST, - - /** - * Trains list; %Window numbers: - * - Packed value = #GroupListWidgets / #VehicleListWidgets - */ - WC_TRAINS_LIST = ::WC_TRAINS_LIST, - - /** - * Road vehicle list; %Window numbers: - * - Packed value = #GroupListWidgets / #VehicleListWidgets - */ - WC_ROADVEH_LIST = ::WC_ROADVEH_LIST, - - /** - * Ships list; %Window numbers: - * - Packed value = #GroupListWidgets / #VehicleListWidgets - */ - WC_SHIPS_LIST = ::WC_SHIPS_LIST, - - /** - * Aircraft list; %Window numbers: - * - Packed value = #GroupListWidgets / #VehicleListWidgets - */ - WC_AIRCRAFT_LIST = ::WC_AIRCRAFT_LIST, - - - /** - * Town view; %Window numbers: - * - #TownID = #TownViewWidgets - */ - WC_TOWN_VIEW = ::WC_TOWN_VIEW, - - /** - * Vehicle view; %Window numbers: - * - #VehicleID = #VehicleViewWidgets - */ - WC_VEHICLE_VIEW = ::WC_VEHICLE_VIEW, - - /** - * Station view; %Window numbers: - * - #StationID = #StationViewWidgets - */ - WC_STATION_VIEW = ::WC_STATION_VIEW, - - /** - * Depot view; %Window numbers: - * - #TileIndex = #DepotWidgets - */ - WC_VEHICLE_DEPOT = ::WC_VEHICLE_DEPOT, - - /** - * Waypoint view; %Window numbers: - * - #WaypointID = #WaypointWidgets - */ - WC_WAYPOINT_VIEW = ::WC_WAYPOINT_VIEW, - - /** - * Industry view; %Window numbers: - * - #IndustryID = #IndustryViewWidgets - */ - WC_INDUSTRY_VIEW = ::WC_INDUSTRY_VIEW, - - /** - * Company view; %Window numbers: - * - #CompanyID = #CompanyWidgets - */ - WC_COMPANY = ::WC_COMPANY, - - - /** - * Build object; %Window numbers: - * - 0 = #BuildObjectWidgets - */ - WC_BUILD_OBJECT = ::WC_BUILD_OBJECT, - - /** - * Build vehicle; %Window numbers: - * - #VehicleType = #BuildVehicleWidgets - * - #TileIndex = #BuildVehicleWidgets - */ - WC_BUILD_VEHICLE = ::WC_BUILD_VEHICLE, - - /** - * Build bridge; %Window numbers: - * - #TransportType = #BuildBridgeSelectionWidgets - */ - WC_BUILD_BRIDGE = ::WC_BUILD_BRIDGE, - - /** - * Build station; %Window numbers: - * - #TRANSPORT_AIR = #AirportPickerWidgets - * - #TRANSPORT_WATER = #DockToolbarWidgets - * - #TRANSPORT_RAIL = #BuildRailStationWidgets - */ - WC_BUILD_STATION = ::WC_BUILD_STATION, - - /** - * Build bus station; %Window numbers: - * - #TRANSPORT_ROAD = #BuildRoadStationWidgets - */ - WC_BUS_STATION = ::WC_BUS_STATION, - - /** - * Build truck station; %Window numbers: - * - #TRANSPORT_ROAD = #BuildRoadStationWidgets - */ - WC_TRUCK_STATION = ::WC_TRUCK_STATION, - - /** - * Build depot; %Window numbers: - * - #TRANSPORT_WATER = #BuildDockDepotWidgets - * - #TRANSPORT_RAIL = #BuildRailDepotWidgets - * - #TRANSPORT_ROAD = #BuildRoadDepotWidgets - */ - WC_BUILD_DEPOT = ::WC_BUILD_DEPOT, - - /** - * Build waypoint; %Window numbers: - * - #TRANSPORT_RAIL = #BuildRailWaypointWidgets - */ - WC_BUILD_WAYPOINT = ::WC_BUILD_WAYPOINT, - - /** - * Found a town; %Window numbers: - * - 0 = #TownFoundingWidgets - */ - WC_FOUND_TOWN = ::WC_FOUND_TOWN, - - /** - * Build industry; %Window numbers: - * - 0 = #DynamicPlaceIndustriesWidgets - */ - WC_BUILD_INDUSTRY = ::WC_BUILD_INDUSTRY, - - - /** - * Select game window; %Window numbers: - * - 0 = #SelectGameIntroWidgets - */ - WC_SELECT_GAME = ::WC_SELECT_GAME, - - /** - * Landscape generation (in Scenario Editor); %Window numbers: - * - 0 = #TerraformToolbarWidgets - * - 0 = #EditorTerraformToolbarWidgets - */ - WC_SCEN_LAND_GEN = ::WC_SCEN_LAND_GEN, - - /** - * Generate landscape (newgame); %Window numbers: - * - GLWM_SCENARIO = #CreateScenarioWidgets - * - #GenerateLandscapeWindowMode = #GenerateLandscapeWidgets - */ - WC_GENERATE_LANDSCAPE = ::WC_GENERATE_LANDSCAPE, - - /** - * Progress report of landscape generation; %Window numbers: - * - 0 = #GenerationProgressWidgets - * - 1 = #ScanProgressWidgets - */ - WC_MODAL_PROGRESS = ::WC_MODAL_PROGRESS, - - - /** - * Network window; %Window numbers: - * - #WN_NETWORK_WINDOW_GAME = #NetworkGameWidgets - * - #WN_NETWORK_WINDOW_LOBBY = #NetworkLobbyWidgets - * - #WN_NETWORK_WINDOW_CONTENT_LIST = #NetworkContentListWidgets - * - #WN_NETWORK_WINDOW_START = #NetworkStartServerWidgets - */ - WC_NETWORK_WINDOW = ::WC_NETWORK_WINDOW, - - /** - * Client list; %Window numbers: - * - 0 = #ClientListWidgets - */ - WC_CLIENT_LIST = ::WC_CLIENT_LIST, - - /** - * Popup for the client list; %Window numbers: - * - #ClientID = #ClientListPopupWidgets - */ - WC_CLIENT_LIST_POPUP = ::WC_CLIENT_LIST_POPUP, - - /** - * Network status window; %Window numbers: - * - #WN_NETWORK_STATUS_WINDOW_JOIN = #NetworkJoinStatusWidgets - * - #WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD = #NetworkContentDownloadStatusWidgets - */ - WC_NETWORK_STATUS_WINDOW = ::WC_NETWORK_STATUS_WINDOW, - - /** - * Chatbox; %Window numbers: - * - #DestType = #NetWorkChatWidgets - */ - WC_SEND_NETWORK_MSG = ::WC_SEND_NETWORK_MSG, - - /** - * Company password query; %Window numbers: - * - 0 = #NetworkCompanyPasswordWidgets - */ - WC_COMPANY_PASSWORD_WINDOW = ::WC_COMPANY_PASSWORD_WINDOW, - - - /** - * Industry cargoes chain; %Window numbers: - * - 0 = #IndustryCargoesWidgets - */ - WC_INDUSTRY_CARGOES = ::WC_INDUSTRY_CARGOES, - - /** - * Legend for graphs; %Window numbers: - * - 0 = #GraphLegendWidgets - */ - WC_GRAPH_LEGEND = ::WC_GRAPH_LEGEND, - - /** - * Finances of a company; %Window numbers: - * - #CompanyID = #CompanyWidgets - */ - WC_FINANCES = ::WC_FINANCES, - - /** - * Income graph; %Window numbers: - * - 0 = #CompanyValueWidgets - */ - WC_INCOME_GRAPH = ::WC_INCOME_GRAPH, - - /** - * Operating profit graph; %Window numbers: - * - 0 = #CompanyValueWidgets - */ - WC_OPERATING_PROFIT = ::WC_OPERATING_PROFIT, - - /** - * Delivered cargo graph; %Window numbers: - * - 0 = #CompanyValueWidgets - */ - WC_DELIVERED_CARGO = ::WC_DELIVERED_CARGO, - - /** - * Performance history graph; %Window numbers: - * - 0 = #PerformanceHistoryGraphWidgets - */ - WC_PERFORMANCE_HISTORY = ::WC_PERFORMANCE_HISTORY, - - /** - * Company value graph; %Window numbers: - * - 0 = #CompanyValueWidgets - */ - WC_COMPANY_VALUE = ::WC_COMPANY_VALUE, - - /** - * Company league window; %Window numbers: - * - 0 = #CompanyLeagueWidgets - */ - WC_COMPANY_LEAGUE = ::WC_COMPANY_LEAGUE, - - /** - * Payment rates graph; %Window numbers: - * - 0 = #CargoPaymentRatesWidgets - */ - WC_PAYMENT_RATES = ::WC_PAYMENT_RATES, - - /** - * Performance detail window; %Window numbers: - * - 0 = #PerformanceRatingDetailsWidgets - */ - WC_PERFORMANCE_DETAIL = ::WC_PERFORMANCE_DETAIL, - - /** - * Company infrastructure overview; %Window numbers: - * - #CompanyID = #CompanyInfrastructureWidgets - */ - WC_COMPANY_INFRASTRUCTURE = ::WC_COMPANY_INFRASTRUCTURE, - - - /** - * Buyout company (merger); %Window numbers: - * - #CompanyID = #BuyCompanyWidgets - */ - WC_BUY_COMPANY = ::WC_BUY_COMPANY, - - /** - * Engine preview window; %Window numbers: - * - #EngineID = #EnginePreviewWidgets - */ - WC_ENGINE_PREVIEW = ::WC_ENGINE_PREVIEW, - - - /** - * Music window; %Window numbers: - * - 0 = #MusicWidgets - */ - WC_MUSIC_WINDOW = ::WC_MUSIC_WINDOW, - - /** - * Music track selection; %Window numbers: - * - 0 = MusicTrackSelectionWidgets - */ - WC_MUSIC_TRACK_SELECTION = ::WC_MUSIC_TRACK_SELECTION, - - /** - * Game options window; %Window numbers: - * - #WN_GAME_OPTIONS_AI = #AIConfigWidgets - * - #WN_GAME_OPTIONS_ABOUT = #AboutWidgets - * - #WN_GAME_OPTIONS_NEWGRF_STATE = #NewGRFStateWidgets - * - #WN_GAME_OPTIONS_GAME_OPTIONS = #GameOptionsWidgets - * - #WN_GAME_OPTIONS_GAME_SETTINGS = #GameSettingsWidgets - */ - WC_GAME_OPTIONS = ::WC_GAME_OPTIONS, - - /** - * Custom currency; %Window numbers: - * - 0 = #CustomCurrencyWidgets - */ - WC_CUSTOM_CURRENCY = ::WC_CUSTOM_CURRENCY, - - /** - * Cheat window; %Window numbers: - * - 0 = #CheatWidgets - */ - WC_CHEATS = ::WC_CHEATS, - - /** - * Extra viewport; %Window numbers: - * - Ascending value = #ExtraViewportWidgets - */ - WC_EXTRA_VIEW_PORT = ::WC_EXTRA_VIEW_PORT, - - - /** - * Console; %Window numbers: - * - 0 = #ConsoleWidgets - */ - WC_CONSOLE = ::WC_CONSOLE, - - /** - * Bootstrap; %Window numbers: - * - 0 = #BootstrapBackgroundWidgets - */ - WC_BOOTSTRAP = ::WC_BOOTSTRAP, - - /** - * Highscore; %Window numbers: - * - 0 = #HighscoreWidgets - */ - WC_HIGHSCORE = ::WC_HIGHSCORE, - - /** - * Endscreen; %Window numbers: - * - 0 = #HighscoreWidgets - */ - WC_ENDSCREEN = ::WC_ENDSCREEN, - - - /** - * AI debug window; %Window numbers: - * - 0 = #AIDebugWidgets - */ - WC_AI_DEBUG = ::WC_AI_DEBUG, - - /** - * NewGRF inspect (debug); %Window numbers: - * - Packed value = #NewGRFInspectWidgets - */ - WC_NEWGRF_INSPECT = ::WC_NEWGRF_INSPECT, - - /** - * Sprite aligner (debug); %Window numbers: - * - 0 = #SpriteAlignerWidgets - */ - WC_SPRITE_ALIGNER = ::WC_SPRITE_ALIGNER, - - /** - * Linkgraph legend; %Window numbers: - * - 0 = #LinkGraphWidgets - */ - WC_LINKGRAPH_LEGEND = ::WC_LINKGRAPH_LEGEND, - - /** - * Save preset; %Window numbers: - * - 0 = #SavePresetWidgets - */ - WC_SAVE_PRESET = ::WC_SAVE_PRESET, - - /** - * Framerate display; %Window numbers: - * - 0 = #FramerateDisplayWidgets - */ - WC_FRAMERATE_DISPLAY = ::WC_FRAMERATE_DISPLAY, - - /** - * Frame time graph; %Window numbers: - * - 0 = #FrametimeGraphWindowWidgets - */ - WC_FRAMETIME_GRAPH = ::WC_FRAMETIME_GRAPH, - - /** - * Screenshot window; %Window numbers: - * - 0 = #ScreenshotWidgets - */ - WC_SCREENSHOT = ::WC_SCREENSHOT, - - WC_INVALID = ::WC_INVALID, ///< Invalid window. - }; - - // @endenum - - /** - * The colours in the game which you can use for text and highlights. - */ - enum TextColour { - /* Note: these values represent part of the in-game TextColour enum */ - TC_BLUE = ::TC_BLUE, ///< Blue colour. - TC_SILVER = ::TC_SILVER, ///< Silver colour. - TC_GOLD = ::TC_GOLD, ///< Gold colour. - TC_RED = ::TC_RED, ///< Red colour. - TC_PURPLE = ::TC_PURPLE, ///< Purple colour. - TC_LIGHT_BROWN = ::TC_LIGHT_BROWN, ///< Light brown colour. - TC_ORANGE = ::TC_ORANGE, ///< Orange colour. - TC_GREEN = ::TC_GREEN, ///< Green colour. - TC_YELLOW = ::TC_YELLOW, ///< Yellow colour. - TC_DARK_GREEN = ::TC_DARK_GREEN, ///< Dark green colour. - TC_CREAM = ::TC_CREAM, ///< Cream colour. - TC_BROWN = ::TC_BROWN, ///< Brown colour. - TC_WHITE = ::TC_WHITE, ///< White colour. - TC_LIGHT_BLUE = ::TC_LIGHT_BLUE, ///< Light blue colour. - TC_GREY = ::TC_GREY, ///< Grey colour. - TC_DARK_BLUE = ::TC_DARK_BLUE, ///< Dark blue colour. - TC_BLACK = ::TC_BLACK, ///< Black colour. - TC_INVALID = ::TC_INVALID, ///< Invalid colour. - }; - - /** - * Special number values. - */ - enum NumberType { - NUMBER_ALL = 0xFFFFFFFF, ///< Value to select all windows of a class. - }; - - /** - * Special widget values. - */ - enum WidgetType { - WIDGET_ALL = 0xFF, ///< Value to select all widgets of a window. - }; - - /** - * Close a window. - * @param window The class of the window to close. - * @param number The number of the window to close, or NUMBER_ALL to close all of this class. - * @pre !ScriptGame::IsMultiplayer(). - */ - static void Close(WindowClass window, uint32 number); - - /** - * Check if a window is open. - * @param window The class of the window to check for. - * @param number The number of the window to check for, or NUMBER_ALL to check for any in the class. - * @pre !ScriptGame::IsMultiplayer(). - * @return True if the window is open. - */ - static bool IsOpen(WindowClass window, uint32 number); - - /** - * Highlight a widget in a window. - * @param window The class of the window to highlight a widget in. - * @param number The number of the window to highlight a widget in. - * @param widget The widget in the window to highlight, or WIDGET_ALL (in combination with TC_INVALID) to disable all widget highlighting on this window. - * @param colour The colour of the highlight, or TC_INVALID for disabling. - * @pre !ScriptGame::IsMultiplayer(). - * @pre number != NUMBER_ALL. - * @pre colour < TC_END || (widget == WIDGET_ALL && colour == TC_INVALID). - * @pre IsOpen(window, number). - */ - static void Highlight(WindowClass window, uint32 number, uint8 widget, TextColour colour); - - // @enum .*Widgets ../../widgets/*_widget.h - /* automatically generated from ../../widgets/ai_widget.h */ - /** Widgets of the #AIListWindow class. */ - enum AIListWidgets { - WID_AIL_CAPTION = ::WID_AIL_CAPTION, ///< Caption of the window. - WID_AIL_LIST = ::WID_AIL_LIST, ///< The matrix with all available AIs. - WID_AIL_SCROLLBAR = ::WID_AIL_SCROLLBAR, ///< Scrollbar next to the AI list. - WID_AIL_INFO_BG = ::WID_AIL_INFO_BG, ///< Panel to draw some AI information on. - WID_AIL_ACCEPT = ::WID_AIL_ACCEPT, ///< Accept button. - WID_AIL_CANCEL = ::WID_AIL_CANCEL, ///< Cancel button. - }; - - /** Widgets of the #AISettingsWindow class. */ - enum AISettingsWidgets { - WID_AIS_CAPTION = ::WID_AIS_CAPTION, ///< Caption of the window. - WID_AIS_BACKGROUND = ::WID_AIS_BACKGROUND, ///< Panel to draw the settings on. - WID_AIS_SCROLLBAR = ::WID_AIS_SCROLLBAR, ///< Scrollbar to scroll through all settings. - WID_AIS_ACCEPT = ::WID_AIS_ACCEPT, ///< Accept button. - WID_AIS_RESET = ::WID_AIS_RESET, ///< Reset button. - }; - - /** Widgets of the #AIConfigWindow class. */ - enum AIConfigWidgets { - WID_AIC_BACKGROUND = ::WID_AIC_BACKGROUND, ///< Window background. - WID_AIC_DECREASE = ::WID_AIC_DECREASE, ///< Decrease the number of AIs. - WID_AIC_INCREASE = ::WID_AIC_INCREASE, ///< Increase the number of AIs. - WID_AIC_NUMBER = ::WID_AIC_NUMBER, ///< Number of AIs. - WID_AIC_GAMELIST = ::WID_AIC_GAMELIST, ///< List with current selected GameScript. - WID_AIC_LIST = ::WID_AIC_LIST, ///< List with currently selected AIs. - WID_AIC_SCROLLBAR = ::WID_AIC_SCROLLBAR, ///< Scrollbar to scroll through the selected AIs. - WID_AIC_MOVE_UP = ::WID_AIC_MOVE_UP, ///< Move up button. - WID_AIC_MOVE_DOWN = ::WID_AIC_MOVE_DOWN, ///< Move down button. - WID_AIC_CHANGE = ::WID_AIC_CHANGE, ///< Select another AI button. - WID_AIC_CONFIGURE = ::WID_AIC_CONFIGURE, ///< Change AI settings button. - WID_AIC_CLOSE = ::WID_AIC_CLOSE, ///< Close window button. - WID_AIC_TEXTFILE = ::WID_AIC_TEXTFILE, ///< Open AI readme, changelog (+1) or license (+2). - WID_AIC_CONTENT_DOWNLOAD = ::WID_AIC_CONTENT_DOWNLOAD, ///< Download content button. - }; - - /** Widgets of the #AIDebugWindow class. */ - enum AIDebugWidgets { - WID_AID_VIEW = ::WID_AID_VIEW, ///< The row of company buttons. - WID_AID_NAME_TEXT = ::WID_AID_NAME_TEXT, ///< Name of the current selected. - WID_AID_SETTINGS = ::WID_AID_SETTINGS, ///< Settings button. - WID_AID_SCRIPT_GAME = ::WID_AID_SCRIPT_GAME, ///< Game Script button. - WID_AID_RELOAD_TOGGLE = ::WID_AID_RELOAD_TOGGLE, ///< Reload button. - WID_AID_LOG_PANEL = ::WID_AID_LOG_PANEL, ///< Panel where the log is in. - WID_AID_SCROLLBAR = ::WID_AID_SCROLLBAR, ///< Scrollbar of the log panel. - WID_AID_COMPANY_BUTTON_START = ::WID_AID_COMPANY_BUTTON_START, ///< Buttons in the VIEW. - WID_AID_COMPANY_BUTTON_END = ::WID_AID_COMPANY_BUTTON_END, ///< Last possible button in the VIEW. - WID_AID_BREAK_STRING_WIDGETS = ::WID_AID_BREAK_STRING_WIDGETS, ///< The panel to handle the breaking on string. - WID_AID_BREAK_STR_ON_OFF_BTN = ::WID_AID_BREAK_STR_ON_OFF_BTN, ///< Enable breaking on string. - WID_AID_BREAK_STR_EDIT_BOX = ::WID_AID_BREAK_STR_EDIT_BOX, ///< Edit box for the string to break on. - WID_AID_MATCH_CASE_BTN = ::WID_AID_MATCH_CASE_BTN, ///< Checkbox to use match caching or not. - WID_AID_CONTINUE_BTN = ::WID_AID_CONTINUE_BTN, ///< Continue button. - }; - - /* automatically generated from ../../widgets/airport_widget.h */ - /** Widgets of the #BuildAirToolbarWindow class. */ - enum AirportToolbarWidgets { - WID_AT_AIRPORT = ::WID_AT_AIRPORT, ///< Build airport button. - WID_AT_DEMOLISH = ::WID_AT_DEMOLISH, ///< Demolish button. - }; - - /** Widgets of the #BuildAirportWindow class. */ - enum AirportPickerWidgets { - WID_AP_CLASS_DROPDOWN = ::WID_AP_CLASS_DROPDOWN, ///< Dropdown of airport classes. - WID_AP_AIRPORT_LIST = ::WID_AP_AIRPORT_LIST, ///< List of airports. - WID_AP_SCROLLBAR = ::WID_AP_SCROLLBAR, ///< Scrollbar of the list. - WID_AP_LAYOUT_NUM = ::WID_AP_LAYOUT_NUM, ///< Current number of the layout. - WID_AP_LAYOUT_DECREASE = ::WID_AP_LAYOUT_DECREASE, ///< Decrease the layout number. - WID_AP_LAYOUT_INCREASE = ::WID_AP_LAYOUT_INCREASE, ///< Increase the layout number. - WID_AP_AIRPORT_SPRITE = ::WID_AP_AIRPORT_SPRITE, ///< A visual display of the airport currently selected. - WID_AP_EXTRA_TEXT = ::WID_AP_EXTRA_TEXT, ///< Additional text about the airport. - WID_AP_BOTTOMPANEL = ::WID_AP_BOTTOMPANEL, ///< Panel at the bottom. - WID_AP_COVERAGE_LABEL = ::WID_AP_COVERAGE_LABEL, ///< Label if you want to see the coverage. - WID_AP_BTN_DONTHILIGHT = ::WID_AP_BTN_DONTHILIGHT, ///< Don't show the coverage button. - WID_AP_BTN_DOHILIGHT = ::WID_AP_BTN_DOHILIGHT, ///< Show the coverage button. - }; - - /* automatically generated from ../../widgets/autoreplace_widget.h */ - /** Widgets of the #ReplaceVehicleWindow class. */ - enum ReplaceVehicleWidgets { - WID_RV_CAPTION = ::WID_RV_CAPTION, ///< Caption of the window. - - /* Sort dropdown at the right. */ - WID_RV_SORT_ASCENDING_DESCENDING = ::WID_RV_SORT_ASCENDING_DESCENDING, ///< Ascending/descending sort order button. - WID_RV_SHOW_HIDDEN_ENGINES = ::WID_RV_SHOW_HIDDEN_ENGINES, ///< Toggle whether to display the hidden vehicles. - WID_RV_SORT_DROPDOWN = ::WID_RV_SORT_DROPDOWN, ///< Dropdown for the sort criteria. - - /* Left and right matrix + details. */ - WID_RV_LEFT_MATRIX = ::WID_RV_LEFT_MATRIX, ///< The matrix on the left. - WID_RV_LEFT_SCROLLBAR = ::WID_RV_LEFT_SCROLLBAR, ///< The scrollbar for the matrix on the left. - WID_RV_RIGHT_MATRIX = ::WID_RV_RIGHT_MATRIX, ///< The matrix on the right. - WID_RV_RIGHT_SCROLLBAR = ::WID_RV_RIGHT_SCROLLBAR, ///< The scrollbar for the matrix on the right. - WID_RV_LEFT_DETAILS = ::WID_RV_LEFT_DETAILS, ///< Details of the entry on the left. - WID_RV_RIGHT_DETAILS = ::WID_RV_RIGHT_DETAILS, ///< Details of the entry on the right. - - /* Button row. */ - WID_RV_START_REPLACE = ::WID_RV_START_REPLACE, ///< Start Replacing button. - WID_RV_INFO_TAB = ::WID_RV_INFO_TAB, ///< Info tab. - WID_RV_STOP_REPLACE = ::WID_RV_STOP_REPLACE, ///< Stop Replacing button. - - /* Train/road only widgets */ - WID_RV_RAIL_ROAD_TYPE_DROPDOWN = ::WID_RV_RAIL_ROAD_TYPE_DROPDOWN, ///< Dropdown menu about the rail/roadtype. - - /* Train only widgets. */ - WID_RV_TRAIN_ENGINEWAGON_DROPDOWN = ::WID_RV_TRAIN_ENGINEWAGON_DROPDOWN, ///< Dropdown to select engines and/or wagons. - WID_RV_TRAIN_WAGONREMOVE_TOGGLE = ::WID_RV_TRAIN_WAGONREMOVE_TOGGLE, ///< Button to toggle removing wagons. - }; - - /* automatically generated from ../../widgets/bootstrap_widget.h */ - /** Widgets of the #BootstrapBackground class. */ - enum BootstrapBackgroundWidgets { - WID_BB_BACKGROUND = ::WID_BB_BACKGROUND, ///< Background of the window. - }; - - /** Widgets of the #BootstrapContentDownloadStatusWindow class. */ - enum BootstrapAskForDownloadWidgets { - WID_BAFD_QUESTION = ::WID_BAFD_QUESTION, ///< The question whether to download. - WID_BAFD_YES = ::WID_BAFD_YES, ///< An affirmative answer to the question. - WID_BAFD_NO = ::WID_BAFD_NO, ///< An negative answer to the question. - }; - - /* automatically generated from ../../widgets/bridge_widget.h */ - /** Widgets of the #BuildBridgeWindow class. */ - enum BuildBridgeSelectionWidgets { - WID_BBS_CAPTION = ::WID_BBS_CAPTION, ///< Caption of the window. - WID_BBS_DROPDOWN_ORDER = ::WID_BBS_DROPDOWN_ORDER, ///< Direction of sort dropdown. - WID_BBS_DROPDOWN_CRITERIA = ::WID_BBS_DROPDOWN_CRITERIA, ///< Criteria of sort dropdown. - WID_BBS_BRIDGE_LIST = ::WID_BBS_BRIDGE_LIST, ///< List of bridges. - WID_BBS_SCROLLBAR = ::WID_BBS_SCROLLBAR, ///< Scrollbar of the list. - }; - - /* automatically generated from ../../widgets/build_vehicle_widget.h */ - /** Widgets of the #BuildVehicleWindow class. */ - enum BuildVehicleWidgets { - WID_BV_CAPTION = ::WID_BV_CAPTION, ///< Caption of window. - WID_BV_SORT_ASCENDING_DESCENDING = ::WID_BV_SORT_ASCENDING_DESCENDING, ///< Sort direction. - WID_BV_SORT_DROPDOWN = ::WID_BV_SORT_DROPDOWN, ///< Criteria of sorting dropdown. - WID_BV_CARGO_FILTER_DROPDOWN = ::WID_BV_CARGO_FILTER_DROPDOWN, ///< Cargo filter dropdown. - WID_BV_SHOW_HIDDEN_ENGINES = ::WID_BV_SHOW_HIDDEN_ENGINES, ///< Toggle whether to display the hidden vehicles. - WID_BV_LIST = ::WID_BV_LIST, ///< List of vehicles. - WID_BV_SCROLLBAR = ::WID_BV_SCROLLBAR, ///< Scrollbar of list. - WID_BV_PANEL = ::WID_BV_PANEL, ///< Button panel. - WID_BV_BUILD = ::WID_BV_BUILD, ///< Build panel. - WID_BV_SHOW_HIDE = ::WID_BV_SHOW_HIDE, ///< Button to hide or show the selected engine. - WID_BV_BUILD_SEL = ::WID_BV_BUILD_SEL, ///< Build button. - WID_BV_RENAME = ::WID_BV_RENAME, ///< Rename button. - }; - - /* automatically generated from ../../widgets/cheat_widget.h */ - /** Widgets of the #CheatWindow class. */ - enum CheatWidgets { - WID_C_PANEL = ::WID_C_PANEL, ///< Panel where all cheats are shown in. - }; - - /* automatically generated from ../../widgets/company_widget.h */ - /** Widgets of the #CompanyWindow class. */ - enum CompanyWidgets { - WID_C_CAPTION = ::WID_C_CAPTION, ///< Caption of the window. - - WID_C_FACE = ::WID_C_FACE, ///< View of the face. - WID_C_FACE_TITLE = ::WID_C_FACE_TITLE, ///< Title for the face. - - WID_C_DESC_INAUGURATION = ::WID_C_DESC_INAUGURATION, ///< Inauguration. - WID_C_DESC_COLOUR_SCHEME = ::WID_C_DESC_COLOUR_SCHEME, ///< Colour scheme. - WID_C_DESC_COLOUR_SCHEME_EXAMPLE = ::WID_C_DESC_COLOUR_SCHEME_EXAMPLE, ///< Colour scheme example. - WID_C_DESC_VEHICLE = ::WID_C_DESC_VEHICLE, ///< Vehicles. - WID_C_DESC_VEHICLE_COUNTS = ::WID_C_DESC_VEHICLE_COUNTS, ///< Vehicle count. - WID_C_DESC_COMPANY_VALUE = ::WID_C_DESC_COMPANY_VALUE, ///< Company value. - WID_C_DESC_INFRASTRUCTURE = ::WID_C_DESC_INFRASTRUCTURE, ///< Infrastructure. - WID_C_DESC_INFRASTRUCTURE_COUNTS = ::WID_C_DESC_INFRASTRUCTURE_COUNTS, ///< Infrastructure count. - - WID_C_SELECT_DESC_OWNERS = ::WID_C_SELECT_DESC_OWNERS, ///< Owners. - WID_C_DESC_OWNERS = ::WID_C_DESC_OWNERS, ///< Owner in Owners. - - WID_C_SELECT_BUTTONS = ::WID_C_SELECT_BUTTONS, ///< Selection widget for the button bar. - WID_C_NEW_FACE = ::WID_C_NEW_FACE, ///< Button to make new face. - WID_C_COLOUR_SCHEME = ::WID_C_COLOUR_SCHEME, ///< Button to change colour scheme. - WID_C_PRESIDENT_NAME = ::WID_C_PRESIDENT_NAME, ///< Button to change president name. - WID_C_COMPANY_NAME = ::WID_C_COMPANY_NAME, ///< Button to change company name. - WID_C_BUY_SHARE = ::WID_C_BUY_SHARE, ///< Button to buy a share. - WID_C_SELL_SHARE = ::WID_C_SELL_SHARE, ///< Button to sell a share. - - WID_C_SELECT_VIEW_BUILD_HQ = ::WID_C_SELECT_VIEW_BUILD_HQ, ///< Panel about HQ. - WID_C_VIEW_HQ = ::WID_C_VIEW_HQ, ///< Button to view the HQ. - WID_C_BUILD_HQ = ::WID_C_BUILD_HQ, ///< Button to build the HQ. - - WID_C_SELECT_RELOCATE = ::WID_C_SELECT_RELOCATE, ///< Panel about 'Relocate HQ'. - WID_C_RELOCATE_HQ = ::WID_C_RELOCATE_HQ, ///< Button to relocate the HQ. - - WID_C_VIEW_INFRASTRUCTURE = ::WID_C_VIEW_INFRASTRUCTURE, ///< Panel about infrastructure. - - WID_C_HAS_PASSWORD = ::WID_C_HAS_PASSWORD, ///< Has company password lock. - WID_C_SELECT_MULTIPLAYER = ::WID_C_SELECT_MULTIPLAYER, ///< Multiplayer selection panel. - WID_C_COMPANY_PASSWORD = ::WID_C_COMPANY_PASSWORD, ///< Button to set company password. - WID_C_COMPANY_JOIN = ::WID_C_COMPANY_JOIN, ///< Button to join company. - }; - - /** Widgets of the #CompanyFinancesWindow class. */ - enum CompanyFinancesWidgets { - WID_CF_CAPTION = ::WID_CF_CAPTION, ///< Caption of the window. - WID_CF_TOGGLE_SIZE = ::WID_CF_TOGGLE_SIZE, ///< Toggle windows size. - WID_CF_SEL_PANEL = ::WID_CF_SEL_PANEL, ///< Select panel or nothing. - WID_CF_EXPS_CATEGORY = ::WID_CF_EXPS_CATEGORY, ///< Column for expenses category strings. - WID_CF_EXPS_PRICE1 = ::WID_CF_EXPS_PRICE1, ///< Column for year Y-2 expenses. - WID_CF_EXPS_PRICE2 = ::WID_CF_EXPS_PRICE2, ///< Column for year Y-1 expenses. - WID_CF_EXPS_PRICE3 = ::WID_CF_EXPS_PRICE3, ///< Column for year Y expenses. - WID_CF_TOTAL_PANEL = ::WID_CF_TOTAL_PANEL, ///< Panel for totals. - WID_CF_SEL_MAXLOAN = ::WID_CF_SEL_MAXLOAN, ///< Selection of maxloan column. - WID_CF_BALANCE_VALUE = ::WID_CF_BALANCE_VALUE, ///< Bank balance value. - WID_CF_LOAN_VALUE = ::WID_CF_LOAN_VALUE, ///< Loan. - WID_CF_LOAN_LINE = ::WID_CF_LOAN_LINE, ///< Line for summing bank balance and loan. - WID_CF_TOTAL_VALUE = ::WID_CF_TOTAL_VALUE, ///< Total. - WID_CF_MAXLOAN_GAP = ::WID_CF_MAXLOAN_GAP, ///< Gap above max loan widget. - WID_CF_MAXLOAN_VALUE = ::WID_CF_MAXLOAN_VALUE, ///< Max loan widget. - WID_CF_SEL_BUTTONS = ::WID_CF_SEL_BUTTONS, ///< Selection of buttons. - WID_CF_INCREASE_LOAN = ::WID_CF_INCREASE_LOAN, ///< Increase loan. - WID_CF_REPAY_LOAN = ::WID_CF_REPAY_LOAN, ///< Decrease loan.. - WID_CF_INFRASTRUCTURE = ::WID_CF_INFRASTRUCTURE, ///< View company infrastructure. - }; - - /** Widgets of the #SelectCompanyLiveryWindow class. */ - enum SelectCompanyLiveryWidgets { - WID_SCL_CAPTION = ::WID_SCL_CAPTION, ///< Caption of window. - WID_SCL_CLASS_GENERAL = ::WID_SCL_CLASS_GENERAL, ///< Class general. - WID_SCL_CLASS_RAIL = ::WID_SCL_CLASS_RAIL, ///< Class rail. - WID_SCL_CLASS_ROAD = ::WID_SCL_CLASS_ROAD, ///< Class road. - WID_SCL_CLASS_SHIP = ::WID_SCL_CLASS_SHIP, ///< Class ship. - WID_SCL_CLASS_AIRCRAFT = ::WID_SCL_CLASS_AIRCRAFT, ///< Class aircraft. - WID_SCL_GROUPS_RAIL = ::WID_SCL_GROUPS_RAIL, ///< Rail groups. - WID_SCL_GROUPS_ROAD = ::WID_SCL_GROUPS_ROAD, ///< Road groups. - WID_SCL_GROUPS_SHIP = ::WID_SCL_GROUPS_SHIP, ///< Ship groups. - WID_SCL_GROUPS_AIRCRAFT = ::WID_SCL_GROUPS_AIRCRAFT, ///< Aircraft groups. - WID_SCL_SPACER_DROPDOWN = ::WID_SCL_SPACER_DROPDOWN, ///< Spacer for dropdown. - WID_SCL_PRI_COL_DROPDOWN = ::WID_SCL_PRI_COL_DROPDOWN, ///< Dropdown for primary colour. - WID_SCL_SEC_COL_DROPDOWN = ::WID_SCL_SEC_COL_DROPDOWN, ///< Dropdown for secondary colour. - WID_SCL_MATRIX = ::WID_SCL_MATRIX, ///< Matrix. - WID_SCL_MATRIX_SCROLLBAR = ::WID_SCL_MATRIX_SCROLLBAR, ///< Matrix scrollbar. - }; - - /** - * Widgets of the #SelectCompanyManagerFaceWindow class. - * Do not change the order of the widgets from WID_SCMF_HAS_MOUSTACHE_EARRING to WID_SCMF_GLASSES_R, - * this order is needed for the WE_CLICK event of DrawFaceStringLabel(). - */ - enum SelectCompanyManagerFaceWidgets { - WID_SCMF_CAPTION = ::WID_SCMF_CAPTION, ///< Caption of window. - WID_SCMF_TOGGLE_LARGE_SMALL = ::WID_SCMF_TOGGLE_LARGE_SMALL, ///< Toggle for large or small. - WID_SCMF_SELECT_FACE = ::WID_SCMF_SELECT_FACE, ///< Select face. - WID_SCMF_CANCEL = ::WID_SCMF_CANCEL, ///< Cancel. - WID_SCMF_ACCEPT = ::WID_SCMF_ACCEPT, ///< Accept. - WID_SCMF_MALE = ::WID_SCMF_MALE, ///< Male button in the simple view. - WID_SCMF_FEMALE = ::WID_SCMF_FEMALE, ///< Female button in the simple view. - WID_SCMF_MALE2 = ::WID_SCMF_MALE2, ///< Male button in the advanced view. - WID_SCMF_FEMALE2 = ::WID_SCMF_FEMALE2, ///< Female button in the advanced view. - WID_SCMF_SEL_LOADSAVE = ::WID_SCMF_SEL_LOADSAVE, ///< Selection to display the load/save/number buttons in the advanced view. - WID_SCMF_SEL_MALEFEMALE = ::WID_SCMF_SEL_MALEFEMALE, ///< Selection to display the male/female buttons in the simple view. - WID_SCMF_SEL_PARTS = ::WID_SCMF_SEL_PARTS, ///< Selection to display the buttons for setting each part of the face in the advanced view. - WID_SCMF_RANDOM_NEW_FACE = ::WID_SCMF_RANDOM_NEW_FACE, ///< Create random new face. - WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON = ::WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON, ///< Toggle for large or small. - WID_SCMF_FACE = ::WID_SCMF_FACE, ///< Current face. - WID_SCMF_LOAD = ::WID_SCMF_LOAD, ///< Load face. - WID_SCMF_FACECODE = ::WID_SCMF_FACECODE, ///< Get the face code. - WID_SCMF_SAVE = ::WID_SCMF_SAVE, ///< Save face. - WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT = ::WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT, ///< Text about moustache and earring. - WID_SCMF_TIE_EARRING_TEXT = ::WID_SCMF_TIE_EARRING_TEXT, ///< Text about tie and earring. - WID_SCMF_LIPS_MOUSTACHE_TEXT = ::WID_SCMF_LIPS_MOUSTACHE_TEXT, ///< Text about lips and moustache. - WID_SCMF_HAS_GLASSES_TEXT = ::WID_SCMF_HAS_GLASSES_TEXT, ///< Text about glasses. - WID_SCMF_HAIR_TEXT = ::WID_SCMF_HAIR_TEXT, ///< Text about hair. - WID_SCMF_EYEBROWS_TEXT = ::WID_SCMF_EYEBROWS_TEXT, ///< Text about eyebrows. - WID_SCMF_EYECOLOUR_TEXT = ::WID_SCMF_EYECOLOUR_TEXT, ///< Text about eyecolour. - WID_SCMF_GLASSES_TEXT = ::WID_SCMF_GLASSES_TEXT, ///< Text about glasses. - WID_SCMF_NOSE_TEXT = ::WID_SCMF_NOSE_TEXT, ///< Text about nose. - WID_SCMF_CHIN_TEXT = ::WID_SCMF_CHIN_TEXT, ///< Text about chin. - WID_SCMF_JACKET_TEXT = ::WID_SCMF_JACKET_TEXT, ///< Text about jacket. - WID_SCMF_COLLAR_TEXT = ::WID_SCMF_COLLAR_TEXT, ///< Text about collar. - WID_SCMF_ETHNICITY_EUR = ::WID_SCMF_ETHNICITY_EUR, ///< Text about ethnicity european. - WID_SCMF_ETHNICITY_AFR = ::WID_SCMF_ETHNICITY_AFR, ///< Text about ethnicity african. - WID_SCMF_HAS_MOUSTACHE_EARRING = ::WID_SCMF_HAS_MOUSTACHE_EARRING, ///< Has moustache or earring. - WID_SCMF_HAS_GLASSES = ::WID_SCMF_HAS_GLASSES, ///< Has glasses. - WID_SCMF_EYECOLOUR_L = ::WID_SCMF_EYECOLOUR_L, ///< Eyecolour left. - WID_SCMF_EYECOLOUR = ::WID_SCMF_EYECOLOUR, ///< Eyecolour. - WID_SCMF_EYECOLOUR_R = ::WID_SCMF_EYECOLOUR_R, ///< Eyecolour right. - WID_SCMF_CHIN_L = ::WID_SCMF_CHIN_L, ///< Chin left. - WID_SCMF_CHIN = ::WID_SCMF_CHIN, ///< Chin. - WID_SCMF_CHIN_R = ::WID_SCMF_CHIN_R, ///< Chin right. - WID_SCMF_EYEBROWS_L = ::WID_SCMF_EYEBROWS_L, ///< Eyebrows left. - WID_SCMF_EYEBROWS = ::WID_SCMF_EYEBROWS, ///< Eyebrows. - WID_SCMF_EYEBROWS_R = ::WID_SCMF_EYEBROWS_R, ///< Eyebrows right. - WID_SCMF_LIPS_MOUSTACHE_L = ::WID_SCMF_LIPS_MOUSTACHE_L, ///< Lips / Moustache left. - WID_SCMF_LIPS_MOUSTACHE = ::WID_SCMF_LIPS_MOUSTACHE, ///< Lips / Moustache. - WID_SCMF_LIPS_MOUSTACHE_R = ::WID_SCMF_LIPS_MOUSTACHE_R, ///< Lips / Moustache right. - WID_SCMF_NOSE_L = ::WID_SCMF_NOSE_L, ///< Nose left. - WID_SCMF_NOSE = ::WID_SCMF_NOSE, ///< Nose. - WID_SCMF_NOSE_R = ::WID_SCMF_NOSE_R, ///< Nose right. - WID_SCMF_HAIR_L = ::WID_SCMF_HAIR_L, ///< Hair left. - WID_SCMF_HAIR = ::WID_SCMF_HAIR, ///< Hair. - WID_SCMF_HAIR_R = ::WID_SCMF_HAIR_R, ///< Hair right. - WID_SCMF_JACKET_L = ::WID_SCMF_JACKET_L, ///< Jacket left. - WID_SCMF_JACKET = ::WID_SCMF_JACKET, ///< Jacket. - WID_SCMF_JACKET_R = ::WID_SCMF_JACKET_R, ///< Jacket right. - WID_SCMF_COLLAR_L = ::WID_SCMF_COLLAR_L, ///< Collar left. - WID_SCMF_COLLAR = ::WID_SCMF_COLLAR, ///< Collar. - WID_SCMF_COLLAR_R = ::WID_SCMF_COLLAR_R, ///< Collar right. - WID_SCMF_TIE_EARRING_L = ::WID_SCMF_TIE_EARRING_L, ///< Tie / Earring left. - WID_SCMF_TIE_EARRING = ::WID_SCMF_TIE_EARRING, ///< Tie / Earring. - WID_SCMF_TIE_EARRING_R = ::WID_SCMF_TIE_EARRING_R, ///< Tie / Earring right. - WID_SCMF_GLASSES_L = ::WID_SCMF_GLASSES_L, ///< Glasses left. - WID_SCMF_GLASSES = ::WID_SCMF_GLASSES, ///< Glasses. - WID_SCMF_GLASSES_R = ::WID_SCMF_GLASSES_R, ///< Glasses right. - }; - - /** Widgets of the #CompanyInfrastructureWindow class. */ - enum CompanyInfrastructureWidgets { - WID_CI_CAPTION = ::WID_CI_CAPTION, ///< Caption of window. - WID_CI_RAIL_DESC = ::WID_CI_RAIL_DESC, ///< Description of rail. - WID_CI_RAIL_COUNT = ::WID_CI_RAIL_COUNT, ///< Count of rail. - WID_CI_ROAD_DESC = ::WID_CI_ROAD_DESC, ///< Description of road. - WID_CI_ROAD_COUNT = ::WID_CI_ROAD_COUNT, ///< Count of road. - WID_CI_TRAM_DESC = ::WID_CI_TRAM_DESC, ///< Description of tram. - WID_CI_TRAM_COUNT = ::WID_CI_TRAM_COUNT, ///< Count of tram. - WID_CI_WATER_DESC = ::WID_CI_WATER_DESC, ///< Description of water. - WID_CI_WATER_COUNT = ::WID_CI_WATER_COUNT, ///< Count of water. - WID_CI_STATION_DESC = ::WID_CI_STATION_DESC, ///< Description of station. - WID_CI_STATION_COUNT = ::WID_CI_STATION_COUNT, ///< Count of station. - WID_CI_TOTAL_DESC = ::WID_CI_TOTAL_DESC, ///< Description of total. - WID_CI_TOTAL = ::WID_CI_TOTAL, ///< Count of total. - }; - - /** Widgets of the #BuyCompanyWindow class. */ - enum BuyCompanyWidgets { - WID_BC_CAPTION = ::WID_BC_CAPTION, ///< Caption of window. - WID_BC_FACE = ::WID_BC_FACE, ///< Face button. - WID_BC_QUESTION = ::WID_BC_QUESTION, ///< Question text. - WID_BC_NO = ::WID_BC_NO, ///< No button. - WID_BC_YES = ::WID_BC_YES, ///< Yes button. - }; - - /* automatically generated from ../../widgets/console_widget.h */ - /** Widgets of the #IConsoleWindow class. */ - enum ConsoleWidgets { - WID_C_BACKGROUND = ::WID_C_BACKGROUND, ///< Background of the console. - }; - - /* automatically generated from ../../widgets/date_widget.h */ - /** Widgets of the #SetDateWindow class. */ - enum SetDateWidgets { - WID_SD_DAY = ::WID_SD_DAY, ///< Dropdown for the day. - WID_SD_MONTH = ::WID_SD_MONTH, ///< Dropdown for the month. - WID_SD_YEAR = ::WID_SD_YEAR, ///< Dropdown for the year. - WID_SD_SET_DATE = ::WID_SD_SET_DATE, ///< Actually set the date. - }; - - /* automatically generated from ../../widgets/depot_widget.h */ - /** Widgets of the #DepotWindow class. */ - enum DepotWidgets { - WID_D_CAPTION = ::WID_D_CAPTION, ///< Caption of window. - WID_D_SELL = ::WID_D_SELL, ///< Sell button. - WID_D_SHOW_SELL_CHAIN = ::WID_D_SHOW_SELL_CHAIN, ///< Show sell chain panel. - WID_D_SELL_CHAIN = ::WID_D_SELL_CHAIN, ///< Sell chain button. - WID_D_SELL_ALL = ::WID_D_SELL_ALL, ///< Sell all button. - WID_D_AUTOREPLACE = ::WID_D_AUTOREPLACE, ///< Autoreplace button. - WID_D_MATRIX = ::WID_D_MATRIX, ///< Matrix of vehicles. - WID_D_V_SCROLL = ::WID_D_V_SCROLL, ///< Vertical scrollbar. - WID_D_SHOW_H_SCROLL = ::WID_D_SHOW_H_SCROLL, ///< Show horizontal scrollbar panel. - WID_D_H_SCROLL = ::WID_D_H_SCROLL, ///< Horizontal scrollbar. - WID_D_BUILD = ::WID_D_BUILD, ///< Build button. - WID_D_CLONE = ::WID_D_CLONE, ///< Clone button. - WID_D_LOCATION = ::WID_D_LOCATION, ///< Location button. - WID_D_SHOW_RENAME = ::WID_D_SHOW_RENAME, ///< Show rename panel. - WID_D_RENAME = ::WID_D_RENAME, ///< Rename button. - WID_D_VEHICLE_LIST = ::WID_D_VEHICLE_LIST, ///< List of vehicles. - WID_D_STOP_ALL = ::WID_D_STOP_ALL, ///< Stop all button. - WID_D_START_ALL = ::WID_D_START_ALL, ///< Start all button. - }; - - /* automatically generated from ../../widgets/dock_widget.h */ - /** Widgets of the #BuildDocksDepotWindow class. */ - enum BuildDockDepotWidgets { - WID_BDD_BACKGROUND = ::WID_BDD_BACKGROUND, ///< Background of the window. - WID_BDD_X = ::WID_BDD_X, ///< X-direction button. - WID_BDD_Y = ::WID_BDD_Y, ///< Y-direction button. - }; - - /** Widgets of the #BuildDocksToolbarWindow class. */ - enum DockToolbarWidgets { - WID_DT_CANAL = ::WID_DT_CANAL, ///< Build canal button. - WID_DT_LOCK = ::WID_DT_LOCK, ///< Build lock button. - WID_DT_DEMOLISH = ::WID_DT_DEMOLISH, ///< Demolish aka dynamite button. - WID_DT_DEPOT = ::WID_DT_DEPOT, ///< Build depot button. - WID_DT_STATION = ::WID_DT_STATION, ///< Build station button. - WID_DT_BUOY = ::WID_DT_BUOY, ///< Build buoy button. - WID_DT_RIVER = ::WID_DT_RIVER, ///< Build river button (in scenario editor). - WID_DT_BUILD_AQUEDUCT = ::WID_DT_BUILD_AQUEDUCT, ///< Build aqueduct button. - - WID_DT_INVALID = ::WID_DT_INVALID, ///< Used to initialize a variable. - }; - - /* automatically generated from ../../widgets/dropdown_widget.h */ - /** Widgets of the #DropdownWindow class. */ - enum DropdownMenuWidgets { - WID_DM_ITEMS = ::WID_DM_ITEMS, ///< Panel showing the dropdown items. - WID_DM_SHOW_SCROLL = ::WID_DM_SHOW_SCROLL, ///< Hide scrollbar if too few items. - WID_DM_SCROLL = ::WID_DM_SCROLL, ///< Scrollbar. - }; - - /* automatically generated from ../../widgets/engine_widget.h */ - /** Widgets of the #EnginePreviewWindow class. */ - enum EnginePreviewWidgets { - WID_EP_QUESTION = ::WID_EP_QUESTION, ///< The container for the question. - WID_EP_NO = ::WID_EP_NO, ///< No button. - WID_EP_YES = ::WID_EP_YES, ///< Yes button. - }; - - /* automatically generated from ../../widgets/error_widget.h */ - /** Widgets of the #ErrmsgWindow class. */ - enum ErrorMessageWidgets { - WID_EM_CAPTION = ::WID_EM_CAPTION, ///< Caption of the window. - WID_EM_FACE = ::WID_EM_FACE, ///< Error title. - WID_EM_MESSAGE = ::WID_EM_MESSAGE, ///< Error message. - }; - - /* automatically generated from ../../widgets/fios_widget.h */ - /** Widgets of the #SaveLoadWindow class. */ - enum SaveLoadWidgets { - WID_SL_CAPTION = ::WID_SL_CAPTION, ///< Caption of the window. - WID_SL_SORT_BYNAME = ::WID_SL_SORT_BYNAME, ///< Sort by name button. - WID_SL_SORT_BYDATE = ::WID_SL_SORT_BYDATE, ///< Sort by date button. - WID_SL_FILTER = ::WID_SL_FILTER, ///< Filter list of files - WID_SL_BACKGROUND = ::WID_SL_BACKGROUND, ///< Background of window. - WID_SL_FILE_BACKGROUND = ::WID_SL_FILE_BACKGROUND, ///< Background of file selection. - WID_SL_HOME_BUTTON = ::WID_SL_HOME_BUTTON, ///< Home button. - WID_SL_DRIVES_DIRECTORIES_LIST = ::WID_SL_DRIVES_DIRECTORIES_LIST, ///< Drives list. - WID_SL_SCROLLBAR = ::WID_SL_SCROLLBAR, ///< Scrollbar of the file list. - WID_SL_CONTENT_DOWNLOAD = ::WID_SL_CONTENT_DOWNLOAD, ///< Content download button, only available for play scenario/heightmap. - WID_SL_SAVE_OSK_TITLE = ::WID_SL_SAVE_OSK_TITLE, ///< Title textbox, only available for save operations. - WID_SL_DELETE_SELECTION = ::WID_SL_DELETE_SELECTION, ///< Delete button, only available for save operations. - WID_SL_SAVE_GAME = ::WID_SL_SAVE_GAME, ///< Save button, only available for save operations. - WID_SL_CONTENT_DOWNLOAD_SEL = ::WID_SL_CONTENT_DOWNLOAD_SEL, ///< Selection 'stack' to 'hide' the content download. - WID_SL_DETAILS = ::WID_SL_DETAILS, ///< Panel with game details. - WID_SL_NEWGRF_INFO = ::WID_SL_NEWGRF_INFO, ///< Button to open NewGgrf configuration. - WID_SL_LOAD_BUTTON = ::WID_SL_LOAD_BUTTON, ///< Button to load game/scenario. - WID_SL_MISSING_NEWGRFS = ::WID_SL_MISSING_NEWGRFS, ///< Button to find missing NewGRFs online. - }; - - /* automatically generated from ../../widgets/framerate_widget.h */ - /** Widgets of the #FramerateWindow class. */ - enum FramerateWindowWidgets { - WID_FRW_CAPTION = ::WID_FRW_CAPTION, - WID_FRW_RATE_GAMELOOP = ::WID_FRW_RATE_GAMELOOP, - WID_FRW_RATE_DRAWING = ::WID_FRW_RATE_DRAWING, - WID_FRW_RATE_FACTOR = ::WID_FRW_RATE_FACTOR, - WID_FRW_INFO_DATA_POINTS = ::WID_FRW_INFO_DATA_POINTS, - WID_FRW_TIMES_NAMES = ::WID_FRW_TIMES_NAMES, - WID_FRW_TIMES_CURRENT = ::WID_FRW_TIMES_CURRENT, - WID_FRW_TIMES_AVERAGE = ::WID_FRW_TIMES_AVERAGE, - WID_FRW_ALLOCSIZE = ::WID_FRW_ALLOCSIZE, - WID_FRW_SEL_MEMORY = ::WID_FRW_SEL_MEMORY, - WID_FRW_SCROLLBAR = ::WID_FRW_SCROLLBAR, - }; - - /** Widgets of the #FrametimeGraphWindow class. */ - enum FrametimeGraphWindowWidgets { - WID_FGW_CAPTION = ::WID_FGW_CAPTION, - WID_FGW_GRAPH = ::WID_FGW_GRAPH, - }; - - /* automatically generated from ../../widgets/genworld_widget.h */ - /** Widgets of the #GenerateLandscapeWindow class. */ - enum GenerateLandscapeWidgets { - WID_GL_TEMPERATE = ::WID_GL_TEMPERATE, ///< Button with icon "Temperate". - WID_GL_ARCTIC = ::WID_GL_ARCTIC, ///< Button with icon "Arctic". - WID_GL_TROPICAL = ::WID_GL_TROPICAL, ///< Button with icon "Tropical". - WID_GL_TOYLAND = ::WID_GL_TOYLAND, ///< Button with icon "Toyland". - - WID_GL_MAPSIZE_X_PULLDOWN = ::WID_GL_MAPSIZE_X_PULLDOWN, ///< Dropdown 'map X size'. - WID_GL_MAPSIZE_Y_PULLDOWN = ::WID_GL_MAPSIZE_Y_PULLDOWN, ///< Dropdown 'map Y size'. - - WID_GL_TOWN_PULLDOWN = ::WID_GL_TOWN_PULLDOWN, ///< Dropdown 'No. of towns'. - WID_GL_INDUSTRY_PULLDOWN = ::WID_GL_INDUSTRY_PULLDOWN, ///< Dropdown 'No. of industries'. - - WID_GL_GENERATE_BUTTON = ::WID_GL_GENERATE_BUTTON, ///< 'Generate' button. - - WID_GL_MAX_HEIGHTLEVEL_DOWN = ::WID_GL_MAX_HEIGHTLEVEL_DOWN, ///< Decrease max. heightlevel - WID_GL_MAX_HEIGHTLEVEL_TEXT = ::WID_GL_MAX_HEIGHTLEVEL_TEXT, ///< Max. heightlevel - WID_GL_MAX_HEIGHTLEVEL_UP = ::WID_GL_MAX_HEIGHTLEVEL_UP, ///< Increase max. heightlevel - - WID_GL_START_DATE_DOWN = ::WID_GL_START_DATE_DOWN, ///< Decrease start year. - WID_GL_START_DATE_TEXT = ::WID_GL_START_DATE_TEXT, ///< Start year. - WID_GL_START_DATE_UP = ::WID_GL_START_DATE_UP, ///< Increase start year. - - WID_GL_SNOW_LEVEL_DOWN = ::WID_GL_SNOW_LEVEL_DOWN, ///< Decrease snow level. - WID_GL_SNOW_LEVEL_TEXT = ::WID_GL_SNOW_LEVEL_TEXT, ///< Snow level. - WID_GL_SNOW_LEVEL_UP = ::WID_GL_SNOW_LEVEL_UP, ///< Increase snow level. - - WID_GL_TREE_PULLDOWN = ::WID_GL_TREE_PULLDOWN, ///< Dropdown 'Tree algorithm'. - WID_GL_LANDSCAPE_PULLDOWN = ::WID_GL_LANDSCAPE_PULLDOWN, ///< Dropdown 'Land generator'. - - WID_GL_HEIGHTMAP_NAME_TEXT = ::WID_GL_HEIGHTMAP_NAME_TEXT, ///< Heightmap name. - WID_GL_HEIGHTMAP_SIZE_TEXT = ::WID_GL_HEIGHTMAP_SIZE_TEXT, ///< Size of heightmap. - WID_GL_HEIGHTMAP_ROTATION_PULLDOWN = ::WID_GL_HEIGHTMAP_ROTATION_PULLDOWN, ///< Dropdown 'Heightmap rotation'. - - WID_GL_TERRAIN_PULLDOWN = ::WID_GL_TERRAIN_PULLDOWN, ///< Dropdown 'Terrain type'. - WID_GL_WATER_PULLDOWN = ::WID_GL_WATER_PULLDOWN, ///< Dropdown 'Sea level'. - WID_GL_RIVER_PULLDOWN = ::WID_GL_RIVER_PULLDOWN, ///< Dropdown 'Rivers'. - WID_GL_SMOOTHNESS_PULLDOWN = ::WID_GL_SMOOTHNESS_PULLDOWN, ///< Dropdown 'Smoothness'. - WID_GL_VARIETY_PULLDOWN = ::WID_GL_VARIETY_PULLDOWN, ///< Dropdown 'Variety distribution'. - - WID_GL_BORDERS_RANDOM = ::WID_GL_BORDERS_RANDOM, ///< 'Random'/'Manual' borders. - WID_GL_WATER_NW = ::WID_GL_WATER_NW, ///< NW 'Water'/'Freeform'. - WID_GL_WATER_NE = ::WID_GL_WATER_NE, ///< NE 'Water'/'Freeform'. - WID_GL_WATER_SE = ::WID_GL_WATER_SE, ///< SE 'Water'/'Freeform'. - WID_GL_WATER_SW = ::WID_GL_WATER_SW, ///< SW 'Water'/'Freeform'. - }; - - /** Widgets of the #CreateScenarioWindow class. */ - enum CreateScenarioWidgets { - WID_CS_TEMPERATE = ::WID_CS_TEMPERATE, ///< Select temperate landscape style. - WID_CS_ARCTIC = ::WID_CS_ARCTIC, ///< Select arctic landscape style. - WID_CS_TROPICAL = ::WID_CS_TROPICAL, ///< Select tropical landscape style. - WID_CS_TOYLAND = ::WID_CS_TOYLAND, ///< Select toy-land landscape style. - WID_CS_EMPTY_WORLD = ::WID_CS_EMPTY_WORLD, ///< Generate an empty flat world. - WID_CS_RANDOM_WORLD = ::WID_CS_RANDOM_WORLD, ///< Generate random land button - WID_CS_MAPSIZE_X_PULLDOWN = ::WID_CS_MAPSIZE_X_PULLDOWN, ///< Pull-down arrow for x map size. - WID_CS_MAPSIZE_Y_PULLDOWN = ::WID_CS_MAPSIZE_Y_PULLDOWN, ///< Pull-down arrow for y map size. - WID_CS_START_DATE_DOWN = ::WID_CS_START_DATE_DOWN, ///< Decrease start year (start earlier). - WID_CS_START_DATE_TEXT = ::WID_CS_START_DATE_TEXT, ///< Clickable start date value. - WID_CS_START_DATE_UP = ::WID_CS_START_DATE_UP, ///< Increase start year (start later). - WID_CS_FLAT_LAND_HEIGHT_DOWN = ::WID_CS_FLAT_LAND_HEIGHT_DOWN, ///< Decrease flat land height. - WID_CS_FLAT_LAND_HEIGHT_TEXT = ::WID_CS_FLAT_LAND_HEIGHT_TEXT, ///< Clickable flat land height value. - WID_CS_FLAT_LAND_HEIGHT_UP = ::WID_CS_FLAT_LAND_HEIGHT_UP, ///< Increase flat land height. - }; - - /** Widgets of the #GenerateProgressWindow class. */ - enum GenerationProgressWidgets { - WID_GP_PROGRESS_BAR = ::WID_GP_PROGRESS_BAR, ///< Progress bar. - WID_GP_PROGRESS_TEXT = ::WID_GP_PROGRESS_TEXT, ///< Text with the progress bar. - WID_GP_ABORT = ::WID_GP_ABORT, ///< Abort button. - }; - - /* automatically generated from ../../widgets/goal_widget.h */ - /** Widgets of the #GoalListWindow class. */ - enum GoalListWidgets { - WID_GOAL_CAPTION = ::WID_GOAL_CAPTION, ///< Caption of the window. - WID_GOAL_LIST = ::WID_GOAL_LIST, ///< Goal list. - WID_GOAL_SCROLLBAR = ::WID_GOAL_SCROLLBAR, ///< Scrollbar of the goal list. - }; - - /** Widgets of the #GoalQuestionWindow class. */ - enum GoalQuestionWidgets { - WID_GQ_CAPTION = ::WID_GQ_CAPTION, ///< Caption of the window. - WID_GQ_QUESTION = ::WID_GQ_QUESTION, ///< Question text. - WID_GQ_BUTTONS = ::WID_GQ_BUTTONS, ///< Buttons selection (between 1, 2 or 3). - WID_GQ_BUTTON_1 = ::WID_GQ_BUTTON_1, ///< First button. - WID_GQ_BUTTON_2 = ::WID_GQ_BUTTON_2, ///< Second button. - WID_GQ_BUTTON_3 = ::WID_GQ_BUTTON_3, ///< Third button. - }; - - /* automatically generated from ../../widgets/graph_widget.h */ - /** Widgets of the #GraphLegendWindow class. */ - enum GraphLegendWidgets { - WID_GL_BACKGROUND = ::WID_GL_BACKGROUND, ///< Background of the window. - - WID_GL_FIRST_COMPANY = ::WID_GL_FIRST_COMPANY, ///< First company in the legend. - WID_GL_LAST_COMPANY = ::WID_GL_LAST_COMPANY, ///< Last company in the legend. - }; - - /** Widgets of the #OperatingProfitGraphWindow class, #IncomeGraphWindow class, #DeliveredCargoGraphWindow class, and #CompanyValueGraphWindow class. */ - enum CompanyValueWidgets { - WID_CV_KEY_BUTTON = ::WID_CV_KEY_BUTTON, ///< Key button. - WID_CV_BACKGROUND = ::WID_CV_BACKGROUND, ///< Background of the window. - WID_CV_GRAPH = ::WID_CV_GRAPH, ///< Graph itself. - WID_CV_RESIZE = ::WID_CV_RESIZE, ///< Resize button. - }; - - /** Widget of the #PerformanceHistoryGraphWindow class. */ - enum PerformanceHistoryGraphWidgets { - WID_PHG_KEY = ::WID_PHG_KEY, ///< Key button. - WID_PHG_DETAILED_PERFORMANCE = ::WID_PHG_DETAILED_PERFORMANCE, ///< Detailed performance. - WID_PHG_BACKGROUND = ::WID_PHG_BACKGROUND, ///< Background of the window. - WID_PHG_GRAPH = ::WID_PHG_GRAPH, ///< Graph itself. - WID_PHG_RESIZE = ::WID_PHG_RESIZE, ///< Resize button. - }; - - /** Widget of the #PaymentRatesGraphWindow class. */ - enum CargoPaymentRatesWidgets { - WID_CPR_BACKGROUND = ::WID_CPR_BACKGROUND, ///< Background of the window. - WID_CPR_HEADER = ::WID_CPR_HEADER, ///< Header. - WID_CPR_GRAPH = ::WID_CPR_GRAPH, ///< Graph itself. - WID_CPR_RESIZE = ::WID_CPR_RESIZE, ///< Resize button. - WID_CPR_FOOTER = ::WID_CPR_FOOTER, ///< Footer. - WID_CPR_ENABLE_CARGOES = ::WID_CPR_ENABLE_CARGOES, ///< Enable cargoes button. - WID_CPR_DISABLE_CARGOES = ::WID_CPR_DISABLE_CARGOES, ///< Disable cargoes button. - WID_CPR_MATRIX = ::WID_CPR_MATRIX, ///< Cargo list. - WID_CPR_MATRIX_SCROLLBAR = ::WID_CPR_MATRIX_SCROLLBAR, ///< Cargo list scrollbar. - }; - - /** Widget of the #CompanyLeagueWindow class. */ - enum CompanyLeagueWidgets { - WID_CL_BACKGROUND = ::WID_CL_BACKGROUND, ///< Background of the window. - }; - - /** Widget of the #PerformanceRatingDetailWindow class. */ - enum PerformanceRatingDetailsWidgets { - WID_PRD_SCORE_FIRST = ::WID_PRD_SCORE_FIRST, ///< First entry in the score list. - WID_PRD_SCORE_LAST = ::WID_PRD_SCORE_LAST, ///< Last entry in the score list. - - WID_PRD_COMPANY_FIRST = ::WID_PRD_COMPANY_FIRST, ///< First company. - WID_PRD_COMPANY_LAST = ::WID_PRD_COMPANY_LAST, ///< Last company. - }; - - /* automatically generated from ../../widgets/group_widget.h */ - /** Widgets of the #VehicleGroupWindow class. */ - enum GroupListWidgets { - WID_GL_CAPTION = ::WID_GL_CAPTION, ///< Caption of the window. - WID_GL_SORT_BY_ORDER = ::WID_GL_SORT_BY_ORDER, ///< Sort order. - WID_GL_SORT_BY_DROPDOWN = ::WID_GL_SORT_BY_DROPDOWN, ///< Sort by dropdown list. - WID_GL_LIST_VEHICLE = ::WID_GL_LIST_VEHICLE, ///< List of the vehicles. - WID_GL_LIST_VEHICLE_SCROLLBAR = ::WID_GL_LIST_VEHICLE_SCROLLBAR, ///< Scrollbar for the list. - WID_GL_AVAILABLE_VEHICLES = ::WID_GL_AVAILABLE_VEHICLES, ///< Available vehicles. - WID_GL_MANAGE_VEHICLES_DROPDOWN = ::WID_GL_MANAGE_VEHICLES_DROPDOWN, ///< Manage vehicles dropdown list. - WID_GL_STOP_ALL = ::WID_GL_STOP_ALL, ///< Stop all button. - WID_GL_START_ALL = ::WID_GL_START_ALL, ///< Start all button. - - WID_GL_ALL_VEHICLES = ::WID_GL_ALL_VEHICLES, ///< All vehicles entry. - WID_GL_DEFAULT_VEHICLES = ::WID_GL_DEFAULT_VEHICLES, ///< Default vehicles entry. - WID_GL_LIST_GROUP = ::WID_GL_LIST_GROUP, ///< List of the groups. - WID_GL_LIST_GROUP_SCROLLBAR = ::WID_GL_LIST_GROUP_SCROLLBAR, ///< Scrollbar for the list. - WID_GL_CREATE_GROUP = ::WID_GL_CREATE_GROUP, ///< Create group button. - WID_GL_DELETE_GROUP = ::WID_GL_DELETE_GROUP, ///< Delete group button. - WID_GL_RENAME_GROUP = ::WID_GL_RENAME_GROUP, ///< Rename group button. - WID_GL_LIVERY_GROUP = ::WID_GL_LIVERY_GROUP, ///< Group livery button. - WID_GL_REPLACE_PROTECTION = ::WID_GL_REPLACE_PROTECTION, ///< Replace protection button. - WID_GL_INFO = ::WID_GL_INFO, ///< Group info. - }; - - /* automatically generated from ../../widgets/highscore_widget.h */ - /** Widgets of the #EndGameHighScoreBaseWindow class and #HighScoreWindow class. */ - enum HighscoreWidgets { - WID_H_BACKGROUND = ::WID_H_BACKGROUND, ///< Background of the window. - }; - - /* automatically generated from ../../widgets/industry_widget.h */ - /** Widgets of the #BuildIndustryWindow class. */ - enum DynamicPlaceIndustriesWidgets { - WID_DPI_MATRIX_WIDGET = ::WID_DPI_MATRIX_WIDGET, ///< Matrix of the industries. - WID_DPI_SCROLLBAR = ::WID_DPI_SCROLLBAR, ///< Scrollbar of the matrix. - WID_DPI_INFOPANEL = ::WID_DPI_INFOPANEL, ///< Info panel about the industry. - WID_DPI_DISPLAY_WIDGET = ::WID_DPI_DISPLAY_WIDGET, ///< Display chain button. - WID_DPI_FUND_WIDGET = ::WID_DPI_FUND_WIDGET, ///< Fund button. - }; - - /** Widgets of the #IndustryViewWindow class. */ - enum IndustryViewWidgets { - WID_IV_CAPTION = ::WID_IV_CAPTION, ///< Caption of the window. - WID_IV_VIEWPORT = ::WID_IV_VIEWPORT, ///< Viewport of the industry. - WID_IV_INFO = ::WID_IV_INFO, ///< Info of the industry. - WID_IV_GOTO = ::WID_IV_GOTO, ///< Goto button. - WID_IV_DISPLAY = ::WID_IV_DISPLAY, ///< Display chain button. - }; - - /** Widgets of the #IndustryDirectoryWindow class. */ - 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. - }; - - /** Widgets of the #IndustryCargoesWindow class */ - enum IndustryCargoesWidgets { - WID_IC_CAPTION = ::WID_IC_CAPTION, ///< Caption of the window. - WID_IC_NOTIFY = ::WID_IC_NOTIFY, ///< Row of buttons at the bottom. - WID_IC_PANEL = ::WID_IC_PANEL, ///< Panel that shows the chain. - WID_IC_SCROLLBAR = ::WID_IC_SCROLLBAR, ///< Scrollbar of the panel. - WID_IC_CARGO_DROPDOWN = ::WID_IC_CARGO_DROPDOWN, ///< Select cargo dropdown. - WID_IC_IND_DROPDOWN = ::WID_IC_IND_DROPDOWN, ///< Select industry dropdown. - }; - - /* automatically generated from ../../widgets/intro_widget.h */ - /** Widgets of the #SelectGameWindow class. */ - enum SelectGameIntroWidgets { - WID_SGI_GENERATE_GAME = ::WID_SGI_GENERATE_GAME, ///< Generate game button. - WID_SGI_LOAD_GAME = ::WID_SGI_LOAD_GAME, ///< Load game button. - WID_SGI_PLAY_SCENARIO = ::WID_SGI_PLAY_SCENARIO, ///< Play scenario button. - WID_SGI_PLAY_HEIGHTMAP = ::WID_SGI_PLAY_HEIGHTMAP, ///< Play heightmap button. - WID_SGI_EDIT_SCENARIO = ::WID_SGI_EDIT_SCENARIO, ///< Edit scenario button. - WID_SGI_PLAY_NETWORK = ::WID_SGI_PLAY_NETWORK, ///< Play network button. - WID_SGI_TEMPERATE_LANDSCAPE = ::WID_SGI_TEMPERATE_LANDSCAPE, ///< Select temperate landscape button. - WID_SGI_ARCTIC_LANDSCAPE = ::WID_SGI_ARCTIC_LANDSCAPE, ///< Select arctic landscape button. - WID_SGI_TROPIC_LANDSCAPE = ::WID_SGI_TROPIC_LANDSCAPE, ///< Select tropic landscape button. - WID_SGI_TOYLAND_LANDSCAPE = ::WID_SGI_TOYLAND_LANDSCAPE, ///< Select toyland landscape button. - WID_SGI_BASESET_SELECTION = ::WID_SGI_BASESET_SELECTION, ///< Baseset selection. - WID_SGI_BASESET = ::WID_SGI_BASESET, ///< Baseset errors. - WID_SGI_TRANSLATION_SELECTION = ::WID_SGI_TRANSLATION_SELECTION, ///< Translation selection. - WID_SGI_TRANSLATION = ::WID_SGI_TRANSLATION, ///< Translation errors. - WID_SGI_OPTIONS = ::WID_SGI_OPTIONS, ///< Options button. - WID_SGI_HIGHSCORE = ::WID_SGI_HIGHSCORE, ///< Highscore button. - WID_SGI_SETTINGS_OPTIONS = ::WID_SGI_SETTINGS_OPTIONS, ///< Settings button. - WID_SGI_GRF_SETTINGS = ::WID_SGI_GRF_SETTINGS, ///< NewGRF button. - WID_SGI_CONTENT_DOWNLOAD = ::WID_SGI_CONTENT_DOWNLOAD, ///< Content Download button. - WID_SGI_AI_SETTINGS = ::WID_SGI_AI_SETTINGS, ///< AI button. - WID_SGI_EXIT = ::WID_SGI_EXIT, ///< Exit button. - }; - - /* automatically generated from ../../widgets/link_graph_legend_widget.h */ - /** Widgets of the WC_LINKGRAPH_LEGEND. */ - enum LinkGraphLegendWidgets { - WID_LGL_CAPTION = ::WID_LGL_CAPTION, ///< Caption widget. - WID_LGL_SATURATION = ::WID_LGL_SATURATION, ///< Saturation legend. - WID_LGL_SATURATION_FIRST = ::WID_LGL_SATURATION_FIRST, - WID_LGL_SATURATION_LAST = ::WID_LGL_SATURATION_LAST, - WID_LGL_COMPANIES = ::WID_LGL_COMPANIES, ///< Company selection widget. - WID_LGL_COMPANY_FIRST = ::WID_LGL_COMPANY_FIRST, - WID_LGL_COMPANY_LAST = ::WID_LGL_COMPANY_LAST, - WID_LGL_COMPANIES_ALL = ::WID_LGL_COMPANIES_ALL, - WID_LGL_COMPANIES_NONE = ::WID_LGL_COMPANIES_NONE, - WID_LGL_CARGOES = ::WID_LGL_CARGOES, ///< Cargo selection widget. - WID_LGL_CARGO_FIRST = ::WID_LGL_CARGO_FIRST, - WID_LGL_CARGO_LAST = ::WID_LGL_CARGO_LAST, - WID_LGL_CARGOES_ALL = ::WID_LGL_CARGOES_ALL, - WID_LGL_CARGOES_NONE = ::WID_LGL_CARGOES_NONE, - }; - - /* automatically generated from ../../widgets/main_widget.h */ - /** Widgets of the #MainWindow class. */ - enum MainWidgets { - WID_M_VIEWPORT = ::WID_M_VIEWPORT, ///< Main window viewport. - }; - - /* automatically generated from ../../widgets/misc_widget.h */ - /** Widgets of the #LandInfoWindow class. */ - enum LandInfoWidgets { - WID_LI_BACKGROUND = ::WID_LI_BACKGROUND, ///< Background of the window. - }; - - /** Widgets of the #TooltipsWindow class. */ - enum ToolTipsWidgets { - WID_TT_BACKGROUND = ::WID_TT_BACKGROUND, ///< Background of the window. - }; - - /** Widgets of the #AboutWindow class. */ - enum AboutWidgets { - WID_A_SCROLLING_TEXT = ::WID_A_SCROLLING_TEXT, ///< The actually scrolling text. - WID_A_WEBSITE = ::WID_A_WEBSITE, ///< URL of OpenTTD website. - WID_A_COPYRIGHT = ::WID_A_COPYRIGHT, ///< Copyright string - }; - - /** Widgets of the #QueryStringWindow class. */ - enum QueryStringWidgets { - WID_QS_CAPTION = ::WID_QS_CAPTION, ///< Caption of the window. - WID_QS_TEXT = ::WID_QS_TEXT, ///< Text of the query. - WID_QS_WARNING = ::WID_QS_WARNING, ///< Warning label about password security - WID_QS_DEFAULT = ::WID_QS_DEFAULT, ///< Default button. - WID_QS_CANCEL = ::WID_QS_CANCEL, ///< Cancel button. - WID_QS_OK = ::WID_QS_OK, ///< OK button. - }; - - /** Widgets of the #QueryWindow class. */ - enum QueryWidgets { - WID_Q_CAPTION = ::WID_Q_CAPTION, ///< Caption of the window. - WID_Q_TEXT = ::WID_Q_TEXT, ///< Text of the query. - WID_Q_NO = ::WID_Q_NO, ///< Yes button. - WID_Q_YES = ::WID_Q_YES, ///< No button. - }; - - /** Widgets of the #TextfileWindow class. */ - enum TextfileWidgets { - WID_TF_CAPTION = ::WID_TF_CAPTION, ///< The caption of the window. - WID_TF_WRAPTEXT = ::WID_TF_WRAPTEXT, ///< Whether or not to wrap the text. - WID_TF_BACKGROUND = ::WID_TF_BACKGROUND, ///< Panel to draw the textfile on. - WID_TF_VSCROLLBAR = ::WID_TF_VSCROLLBAR, ///< Vertical scrollbar to scroll through the textfile up-and-down. - WID_TF_HSCROLLBAR = ::WID_TF_HSCROLLBAR, ///< Horizontal scrollbar to scroll through the textfile left-to-right. - }; - - /* automatically generated from ../../widgets/music_widget.h */ - /** Widgets of the #MusicTrackSelectionWindow class. */ - enum MusicTrackSelectionWidgets { - WID_MTS_CAPTION = ::WID_MTS_CAPTION, ///< Window caption. - WID_MTS_LIST_LEFT = ::WID_MTS_LIST_LEFT, ///< Left button. - WID_MTS_PLAYLIST = ::WID_MTS_PLAYLIST, ///< Playlist. - WID_MTS_LIST_RIGHT = ::WID_MTS_LIST_RIGHT, ///< Right button. - WID_MTS_MUSICSET = ::WID_MTS_MUSICSET, ///< Music set selection. - WID_MTS_ALL = ::WID_MTS_ALL, ///< All button. - WID_MTS_OLD = ::WID_MTS_OLD, ///< Old button. - WID_MTS_NEW = ::WID_MTS_NEW, ///< New button. - WID_MTS_EZY = ::WID_MTS_EZY, ///< Ezy button. - WID_MTS_CUSTOM1 = ::WID_MTS_CUSTOM1, ///< Custom1 button. - WID_MTS_CUSTOM2 = ::WID_MTS_CUSTOM2, ///< Custom2 button. - WID_MTS_CLEAR = ::WID_MTS_CLEAR, ///< Clear button. - }; - - /** Widgets of the #MusicWindow class. */ - enum MusicWidgets { - WID_M_PREV = ::WID_M_PREV, ///< Previous button. - WID_M_NEXT = ::WID_M_NEXT, ///< Next button. - WID_M_STOP = ::WID_M_STOP, ///< Stop button. - WID_M_PLAY = ::WID_M_PLAY, ///< Play button. - WID_M_SLIDERS = ::WID_M_SLIDERS, ///< Sliders. - WID_M_MUSIC_VOL = ::WID_M_MUSIC_VOL, ///< Music volume. - WID_M_EFFECT_VOL = ::WID_M_EFFECT_VOL, ///< Effect volume. - WID_M_BACKGROUND = ::WID_M_BACKGROUND, ///< Background of the window. - WID_M_TRACK = ::WID_M_TRACK, ///< Track playing. - WID_M_TRACK_NR = ::WID_M_TRACK_NR, ///< Track number. - WID_M_TRACK_TITLE = ::WID_M_TRACK_TITLE, ///< Track title. - WID_M_TRACK_NAME = ::WID_M_TRACK_NAME, ///< Track name. - WID_M_SHUFFLE = ::WID_M_SHUFFLE, ///< Shuffle button. - WID_M_PROGRAMME = ::WID_M_PROGRAMME, ///< Program button. - WID_M_ALL = ::WID_M_ALL, ///< All button. - WID_M_OLD = ::WID_M_OLD, ///< Old button. - WID_M_NEW = ::WID_M_NEW, ///< New button. - WID_M_EZY = ::WID_M_EZY, ///< Ezy button. - WID_M_CUSTOM1 = ::WID_M_CUSTOM1, ///< Custom1 button. - WID_M_CUSTOM2 = ::WID_M_CUSTOM2, ///< Custom2 button. - }; - - /* automatically generated from ../../widgets/network_chat_widget.h */ - /** Widgets of the #NetworkChatWindow class. */ - enum NetWorkChatWidgets { - WID_NC_CLOSE = ::WID_NC_CLOSE, ///< Close button. - WID_NC_BACKGROUND = ::WID_NC_BACKGROUND, ///< Background of the window. - WID_NC_DESTINATION = ::WID_NC_DESTINATION, ///< Destination. - WID_NC_TEXTBOX = ::WID_NC_TEXTBOX, ///< Textbox. - WID_NC_SENDBUTTON = ::WID_NC_SENDBUTTON, ///< Send button. - }; - - /* automatically generated from ../../widgets/network_content_widget.h */ - /** Widgets of the #NetworkContentDownloadStatusWindow class. */ - enum NetworkContentDownloadStatusWidgets { - WID_NCDS_BACKGROUND = ::WID_NCDS_BACKGROUND, ///< Background of the window. - WID_NCDS_CANCELOK = ::WID_NCDS_CANCELOK, ///< (Optional) Cancel/OK button. - }; - - /** Widgets of the #NetworkContentListWindow class. */ - enum NetworkContentListWidgets { - WID_NCL_BACKGROUND = ::WID_NCL_BACKGROUND, ///< Resize button. - - WID_NCL_FILTER_CAPT = ::WID_NCL_FILTER_CAPT, ///< Caption for the filter editbox. - WID_NCL_FILTER = ::WID_NCL_FILTER, ///< Filter editbox. - - WID_NCL_CHECKBOX = ::WID_NCL_CHECKBOX, ///< Button above checkboxes. - WID_NCL_TYPE = ::WID_NCL_TYPE, ///< 'Type' button. - WID_NCL_NAME = ::WID_NCL_NAME, ///< 'Name' button. - - WID_NCL_MATRIX = ::WID_NCL_MATRIX, ///< Panel with list of content. - WID_NCL_SCROLLBAR = ::WID_NCL_SCROLLBAR, ///< Scrollbar of matrix. - - WID_NCL_DETAILS = ::WID_NCL_DETAILS, ///< Panel with content details. - WID_NCL_TEXTFILE = ::WID_NCL_TEXTFILE, ///< Open readme, changelog (+1) or license (+2) of a file in the content window. - - WID_NCL_SELECT_ALL = ::WID_NCL_SELECT_ALL, ///< 'Select all' button. - WID_NCL_SELECT_UPDATE = ::WID_NCL_SELECT_UPDATE, ///< 'Select updates' button. - WID_NCL_UNSELECT = ::WID_NCL_UNSELECT, ///< 'Unselect all' button. - WID_NCL_OPEN_URL = ::WID_NCL_OPEN_URL, ///< 'Open url' button. - WID_NCL_CANCEL = ::WID_NCL_CANCEL, ///< 'Cancel' button. - WID_NCL_DOWNLOAD = ::WID_NCL_DOWNLOAD, ///< 'Download' button. - - WID_NCL_SEL_ALL_UPDATE = ::WID_NCL_SEL_ALL_UPDATE, ///< #NWID_SELECTION widget for select all/update buttons.. - WID_NCL_SEARCH_EXTERNAL = ::WID_NCL_SEARCH_EXTERNAL, ///< Search external sites for missing NewGRF. - }; - - /* automatically generated from ../../widgets/network_widget.h */ - /** Widgets of the #NetworkGameWindow class. */ - enum NetworkGameWidgets { - WID_NG_MAIN = ::WID_NG_MAIN, ///< Main panel. - - WID_NG_CONNECTION = ::WID_NG_CONNECTION, ///< Label in front of connection droplist. - WID_NG_CONN_BTN = ::WID_NG_CONN_BTN, ///< 'Connection' droplist button. - WID_NG_CLIENT_LABEL = ::WID_NG_CLIENT_LABEL, ///< Label in front of client name edit box. - WID_NG_CLIENT = ::WID_NG_CLIENT, ///< Panel with editbox to set client name. - WID_NG_FILTER_LABEL = ::WID_NG_FILTER_LABEL, ///< Label in front of the filter/search edit box. - WID_NG_FILTER = ::WID_NG_FILTER, ///< Panel with the edit box to enter the search text. - - WID_NG_HEADER = ::WID_NG_HEADER, ///< Header container of the matrix. - WID_NG_NAME = ::WID_NG_NAME, ///< 'Name' button. - WID_NG_CLIENTS = ::WID_NG_CLIENTS, ///< 'Clients' button. - WID_NG_MAPSIZE = ::WID_NG_MAPSIZE, ///< 'Map size' button. - WID_NG_DATE = ::WID_NG_DATE, ///< 'Date' button. - WID_NG_YEARS = ::WID_NG_YEARS, ///< 'Years' button. - WID_NG_INFO = ::WID_NG_INFO, ///< Third button in the game list panel. - - WID_NG_MATRIX = ::WID_NG_MATRIX, ///< Panel with list of games. - WID_NG_SCROLLBAR = ::WID_NG_SCROLLBAR, ///< Scrollbar of matrix. - - WID_NG_LASTJOINED_LABEL = ::WID_NG_LASTJOINED_LABEL, ///< Label "Last joined server:". - WID_NG_LASTJOINED = ::WID_NG_LASTJOINED, ///< Info about the last joined server. - WID_NG_LASTJOINED_SPACER = ::WID_NG_LASTJOINED_SPACER, ///< Spacer after last joined server panel. - - WID_NG_DETAILS = ::WID_NG_DETAILS, ///< Panel with game details. - WID_NG_DETAILS_SPACER = ::WID_NG_DETAILS_SPACER, ///< Spacer for game actual details. - WID_NG_JOIN = ::WID_NG_JOIN, ///< 'Join game' button. - WID_NG_REFRESH = ::WID_NG_REFRESH, ///< 'Refresh server' button. - WID_NG_NEWGRF = ::WID_NG_NEWGRF, ///< 'NewGRF Settings' button. - WID_NG_NEWGRF_SEL = ::WID_NG_NEWGRF_SEL, ///< Selection 'widget' to hide the NewGRF settings. - WID_NG_NEWGRF_MISSING = ::WID_NG_NEWGRF_MISSING, ///< 'Find missing NewGRF online' button. - WID_NG_NEWGRF_MISSING_SEL = ::WID_NG_NEWGRF_MISSING_SEL, ///< Selection widget for the above button. - - WID_NG_FIND = ::WID_NG_FIND, ///< 'Find server' button. - WID_NG_ADD = ::WID_NG_ADD, ///< 'Add server' button. - WID_NG_START = ::WID_NG_START, ///< 'Start server' button. - WID_NG_CANCEL = ::WID_NG_CANCEL, ///< 'Cancel' button. - }; - - /** Widgets of the #NetworkStartServerWindow class. */ - enum NetworkStartServerWidgets { - WID_NSS_BACKGROUND = ::WID_NSS_BACKGROUND, ///< Background of the window. - WID_NSS_GAMENAME_LABEL = ::WID_NSS_GAMENAME_LABEL, ///< Label for the game name. - WID_NSS_GAMENAME = ::WID_NSS_GAMENAME, ///< Background for editbox to set game name. - WID_NSS_SETPWD = ::WID_NSS_SETPWD, ///< 'Set password' button. - WID_NSS_CONNTYPE_LABEL = ::WID_NSS_CONNTYPE_LABEL, ///< Label for 'connection type'. - WID_NSS_CONNTYPE_BTN = ::WID_NSS_CONNTYPE_BTN, ///< 'Connection type' droplist button. - WID_NSS_CLIENTS_LABEL = ::WID_NSS_CLIENTS_LABEL, ///< Label for 'max clients'. - WID_NSS_CLIENTS_BTND = ::WID_NSS_CLIENTS_BTND, ///< 'Max clients' downarrow. - WID_NSS_CLIENTS_TXT = ::WID_NSS_CLIENTS_TXT, ///< 'Max clients' text. - WID_NSS_CLIENTS_BTNU = ::WID_NSS_CLIENTS_BTNU, ///< 'Max clients' uparrow. - WID_NSS_COMPANIES_LABEL = ::WID_NSS_COMPANIES_LABEL, ///< Label for 'max companies'. - WID_NSS_COMPANIES_BTND = ::WID_NSS_COMPANIES_BTND, ///< 'Max companies' downarrow. - WID_NSS_COMPANIES_TXT = ::WID_NSS_COMPANIES_TXT, ///< 'Max companies' text. - WID_NSS_COMPANIES_BTNU = ::WID_NSS_COMPANIES_BTNU, ///< 'Max companies' uparrow. - WID_NSS_SPECTATORS_LABEL = ::WID_NSS_SPECTATORS_LABEL, ///< Label for 'max spectators'. - WID_NSS_SPECTATORS_BTND = ::WID_NSS_SPECTATORS_BTND, ///< 'Max spectators' downarrow. - WID_NSS_SPECTATORS_TXT = ::WID_NSS_SPECTATORS_TXT, ///< 'Max spectators' text. - WID_NSS_SPECTATORS_BTNU = ::WID_NSS_SPECTATORS_BTNU, ///< 'Max spectators' uparrow. - - WID_NSS_LANGUAGE_LABEL = ::WID_NSS_LANGUAGE_LABEL, ///< Label for 'language spoken'. - WID_NSS_LANGUAGE_BTN = ::WID_NSS_LANGUAGE_BTN, ///< 'Language spoken' droplist button. - - WID_NSS_GENERATE_GAME = ::WID_NSS_GENERATE_GAME, ///< New game button. - WID_NSS_LOAD_GAME = ::WID_NSS_LOAD_GAME, ///< Load game button. - WID_NSS_PLAY_SCENARIO = ::WID_NSS_PLAY_SCENARIO, ///< Play scenario button. - WID_NSS_PLAY_HEIGHTMAP = ::WID_NSS_PLAY_HEIGHTMAP, ///< Play heightmap button. - - WID_NSS_CANCEL = ::WID_NSS_CANCEL, ///< 'Cancel' button. - }; - - /** Widgets of the #NetworkLobbyWindow class. */ - enum NetworkLobbyWidgets { - WID_NL_BACKGROUND = ::WID_NL_BACKGROUND, ///< Background of the window. - WID_NL_TEXT = ::WID_NL_TEXT, ///< Heading text. - WID_NL_HEADER = ::WID_NL_HEADER, ///< Header above list of companies. - WID_NL_MATRIX = ::WID_NL_MATRIX, ///< List of companies. - WID_NL_SCROLLBAR = ::WID_NL_SCROLLBAR, ///< Scroll bar. - WID_NL_DETAILS = ::WID_NL_DETAILS, ///< Company details. - WID_NL_JOIN = ::WID_NL_JOIN, ///< 'Join company' button. - WID_NL_NEW = ::WID_NL_NEW, ///< 'New company' button. - WID_NL_SPECTATE = ::WID_NL_SPECTATE, ///< 'Spectate game' button. - WID_NL_REFRESH = ::WID_NL_REFRESH, ///< 'Refresh server' button. - WID_NL_CANCEL = ::WID_NL_CANCEL, ///< 'Cancel' button. - }; - - /** Widgets of the #NetworkClientListWindow class. */ - enum ClientListWidgets { - WID_CL_PANEL = ::WID_CL_PANEL, ///< Panel of the window. - }; - - /** Widgets of the #NetworkClientListPopupWindow class. */ - enum ClientListPopupWidgets { - WID_CLP_PANEL = ::WID_CLP_PANEL, ///< Panel of the window. - }; - - /** Widgets of the #NetworkJoinStatusWindow class. */ - enum NetworkJoinStatusWidgets { - WID_NJS_BACKGROUND = ::WID_NJS_BACKGROUND, ///< Background of the window. - WID_NJS_CANCELOK = ::WID_NJS_CANCELOK, ///< Cancel / OK button. - }; - - /** Widgets of the #NetworkCompanyPasswordWindow class. */ - enum NetworkCompanyPasswordWidgets { - WID_NCP_BACKGROUND = ::WID_NCP_BACKGROUND, ///< Background of the window. - WID_NCP_LABEL = ::WID_NCP_LABEL, ///< Label in front of the password field. - WID_NCP_PASSWORD = ::WID_NCP_PASSWORD, ///< Input field for the password. - WID_NCP_SAVE_AS_DEFAULT_PASSWORD = ::WID_NCP_SAVE_AS_DEFAULT_PASSWORD, ///< Toggle 'button' for saving the current password as default password. - WID_NCP_WARNING = ::WID_NCP_WARNING, ///< Warning text about password security - WID_NCP_CANCEL = ::WID_NCP_CANCEL, ///< Close the window without changing anything. - WID_NCP_OK = ::WID_NCP_OK, ///< Safe the password etc. - }; - - /* automatically generated from ../../widgets/newgrf_debug_widget.h */ - /** Widgets of the #NewGRFInspectWindow class. */ - enum NewGRFInspectWidgets { - WID_NGRFI_CAPTION = ::WID_NGRFI_CAPTION, ///< The caption bar of course. - WID_NGRFI_PARENT = ::WID_NGRFI_PARENT, ///< Inspect the parent. - WID_NGRFI_VEH_PREV = ::WID_NGRFI_VEH_PREV, ///< Go to previous vehicle in chain. - WID_NGRFI_VEH_NEXT = ::WID_NGRFI_VEH_NEXT, ///< Go to next vehicle in chain. - WID_NGRFI_VEH_CHAIN = ::WID_NGRFI_VEH_CHAIN, ///< Display for vehicle chain. - WID_NGRFI_MAINPANEL = ::WID_NGRFI_MAINPANEL, ///< Panel widget containing the actual data. - WID_NGRFI_SCROLLBAR = ::WID_NGRFI_SCROLLBAR, ///< Scrollbar. - }; - - /** Widgets of the #SpriteAlignerWindow class. */ - enum SpriteAlignerWidgets { - WID_SA_CAPTION = ::WID_SA_CAPTION, ///< Caption of the window. - WID_SA_PREVIOUS = ::WID_SA_PREVIOUS, ///< Skip to the previous sprite. - WID_SA_GOTO = ::WID_SA_GOTO, ///< Go to a given sprite. - WID_SA_NEXT = ::WID_SA_NEXT, ///< Skip to the next sprite. - WID_SA_UP = ::WID_SA_UP, ///< Move the sprite up. - WID_SA_LEFT = ::WID_SA_LEFT, ///< Move the sprite to the left. - WID_SA_RIGHT = ::WID_SA_RIGHT, ///< Move the sprite to the right. - WID_SA_DOWN = ::WID_SA_DOWN, ///< Move the sprite down. - WID_SA_SPRITE = ::WID_SA_SPRITE, ///< The actual sprite. - WID_SA_OFFSETS_ABS = ::WID_SA_OFFSETS_ABS, ///< The sprite offsets (absolute). - WID_SA_OFFSETS_REL = ::WID_SA_OFFSETS_REL, ///< The sprite offsets (relative). - WID_SA_PICKER = ::WID_SA_PICKER, ///< Sprite picker. - WID_SA_LIST = ::WID_SA_LIST, ///< Queried sprite list. - WID_SA_SCROLLBAR = ::WID_SA_SCROLLBAR, ///< Scrollbar for sprite list. - WID_SA_RESET_REL = ::WID_SA_RESET_REL, ///< Reset relative sprite offset - }; - - /* automatically generated from ../../widgets/newgrf_widget.h */ - /** Widgets of the #NewGRFParametersWindow class. */ - enum NewGRFParametersWidgets { - WID_NP_SHOW_NUMPAR = ::WID_NP_SHOW_NUMPAR, ///< #NWID_SELECTION to optionally display #WID_NP_NUMPAR. - WID_NP_NUMPAR_DEC = ::WID_NP_NUMPAR_DEC, ///< Button to decrease number of parameters. - WID_NP_NUMPAR_INC = ::WID_NP_NUMPAR_INC, ///< Button to increase number of parameters. - WID_NP_NUMPAR = ::WID_NP_NUMPAR, ///< Optional number of parameters. - WID_NP_NUMPAR_TEXT = ::WID_NP_NUMPAR_TEXT, ///< Text description. - WID_NP_BACKGROUND = ::WID_NP_BACKGROUND, ///< Panel to draw the settings on. - WID_NP_SCROLLBAR = ::WID_NP_SCROLLBAR, ///< Scrollbar to scroll through all settings. - WID_NP_ACCEPT = ::WID_NP_ACCEPT, ///< Accept button. - WID_NP_RESET = ::WID_NP_RESET, ///< Reset button. - WID_NP_SHOW_DESCRIPTION = ::WID_NP_SHOW_DESCRIPTION, ///< #NWID_SELECTION to optionally display parameter descriptions. - WID_NP_DESCRIPTION = ::WID_NP_DESCRIPTION, ///< Multi-line description of a parameter. - }; - - /** Widgets of the #NewGRFWindow class. */ - enum NewGRFStateWidgets { - WID_NS_PRESET_LIST = ::WID_NS_PRESET_LIST, ///< Active NewGRF preset. - WID_NS_PRESET_SAVE = ::WID_NS_PRESET_SAVE, ///< Save list of active NewGRFs as presets. - WID_NS_PRESET_DELETE = ::WID_NS_PRESET_DELETE, ///< Delete active preset. - WID_NS_ADD = ::WID_NS_ADD, ///< Add NewGRF to active list. - WID_NS_REMOVE = ::WID_NS_REMOVE, ///< Remove NewGRF from active list. - WID_NS_MOVE_UP = ::WID_NS_MOVE_UP, ///< Move NewGRF up in active list. - WID_NS_MOVE_DOWN = ::WID_NS_MOVE_DOWN, ///< Move NewGRF down in active list. - WID_NS_UPGRADE = ::WID_NS_UPGRADE, ///< Upgrade NewGRFs that have a newer version available. - WID_NS_FILTER = ::WID_NS_FILTER, ///< Filter list of available NewGRFs. - WID_NS_FILE_LIST = ::WID_NS_FILE_LIST, ///< List window of active NewGRFs. - WID_NS_SCROLLBAR = ::WID_NS_SCROLLBAR, ///< Scrollbar for active NewGRF list. - WID_NS_AVAIL_LIST = ::WID_NS_AVAIL_LIST, ///< List window of available NewGRFs. - WID_NS_SCROLL2BAR = ::WID_NS_SCROLL2BAR, ///< Scrollbar for available NewGRF list. - WID_NS_NEWGRF_INFO_TITLE = ::WID_NS_NEWGRF_INFO_TITLE, ///< Title for Info on selected NewGRF. - WID_NS_NEWGRF_INFO = ::WID_NS_NEWGRF_INFO, ///< Panel for Info on selected NewGRF. - WID_NS_OPEN_URL = ::WID_NS_OPEN_URL, ///< Open URL of NewGRF. - WID_NS_NEWGRF_TEXTFILE = ::WID_NS_NEWGRF_TEXTFILE, ///< Open NewGRF readme, changelog (+1) or license (+2). - WID_NS_SET_PARAMETERS = ::WID_NS_SET_PARAMETERS, ///< Open Parameters Window for selected NewGRF for editing parameters. - WID_NS_VIEW_PARAMETERS = ::WID_NS_VIEW_PARAMETERS, ///< Open Parameters Window for selected NewGRF for viewing parameters. - WID_NS_TOGGLE_PALETTE = ::WID_NS_TOGGLE_PALETTE, ///< Toggle Palette of selected, active NewGRF. - WID_NS_APPLY_CHANGES = ::WID_NS_APPLY_CHANGES, ///< Apply changes to NewGRF config. - WID_NS_RESCAN_FILES = ::WID_NS_RESCAN_FILES, ///< Rescan files (available NewGRFs). - WID_NS_RESCAN_FILES2 = ::WID_NS_RESCAN_FILES2, ///< Rescan files (active NewGRFs). - WID_NS_CONTENT_DOWNLOAD = ::WID_NS_CONTENT_DOWNLOAD, ///< Open content download (available NewGRFs). - WID_NS_CONTENT_DOWNLOAD2 = ::WID_NS_CONTENT_DOWNLOAD2, ///< Open content download (active NewGRFs). - WID_NS_SHOW_REMOVE = ::WID_NS_SHOW_REMOVE, ///< Select active list buttons (0, 1 = simple layout). - WID_NS_SHOW_APPLY = ::WID_NS_SHOW_APPLY, ///< Select display of the buttons below the 'details'. - }; - - /** Widgets of the #SavePresetWindow class. */ - enum SavePresetWidgets { - WID_SVP_PRESET_LIST = ::WID_SVP_PRESET_LIST, ///< List with available preset names. - WID_SVP_SCROLLBAR = ::WID_SVP_SCROLLBAR, ///< Scrollbar for the list available preset names. - WID_SVP_EDITBOX = ::WID_SVP_EDITBOX, ///< Edit box for changing the preset name. - WID_SVP_CANCEL = ::WID_SVP_CANCEL, ///< Button to cancel saving the preset. - WID_SVP_SAVE = ::WID_SVP_SAVE, ///< Button to save the preset. - }; - - /** Widgets of the #ScanProgressWindow class. */ - enum ScanProgressWidgets { - WID_SP_PROGRESS_BAR = ::WID_SP_PROGRESS_BAR, ///< Simple progress bar. - WID_SP_PROGRESS_TEXT = ::WID_SP_PROGRESS_TEXT, ///< Text explaining what is happening. - }; - - /* automatically generated from ../../widgets/news_widget.h */ - /** Widgets of the #NewsWindow class. */ - enum NewsWidgets { - WID_N_PANEL = ::WID_N_PANEL, ///< Panel of the window. - WID_N_TITLE = ::WID_N_TITLE, ///< Title of the company news. - WID_N_HEADLINE = ::WID_N_HEADLINE, ///< The news headline. - WID_N_CLOSEBOX = ::WID_N_CLOSEBOX, ///< Close the window. - WID_N_DATE = ::WID_N_DATE, ///< Date of the news item. - WID_N_CAPTION = ::WID_N_CAPTION, ///< Title bar of the window. Only used in small news items. - WID_N_INSET = ::WID_N_INSET, ///< Inset around the viewport in the window. Only used in small news items. - WID_N_VIEWPORT = ::WID_N_VIEWPORT, ///< Viewport in the window. - WID_N_COMPANY_MSG = ::WID_N_COMPANY_MSG, ///< Message in company news items. - WID_N_MESSAGE = ::WID_N_MESSAGE, ///< Space for displaying the message. Only used in small news items. - WID_N_MGR_FACE = ::WID_N_MGR_FACE, ///< Face of the manager. - WID_N_MGR_NAME = ::WID_N_MGR_NAME, ///< Name of the manager. - WID_N_VEH_TITLE = ::WID_N_VEH_TITLE, ///< Vehicle new title. - WID_N_VEH_BKGND = ::WID_N_VEH_BKGND, ///< Dark background of new vehicle news. - 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. */ - enum MessageHistoryWidgets { - WID_MH_STICKYBOX = ::WID_MH_STICKYBOX, ///< Stickybox. - WID_MH_BACKGROUND = ::WID_MH_BACKGROUND, ///< Background of the window. - WID_MH_SCROLLBAR = ::WID_MH_SCROLLBAR, ///< Scrollbar for the list. - }; - - /* automatically generated from ../../widgets/object_widget.h */ - /** Widgets of the #BuildObjectWindow class. */ - enum BuildObjectWidgets { - WID_BO_CLASS_LIST = ::WID_BO_CLASS_LIST, ///< The list with classes. - WID_BO_SCROLLBAR = ::WID_BO_SCROLLBAR, ///< The scrollbar associated with the list. - WID_BO_OBJECT_MATRIX = ::WID_BO_OBJECT_MATRIX, ///< The matrix with preview sprites. - WID_BO_OBJECT_SPRITE = ::WID_BO_OBJECT_SPRITE, ///< A preview sprite of the object. - WID_BO_OBJECT_NAME = ::WID_BO_OBJECT_NAME, ///< The name of the selected object. - WID_BO_OBJECT_SIZE = ::WID_BO_OBJECT_SIZE, ///< The size of the selected object. - WID_BO_INFO = ::WID_BO_INFO, ///< Other information about the object (from the NewGRF). - - WID_BO_SELECT_MATRIX = ::WID_BO_SELECT_MATRIX, ///< Selection preview matrix of objects of a given class. - WID_BO_SELECT_IMAGE = ::WID_BO_SELECT_IMAGE, ///< Preview image in the #WID_BO_SELECT_MATRIX. - WID_BO_SELECT_SCROLL = ::WID_BO_SELECT_SCROLL, ///< Scrollbar next to the #WID_BO_SELECT_MATRIX. - }; - - /* automatically generated from ../../widgets/order_widget.h */ - /** Widgets of the #OrdersWindow class. */ - enum OrderWidgets { - WID_O_CAPTION = ::WID_O_CAPTION, ///< Caption of the window. - WID_O_TIMETABLE_VIEW = ::WID_O_TIMETABLE_VIEW, ///< Toggle timetable view. - WID_O_ORDER_LIST = ::WID_O_ORDER_LIST, ///< Order list panel. - WID_O_SCROLLBAR = ::WID_O_SCROLLBAR, ///< Order list scrollbar. - WID_O_SKIP = ::WID_O_SKIP, ///< Skip current order. - WID_O_DELETE = ::WID_O_DELETE, ///< Delete selected order. - WID_O_STOP_SHARING = ::WID_O_STOP_SHARING, ///< Stop sharing orders. - WID_O_NON_STOP = ::WID_O_NON_STOP, ///< Goto non-stop to destination. - WID_O_GOTO = ::WID_O_GOTO, ///< Goto destination. - WID_O_FULL_LOAD = ::WID_O_FULL_LOAD, ///< Select full load. - WID_O_UNLOAD = ::WID_O_UNLOAD, ///< Select unload. - WID_O_REFIT = ::WID_O_REFIT, ///< Select refit. - WID_O_SERVICE = ::WID_O_SERVICE, ///< Select service (at depot). - WID_O_EMPTY = ::WID_O_EMPTY, ///< Placeholder for refit dropdown when not owner. - WID_O_REFIT_DROPDOWN = ::WID_O_REFIT_DROPDOWN, ///< Open refit options. - WID_O_COND_VARIABLE = ::WID_O_COND_VARIABLE, ///< Choose condition variable. - WID_O_COND_COMPARATOR = ::WID_O_COND_COMPARATOR, ///< Choose condition type. - WID_O_COND_VALUE = ::WID_O_COND_VALUE, ///< Choose condition value. - WID_O_SEL_TOP_LEFT = ::WID_O_SEL_TOP_LEFT, ///< #NWID_SELECTION widget for left part of the top row of the 'your train' order window. - WID_O_SEL_TOP_MIDDLE = ::WID_O_SEL_TOP_MIDDLE, ///< #NWID_SELECTION widget for middle part of the top row of the 'your train' order window. - WID_O_SEL_TOP_RIGHT = ::WID_O_SEL_TOP_RIGHT, ///< #NWID_SELECTION widget for right part of the top row of the 'your train' order window. - WID_O_SEL_TOP_ROW_GROUNDVEHICLE = ::WID_O_SEL_TOP_ROW_GROUNDVEHICLE, ///< #NWID_SELECTION widget for the top row of the 'your train' order window. - WID_O_SEL_TOP_ROW = ::WID_O_SEL_TOP_ROW, ///< #NWID_SELECTION widget for the top row of the 'your non-trains' order window. - WID_O_SEL_BOTTOM_MIDDLE = ::WID_O_SEL_BOTTOM_MIDDLE, ///< #NWID_SELECTION widget for the middle part of the bottom row of the 'your train' order window. - WID_O_SHARED_ORDER_LIST = ::WID_O_SHARED_ORDER_LIST, ///< Open list of shared vehicles. - }; - - /* automatically generated from ../../widgets/osk_widget.h */ - /** Widgets of the #OskWindow class. */ - enum OnScreenKeyboardWidgets { - WID_OSK_CAPTION = ::WID_OSK_CAPTION, ///< Caption of window. - WID_OSK_TEXT = ::WID_OSK_TEXT, ///< Edit box. - WID_OSK_CANCEL = ::WID_OSK_CANCEL, ///< Cancel key. - WID_OSK_OK = ::WID_OSK_OK, ///< Ok key. - WID_OSK_BACKSPACE = ::WID_OSK_BACKSPACE, ///< Backspace key. - WID_OSK_SPECIAL = ::WID_OSK_SPECIAL, ///< Special key (at keyboards often used for tab key). - WID_OSK_CAPS = ::WID_OSK_CAPS, ///< Capslock key. - WID_OSK_SHIFT = ::WID_OSK_SHIFT, ///< Shift(lock) key. - WID_OSK_SPACE = ::WID_OSK_SPACE, ///< Space bar. - WID_OSK_LEFT = ::WID_OSK_LEFT, ///< Cursor left key. - WID_OSK_RIGHT = ::WID_OSK_RIGHT, ///< Cursor right key. - WID_OSK_LETTERS = ::WID_OSK_LETTERS, ///< First widget of the 'normal' keys. - - WID_OSK_NUMBERS_FIRST = ::WID_OSK_NUMBERS_FIRST, ///< First widget of the numbers row. - WID_OSK_NUMBERS_LAST = ::WID_OSK_NUMBERS_LAST, ///< Last widget of the numbers row. - - WID_OSK_QWERTY_FIRST = ::WID_OSK_QWERTY_FIRST, ///< First widget of the qwerty row. - WID_OSK_QWERTY_LAST = ::WID_OSK_QWERTY_LAST, ///< Last widget of the qwerty row. - - WID_OSK_ASDFG_FIRST = ::WID_OSK_ASDFG_FIRST, ///< First widget of the asdfg row. - WID_OSK_ASDFG_LAST = ::WID_OSK_ASDFG_LAST, ///< Last widget of the asdfg row. - - WID_OSK_ZXCVB_FIRST = ::WID_OSK_ZXCVB_FIRST, ///< First widget of the zxcvb row. - WID_OSK_ZXCVB_LAST = ::WID_OSK_ZXCVB_LAST, ///< Last widget of the zxcvb row. - }; - - /* automatically generated from ../../widgets/rail_widget.h */ - /** Widgets of the #BuildRailToolbarWindow class. */ - enum RailToolbarWidgets { - /* Name starts with RA instead of R, because of collision with RoadToolbarWidgets */ - WID_RAT_CAPTION = ::WID_RAT_CAPTION, ///< Caption of the window. - WID_RAT_BUILD_NS = ::WID_RAT_BUILD_NS, ///< Build rail along the game view Y axis. - WID_RAT_BUILD_X = ::WID_RAT_BUILD_X, ///< Build rail along the game grid X axis. - WID_RAT_BUILD_EW = ::WID_RAT_BUILD_EW, ///< Build rail along the game view X axis. - WID_RAT_BUILD_Y = ::WID_RAT_BUILD_Y, ///< Build rail along the game grid Y axis. - WID_RAT_AUTORAIL = ::WID_RAT_AUTORAIL, ///< Autorail tool. - WID_RAT_DEMOLISH = ::WID_RAT_DEMOLISH, ///< Destroy something with dynamite! - WID_RAT_BUILD_DEPOT = ::WID_RAT_BUILD_DEPOT, ///< Build a depot. - WID_RAT_BUILD_WAYPOINT = ::WID_RAT_BUILD_WAYPOINT, ///< Build a waypoint. - WID_RAT_BUILD_STATION = ::WID_RAT_BUILD_STATION, ///< Build a station. - WID_RAT_BUILD_SIGNALS = ::WID_RAT_BUILD_SIGNALS, ///< Build signals. - WID_RAT_BUILD_BRIDGE = ::WID_RAT_BUILD_BRIDGE, ///< Build a bridge. - WID_RAT_BUILD_TUNNEL = ::WID_RAT_BUILD_TUNNEL, ///< Build a tunnel. - WID_RAT_REMOVE = ::WID_RAT_REMOVE, ///< Bulldozer to remove rail. - WID_RAT_CONVERT_RAIL = ::WID_RAT_CONVERT_RAIL, ///< Convert other rail to this type. - }; - - /** Widgets of the #BuildRailStationWindow class. */ - enum BuildRailStationWidgets { - /* Name starts with BRA instead of BR, because of collision with BuildRoadStationWidgets */ - WID_BRAS_PLATFORM_DIR_X = ::WID_BRAS_PLATFORM_DIR_X, ///< Button to select '/' view. - WID_BRAS_PLATFORM_DIR_Y = ::WID_BRAS_PLATFORM_DIR_Y, ///< Button to select '\' view. - - WID_BRAS_PLATFORM_NUM_1 = ::WID_BRAS_PLATFORM_NUM_1, ///< Button to select stations with a single platform. - WID_BRAS_PLATFORM_NUM_2 = ::WID_BRAS_PLATFORM_NUM_2, ///< Button to select stations with 2 platforms. - WID_BRAS_PLATFORM_NUM_3 = ::WID_BRAS_PLATFORM_NUM_3, ///< Button to select stations with 3 platforms. - WID_BRAS_PLATFORM_NUM_4 = ::WID_BRAS_PLATFORM_NUM_4, ///< Button to select stations with 4 platforms. - WID_BRAS_PLATFORM_NUM_5 = ::WID_BRAS_PLATFORM_NUM_5, ///< Button to select stations with 5 platforms. - WID_BRAS_PLATFORM_NUM_6 = ::WID_BRAS_PLATFORM_NUM_6, ///< Button to select stations with 6 platforms. - WID_BRAS_PLATFORM_NUM_7 = ::WID_BRAS_PLATFORM_NUM_7, ///< Button to select stations with 7 platforms. - - WID_BRAS_PLATFORM_LEN_1 = ::WID_BRAS_PLATFORM_LEN_1, ///< Button to select single tile length station platforms. - WID_BRAS_PLATFORM_LEN_2 = ::WID_BRAS_PLATFORM_LEN_2, ///< Button to select 2 tiles length station platforms. - WID_BRAS_PLATFORM_LEN_3 = ::WID_BRAS_PLATFORM_LEN_3, ///< Button to select 3 tiles length station platforms. - WID_BRAS_PLATFORM_LEN_4 = ::WID_BRAS_PLATFORM_LEN_4, ///< Button to select 4 tiles length station platforms. - WID_BRAS_PLATFORM_LEN_5 = ::WID_BRAS_PLATFORM_LEN_5, ///< Button to select 5 tiles length station platforms. - WID_BRAS_PLATFORM_LEN_6 = ::WID_BRAS_PLATFORM_LEN_6, ///< Button to select 6 tiles length station platforms. - WID_BRAS_PLATFORM_LEN_7 = ::WID_BRAS_PLATFORM_LEN_7, ///< Button to select 7 tiles length station platforms. - - WID_BRAS_PLATFORM_DRAG_N_DROP = ::WID_BRAS_PLATFORM_DRAG_N_DROP, ///< Button to enable drag and drop type station placement. - - WID_BRAS_HIGHLIGHT_OFF = ::WID_BRAS_HIGHLIGHT_OFF, ///< Button for turning coverage highlighting off. - WID_BRAS_HIGHLIGHT_ON = ::WID_BRAS_HIGHLIGHT_ON, ///< Button for turning coverage highlighting on. - WID_BRAS_COVERAGE_TEXTS = ::WID_BRAS_COVERAGE_TEXTS, ///< Empty space for the coverage texts. - - WID_BRAS_MATRIX = ::WID_BRAS_MATRIX, ///< Matrix widget displaying the available stations. - WID_BRAS_IMAGE = ::WID_BRAS_IMAGE, ///< Panel used at each cell of the matrix. - WID_BRAS_MATRIX_SCROLL = ::WID_BRAS_MATRIX_SCROLL, ///< Scrollbar of the matrix widget. - - WID_BRAS_SHOW_NEWST_DEFSIZE = ::WID_BRAS_SHOW_NEWST_DEFSIZE, ///< Selection for default-size button for newstation. - WID_BRAS_SHOW_NEWST_ADDITIONS = ::WID_BRAS_SHOW_NEWST_ADDITIONS, ///< Selection for newstation class selection list. - WID_BRAS_SHOW_NEWST_MATRIX = ::WID_BRAS_SHOW_NEWST_MATRIX, ///< Selection for newstation image matrix. - WID_BRAS_SHOW_NEWST_RESIZE = ::WID_BRAS_SHOW_NEWST_RESIZE, ///< Selection for panel and resize at bottom right for newstation. - WID_BRAS_SHOW_NEWST_TYPE = ::WID_BRAS_SHOW_NEWST_TYPE, ///< Display of selected station type. - WID_BRAS_NEWST_LIST = ::WID_BRAS_NEWST_LIST, ///< List with available newstation classes. - WID_BRAS_NEWST_SCROLL = ::WID_BRAS_NEWST_SCROLL, ///< Scrollbar of the #WID_BRAS_NEWST_LIST. - - WID_BRAS_PLATFORM_NUM_BEGIN = ::WID_BRAS_PLATFORM_NUM_BEGIN, ///< Helper for determining the chosen platform width. - WID_BRAS_PLATFORM_LEN_BEGIN = ::WID_BRAS_PLATFORM_LEN_BEGIN, ///< Helper for determining the chosen platform length. - }; - - /** Widgets of the #BuildSignalWindow class. */ - enum BuildSignalWidgets { - WID_BS_SEMAPHORE_NORM = ::WID_BS_SEMAPHORE_NORM, ///< Build a semaphore normal block signal - WID_BS_SEMAPHORE_ENTRY = ::WID_BS_SEMAPHORE_ENTRY, ///< Build a semaphore entry block signal - WID_BS_SEMAPHORE_EXIT = ::WID_BS_SEMAPHORE_EXIT, ///< Build a semaphore exit block signal - WID_BS_SEMAPHORE_COMBO = ::WID_BS_SEMAPHORE_COMBO, ///< Build a semaphore combo block signal - WID_BS_SEMAPHORE_PBS = ::WID_BS_SEMAPHORE_PBS, ///< Build a semaphore path signal. - WID_BS_SEMAPHORE_PBS_OWAY = ::WID_BS_SEMAPHORE_PBS_OWAY, ///< Build a semaphore one way path signal. - WID_BS_ELECTRIC_NORM = ::WID_BS_ELECTRIC_NORM, ///< Build an electric normal block signal - WID_BS_ELECTRIC_ENTRY = ::WID_BS_ELECTRIC_ENTRY, ///< Build an electric entry block signal - WID_BS_ELECTRIC_EXIT = ::WID_BS_ELECTRIC_EXIT, ///< Build an electric exit block signal - WID_BS_ELECTRIC_COMBO = ::WID_BS_ELECTRIC_COMBO, ///< Build an electric combo block signal - WID_BS_ELECTRIC_PBS = ::WID_BS_ELECTRIC_PBS, ///< Build an electric path signal. - WID_BS_ELECTRIC_PBS_OWAY = ::WID_BS_ELECTRIC_PBS_OWAY, ///< Build an electric one way path signal. - WID_BS_CONVERT = ::WID_BS_CONVERT, ///< Convert the signal. - WID_BS_DRAG_SIGNALS_DENSITY_LABEL = ::WID_BS_DRAG_SIGNALS_DENSITY_LABEL, ///< The current signal density. - WID_BS_DRAG_SIGNALS_DENSITY_DECREASE = ::WID_BS_DRAG_SIGNALS_DENSITY_DECREASE, ///< Decrease the signal density. - WID_BS_DRAG_SIGNALS_DENSITY_INCREASE = ::WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, ///< Increase the signal density. - }; - - /** Widgets of the #BuildRailDepotWindow class. */ - enum BuildRailDepotWidgets { - /* Name starts with BRA instead of BR, because of collision with BuildRoadDepotWidgets */ - WID_BRAD_DEPOT_NE = ::WID_BRAD_DEPOT_NE, ///< Build a depot with the entrance in the north east. - WID_BRAD_DEPOT_SE = ::WID_BRAD_DEPOT_SE, ///< Build a depot with the entrance in the south east. - WID_BRAD_DEPOT_SW = ::WID_BRAD_DEPOT_SW, ///< Build a depot with the entrance in the south west. - WID_BRAD_DEPOT_NW = ::WID_BRAD_DEPOT_NW, ///< Build a depot with the entrance in the north west. - }; - - /** Widgets of the #BuildRailWaypointWindow class. */ - enum BuildRailWaypointWidgets { - WID_BRW_WAYPOINT_MATRIX = ::WID_BRW_WAYPOINT_MATRIX, ///< Matrix with waypoints. - WID_BRW_WAYPOINT = ::WID_BRW_WAYPOINT, ///< A single waypoint. - WID_BRW_SCROLL = ::WID_BRW_SCROLL, ///< Scrollbar for the matrix. - }; - - /* automatically generated from ../../widgets/road_widget.h */ - /** Widgets of the #BuildRoadToolbarWindow class. */ - enum RoadToolbarWidgets { - /* Name starts with RO instead of R, because of collision with RailToolbarWidgets */ - WID_ROT_CAPTION = ::WID_ROT_CAPTION, ///< Caption of the window - WID_ROT_ROAD_X = ::WID_ROT_ROAD_X, ///< Build road in x-direction. - WID_ROT_ROAD_Y = ::WID_ROT_ROAD_Y, ///< Build road in y-direction. - WID_ROT_AUTOROAD = ::WID_ROT_AUTOROAD, ///< Autorail. - WID_ROT_DEMOLISH = ::WID_ROT_DEMOLISH, ///< Demolish. - WID_ROT_DEPOT = ::WID_ROT_DEPOT, ///< Build depot. - WID_ROT_BUS_STATION = ::WID_ROT_BUS_STATION, ///< Build bus station. - WID_ROT_TRUCK_STATION = ::WID_ROT_TRUCK_STATION, ///< Build truck station. - WID_ROT_ONE_WAY = ::WID_ROT_ONE_WAY, ///< Build one-way road. - WID_ROT_BUILD_BRIDGE = ::WID_ROT_BUILD_BRIDGE, ///< Build bridge. - WID_ROT_BUILD_TUNNEL = ::WID_ROT_BUILD_TUNNEL, ///< Build tunnel. - WID_ROT_REMOVE = ::WID_ROT_REMOVE, ///< Remove road. - WID_ROT_CONVERT_ROAD = ::WID_ROT_CONVERT_ROAD, ///< Convert road. - }; - - /** Widgets of the #BuildRoadDepotWindow class. */ - enum BuildRoadDepotWidgets { - /* Name starts with BRO instead of BR, because of collision with BuildRailDepotWidgets */ - WID_BROD_CAPTION = ::WID_BROD_CAPTION, ///< Caption of the window. - WID_BROD_DEPOT_NE = ::WID_BROD_DEPOT_NE, ///< Depot with NE entry. - WID_BROD_DEPOT_SE = ::WID_BROD_DEPOT_SE, ///< Depot with SE entry. - WID_BROD_DEPOT_SW = ::WID_BROD_DEPOT_SW, ///< Depot with SW entry. - WID_BROD_DEPOT_NW = ::WID_BROD_DEPOT_NW, ///< Depot with NW entry. - }; - - /** Widgets of the #BuildRoadStationWindow class. */ - enum BuildRoadStationWidgets { - /* Name starts with BRO instead of BR, because of collision with BuildRailStationWidgets */ - WID_BROS_CAPTION = ::WID_BROS_CAPTION, ///< Caption of the window. - WID_BROS_BACKGROUND = ::WID_BROS_BACKGROUND, ///< Background of the window. - WID_BROS_STATION_NE = ::WID_BROS_STATION_NE, ///< Terminal station with NE entry. - WID_BROS_STATION_SE = ::WID_BROS_STATION_SE, ///< Terminal station with SE entry. - WID_BROS_STATION_SW = ::WID_BROS_STATION_SW, ///< Terminal station with SW entry. - WID_BROS_STATION_NW = ::WID_BROS_STATION_NW, ///< Terminal station with NW entry. - WID_BROS_STATION_X = ::WID_BROS_STATION_X, ///< Drive-through station in x-direction. - WID_BROS_STATION_Y = ::WID_BROS_STATION_Y, ///< Drive-through station in y-direction. - WID_BROS_LT_OFF = ::WID_BROS_LT_OFF, ///< Turn off area highlight. - WID_BROS_LT_ON = ::WID_BROS_LT_ON, ///< Turn on area highlight. - 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" - WID_SC_TAKE_MINIMAP = ::WID_SC_TAKE_MINIMAP, ///< Button for taking a minimap screenshot - }; - - /* automatically generated from ../../widgets/settings_widget.h */ - /** Widgets of the #GameOptionsWindow class. */ - enum GameOptionsWidgets { - WID_GO_BACKGROUND = ::WID_GO_BACKGROUND, ///< Background of the window. - WID_GO_CURRENCY_DROPDOWN = ::WID_GO_CURRENCY_DROPDOWN, ///< Currency dropdown. - WID_GO_DISTANCE_DROPDOWN = ::WID_GO_DISTANCE_DROPDOWN, ///< Measuring unit dropdown. - WID_GO_ROADSIDE_DROPDOWN = ::WID_GO_ROADSIDE_DROPDOWN, ///< Dropdown to select the road side (to set the right side ;)). - WID_GO_TOWNNAME_DROPDOWN = ::WID_GO_TOWNNAME_DROPDOWN, ///< Town name dropdown. - WID_GO_AUTOSAVE_DROPDOWN = ::WID_GO_AUTOSAVE_DROPDOWN, ///< Dropdown to say how often to autosave. - WID_GO_LANG_DROPDOWN = ::WID_GO_LANG_DROPDOWN, ///< Language dropdown. - WID_GO_RESOLUTION_DROPDOWN = ::WID_GO_RESOLUTION_DROPDOWN, ///< Dropdown for the resolution. - WID_GO_FULLSCREEN_BUTTON = ::WID_GO_FULLSCREEN_BUTTON, ///< Toggle fullscreen. - WID_GO_GUI_ZOOM_DROPDOWN = ::WID_GO_GUI_ZOOM_DROPDOWN, ///< Dropdown for the GUI zoom level. - WID_GO_BASE_GRF_DROPDOWN = ::WID_GO_BASE_GRF_DROPDOWN, ///< Use to select a base GRF. - WID_GO_BASE_GRF_STATUS = ::WID_GO_BASE_GRF_STATUS, ///< Info about missing files etc. - WID_GO_BASE_GRF_TEXTFILE = ::WID_GO_BASE_GRF_TEXTFILE, ///< Open base GRF readme, changelog (+1) or license (+2). - WID_GO_BASE_GRF_DESCRIPTION = ::WID_GO_BASE_GRF_DESCRIPTION, ///< Description of selected base GRF. - WID_GO_BASE_SFX_DROPDOWN = ::WID_GO_BASE_SFX_DROPDOWN, ///< Use to select a base SFX. - WID_GO_BASE_SFX_TEXTFILE = ::WID_GO_BASE_SFX_TEXTFILE, ///< Open base SFX readme, changelog (+1) or license (+2). - WID_GO_BASE_SFX_DESCRIPTION = ::WID_GO_BASE_SFX_DESCRIPTION, ///< Description of selected base SFX. - WID_GO_BASE_MUSIC_DROPDOWN = ::WID_GO_BASE_MUSIC_DROPDOWN, ///< Use to select a base music set. - WID_GO_BASE_MUSIC_STATUS = ::WID_GO_BASE_MUSIC_STATUS, ///< Info about corrupted files etc. - WID_GO_BASE_MUSIC_TEXTFILE = ::WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2). - WID_GO_BASE_MUSIC_DESCRIPTION = ::WID_GO_BASE_MUSIC_DESCRIPTION, ///< Description of selected base music set. - WID_GO_FONT_ZOOM_DROPDOWN = ::WID_GO_FONT_ZOOM_DROPDOWN, ///< Dropdown for the font zoom level. - }; - - /** Widgets of the #GameSettingsWindow class. */ - enum GameSettingsWidgets { - WID_GS_FILTER = ::WID_GS_FILTER, ///< Text filter. - WID_GS_OPTIONSPANEL = ::WID_GS_OPTIONSPANEL, ///< Panel widget containing the option lists. - WID_GS_SCROLLBAR = ::WID_GS_SCROLLBAR, ///< Scrollbar. - WID_GS_HELP_TEXT = ::WID_GS_HELP_TEXT, ///< Information area to display help text of the selected option. - WID_GS_EXPAND_ALL = ::WID_GS_EXPAND_ALL, ///< Expand all button. - WID_GS_COLLAPSE_ALL = ::WID_GS_COLLAPSE_ALL, ///< Collapse all button. - WID_GS_RESTRICT_CATEGORY = ::WID_GS_RESTRICT_CATEGORY, ///< Label upfront to the category drop-down box to restrict the list of settings to show - WID_GS_RESTRICT_TYPE = ::WID_GS_RESTRICT_TYPE, ///< Label upfront to the type drop-down box to restrict the list of settings to show - WID_GS_RESTRICT_DROPDOWN = ::WID_GS_RESTRICT_DROPDOWN, ///< The drop down box to restrict the list of settings - WID_GS_TYPE_DROPDOWN = ::WID_GS_TYPE_DROPDOWN, ///< The drop down box to choose client/game/company/all settings - }; - - /** Widgets of the #CustomCurrencyWindow class. */ - enum CustomCurrencyWidgets { - WID_CC_RATE_DOWN = ::WID_CC_RATE_DOWN, ///< Down button. - WID_CC_RATE_UP = ::WID_CC_RATE_UP, ///< Up button. - WID_CC_RATE = ::WID_CC_RATE, ///< Rate of currency. - WID_CC_SEPARATOR_EDIT = ::WID_CC_SEPARATOR_EDIT, ///< Separator edit button. - WID_CC_SEPARATOR = ::WID_CC_SEPARATOR, ///< Current separator. - WID_CC_PREFIX_EDIT = ::WID_CC_PREFIX_EDIT, ///< Prefix edit button. - WID_CC_PREFIX = ::WID_CC_PREFIX, ///< Current prefix. - WID_CC_SUFFIX_EDIT = ::WID_CC_SUFFIX_EDIT, ///< Suffix edit button. - WID_CC_SUFFIX = ::WID_CC_SUFFIX, ///< Current suffix. - WID_CC_YEAR_DOWN = ::WID_CC_YEAR_DOWN, ///< Down button. - WID_CC_YEAR_UP = ::WID_CC_YEAR_UP, ///< Up button. - WID_CC_YEAR = ::WID_CC_YEAR, ///< Year of introduction. - WID_CC_PREVIEW = ::WID_CC_PREVIEW, ///< Preview. - }; - - /* automatically generated from ../../widgets/sign_widget.h */ - /** Widgets of the #SignListWindow class. */ - enum SignListWidgets { - /* Name starts with SI instead of S, because of collision with SaveLoadWidgets */ - WID_SIL_CAPTION = ::WID_SIL_CAPTION, ///< Caption of the window. - WID_SIL_LIST = ::WID_SIL_LIST, ///< List of signs. - WID_SIL_SCROLLBAR = ::WID_SIL_SCROLLBAR, ///< Scrollbar of list. - WID_SIL_FILTER_TEXT = ::WID_SIL_FILTER_TEXT, ///< Text box for typing a filter string. - WID_SIL_FILTER_MATCH_CASE_BTN = ::WID_SIL_FILTER_MATCH_CASE_BTN, ///< Button to toggle if case sensitive filtering should be used. - WID_SIL_FILTER_ENTER_BTN = ::WID_SIL_FILTER_ENTER_BTN, ///< Scroll to first sign. - }; - - /** Widgets of the #SignWindow class. */ - enum QueryEditSignWidgets { - WID_QES_CAPTION = ::WID_QES_CAPTION, ///< Caption of the window. - WID_QES_TEXT = ::WID_QES_TEXT, ///< Text of the query. - WID_QES_OK = ::WID_QES_OK, ///< OK button. - WID_QES_CANCEL = ::WID_QES_CANCEL, ///< Cancel button. - WID_QES_DELETE = ::WID_QES_DELETE, ///< Delete button. - WID_QES_PREVIOUS = ::WID_QES_PREVIOUS, ///< Previous button. - WID_QES_NEXT = ::WID_QES_NEXT, ///< Next button. - }; - - /* automatically generated from ../../widgets/smallmap_widget.h */ - /** Widgets of the #SmallMapWindow class. */ - enum SmallMapWidgets { - WID_SM_CAPTION = ::WID_SM_CAPTION, ///< Caption of the window. - WID_SM_MAP_BORDER = ::WID_SM_MAP_BORDER, ///< Border around the smallmap. - WID_SM_MAP = ::WID_SM_MAP, ///< Panel containing the smallmap. - WID_SM_LEGEND = ::WID_SM_LEGEND, ///< Bottom panel to display smallmap legends. - WID_SM_BLANK = ::WID_SM_BLANK, ///< Empty button as placeholder. - WID_SM_ZOOM_IN = ::WID_SM_ZOOM_IN, ///< Button to zoom in one step. - WID_SM_ZOOM_OUT = ::WID_SM_ZOOM_OUT, ///< Button to zoom out one step. - WID_SM_CONTOUR = ::WID_SM_CONTOUR, ///< Button to select the contour view (height map). - WID_SM_VEHICLES = ::WID_SM_VEHICLES, ///< Button to select the vehicles view. - WID_SM_INDUSTRIES = ::WID_SM_INDUSTRIES, ///< Button to select the industries view. - WID_SM_LINKSTATS = ::WID_SM_LINKSTATS, ///< Button to select the link stats view. - WID_SM_ROUTES = ::WID_SM_ROUTES, ///< Button to select the routes view. - WID_SM_VEGETATION = ::WID_SM_VEGETATION, ///< Button to select the vegetation view. - WID_SM_OWNERS = ::WID_SM_OWNERS, ///< Button to select the owners view. - WID_SM_CENTERMAP = ::WID_SM_CENTERMAP, ///< Button to move smallmap center to main window center. - WID_SM_TOGGLETOWNNAME = ::WID_SM_TOGGLETOWNNAME, ///< Toggle button to display town names. - WID_SM_SELECT_BUTTONS = ::WID_SM_SELECT_BUTTONS, ///< Selection widget for the buttons present in some smallmap modes. - WID_SM_ENABLE_ALL = ::WID_SM_ENABLE_ALL, ///< Button to enable display of all legend entries. - WID_SM_DISABLE_ALL = ::WID_SM_DISABLE_ALL, ///< Button to disable display of all legend entries. - WID_SM_SHOW_HEIGHT = ::WID_SM_SHOW_HEIGHT, ///< Show heightmap toggle button. - }; - - /* automatically generated from ../../widgets/station_widget.h */ - /** Widgets of the #StationViewWindow class. */ - enum StationViewWidgets { - WID_SV_CAPTION = ::WID_SV_CAPTION, ///< Caption of the window. - WID_SV_SORT_ORDER = ::WID_SV_SORT_ORDER, ///< 'Sort order' button - WID_SV_SORT_BY = ::WID_SV_SORT_BY, ///< 'Sort by' button - WID_SV_GROUP = ::WID_SV_GROUP, ///< label for "group by" - WID_SV_GROUP_BY = ::WID_SV_GROUP_BY, ///< 'Group by' button - WID_SV_WAITING = ::WID_SV_WAITING, ///< List of waiting cargo. - WID_SV_SCROLLBAR = ::WID_SV_SCROLLBAR, ///< Scrollbar. - WID_SV_ACCEPT_RATING_LIST = ::WID_SV_ACCEPT_RATING_LIST, ///< List of accepted cargoes / rating of cargoes. - WID_SV_LOCATION = ::WID_SV_LOCATION, ///< 'Location' button. - WID_SV_ACCEPTS_RATINGS = ::WID_SV_ACCEPTS_RATINGS, ///< 'Accepts' / 'Ratings' button. - WID_SV_RENAME = ::WID_SV_RENAME, ///< 'Rename' button. - WID_SV_CLOSE_AIRPORT = ::WID_SV_CLOSE_AIRPORT, ///< 'Close airport' button. - WID_SV_TRAINS = ::WID_SV_TRAINS, ///< List of scheduled trains button. - WID_SV_ROADVEHS = ::WID_SV_ROADVEHS, ///< List of scheduled road vehs button. - WID_SV_SHIPS = ::WID_SV_SHIPS, ///< List of scheduled ships button. - WID_SV_PLANES = ::WID_SV_PLANES, ///< List of scheduled planes button. - WID_SV_CATCHMENT = ::WID_SV_CATCHMENT, ///< Toggle catchment area highlight. - }; - - /** Widgets of the #CompanyStationsWindow class. */ - enum StationListWidgets { - /* Name starts with ST instead of S, because of collision with SaveLoadWidgets */ - WID_STL_CAPTION = ::WID_STL_CAPTION, ///< Caption of the window. - WID_STL_LIST = ::WID_STL_LIST, ///< The main panel, list of stations. - WID_STL_SCROLLBAR = ::WID_STL_SCROLLBAR, ///< Scrollbar next to the main panel. - - /* Vehicletypes need to be in order of StationFacility due to bit magic */ - WID_STL_TRAIN = ::WID_STL_TRAIN, ///< 'TRAIN' button - list only facilities where is a railroad station. - WID_STL_TRUCK = ::WID_STL_TRUCK, ///< 'TRUCK' button - list only facilities where is a truck stop. - WID_STL_BUS = ::WID_STL_BUS, ///< 'BUS' button - list only facilities where is a bus stop. - WID_STL_AIRPLANE = ::WID_STL_AIRPLANE, ///< 'AIRPLANE' button - list only facilities where is an airport. - WID_STL_SHIP = ::WID_STL_SHIP, ///< 'SHIP' button - list only facilities where is a dock. - WID_STL_FACILALL = ::WID_STL_FACILALL, ///< 'ALL' button - list all facilities. - - WID_STL_NOCARGOWAITING = ::WID_STL_NOCARGOWAITING, ///< 'NO' button - list stations where no cargo is waiting. - WID_STL_CARGOALL = ::WID_STL_CARGOALL, ///< 'ALL' button - list all stations. - - WID_STL_SORTBY = ::WID_STL_SORTBY, ///< 'Sort by' button - reverse sort direction. - WID_STL_SORTDROPBTN = ::WID_STL_SORTDROPBTN, ///< Dropdown button. - - WID_STL_CARGOSTART = ::WID_STL_CARGOSTART, ///< Widget numbers used for list of cargo types (not present in _company_stations_widgets). - }; - - /** Widgets of the #SelectStationWindow class. */ - enum JoinStationWidgets { - WID_JS_CAPTION = ::WID_JS_CAPTION, // Caption of the window. - WID_JS_PANEL = ::WID_JS_PANEL, // Main panel. - WID_JS_SCROLLBAR = ::WID_JS_SCROLLBAR, // Scrollbar of the panel. - }; - - /* automatically generated from ../../widgets/statusbar_widget.h */ - /** Widgets of the #StatusBarWindow class. */ - enum StatusbarWidgets { - WID_S_LEFT = ::WID_S_LEFT, ///< Left part of the statusbar; date is shown there. - WID_S_MIDDLE = ::WID_S_MIDDLE, ///< Middle part; current news or company name or *** SAVING *** or *** PAUSED ***. - WID_S_RIGHT = ::WID_S_RIGHT, ///< Right part; bank balance. - }; - - /* automatically generated from ../../widgets/story_widget.h */ - /** Widgets of the #GoalListWindow class. */ - enum StoryBookWidgets { - WID_SB_CAPTION = ::WID_SB_CAPTION, ///< Caption of the window. - WID_SB_SEL_PAGE = ::WID_SB_SEL_PAGE, ///< Page selector. - WID_SB_PAGE_PANEL = ::WID_SB_PAGE_PANEL, ///< Page body. - WID_SB_SCROLLBAR = ::WID_SB_SCROLLBAR, ///< Scrollbar of the goal list. - WID_SB_PREV_PAGE = ::WID_SB_PREV_PAGE, ///< Prev button. - WID_SB_NEXT_PAGE = ::WID_SB_NEXT_PAGE, ///< Next button. - }; - - /* automatically generated from ../../widgets/subsidy_widget.h */ - /** Widgets of the #SubsidyListWindow class. */ - enum SubsidyListWidgets { - /* Name starts with SU instead of S, because of collision with SaveLoadWidgets. */ - WID_SUL_PANEL = ::WID_SUL_PANEL, ///< Main panel of window. - WID_SUL_SCROLLBAR = ::WID_SUL_SCROLLBAR, ///< Scrollbar of panel. - }; - - /* automatically generated from ../../widgets/terraform_widget.h */ - /** Widgets of the #TerraformToolbarWindow class. */ - enum TerraformToolbarWidgets { - WID_TT_SHOW_PLACE_OBJECT = ::WID_TT_SHOW_PLACE_OBJECT, ///< Should the place object button be shown? - WID_TT_BUTTONS_START = ::WID_TT_BUTTONS_START, ///< Start of pushable buttons. - WID_TT_LOWER_LAND = ::WID_TT_LOWER_LAND, ///< Lower land button. - WID_TT_RAISE_LAND = ::WID_TT_RAISE_LAND, ///< Raise land button. - WID_TT_LEVEL_LAND = ::WID_TT_LEVEL_LAND, ///< Level land button. - WID_TT_DEMOLISH = ::WID_TT_DEMOLISH, ///< Demolish aka dynamite button. - WID_TT_BUY_LAND = ::WID_TT_BUY_LAND, ///< Buy land button. - WID_TT_PLANT_TREES = ::WID_TT_PLANT_TREES, ///< Plant trees button (note: opens separate window, no place-push-button). - WID_TT_PLACE_SIGN = ::WID_TT_PLACE_SIGN, ///< Place sign button. - WID_TT_PLACE_OBJECT = ::WID_TT_PLACE_OBJECT, ///< Place object button. - }; - - /** Widgets of the #ScenarioEditorLandscapeGenerationWindow class. */ - enum EditorTerraformToolbarWidgets { - WID_ETT_SHOW_PLACE_DESERT = ::WID_ETT_SHOW_PLACE_DESERT, ///< Should the place desert button be shown? - WID_ETT_START = ::WID_ETT_START, ///< Used for iterations. - WID_ETT_DOTS = ::WID_ETT_DOTS, ///< Invisible widget for rendering the terraform size on. - WID_ETT_BUTTONS_START = ::WID_ETT_BUTTONS_START, ///< Start of pushable buttons. - WID_ETT_DEMOLISH = ::WID_ETT_DEMOLISH, ///< Demolish aka dynamite button. - WID_ETT_LOWER_LAND = ::WID_ETT_LOWER_LAND, ///< Lower land button. - WID_ETT_RAISE_LAND = ::WID_ETT_RAISE_LAND, ///< Raise land button. - WID_ETT_LEVEL_LAND = ::WID_ETT_LEVEL_LAND, ///< Level land button. - WID_ETT_PLACE_ROCKS = ::WID_ETT_PLACE_ROCKS, ///< Place rocks button. - WID_ETT_PLACE_DESERT = ::WID_ETT_PLACE_DESERT, ///< Place desert button (in tropical climate). - WID_ETT_PLACE_OBJECT = ::WID_ETT_PLACE_OBJECT, ///< Place transmitter button. - WID_ETT_BUTTONS_END = ::WID_ETT_BUTTONS_END, ///< End of pushable buttons. - WID_ETT_INCREASE_SIZE = ::WID_ETT_INCREASE_SIZE, ///< Upwards arrow button to increase terraforming size. - WID_ETT_DECREASE_SIZE = ::WID_ETT_DECREASE_SIZE, ///< Downwards arrow button to decrease terraforming size. - WID_ETT_NEW_SCENARIO = ::WID_ETT_NEW_SCENARIO, ///< Button for generating a new scenario. - WID_ETT_RESET_LANDSCAPE = ::WID_ETT_RESET_LANDSCAPE, ///< Button for removing all company-owned property. - }; - - /* automatically generated from ../../widgets/timetable_widget.h */ - /** Widgets of the #TimetableWindow class. */ - enum VehicleTimetableWidgets { - WID_VT_CAPTION = ::WID_VT_CAPTION, ///< Caption of the window. - WID_VT_ORDER_VIEW = ::WID_VT_ORDER_VIEW, ///< Order view. - WID_VT_TIMETABLE_PANEL = ::WID_VT_TIMETABLE_PANEL, ///< Timetable panel. - WID_VT_ARRIVAL_DEPARTURE_PANEL = ::WID_VT_ARRIVAL_DEPARTURE_PANEL, ///< Panel with the expected/scheduled arrivals. - WID_VT_SCROLLBAR = ::WID_VT_SCROLLBAR, ///< Scrollbar for the panel. - WID_VT_SUMMARY_PANEL = ::WID_VT_SUMMARY_PANEL, ///< Summary panel. - WID_VT_START_DATE = ::WID_VT_START_DATE, ///< Start date button. - WID_VT_CHANGE_TIME = ::WID_VT_CHANGE_TIME, ///< Change time button. - WID_VT_CLEAR_TIME = ::WID_VT_CLEAR_TIME, ///< Clear time button. - WID_VT_RESET_LATENESS = ::WID_VT_RESET_LATENESS, ///< Reset lateness button. - WID_VT_AUTOFILL = ::WID_VT_AUTOFILL, ///< Autofill button. - WID_VT_EXPECTED = ::WID_VT_EXPECTED, ///< Toggle between expected and scheduled arrivals. - WID_VT_SHARED_ORDER_LIST = ::WID_VT_SHARED_ORDER_LIST, ///< Show the shared order list. - WID_VT_ARRIVAL_DEPARTURE_SELECTION = ::WID_VT_ARRIVAL_DEPARTURE_SELECTION, ///< Disable/hide the arrival departure panel. - WID_VT_EXPECTED_SELECTION = ::WID_VT_EXPECTED_SELECTION, ///< Disable/hide the expected selection button. - WID_VT_CHANGE_SPEED = ::WID_VT_CHANGE_SPEED, ///< Change speed limit button. - WID_VT_CLEAR_SPEED = ::WID_VT_CLEAR_SPEED, ///< Clear speed limit button. - }; - - /* automatically generated from ../../widgets/toolbar_widget.h */ - /** Widgets of the #MainToolbarWindow class. */ - enum ToolbarNormalWidgets { - WID_TN_PAUSE = ::WID_TN_PAUSE, ///< Pause the game. - WID_TN_FAST_FORWARD = ::WID_TN_FAST_FORWARD, ///< Fast forward the game. - WID_TN_SETTINGS = ::WID_TN_SETTINGS, ///< Settings menu. - WID_TN_SAVE = ::WID_TN_SAVE, ///< Save menu. - WID_TN_SMALL_MAP = ::WID_TN_SMALL_MAP, ///< Small map menu. - WID_TN_TOWNS = ::WID_TN_TOWNS, ///< Town menu. - WID_TN_SUBSIDIES = ::WID_TN_SUBSIDIES, ///< Subsidy menu. - WID_TN_STATIONS = ::WID_TN_STATIONS, ///< Station menu. - WID_TN_FINANCES = ::WID_TN_FINANCES, ///< Finance menu. - WID_TN_COMPANIES = ::WID_TN_COMPANIES, ///< Company menu. - WID_TN_STORY = ::WID_TN_STORY, ///< Story menu. - WID_TN_GOAL = ::WID_TN_GOAL, ///< Goal menu. - WID_TN_GRAPHS = ::WID_TN_GRAPHS, ///< Graph menu. - WID_TN_LEAGUE = ::WID_TN_LEAGUE, ///< Company league menu. - WID_TN_INDUSTRIES = ::WID_TN_INDUSTRIES, ///< Industry menu. - WID_TN_VEHICLE_START = ::WID_TN_VEHICLE_START, ///< Helper for the offset of the vehicle menus. - WID_TN_TRAINS = ::WID_TN_TRAINS, ///< Train menu. - WID_TN_ROADVEHS = ::WID_TN_ROADVEHS, ///< Road vehicle menu. - WID_TN_SHIPS = ::WID_TN_SHIPS, ///< Ship menu. - WID_TN_AIRCRAFT = ::WID_TN_AIRCRAFT, ///< Aircraft menu. - WID_TN_ZOOM_IN = ::WID_TN_ZOOM_IN, ///< Zoom in the main viewport. - WID_TN_ZOOM_OUT = ::WID_TN_ZOOM_OUT, ///< Zoom out the main viewport. - WID_TN_BUILDING_TOOLS_START = ::WID_TN_BUILDING_TOOLS_START, ///< Helper for the offset of the building tools - WID_TN_RAILS = ::WID_TN_RAILS, ///< Rail building menu. - WID_TN_ROADS = ::WID_TN_ROADS, ///< Road building menu. - WID_TN_TRAMS = ::WID_TN_TRAMS, ///< Tram building menu. - WID_TN_WATER = ::WID_TN_WATER, ///< Water building toolbar. - WID_TN_AIR = ::WID_TN_AIR, ///< Airport building toolbar. - WID_TN_LANDSCAPE = ::WID_TN_LANDSCAPE, ///< Landscaping toolbar. - WID_TN_MUSIC_SOUND = ::WID_TN_MUSIC_SOUND, ///< Music/sound configuration menu. - WID_TN_MESSAGES = ::WID_TN_MESSAGES, ///< Messages menu. - WID_TN_HELP = ::WID_TN_HELP, ///< Help menu. - WID_TN_SWITCH_BAR = ::WID_TN_SWITCH_BAR, ///< Only available when toolbar has been split to switch between different subsets. - WID_TN_END = ::WID_TN_END, ///< Helper for knowing the amount of widgets. - }; - - /** Widgets of the #ScenarioEditorToolbarWindow class. */ - enum ToolbarEditorWidgets { - WID_TE_PAUSE = ::WID_TE_PAUSE, ///< Pause the game. - WID_TE_FAST_FORWARD = ::WID_TE_FAST_FORWARD, ///< Fast forward the game. - WID_TE_SETTINGS = ::WID_TE_SETTINGS, ///< Settings menu. - WID_TE_SAVE = ::WID_TE_SAVE, ///< Save menu. - WID_TE_SPACER = ::WID_TE_SPACER, ///< Spacer with "scenario editor" text. - WID_TE_DATE = ::WID_TE_DATE, ///< The date of the scenario. - WID_TE_DATE_BACKWARD = ::WID_TE_DATE_BACKWARD, ///< Reduce the date of the scenario. - WID_TE_DATE_FORWARD = ::WID_TE_DATE_FORWARD, ///< Increase the date of the scenario. - WID_TE_SMALL_MAP = ::WID_TE_SMALL_MAP, ///< Small map menu. - WID_TE_ZOOM_IN = ::WID_TE_ZOOM_IN, ///< Zoom in the main viewport. - WID_TE_ZOOM_OUT = ::WID_TE_ZOOM_OUT, ///< Zoom out the main viewport. - WID_TE_LAND_GENERATE = ::WID_TE_LAND_GENERATE, ///< Land generation. - WID_TE_TOWN_GENERATE = ::WID_TE_TOWN_GENERATE, ///< Town building window. - WID_TE_INDUSTRY = ::WID_TE_INDUSTRY, ///< Industry building window. - WID_TE_ROADS = ::WID_TE_ROADS, ///< Road building menu. - WID_TE_TRAMS = ::WID_TE_TRAMS, ///< Tram building menu. - WID_TE_WATER = ::WID_TE_WATER, ///< Water building toolbar. - WID_TE_TREES = ::WID_TE_TREES, ///< Tree building toolbar. - WID_TE_SIGNS = ::WID_TE_SIGNS, ///< Sign building. - WID_TE_DATE_PANEL = ::WID_TE_DATE_PANEL, ///< Container for the date widgets. - WID_TE_MUSIC_SOUND = ::WID_TE_MUSIC_SOUND, ///< Music/sound configuration menu. - WID_TE_HELP = ::WID_TE_HELP, ///< Help menu. - WID_TE_SWITCH_BAR = ::WID_TE_SWITCH_BAR, ///< Only available when toolbar has been split to switch between different subsets. - }; - - /* automatically generated from ../../widgets/town_widget.h */ - /** Widgets of the #TownDirectoryWindow class. */ - enum TownDirectoryWidgets { - WID_TD_SORT_ORDER = ::WID_TD_SORT_ORDER, ///< Direction of sort dropdown. - WID_TD_SORT_CRITERIA = ::WID_TD_SORT_CRITERIA, ///< Criteria of sort dropdown. - WID_TD_FILTER = ::WID_TD_FILTER, ///< Filter of name. - WID_TD_LIST = ::WID_TD_LIST, ///< List of towns. - WID_TD_SCROLLBAR = ::WID_TD_SCROLLBAR, ///< Scrollbar for the town list. - WID_TD_WORLD_POPULATION = ::WID_TD_WORLD_POPULATION, ///< The world's population. - }; - - /** Widgets of the #TownAuthorityWindow class. */ - enum TownAuthorityWidgets { - WID_TA_CAPTION = ::WID_TA_CAPTION, ///< Caption of window. - WID_TA_ZONE_BUTTON = ::WID_TA_ZONE_BUTTON, ///< Turn on/off showing local authority zone. - WID_TA_RATING_INFO = ::WID_TA_RATING_INFO, ///< Overview with ratings for each company. - WID_TA_COMMAND_LIST = ::WID_TA_COMMAND_LIST, ///< List of commands for the player. - WID_TA_SCROLLBAR = ::WID_TA_SCROLLBAR, ///< Scrollbar of the list of commands. - WID_TA_ACTION_INFO = ::WID_TA_ACTION_INFO, ///< Additional information about the action. - WID_TA_EXECUTE = ::WID_TA_EXECUTE, ///< Do-it button. - }; - - /** Widgets of the #TownViewWindow class. */ - enum TownViewWidgets { - WID_TV_CAPTION = ::WID_TV_CAPTION, ///< Caption of window. - WID_TV_VIEWPORT = ::WID_TV_VIEWPORT, ///< View of the center of the town. - WID_TV_INFO = ::WID_TV_INFO, ///< General information about the town. - WID_TV_CENTER_VIEW = ::WID_TV_CENTER_VIEW, ///< Center the main view on this town. - WID_TV_SHOW_AUTHORITY = ::WID_TV_SHOW_AUTHORITY, ///< Show the town authority window. - WID_TV_CHANGE_NAME = ::WID_TV_CHANGE_NAME, ///< Change the name of this town. - WID_TV_CATCHMENT = ::WID_TV_CATCHMENT, ///< Toggle catchment area highlight. - WID_TV_EXPAND = ::WID_TV_EXPAND, ///< Expand this town (scenario editor only). - WID_TV_DELETE = ::WID_TV_DELETE, ///< Delete this town (scenario editor only). - }; - - /** Widgets of the #FoundTownWindow class. */ - enum TownFoundingWidgets { - WID_TF_NEW_TOWN = ::WID_TF_NEW_TOWN, ///< Create a new town. - WID_TF_RANDOM_TOWN = ::WID_TF_RANDOM_TOWN, ///< Randomly place a town. - WID_TF_MANY_RANDOM_TOWNS = ::WID_TF_MANY_RANDOM_TOWNS, ///< Randomly place many towns. - WID_TF_TOWN_NAME_EDITBOX = ::WID_TF_TOWN_NAME_EDITBOX, ///< Editor for the town name. - WID_TF_TOWN_NAME_RANDOM = ::WID_TF_TOWN_NAME_RANDOM, ///< Generate a random town name. - WID_TF_SIZE_SMALL = ::WID_TF_SIZE_SMALL, ///< Selection for a small town. - WID_TF_SIZE_MEDIUM = ::WID_TF_SIZE_MEDIUM, ///< Selection for a medium town. - WID_TF_SIZE_LARGE = ::WID_TF_SIZE_LARGE, ///< Selection for a large town. - WID_TF_SIZE_RANDOM = ::WID_TF_SIZE_RANDOM, ///< Selection for a randomly sized town. - WID_TF_CITY = ::WID_TF_CITY, ///< Selection for the town's city state. - WID_TF_LAYOUT_ORIGINAL = ::WID_TF_LAYOUT_ORIGINAL, ///< Selection for the original town layout. - WID_TF_LAYOUT_BETTER = ::WID_TF_LAYOUT_BETTER, ///< Selection for the better town layout. - WID_TF_LAYOUT_GRID2 = ::WID_TF_LAYOUT_GRID2, ///< Selection for the 2x2 grid town layout. - WID_TF_LAYOUT_GRID3 = ::WID_TF_LAYOUT_GRID3, ///< Selection for the 3x3 grid town layout. - WID_TF_LAYOUT_RANDOM = ::WID_TF_LAYOUT_RANDOM, ///< Selection for a randomly chosen town layout. - }; - - /* automatically generated from ../../widgets/transparency_widget.h */ - /** Widgets of the #TransparenciesWindow class. */ - enum TransparencyToolbarWidgets { - /* Button row. */ - WID_TT_BEGIN = ::WID_TT_BEGIN, ///< First toggle button. - WID_TT_SIGNS = ::WID_TT_SIGNS, ///< Signs background transparency toggle button. - WID_TT_TREES = ::WID_TT_TREES, ///< Trees transparency toggle button. - WID_TT_HOUSES = ::WID_TT_HOUSES, ///< Houses transparency toggle button. - WID_TT_INDUSTRIES = ::WID_TT_INDUSTRIES, ///< industries transparency toggle button. - WID_TT_BUILDINGS = ::WID_TT_BUILDINGS, ///< Company buildings and structures transparency toggle button. - WID_TT_BRIDGES = ::WID_TT_BRIDGES, ///< Bridges transparency toggle button. - WID_TT_STRUCTURES = ::WID_TT_STRUCTURES, ///< Object structure transparency toggle button. - WID_TT_CATENARY = ::WID_TT_CATENARY, ///< Catenary transparency toggle button. - WID_TT_LOADING = ::WID_TT_LOADING, ///< Loading indicators transparency toggle button. - WID_TT_END = ::WID_TT_END, ///< End of toggle buttons. - - /* Panel with buttons for invisibility */ - WID_TT_BUTTONS = ::WID_TT_BUTTONS, ///< Panel with 'invisibility' buttons. - }; - - /* automatically generated from ../../widgets/tree_widget.h */ - /** Widgets of the #BuildTreesWindow class. */ - enum BuildTreesWidgets { - WID_BT_TYPE_11 = ::WID_BT_TYPE_11, ///< Tree 1st column 1st row. - WID_BT_TYPE_12 = ::WID_BT_TYPE_12, ///< Tree 1st column 2nd row. - WID_BT_TYPE_13 = ::WID_BT_TYPE_13, ///< Tree 1st column 3rd row. - WID_BT_TYPE_14 = ::WID_BT_TYPE_14, ///< Tree 1st column 4th row. - WID_BT_TYPE_21 = ::WID_BT_TYPE_21, ///< Tree 2st column 1st row. - WID_BT_TYPE_22 = ::WID_BT_TYPE_22, ///< Tree 2st column 2nd row. - WID_BT_TYPE_23 = ::WID_BT_TYPE_23, ///< Tree 2st column 3rd row. - WID_BT_TYPE_24 = ::WID_BT_TYPE_24, ///< Tree 2st column 4th row. - WID_BT_TYPE_31 = ::WID_BT_TYPE_31, ///< Tree 3st column 1st row. - WID_BT_TYPE_32 = ::WID_BT_TYPE_32, ///< Tree 3st column 2nd row. - WID_BT_TYPE_33 = ::WID_BT_TYPE_33, ///< Tree 3st column 3rd row. - WID_BT_TYPE_34 = ::WID_BT_TYPE_34, ///< Tree 3st column 4th row. - WID_BT_TYPE_RANDOM = ::WID_BT_TYPE_RANDOM, ///< Button to build random type of tree. - WID_BT_MANY_RANDOM = ::WID_BT_MANY_RANDOM, ///< Button to build many random trees. - }; - - /* automatically generated from ../../widgets/vehicle_widget.h */ - /** Widgets of the #VehicleViewWindow class. */ - enum VehicleViewWidgets { - WID_VV_CAPTION = ::WID_VV_CAPTION, ///< Caption of window. - WID_VV_VIEWPORT = ::WID_VV_VIEWPORT, ///< Viewport widget. - WID_VV_START_STOP = ::WID_VV_START_STOP, ///< Start or stop this vehicle, and show information about the current state. - WID_VV_CENTER_MAIN_VIEW = ::WID_VV_CENTER_MAIN_VIEW, ///< Center the main view on this vehicle. - WID_VV_GOTO_DEPOT = ::WID_VV_GOTO_DEPOT, ///< Order this vehicle to go to the depot. - WID_VV_REFIT = ::WID_VV_REFIT, ///< Open the refit window. - WID_VV_SHOW_ORDERS = ::WID_VV_SHOW_ORDERS, ///< Show the orders of this vehicle. - WID_VV_SHOW_DETAILS = ::WID_VV_SHOW_DETAILS, ///< Show details of this vehicle. - WID_VV_CLONE = ::WID_VV_CLONE, ///< Clone this vehicle. - WID_VV_SELECT_DEPOT_CLONE = ::WID_VV_SELECT_DEPOT_CLONE, ///< Selection widget between 'goto depot', and 'clone vehicle' buttons. - WID_VV_SELECT_REFIT_TURN = ::WID_VV_SELECT_REFIT_TURN, ///< Selection widget between 'refit' and 'turn around' buttons. - WID_VV_TURN_AROUND = ::WID_VV_TURN_AROUND, ///< Turn this vehicle around. - WID_VV_FORCE_PROCEED = ::WID_VV_FORCE_PROCEED, ///< Force this vehicle to pass a signal at danger. - }; - - /** Widgets of the #RefitWindow class. */ - enum VehicleRefitWidgets { - WID_VR_CAPTION = ::WID_VR_CAPTION, ///< Caption of window. - WID_VR_VEHICLE_PANEL_DISPLAY = ::WID_VR_VEHICLE_PANEL_DISPLAY, ///< Display with a representation of the vehicle to refit. - WID_VR_SHOW_HSCROLLBAR = ::WID_VR_SHOW_HSCROLLBAR, ///< Selection widget for the horizontal scrollbar. - WID_VR_HSCROLLBAR = ::WID_VR_HSCROLLBAR, ///< Horizontal scrollbar or the vehicle display. - WID_VR_SELECT_HEADER = ::WID_VR_SELECT_HEADER, ///< Header with question about the cargo to carry. - WID_VR_MATRIX = ::WID_VR_MATRIX, ///< Options to refit to. - WID_VR_SCROLLBAR = ::WID_VR_SCROLLBAR, ///< Scrollbar for the refit options. - WID_VR_INFO = ::WID_VR_INFO, ///< Information about the currently selected refit option. - WID_VR_REFIT = ::WID_VR_REFIT, ///< Perform the refit. - }; - - /** Widgets of the #VehicleDetailsWindow class. */ - enum VehicleDetailsWidgets { - WID_VD_CAPTION = ::WID_VD_CAPTION, ///< Caption of window. - WID_VD_RENAME_VEHICLE = ::WID_VD_RENAME_VEHICLE, ///< Rename this vehicle. - WID_VD_TOP_DETAILS = ::WID_VD_TOP_DETAILS, ///< Panel with generic details. - WID_VD_INCREASE_SERVICING_INTERVAL = ::WID_VD_INCREASE_SERVICING_INTERVAL, ///< Increase the servicing interval. - WID_VD_DECREASE_SERVICING_INTERVAL = ::WID_VD_DECREASE_SERVICING_INTERVAL, ///< Decrease the servicing interval. - WID_VD_SERVICE_INTERVAL_DROPDOWN = ::WID_VD_SERVICE_INTERVAL_DROPDOWN, ///< Dropdown to select default/days/percent service interval. - WID_VD_SERVICING_INTERVAL = ::WID_VD_SERVICING_INTERVAL, ///< Information about the servicing interval. - WID_VD_MIDDLE_DETAILS = ::WID_VD_MIDDLE_DETAILS, ///< Details for non-trains. - WID_VD_MATRIX = ::WID_VD_MATRIX, ///< List of details for trains. - WID_VD_SCROLLBAR = ::WID_VD_SCROLLBAR, ///< Scrollbar for train details. - WID_VD_DETAILS_CARGO_CARRIED = ::WID_VD_DETAILS_CARGO_CARRIED, ///< Show carried cargo per part of the train. - WID_VD_DETAILS_TRAIN_VEHICLES = ::WID_VD_DETAILS_TRAIN_VEHICLES, ///< Show all parts of the train with their description. - WID_VD_DETAILS_CAPACITY_OF_EACH = ::WID_VD_DETAILS_CAPACITY_OF_EACH, ///< Show the capacity of all train parts. - WID_VD_DETAILS_TOTAL_CARGO = ::WID_VD_DETAILS_TOTAL_CARGO, ///< Show the capacity and carried cargo amounts aggregated per cargo of the train. - }; - - /** Widgets of the #VehicleListWindow class. */ - enum VehicleListWidgets { - WID_VL_CAPTION = ::WID_VL_CAPTION, ///< Caption of window. - WID_VL_SORT_ORDER = ::WID_VL_SORT_ORDER, ///< Sort order. - WID_VL_SORT_BY_PULLDOWN = ::WID_VL_SORT_BY_PULLDOWN, ///< Sort by dropdown list. - WID_VL_LIST = ::WID_VL_LIST, ///< List of the vehicles. - WID_VL_SCROLLBAR = ::WID_VL_SCROLLBAR, ///< Scrollbar for the list. - WID_VL_HIDE_BUTTONS = ::WID_VL_HIDE_BUTTONS, ///< Selection to hide the buttons. - WID_VL_AVAILABLE_VEHICLES = ::WID_VL_AVAILABLE_VEHICLES, ///< Available vehicles. - WID_VL_MANAGE_VEHICLES_DROPDOWN = ::WID_VL_MANAGE_VEHICLES_DROPDOWN, ///< Manage vehicles dropdown list. - WID_VL_STOP_ALL = ::WID_VL_STOP_ALL, ///< Stop all button. - WID_VL_START_ALL = ::WID_VL_START_ALL, ///< Start all button. - }; - - /* automatically generated from ../../widgets/viewport_widget.h */ - /** Widgets of the #ExtraViewportWindow class. */ - enum ExtraViewportWidgets { - WID_EV_CAPTION = ::WID_EV_CAPTION, ///< Caption of window. - WID_EV_VIEWPORT = ::WID_EV_VIEWPORT, ///< The viewport. - WID_EV_ZOOM_IN = ::WID_EV_ZOOM_IN, ///< Zoom in. - WID_EV_ZOOM_OUT = ::WID_EV_ZOOM_OUT, ///< Zoom out. - WID_EV_MAIN_TO_VIEW = ::WID_EV_MAIN_TO_VIEW, ///< Center the view of this viewport on the main view. - WID_EV_VIEW_TO_MAIN = ::WID_EV_VIEW_TO_MAIN, ///< Center the main view on the view of this viewport. - }; - - /* automatically generated from ../../widgets/waypoint_widget.h */ - /** Widgets of the #WaypointWindow class. */ - enum WaypointWidgets { - WID_W_CAPTION = ::WID_W_CAPTION, ///< Caption of window. - WID_W_VIEWPORT = ::WID_W_VIEWPORT, ///< The viewport on this waypoint. - WID_W_CENTER_VIEW = ::WID_W_CENTER_VIEW, ///< Center the main view on this waypoint. - WID_W_RENAME = ::WID_W_RENAME, ///< Rename this waypoint. - WID_W_SHOW_VEHICLES = ::WID_W_SHOW_VEHICLES, ///< Show the vehicles visiting this waypoint. - }; - - // @endenum -}; - -#endif /* SCRIPT_WINDOW_HPP */ diff --git a/src/script/api/script_window.hpp.in b/src/script/api/script_window.hpp.in new file mode 100644 index 0000000000..a1dbb65670 --- /dev/null +++ b/src/script/api/script_window.hpp.in @@ -0,0 +1,171 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_window.hpp Everything to handle window interaction. */ + +#ifndef SCRIPT_WINDOW_HPP +#define SCRIPT_WINDOW_HPP + +#include "script_object.hpp" +#include "../../window_type.h" +#include "../../gfx_type.h" + +#include "../../widgets/ai_widget.h" +#include "../../widgets/airport_widget.h" +#include "../../widgets/autoreplace_widget.h" +#include "../../widgets/bootstrap_widget.h" +#include "../../widgets/bridge_widget.h" +#include "../../widgets/build_vehicle_widget.h" +#include "../../widgets/cheat_widget.h" +#include "../../widgets/company_widget.h" +#include "../../widgets/console_widget.h" +#include "../../widgets/date_widget.h" +#include "../../widgets/depot_widget.h" +#include "../../widgets/dock_widget.h" +#include "../../widgets/dropdown_widget.h" +#include "../../widgets/engine_widget.h" +#include "../../widgets/error_widget.h" +#include "../../widgets/fios_widget.h" +#include "../../widgets/framerate_widget.h" +#include "../../widgets/genworld_widget.h" +#include "../../widgets/goal_widget.h" +#include "../../widgets/graph_widget.h" +#include "../../widgets/group_widget.h" +#include "../../widgets/highscore_widget.h" +#include "../../widgets/industry_widget.h" +#include "../../widgets/intro_widget.h" +#include "../../widgets/main_widget.h" +#include "../../widgets/misc_widget.h" +#include "../../widgets/music_widget.h" +#include "../../widgets/network_chat_widget.h" +#include "../../widgets/network_content_widget.h" +#include "../../widgets/network_widget.h" +#include "../../widgets/newgrf_debug_widget.h" +#include "../../widgets/newgrf_widget.h" +#include "../../widgets/news_widget.h" +#include "../../widgets/object_widget.h" +#include "../../widgets/order_widget.h" +#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" +#include "../../widgets/station_widget.h" +#include "../../widgets/statusbar_widget.h" +#include "../../widgets/subsidy_widget.h" +#include "../../widgets/terraform_widget.h" +#include "../../widgets/timetable_widget.h" +#include "../../widgets/toolbar_widget.h" +#include "../../widgets/town_widget.h" +#include "../../widgets/transparency_widget.h" +#include "../../widgets/tree_widget.h" +#include "../../widgets/vehicle_widget.h" +#include "../../widgets/viewport_widget.h" +#include "../../widgets/waypoint_widget.h" +#include "../../widgets/link_graph_legend_widget.h" +#include "../../widgets/story_widget.h" + +/** + * Class that handles window interaction. A Window in OpenTTD has two imporant + * values. The WindowClass, and a Window number. The first indicates roughly + * which window it is. WC_TOWN_VIEW for example, is the view of a town. + * The Window number is a bit more complex, as it depends mostly on the + * WindowClass. For example for WC_TOWN_VIEW it is the TownID. In general a + * good rule of thumb is: either the number is always 0, or the ID of the + * object in question. + * In the comment at the widget enum, it is mentioned how the number is used. + * + * Note, that the detailed window layout is very version specific. + * Enum values might be added, changed or removed in future versions without notice + * in the changelog, and there won't be any means of compatibility. + * + * @api game + */ +class ScriptWindow : public ScriptObject { +public: + // @enum WindowNumberEnum ../../window_type.h@ENUM_WINDOWNUMBERENUM@ + // @endenum + + // @enum WindowClass ../../window_type.h@ENUM_WINDOWCLASS@ + // @endenum + + /** + * The colours in the game which you can use for text and highlights. + */ + enum TextColour { + /* Note: these values represent part of the in-game TextColour enum */ + TC_BLUE = ::TC_BLUE, ///< Blue colour. + TC_SILVER = ::TC_SILVER, ///< Silver colour. + TC_GOLD = ::TC_GOLD, ///< Gold colour. + TC_RED = ::TC_RED, ///< Red colour. + TC_PURPLE = ::TC_PURPLE, ///< Purple colour. + TC_LIGHT_BROWN = ::TC_LIGHT_BROWN, ///< Light brown colour. + TC_ORANGE = ::TC_ORANGE, ///< Orange colour. + TC_GREEN = ::TC_GREEN, ///< Green colour. + TC_YELLOW = ::TC_YELLOW, ///< Yellow colour. + TC_DARK_GREEN = ::TC_DARK_GREEN, ///< Dark green colour. + TC_CREAM = ::TC_CREAM, ///< Cream colour. + TC_BROWN = ::TC_BROWN, ///< Brown colour. + TC_WHITE = ::TC_WHITE, ///< White colour. + TC_LIGHT_BLUE = ::TC_LIGHT_BLUE, ///< Light blue colour. + TC_GREY = ::TC_GREY, ///< Grey colour. + TC_DARK_BLUE = ::TC_DARK_BLUE, ///< Dark blue colour. + TC_BLACK = ::TC_BLACK, ///< Black colour. + TC_INVALID = ::TC_INVALID, ///< Invalid colour. + }; + + /** + * Special number values. + */ + enum NumberType { + NUMBER_ALL = 0xFFFFFFFF, ///< Value to select all windows of a class. + }; + + /** + * Special widget values. + */ + enum WidgetType { + WIDGET_ALL = 0xFF, ///< Value to select all widgets of a window. + }; + + /** + * Close a window. + * @param window The class of the window to close. + * @param number The number of the window to close, or NUMBER_ALL to close all of this class. + * @pre !ScriptGame::IsMultiplayer(). + */ + static void Close(WindowClass window, uint32 number); + + /** + * Check if a window is open. + * @param window The class of the window to check for. + * @param number The number of the window to check for, or NUMBER_ALL to check for any in the class. + * @pre !ScriptGame::IsMultiplayer(). + * @return True if the window is open. + */ + static bool IsOpen(WindowClass window, uint32 number); + + /** + * Highlight a widget in a window. + * @param window The class of the window to highlight a widget in. + * @param number The number of the window to highlight a widget in. + * @param widget The widget in the window to highlight, or WIDGET_ALL (in combination with TC_INVALID) to disable all widget highlighting on this window. + * @param colour The colour of the highlight, or TC_INVALID for disabling. + * @pre !ScriptGame::IsMultiplayer(). + * @pre number != NUMBER_ALL. + * @pre colour < TC_END || (widget == WIDGET_ALL && colour == TC_INVALID). + * @pre IsOpen(window, number). + */ + static void Highlight(WindowClass window, uint32 number, uint8 widget, TextColour colour); + + // @enum .*Widgets ../../widgets/*_widget.h@ENUM_WIDGETS@ + // @endenum +}; + +#endif /* SCRIPT_WINDOW_HPP */ From 4079c47b6cd5d210bdc31eff2040fb5aeb0f10de Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 12 Mar 2019 15:37:57 +0100 Subject: [PATCH 231/601] Change: rewrote squirrel_export in CMake --- cmake/scripts/SquirrelExport.cmake | 667 ++++++++ cmake/scripts/SquirrelIncludes.cmake | 60 + src/ai/ai_instance.cpp | 164 +- src/game/game_instance.cpp | 183 +-- src/script/api/CMakeLists.txt | 96 +- src/script/api/Doxyfile_AI | 2 +- src/script/api/Doxyfile_Game | 2 +- src/script/api/ai/ai_accounting.hpp.sq | 26 - src/script/api/ai/ai_airport.hpp.sq | 56 - src/script/api/ai/ai_base.hpp.sq | 30 - src/script/api/ai/ai_basestation.hpp.sq | 33 - src/script/api/ai/ai_bridge.hpp.sq | 48 - src/script/api/ai/ai_bridgelist.hpp.sq | 35 - src/script/api/ai/ai_cargo.hpp.sq | 55 - src/script/api/ai/ai_cargolist.hpp.sq | 59 - src/script/api/ai/ai_company.hpp.sq | 107 -- src/script/api/ai/ai_date.hpp.sq | 32 - src/script/api/ai/ai_depotlist.hpp.sq | 23 - src/script/api/ai/ai_engine.hpp.sq | 51 - src/script/api/ai/ai_enginelist.hpp.sq | 23 - src/script/api/ai/ai_error.hpp.sq | 120 -- src/script/api/ai/ai_event.hpp.sq | 74 - src/script/api/ai/ai_event_types.hpp.sq | 421 ----- src/script/api/ai/ai_execmode.hpp.sq | 23 - src/script/api/ai/ai_gamesettings.hpp.sq | 27 - src/script/api/ai/ai_group.hpp.sq | 52 - src/script/api/ai/ai_grouplist.hpp.sq | 23 - src/script/api/ai/ai_industry.hpp.sq | 47 - src/script/api/ai/ai_industrylist.hpp.sq | 47 - src/script/api/ai/ai_industrytype.hpp.sq | 42 - src/script/api/ai/ai_industrytypelist.hpp.sq | 23 - src/script/api/ai/ai_infrastructure.hpp.sq | 37 - src/script/api/ai/ai_list.hpp.sq | 62 - src/script/api/ai/ai_log.hpp.sq | 27 - src/script/api/ai/ai_map.hpp.sq | 37 - src/script/api/ai/ai_marine.hpp.sq | 51 - src/script/api/ai/ai_order.hpp.sq | 116 -- src/script/api/ai/ai_priorityqueue.hpp.sq | 31 - src/script/api/ai/ai_rail.hpp.sq | 98 -- src/script/api/ai/ai_railtypelist.hpp.sq | 23 - src/script/api/ai/ai_road.hpp.sq | 93 -- src/script/api/ai/ai_roadtypelist.hpp.sq | 23 - src/script/api/ai/ai_sign.hpp.sq | 37 - src/script/api/ai/ai_signlist.hpp.sq | 23 - src/script/api/ai/ai_station.hpp.sq | 68 - src/script/api/ai/ai_stationlist.hpp.sq | 174 --- src/script/api/ai/ai_subsidy.hpp.sq | 37 - src/script/api/ai/ai_subsidylist.hpp.sq | 23 - src/script/api/ai/ai_testmode.hpp.sq | 23 - src/script/api/ai/ai_tile.hpp.sq | 124 -- src/script/api/ai/ai_tilelist.hpp.sq | 64 - src/script/api/ai/ai_town.hpp.sq | 81 - src/script/api/ai/ai_townlist.hpp.sq | 35 - src/script/api/ai/ai_tunnel.hpp.sq | 44 - src/script/api/ai/ai_vehicle.hpp.sq | 147 -- src/script/api/ai/ai_vehiclelist.hpp.sq | 83 - src/script/api/ai/ai_waypoint.hpp.sq | 40 - src/script/api/ai/ai_waypointlist.hpp.sq | 35 - src/script/api/game/game_accounting.hpp.sq | 26 - src/script/api/game/game_admin.hpp.sq | 25 - src/script/api/game/game_airport.hpp.sq | 56 - src/script/api/game/game_base.hpp.sq | 30 - src/script/api/game/game_basestation.hpp.sq | 33 - src/script/api/game/game_bridge.hpp.sq | 48 - src/script/api/game/game_bridgelist.hpp.sq | 35 - src/script/api/game/game_cargo.hpp.sq | 55 - src/script/api/game/game_cargolist.hpp.sq | 59 - src/script/api/game/game_cargomonitor.hpp.sq | 29 - src/script/api/game/game_client.hpp.sq | 32 - src/script/api/game/game_clientlist.hpp.sq | 35 - src/script/api/game/game_company.hpp.sq | 117 -- src/script/api/game/game_companymode.hpp.sq | 23 - src/script/api/game/game_date.hpp.sq | 33 - src/script/api/game/game_depotlist.hpp.sq | 23 - src/script/api/game/game_engine.hpp.sq | 53 - src/script/api/game/game_enginelist.hpp.sq | 23 - src/script/api/game/game_error.hpp.sq | 120 -- src/script/api/game/game_event.hpp.sq | 74 - src/script/api/game/game_event_types.hpp.sq | 363 ----- src/script/api/game/game_game.hpp.sq | 34 - src/script/api/game/game_gamesettings.hpp.sq | 27 - src/script/api/game/game_goal.hpp.sq | 64 - src/script/api/game/game_industry.hpp.sq | 47 - src/script/api/game/game_industrylist.hpp.sq | 47 - src/script/api/game/game_industrytype.hpp.sq | 42 - .../api/game/game_industrytypelist.hpp.sq | 23 - .../api/game/game_infrastructure.hpp.sq | 37 - src/script/api/game/game_list.hpp.sq | 62 - src/script/api/game/game_log.hpp.sq | 27 - src/script/api/game/game_map.hpp.sq | 37 - src/script/api/game/game_marine.hpp.sq | 51 - src/script/api/game/game_news.hpp.sq | 38 - src/script/api/game/game_order.hpp.sq | 99 -- src/script/api/game/game_priorityqueue.hpp.sq | 31 - src/script/api/game/game_rail.hpp.sq | 98 -- src/script/api/game/game_railtypelist.hpp.sq | 23 - src/script/api/game/game_road.hpp.sq | 93 -- src/script/api/game/game_roadtypelist.hpp.sq | 23 - src/script/api/game/game_sign.hpp.sq | 38 - src/script/api/game/game_signlist.hpp.sq | 23 - src/script/api/game/game_station.hpp.sq | 69 - src/script/api/game/game_stationlist.hpp.sq | 174 --- src/script/api/game/game_story_page.hpp.sq | 124 -- .../api/game/game_storypageelementlist.hpp.sq | 23 - src/script/api/game/game_storypagelist.hpp.sq | 23 - src/script/api/game/game_subsidy.hpp.sq | 38 - src/script/api/game/game_subsidylist.hpp.sq | 23 - src/script/api/game/game_text.hpp.sq | 29 - src/script/api/game/game_tile.hpp.sq | 124 -- src/script/api/game/game_tilelist.hpp.sq | 64 - src/script/api/game/game_town.hpp.sq | 88 -- src/script/api/game/game_townlist.hpp.sq | 35 - src/script/api/game/game_tunnel.hpp.sq | 44 - src/script/api/game/game_vehicle.hpp.sq | 148 -- src/script/api/game/game_vehiclelist.hpp.sq | 59 - src/script/api/game/game_viewport.hpp.sq | 28 - src/script/api/game/game_waypoint.hpp.sq | 40 - src/script/api/game/game_waypointlist.hpp.sq | 35 - src/script/api/game/game_window.hpp.sq | 1390 ----------------- ...execmode.hpp.sq => script_includes.hpp.in} | 14 +- src/script/api/squirrel_export.awk | 563 ------- ...tmode.hpp.sq => squirrel_export.hpp.sq.in} | 16 +- src/script/api/squirrel_export.sh | 126 -- src/script/api/squirrel_export.vbs | 941 ----------- .../api/template/template_accounting.hpp.sq | 19 - src/script/api/template/template_admin.hpp.sq | 19 - .../api/template/template_airport.hpp.sq | 25 - src/script/api/template/template_base.hpp.sq | 19 - .../api/template/template_basestation.hpp.sq | 23 - .../api/template/template_bridge.hpp.sq | 23 - .../api/template/template_bridgelist.hpp.sq | 28 - src/script/api/template/template_cargo.hpp.sq | 29 - .../api/template/template_cargolist.hpp.sq | 46 - .../api/template/template_cargomonitor.hpp.sq | 19 - .../api/template/template_client.hpp.sq | 23 - .../api/template/template_clientlist.hpp.sq | 28 - .../api/template/template_company.hpp.sq | 33 - .../api/template/template_companymode.hpp.sq | 19 - src/script/api/template/template_date.hpp.sq | 23 - .../api/template/template_depotlist.hpp.sq | 19 - .../api/template/template_engine.hpp.sq | 19 - .../api/template/template_enginelist.hpp.sq | 19 - src/script/api/template/template_error.hpp.sq | 25 - src/script/api/template/template_event.hpp.sq | 32 - .../api/template/template_event_types.hpp.sq | 302 ---- .../api/template/template_execmode.hpp.sq | 19 - src/script/api/template/template_game.hpp.sq | 23 - .../api/template/template_gamesettings.hpp.sq | 19 - src/script/api/template/template_goal.hpp.sq | 29 - src/script/api/template/template_group.hpp.sq | 23 - .../api/template/template_grouplist.hpp.sq | 19 - .../api/template/template_industry.hpp.sq | 23 - .../api/template/template_industrylist.hpp.sq | 37 - .../api/template/template_industrytype.hpp.sq | 23 - .../template/template_industrytypelist.hpp.sq | 19 - .../template/template_infrastructure.hpp.sq | 23 - src/script/api/template/template_list.hpp.sq | 23 - src/script/api/template/template_log.hpp.sq | 19 - src/script/api/template/template_map.hpp.sq | 19 - .../api/template/template_marine.hpp.sq | 25 - src/script/api/template/template_news.hpp.sq | 25 - src/script/api/template/template_order.hpp.sq | 33 - src/script/api/template/template_rail.hpp.sq | 31 - .../api/template/template_railtypelist.hpp.sq | 19 - src/script/api/template/template_road.hpp.sq | 31 - .../api/template/template_roadtypelist.hpp.sq | 19 - src/script/api/template/template_sign.hpp.sq | 23 - .../api/template/template_signlist.hpp.sq | 19 - .../api/template/template_station.hpp.sq | 25 - .../api/template/template_stationlist.hpp.sq | 133 -- .../api/template/template_story_page.hpp.sq | 33 - .../template_storypageelementlist.hpp.sq | 19 - .../template/template_storypagelist.hpp.sq | 19 - .../api/template/template_subsidy.hpp.sq | 23 - .../api/template/template_subsidylist.hpp.sq | 19 - .../api/template/template_testmode.hpp.sq | 19 - src/script/api/template/template_text.hpp.sq | 28 - src/script/api/template/template_tile.hpp.sq | 33 - .../api/template/template_tilelist.hpp.sq | 46 - src/script/api/template/template_town.hpp.sq | 31 - .../api/template/template_townlist.hpp.sq | 28 - .../api/template/template_tunnel.hpp.sq | 23 - .../api/template/template_vehicle.hpp.sq | 27 - .../api/template/template_vehiclelist.hpp.sq | 64 - .../api/template/template_viewport.hpp.sq | 19 - .../api/template/template_waypoint.hpp.sq | 25 - .../api/template/template_waypointlist.hpp.sq | 28 - .../api/template/template_window.hpp.sq | 263 ---- 188 files changed, 828 insertions(+), 12173 deletions(-) create mode 100644 cmake/scripts/SquirrelExport.cmake create mode 100644 cmake/scripts/SquirrelIncludes.cmake delete mode 100644 src/script/api/ai/ai_accounting.hpp.sq delete mode 100644 src/script/api/ai/ai_airport.hpp.sq delete mode 100644 src/script/api/ai/ai_base.hpp.sq delete mode 100644 src/script/api/ai/ai_basestation.hpp.sq delete mode 100644 src/script/api/ai/ai_bridge.hpp.sq delete mode 100644 src/script/api/ai/ai_bridgelist.hpp.sq delete mode 100644 src/script/api/ai/ai_cargo.hpp.sq delete mode 100644 src/script/api/ai/ai_cargolist.hpp.sq delete mode 100644 src/script/api/ai/ai_company.hpp.sq delete mode 100644 src/script/api/ai/ai_date.hpp.sq delete mode 100644 src/script/api/ai/ai_depotlist.hpp.sq delete mode 100644 src/script/api/ai/ai_engine.hpp.sq delete mode 100644 src/script/api/ai/ai_enginelist.hpp.sq delete mode 100644 src/script/api/ai/ai_error.hpp.sq delete mode 100644 src/script/api/ai/ai_event.hpp.sq delete mode 100644 src/script/api/ai/ai_event_types.hpp.sq delete mode 100644 src/script/api/ai/ai_execmode.hpp.sq delete mode 100644 src/script/api/ai/ai_gamesettings.hpp.sq delete mode 100644 src/script/api/ai/ai_group.hpp.sq delete mode 100644 src/script/api/ai/ai_grouplist.hpp.sq delete mode 100644 src/script/api/ai/ai_industry.hpp.sq delete mode 100644 src/script/api/ai/ai_industrylist.hpp.sq delete mode 100644 src/script/api/ai/ai_industrytype.hpp.sq delete mode 100644 src/script/api/ai/ai_industrytypelist.hpp.sq delete mode 100644 src/script/api/ai/ai_infrastructure.hpp.sq delete mode 100644 src/script/api/ai/ai_list.hpp.sq delete mode 100644 src/script/api/ai/ai_log.hpp.sq delete mode 100644 src/script/api/ai/ai_map.hpp.sq delete mode 100644 src/script/api/ai/ai_marine.hpp.sq delete mode 100644 src/script/api/ai/ai_order.hpp.sq delete mode 100644 src/script/api/ai/ai_priorityqueue.hpp.sq delete mode 100644 src/script/api/ai/ai_rail.hpp.sq delete mode 100644 src/script/api/ai/ai_railtypelist.hpp.sq delete mode 100644 src/script/api/ai/ai_road.hpp.sq delete mode 100644 src/script/api/ai/ai_roadtypelist.hpp.sq delete mode 100644 src/script/api/ai/ai_sign.hpp.sq delete mode 100644 src/script/api/ai/ai_signlist.hpp.sq delete mode 100644 src/script/api/ai/ai_station.hpp.sq delete mode 100644 src/script/api/ai/ai_stationlist.hpp.sq delete mode 100644 src/script/api/ai/ai_subsidy.hpp.sq delete mode 100644 src/script/api/ai/ai_subsidylist.hpp.sq delete mode 100644 src/script/api/ai/ai_testmode.hpp.sq delete mode 100644 src/script/api/ai/ai_tile.hpp.sq delete mode 100644 src/script/api/ai/ai_tilelist.hpp.sq delete mode 100644 src/script/api/ai/ai_town.hpp.sq delete mode 100644 src/script/api/ai/ai_townlist.hpp.sq delete mode 100644 src/script/api/ai/ai_tunnel.hpp.sq delete mode 100644 src/script/api/ai/ai_vehicle.hpp.sq delete mode 100644 src/script/api/ai/ai_vehiclelist.hpp.sq delete mode 100644 src/script/api/ai/ai_waypoint.hpp.sq delete mode 100644 src/script/api/ai/ai_waypointlist.hpp.sq delete mode 100644 src/script/api/game/game_accounting.hpp.sq delete mode 100644 src/script/api/game/game_admin.hpp.sq delete mode 100644 src/script/api/game/game_airport.hpp.sq delete mode 100644 src/script/api/game/game_base.hpp.sq delete mode 100644 src/script/api/game/game_basestation.hpp.sq delete mode 100644 src/script/api/game/game_bridge.hpp.sq delete mode 100644 src/script/api/game/game_bridgelist.hpp.sq delete mode 100644 src/script/api/game/game_cargo.hpp.sq delete mode 100644 src/script/api/game/game_cargolist.hpp.sq delete mode 100644 src/script/api/game/game_cargomonitor.hpp.sq delete mode 100644 src/script/api/game/game_client.hpp.sq delete mode 100644 src/script/api/game/game_clientlist.hpp.sq delete mode 100644 src/script/api/game/game_company.hpp.sq delete mode 100644 src/script/api/game/game_companymode.hpp.sq delete mode 100644 src/script/api/game/game_date.hpp.sq delete mode 100644 src/script/api/game/game_depotlist.hpp.sq delete mode 100644 src/script/api/game/game_engine.hpp.sq delete mode 100644 src/script/api/game/game_enginelist.hpp.sq delete mode 100644 src/script/api/game/game_error.hpp.sq delete mode 100644 src/script/api/game/game_event.hpp.sq delete mode 100644 src/script/api/game/game_event_types.hpp.sq delete mode 100644 src/script/api/game/game_game.hpp.sq delete mode 100644 src/script/api/game/game_gamesettings.hpp.sq delete mode 100644 src/script/api/game/game_goal.hpp.sq delete mode 100644 src/script/api/game/game_industry.hpp.sq delete mode 100644 src/script/api/game/game_industrylist.hpp.sq delete mode 100644 src/script/api/game/game_industrytype.hpp.sq delete mode 100644 src/script/api/game/game_industrytypelist.hpp.sq delete mode 100644 src/script/api/game/game_infrastructure.hpp.sq delete mode 100644 src/script/api/game/game_list.hpp.sq delete mode 100644 src/script/api/game/game_log.hpp.sq delete mode 100644 src/script/api/game/game_map.hpp.sq delete mode 100644 src/script/api/game/game_marine.hpp.sq delete mode 100644 src/script/api/game/game_news.hpp.sq delete mode 100644 src/script/api/game/game_order.hpp.sq delete mode 100644 src/script/api/game/game_priorityqueue.hpp.sq delete mode 100644 src/script/api/game/game_rail.hpp.sq delete mode 100644 src/script/api/game/game_railtypelist.hpp.sq delete mode 100644 src/script/api/game/game_road.hpp.sq delete mode 100644 src/script/api/game/game_roadtypelist.hpp.sq delete mode 100644 src/script/api/game/game_sign.hpp.sq delete mode 100644 src/script/api/game/game_signlist.hpp.sq delete mode 100644 src/script/api/game/game_station.hpp.sq delete mode 100644 src/script/api/game/game_stationlist.hpp.sq delete mode 100644 src/script/api/game/game_story_page.hpp.sq delete mode 100644 src/script/api/game/game_storypageelementlist.hpp.sq delete mode 100644 src/script/api/game/game_storypagelist.hpp.sq delete mode 100644 src/script/api/game/game_subsidy.hpp.sq delete mode 100644 src/script/api/game/game_subsidylist.hpp.sq delete mode 100644 src/script/api/game/game_text.hpp.sq delete mode 100644 src/script/api/game/game_tile.hpp.sq delete mode 100644 src/script/api/game/game_tilelist.hpp.sq delete mode 100644 src/script/api/game/game_town.hpp.sq delete mode 100644 src/script/api/game/game_townlist.hpp.sq delete mode 100644 src/script/api/game/game_tunnel.hpp.sq delete mode 100644 src/script/api/game/game_vehicle.hpp.sq delete mode 100644 src/script/api/game/game_vehiclelist.hpp.sq delete mode 100644 src/script/api/game/game_viewport.hpp.sq delete mode 100644 src/script/api/game/game_waypoint.hpp.sq delete mode 100644 src/script/api/game/game_waypointlist.hpp.sq delete mode 100644 src/script/api/game/game_window.hpp.sq rename src/script/api/{game/game_execmode.hpp.sq => script_includes.hpp.in} (60%) delete mode 100644 src/script/api/squirrel_export.awk rename src/script/api/{game/game_testmode.hpp.sq => squirrel_export.hpp.sq.in} (59%) delete mode 100755 src/script/api/squirrel_export.sh delete mode 100644 src/script/api/squirrel_export.vbs delete mode 100644 src/script/api/template/template_accounting.hpp.sq delete mode 100644 src/script/api/template/template_admin.hpp.sq delete mode 100644 src/script/api/template/template_airport.hpp.sq delete mode 100644 src/script/api/template/template_base.hpp.sq delete mode 100644 src/script/api/template/template_basestation.hpp.sq delete mode 100644 src/script/api/template/template_bridge.hpp.sq delete mode 100644 src/script/api/template/template_bridgelist.hpp.sq delete mode 100644 src/script/api/template/template_cargo.hpp.sq delete mode 100644 src/script/api/template/template_cargolist.hpp.sq delete mode 100644 src/script/api/template/template_cargomonitor.hpp.sq delete mode 100644 src/script/api/template/template_client.hpp.sq delete mode 100644 src/script/api/template/template_clientlist.hpp.sq delete mode 100644 src/script/api/template/template_company.hpp.sq delete mode 100644 src/script/api/template/template_companymode.hpp.sq delete mode 100644 src/script/api/template/template_date.hpp.sq delete mode 100644 src/script/api/template/template_depotlist.hpp.sq delete mode 100644 src/script/api/template/template_engine.hpp.sq delete mode 100644 src/script/api/template/template_enginelist.hpp.sq delete mode 100644 src/script/api/template/template_error.hpp.sq delete mode 100644 src/script/api/template/template_event.hpp.sq delete mode 100644 src/script/api/template/template_event_types.hpp.sq delete mode 100644 src/script/api/template/template_execmode.hpp.sq delete mode 100644 src/script/api/template/template_game.hpp.sq delete mode 100644 src/script/api/template/template_gamesettings.hpp.sq delete mode 100644 src/script/api/template/template_goal.hpp.sq delete mode 100644 src/script/api/template/template_group.hpp.sq delete mode 100644 src/script/api/template/template_grouplist.hpp.sq delete mode 100644 src/script/api/template/template_industry.hpp.sq delete mode 100644 src/script/api/template/template_industrylist.hpp.sq delete mode 100644 src/script/api/template/template_industrytype.hpp.sq delete mode 100644 src/script/api/template/template_industrytypelist.hpp.sq delete mode 100644 src/script/api/template/template_infrastructure.hpp.sq delete mode 100644 src/script/api/template/template_list.hpp.sq delete mode 100644 src/script/api/template/template_log.hpp.sq delete mode 100644 src/script/api/template/template_map.hpp.sq delete mode 100644 src/script/api/template/template_marine.hpp.sq delete mode 100644 src/script/api/template/template_news.hpp.sq delete mode 100644 src/script/api/template/template_order.hpp.sq delete mode 100644 src/script/api/template/template_rail.hpp.sq delete mode 100644 src/script/api/template/template_railtypelist.hpp.sq delete mode 100644 src/script/api/template/template_road.hpp.sq delete mode 100644 src/script/api/template/template_roadtypelist.hpp.sq delete mode 100644 src/script/api/template/template_sign.hpp.sq delete mode 100644 src/script/api/template/template_signlist.hpp.sq delete mode 100644 src/script/api/template/template_station.hpp.sq delete mode 100644 src/script/api/template/template_stationlist.hpp.sq delete mode 100644 src/script/api/template/template_story_page.hpp.sq delete mode 100644 src/script/api/template/template_storypageelementlist.hpp.sq delete mode 100644 src/script/api/template/template_storypagelist.hpp.sq delete mode 100644 src/script/api/template/template_subsidy.hpp.sq delete mode 100644 src/script/api/template/template_subsidylist.hpp.sq delete mode 100644 src/script/api/template/template_testmode.hpp.sq delete mode 100644 src/script/api/template/template_text.hpp.sq delete mode 100644 src/script/api/template/template_tile.hpp.sq delete mode 100644 src/script/api/template/template_tilelist.hpp.sq delete mode 100644 src/script/api/template/template_town.hpp.sq delete mode 100644 src/script/api/template/template_townlist.hpp.sq delete mode 100644 src/script/api/template/template_tunnel.hpp.sq delete mode 100644 src/script/api/template/template_vehicle.hpp.sq delete mode 100644 src/script/api/template/template_vehiclelist.hpp.sq delete mode 100644 src/script/api/template/template_viewport.hpp.sq delete mode 100644 src/script/api/template/template_waypoint.hpp.sq delete mode 100644 src/script/api/template/template_waypointlist.hpp.sq delete mode 100644 src/script/api/template/template_window.hpp.sq diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake new file mode 100644 index 0000000000..315be36c5e --- /dev/null +++ b/cmake/scripts/SquirrelExport.cmake @@ -0,0 +1,667 @@ +cmake_minimum_required(VERSION 3.5) + +if (NOT SCRIPT_API_SOURCE_FILE) + message(FATAL_ERROR "Script needs SCRIPT_API_SOURCE_FILE defined") +endif (NOT SCRIPT_API_SOURCE_FILE) +if (NOT SCRIPT_API_BINARY_FILE) + message(FATAL_ERROR "Script needs SCRIPT_API_BINARY_FILE defined") +endif (NOT SCRIPT_API_BINARY_FILE) +if (NOT SCRIPT_API_FILE) + message(FATAL_ERROR "Script needs SCRIPT_API_FILE defined") +endif (NOT SCRIPT_API_FILE) +if (NOT APIUC) + message(FATAL_ERROR "Script needs APIUC defined") +endif (NOT APIUC) +if (NOT APILC) + message(FATAL_ERROR "Script needs APILC defined") +endif (NOT APILC) + +macro(dump_fileheader) + get_filename_component(SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE}" NAME) + string(APPEND SQUIRREL_EXPORT "\n#include \"../${SCRIPT_API_FILE_NAME}\"") + if (NOT "${APIUC}" STREQUAL "Template") + string(REPLACE "script_" "template_" SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE_NAME}") + string(APPEND SQUIRREL_EXPORT "\n#include \"../template/${SCRIPT_API_FILE_NAME}.sq\"") + endif (NOT "${APIUC}" STREQUAL "Template") +endmacro(dump_fileheader) + +macro(dump_class_templates NAME) + string(REGEX REPLACE "^Script" "" REALNAME ${NAME}) + + string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} *GetParam(ForceType<${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }") + if ("${NAME}" STREQUAL "ScriptEvent") + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }") + elseif ("${NAME}" STREQUAL "ScriptText") + string(APPEND SQUIRREL_EXPORT "\n") + string(APPEND SQUIRREL_EXPORT "\n template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {") + string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_INSTANCE) {") + string(APPEND SQUIRREL_EXPORT "\n return GetParam(ForceType(), vm, index, ptr);") + string(APPEND SQUIRREL_EXPORT "\n }") + string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_STRING) {") + string(APPEND SQUIRREL_EXPORT "\n return new RawText(GetParam(ForceType(), vm, index, ptr));") + string(APPEND SQUIRREL_EXPORT "\n }") + string(APPEND SQUIRREL_EXPORT "\n return nullptr;") + string(APPEND SQUIRREL_EXPORT "\n }") + else () + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }") + endif () +endmacro(dump_class_templates) + +macro(reset_reader) + unset(ENUMS) + unset(ENUM_VALUES) + unset(CONST_VALUES) + unset(STRUCTS) + unset(ENUM_STRING_TO_ERRORS) + unset(ENUM_ERROR_TO_STRINGS) + unset(METHODS) + unset(STATIC_METHODS) + unset(CLS) + unset(START_SQUIRREL_DEFINE_ON_NEXT_LINE) + set(CLS_LEVEL 0) + unset(CLS_IN_API) +endmacro(reset_reader) + +reset_reader() + +file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES) + +foreach(LINE IN LISTS SOURCE_LINES) + # Ignore special doxygen blocks + if ("${LINE}" MATCHES "^#ifndef DOXYGEN_API") + set(DOXYGEN_SKIP "next") + continue() + endif () + if ("${LINE}" MATCHES "^#ifdef DOXYGEN_API") + set(DOXYGEN_SKIP "true") + continue() + endif () + if ("${LINE}" MATCHES "^#endif /\\* DOXYGEN_API \\*/") + unset(DOXYGEN_SKIP) + continue() + endif () + if ("${LINE}" MATCHES "^#else") + if ("${DOXYGEN_SKIP}" STREQUAL "next") + set(DOXYGEN_SKIP "true") + else() + unset(DOXYGEN_SKIP) + endif() + continue() + endif () + if ("${DOXYGEN_SKIP}" STREQUAL "true") + continue() + endif() + + if ("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") + set(LINE ${CMAKE_MATCH_2}) + # By default, classes are not selected + if (NOT CLS_LEVEL) + set(API_SELECTED FALSE) + endif (NOT CLS_LEVEL) + + if ("${APIUC}" STREQUAL "Template") + set(API_SELECTED TRUE) + if ("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + set(API_SELECTED FALSE) + endif ("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + continue() + endif("${APIUC}" STREQUAL "Template") + + if ("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + set(API_SELECTED FALSE) + elseif ("${LINE}" MATCHES "-${APILC}") + set(API_SELECTED FALSE) + elseif ("${LINE}" MATCHES "${APILC}") + set(API_SELECTED TRUE) + endif () + continue() + endif ("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") + + # Remove the old squirrel stuff + if ("${LINE}" MATCHES "#ifdef DEFINE_SQUIRREL_CLASS") + set(SQUIRREL_STUFF TRUE) + continue() + endif ("${LINE}" MATCHES "#ifdef DEFINE_SQUIRREL_CLASS") + if ("${LINE}" MATCHES "^#endif /\\* DEFINE_SQUIRREL_CLASS \\*/") + unset(SQUIRREL_STUFF) + continue() + endif ("${LINE}" MATCHES "^#endif /\\* DEFINE_SQUIRREL_CLASS \\*/") + if (SQUIRREL_STUFF) + continue() + endif (SQUIRREL_STUFF) + + # Ignore forward declarations of classes + if ("${LINE}" MATCHES "^( *)class(.*);") + continue() + endif ("${LINE}" MATCHES "^( *)class(.*);") + + # We only want to have public functions exported for now + if ("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") + if (NOT CLS_LEVEL) + if (NOT DEFINED API_SELECTED) + message(WARNING "Class '${CMAKE_MATCH_2}' has no @api. It won't be published to any API.") + set(API_SELECTED FALSE) + endif (NOT DEFINED API_SELECTED) + unset(IS_PUBLIC) + unset(CLS_PARAM_0) + set(CLS_PARAM_1 1) + set(CLS_PARAM_2 "x") + set(CLS_IN_API ${API_SELECTED}) + unset(API_SELECTED) + set(CLS "${CMAKE_MATCH_2}") + set(SUPER_CLS "${CMAKE_MATCH_4}") + elseif (CLS_LEVEL EQUAL 1) + if (NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif (NOT API_SELECTED) + + if (API_SELECTED) + list(APPEND STRUCTS "${CLS}::${CMAKE_MATCH_2}") + endif (API_SELECTED) + unset(API_SELECTED) + endif () + math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") + continue() + endif ("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") + if ("${LINE}" MATCHES "^( *)public") + if (CLS_LEVEL EQUAL 1) + set(IS_PUBLIC TRUE) + endif (CLS_LEVEL EQUAL 1) + continue() + endif ("${LINE}" MATCHES "^( *)public") + if ("${LINE}" MATCHES "^( *)protected") + if (CLS_LEVEL EQUAL 1) + unset(IS_PUBLIC) + endif (CLS_LEVEL EQUAL 1) + continue() + endif ("${LINE}" MATCHES "^( *)protected") + if ("${LINE}" MATCHES "^( *)private") + if (CLS_LEVEL EQUAL 1) + unset(IS_PUBLIC) + endif (CLS_LEVEL EQUAL 1) + continue() + endif ("${LINE}" MATCHES "^( *)private") + + # Ignore the comments + if ("${LINE}" MATCHES "^#") + continue() + endif ("${LINE}" MATCHES "^#") + if ("${LINE}" MATCHES "/\\*.*\\*/") + unset(COMMENT) + continue() + endif ("${LINE}" MATCHES "/\\*.*\\*/") + if ("${LINE}" MATCHES "/\\*") + set(COMMENT TRUE) + continue() + endif ("${LINE}" MATCHES "/\\*") + if ("${LINE}" MATCHES "\\*/") + unset(COMMENT) + continue() + endif ("${LINE}" MATCHES "\\*/") + if (COMMENT) + continue() + endif (COMMENT) + + # We need to make specialized conversions for structs + if ("${LINE}" MATCHES "^( *)struct ([^ ]*)") + math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") + + # Check if we want to publish this struct + if (NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif (NOT DEFINED API_SELECTED) + if (NOT API_SELECTED) + unset(API_SELECTED) + continue() + endif (NOT API_SELECTED) + unset(API_SELECTED) + + if (NOT IS_PUBLIC OR NOT CLS_LEVEL EQUAL 1) + continue() + endif (NOT IS_PUBLIC OR NOT CLS_LEVEL EQUAL 1) + + list(APPEND STRUCTS "${CLS}::${CMAKE_MATCH_2}") + continue() + endif ("${LINE}" MATCHES "^( *)struct ([^ ]*)") + + # We need to make specialized conversions for enums + if ("${LINE}" MATCHES "^( *)enum ([^ ]*)") + math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") + + # Check if we want to publish this enum + if (NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif (NOT DEFINED API_SELECTED) + if (NOT API_SELECTED) + unset(API_SELECTED) + continue() + endif (NOT API_SELECTED) + unset(API_SELECTED) + + if (NOT IS_PUBLIC) + continue() + endif (NOT IS_PUBLIC) + + set(IN_ENUM TRUE) + list(APPEND ENUMS "${CLS}::${CMAKE_MATCH_2}") + continue() + endif ("${LINE}" MATCHES "^( *)enum ([^ ]*)") + + # Maybe the end of the class, if so we can start with the Squirrel export pretty soon + if ("${LINE}" MATCHES "};") + math(EXPR CLS_LEVEL "${CLS_LEVEL} - 1") + if (CLS_LEVEL) + unset(IN_ENUM) + continue() + endif (CLS_LEVEL) + + if (CLS) + set(START_SQUIRREL_DEFINE_ON_NEXT_LINE TRUE) + endif (CLS) + continue() + endif ("${LINE}" MATCHES "};") + + # Empty/white lines. When we may do the Squirrel export, do that export. + if ("${LINE}" MATCHES "^([ ]*)$") + if (NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) + continue() + endif (NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) + + if (NOT CLS_IN_API) + reset_reader() + continue() + endif (NOT CLS_IN_API) + + if (NOT HAS_FILEHEADER) + dump_fileheader() + set(HAS_FILEHEADER TRUE) + endif (NOT HAS_FILEHEADER) + + unset(IS_PUBLIC) + unset(NAMESPACE_OPENED) + + string(REGEX REPLACE "^Script" "${APIUC}" API_CLS "${CLS}") + string(REGEX REPLACE "^Script" "${APIUC}" API_SUPER_CLS "${SUPER_CLS}") + + string(APPEND SQUIRREL_EXPORT "\n") + + if ("${APIUC}" STREQUAL "Template") + # First check whether we have enums to print + if (DEFINED ENUMS) + if (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") + set(NAMESPACE_OPENED TRUE) + endif (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\n /* Allow enums to be used as Squirrel parameters */") + foreach(ENUM IN LISTS ENUMS) + string(APPEND SQUIRREL_EXPORT "\n template <> inline ${ENUM} GetParam(ForceType<${ENUM}>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (${ENUM})tmp; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${ENUM}>(HSQUIRRELVM vm, ${ENUM} res) { sq_pushinteger(vm, (int32)res); return 1; }") + endforeach(ENUM) + endif (DEFINED ENUMS) + + # Then check whether we have structs/classes to print + if (DEFINED STRUCTS) + if (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") + set(NAMESPACE_OPENED TRUE) + endif (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\n /* Allow inner classes/structs to be used as Squirrel parameters */") + foreach(STRUCT IN LISTS STRUCTS) + dump_class_templates(${STRUCT}) + endforeach(STRUCT) + endif (DEFINED STRUCTS) + + if (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") + set(NAMESPACE_OPENED TRUE) + else (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\n") + endif (NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\n /* Allow ${CLS} to be used as Squirrel parameter */") + dump_class_templates(${CLS}) + + string(APPEND SQUIRREL_EXPORT "\n} // namespace SQConvert") + + reset_reader() + continue() + endif ("${APIUC}" STREQUAL "Template") + + string(APPEND SQUIRREL_EXPORT "\n") + string(APPEND SQUIRREL_EXPORT "\ntemplate <> const char *GetClassName<${CLS}, ST_${APIUC}>() { return \"${API_CLS}\"; }") + string(APPEND SQUIRREL_EXPORT "\n") + + # Then do the registration functions of the class. + string(APPEND SQUIRREL_EXPORT "\nvoid SQ${API_CLS}_Register(Squirrel *engine)") + string(APPEND SQUIRREL_EXPORT "\n{") + string(APPEND SQUIRREL_EXPORT "\n DefSQClass<${CLS}, ST_${APIUC}> SQ${API_CLS}(\"${API_CLS}\");") + if ("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine);") + else ("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");") + endif ("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") + if (NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") + if ("${CLS_PARAM_2}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);") + else ("${CLS_PARAM_2}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddConstructor(engine, \"${CLS_PARAM_2}\");") + endif ("${CLS_PARAM_2}" STREQUAL "v") + endif (NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") + string(APPEND SQUIRREL_EXPORT "\n") + + # Enum values + set(MLEN 0) + foreach(ENUM_VALUE IN LISTS ENUM_VALUES) + string(LENGTH "${ENUM_VALUE}" LEN) + if (MLEN LESS LEN) + set(MLEN ${LEN}) + endif (MLEN LESS LEN) + endforeach(ENUM_VALUE) + foreach(ENUM_VALUE IN LISTS ENUM_VALUES) + string(LENGTH "${ENUM_VALUE}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${ENUM_VALUE},${SPACES}\"${ENUM_VALUE}\");") + endforeach(ENUM_VALUE) + if (MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif (MLEN) + + # Const values + set(MLEN 0) + foreach(CONST_VALUE IN LISTS CONST_VALUES) + string(LENGTH "${CONST_VALUE}" LEN) + if (MLEN LESS LEN) + set(MLEN ${LEN}) + endif (MLEN LESS LEN) + endforeach(CONST_VALUE) + foreach(CONST_VALUE IN LISTS CONST_VALUES) + string(LENGTH "${CONST_VALUE}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${CONST_VALUE},${SPACES}\"${CONST_VALUE}\");") + endforeach(CONST_VALUE) + if (MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif (MLEN) + + # Mapping of OTTD strings to errors + set(MLEN 0) + foreach(ENUM_STRING_TO_ERROR IN LISTS ENUM_STRING_TO_ERRORS) + string(REPLACE ":" ";" ENUM_STRING_TO_ERROR "${ENUM_STRING_TO_ERROR}") + list(GET ENUM_STRING_TO_ERROR 0 ENUM_STRING) + string(LENGTH "${ENUM_STRING}" LEN) + if (MLEN LESS LEN) + set(MLEN ${LEN}) + endif (MLEN LESS LEN) + endforeach(ENUM_STRING_TO_ERROR) + foreach(ENUM_STRING_TO_ERROR IN LISTS ENUM_STRING_TO_ERRORS) + string(REPLACE ":" ";" ENUM_STRING_TO_ERROR "${ENUM_STRING_TO_ERROR}") + list(GET ENUM_STRING_TO_ERROR 0 ENUM_STRING) + list(GET ENUM_STRING_TO_ERROR 1 ENUM_ERROR) + string(LENGTH "${ENUM_STRING}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMap(${ENUM_STRING},${SPACES}${CLS}::${ENUM_ERROR});") + endforeach(ENUM_STRING_TO_ERROR) + if (MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif (MLEN) + + # Mapping of errors to human 'readable' strings. + set(MLEN 0) + foreach(ENUM_ERROR_TO_STRING IN LISTS ENUM_ERROR_TO_STRINGS) + string(LENGTH "${ENUM_ERROR_TO_STRING}" LEN) + if (MLEN LESS LEN) + set(MLEN ${LEN}) + endif (MLEN LESS LEN) + endforeach(ENUM_ERROR_TO_STRING) + foreach(ENUM_ERROR_TO_STRING IN LISTS ENUM_ERROR_TO_STRINGS) + string(LENGTH "${ENUM_ERROR_TO_STRING}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMapString(${CLS}::${ENUM_ERROR_TO_STRING},${SPACES}\"${ENUM_ERROR_TO_STRING}\");") + endforeach(ENUM_ERROR_TO_STRING) + if (MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif (MLEN) + + # Static methods + set(MLEN 0) + foreach(STATIC_METHOD IN LISTS STATIC_METHODS) + string(REPLACE ":" ";" STATIC_METHOD "${STATIC_METHOD}") + list(GET STATIC_METHOD 0 FUNCNAME) + string(LENGTH "${FUNCNAME}" LEN) + if (MLEN LESS LEN) + set(MLEN ${LEN}) + endif (MLEN LESS LEN) + endforeach(STATIC_METHOD) + foreach(STATIC_METHOD IN LISTS STATIC_METHODS) + string(REPLACE ":" ";" STATIC_METHOD "${STATIC_METHOD}") + list(GET STATIC_METHOD 0 FUNCNAME) + list(GET STATIC_METHOD 1 ARGC) + list(GET STATIC_METHOD 2 TYPES) + string(LENGTH "${FUNCNAME}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + if ("${TYPES}" STREQUAL "v") + if (LEN GREATER 8) + math(EXPR LEN "${LEN} - 8") + else (LEN GREATER 8) + set(LEN 0) + endif (LEN GREATER 8) + endif ("${TYPES}" STREQUAL "v") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + if ("${TYPES}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") + else ("${TYPES}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}${ARGC}, \"${TYPES}\");") + endif ("${TYPES}" STREQUAL "v") + endforeach(STATIC_METHOD) + if (MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif (MLEN) + + # Non-static methods + set(MLEN 0) + foreach(METHOD IN LISTS METHODS) + string(REPLACE ":" ";" METHOD "${METHOD}") + list(GET METHOD 0 FUNCNAME) + string(LENGTH "${FUNCNAME}" LEN) + if (MLEN LESS LEN) + set(MLEN ${LEN}) + endif (MLEN LESS LEN) + endforeach(METHOD) + foreach(METHOD IN LISTS METHODS) + string(REPLACE ":" ";" METHOD "${METHOD}") + list(GET METHOD 0 FUNCNAME) + list(GET METHOD 1 ARGC) + list(GET METHOD 2 TYPES) + string(LENGTH "${FUNCNAME}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + if ("${TYPES}" STREQUAL "v") + if (LEN GREATER 8) + math(EXPR LEN "${LEN} - 8") + else (LEN GREATER 8) + set(LEN 0) + endif (LEN GREATER 8) + endif ("${TYPES}" STREQUAL "v") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach(i) + if ("${TYPES}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") + else ("${TYPES}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}${ARGC}, \"${TYPES}\");") + endif ("${TYPES}" STREQUAL "v") + endforeach(METHOD) + if (MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif (MLEN) + + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PostRegister(engine);") + string(APPEND SQUIRREL_EXPORT "\n}") + + reset_reader() + + continue() + endif ("${LINE}" MATCHES "^([ ]*)$") + + # Skip non-public functions + if (NOT IS_PUBLIC) + continue() + endif (NOT IS_PUBLIC) + + # Add enums + if (IN_ENUM) + string(REGEX MATCH "([^, ]+)" ENUM_VALUE "${LINE}") + list(APPEND ENUM_VALUES "${ENUM_VALUE}") + + # Check if this a special error enum + list(GET ENUMS -1 ENUM) + if ("${ENUM}" MATCHES ".*::ErrorMessages") + # syntax: + # enum ErrorMessages { + # ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] + # } + + # Set the mappings + if ("${LINE}" MATCHES "\\[(.*)\\]") + string(REGEX REPLACE "[ ]" "" MAPPINGS "${CMAKE_MATCH_1}") + string(REPLACE "," ";" MAPPINGS "${MAPPINGS}") + + foreach(MAPPING IN LISTS MAPPINGS) + list(APPEND ENUM_STRING_TO_ERRORS "${MAPPING}:${ENUM_VALUE}") + endforeach(MAPPING) + + list(APPEND ENUM_ERROR_TO_STRINGS "${ENUM_VALUE}") + endif ("${LINE}" MATCHES "\\[(.*)\\]") + endif ("${ENUM}" MATCHES ".*::ErrorMessages") + continue() + endif (IN_ENUM) + + # Add a const (non-enum) value + if ("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + list(APPEND CONST_VALUES "${CMAKE_MATCH_1}") + continue() + endif ("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + + # Add a method to the list + if ("${LINE}" MATCHES "^.*\\(.*\\).*$") + if (NOT CLS_LEVEL EQUAL 1) + continue() + endif (NOT CLS_LEVEL EQUAL 1) + if ("${LINE}" MATCHES "~") + if (DEFINED API_SELECTED) + message(WARNING "Destructor for '${CLS}' has @api. Tag ignored.") + unset(API_SELECTED) + endif (DEFINED API_SELECTED) + continue() + endif ("${LINE}" MATCHES "~") + + unset(IS_STATIC) + if ("${LINE}" MATCHES "static") + set(IS_STATIC TRUE) + endif ("${LINE}" MATCHES "static") + + string(REGEX REPLACE "(virtual|static|const)[ ]+" "" LINE "${LINE}") + string(REGEX REPLACE "{.*" "" LINE "${LINE}") + set(PARAM_S "${LINE}") + string(REGEX REPLACE "\\*" "" LINE "${LINE}") + string(REGEX REPLACE "\\(.*" "" LINE "${LINE}") + + string(REGEX REPLACE ".*\\(" "" PARAM_S "${PARAM_S}") + string(REGEX REPLACE "\\).*" "" PARAM_S "${PARAM_S}") + + string(REGEX MATCH "([^ ]+)( ([^ ]+))?" RESULT "${LINE}") + set(FUNCTYPE "${CMAKE_MATCH_1}") + set(FUNCNAME "${CMAKE_MATCH_3}") + if ("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) + if (DEFINED API_SELECTED) + message(WARNING "Constructor for '${CLS}' has @api. Tag ignored.") + unset(API_SELECTED) + endif (DEFINED API_SELECTED) + set(CLS_PARAM_0 "${PARAM_S}") + if (NOT PARAM_S) + continue() + endif (NOT PARAM_S) + elseif (NOT FUNCNAME) + continue() + endif () + + string(REPLACE "," ";" PARAMS "${PARAM_S}") + if (IS_STATIC) + set(TYPES ".") + else (IS_STATIC) + set(TYPES "x") + endif (IS_STATIC) + + set(LEN 1) + foreach(PARAM IN LISTS PARAMS) + math(EXPR LEN "${LEN} + 1") + string(STRIP "${PARAM}" PARAM) + if ("${PARAM}" MATCHES "\\*|&") + if ("${PARAM}" MATCHES "^char") + # Many types can be converted to string, so use '.', not 's'. (handled by our glue code) + string(APPEND TYPES ".") + elseif ("${PARAM}" MATCHES "^void") + string(APPEND TYPES "p") + elseif ("${PARAM}" MATCHES "^Array") + string(APPEND TYPES "a") + elseif ("${PARAM}" MATCHES "^struct Array") + string(APPEND TYPES "a") + elseif ("${PARAM}" MATCHES "^Text") + string(APPEND TYPES ".") + else () + string(APPEND TYPES "x") + endif () + elseif ("${PARAM}" MATCHES "^bool") + string(APPEND TYPES "b") + elseif ("${PARAM}" MATCHES "^HSQUIRRELVM") + set(TYPES "v") + else () + string(APPEND TYPES "i") + endif () + endforeach(PARAM) + + # Check if we want to publish this function + if (NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif (NOT DEFINED API_SELECTED) + if (NOT API_SELECTED) + unset(API_SELECTED) + continue() + endif (NOT API_SELECTED) + unset(API_SELECTED) + + if ("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) + set(CLS_PARAM_1 ${LEN}) + set(CLS_PARAM_2 "${TYPES}") + elseif ("${FUNCNAME}" MATCHES "^_" AND NOT "${TYPES}" STREQUAL "v") + elseif (IS_STATIC) + list(APPEND STATIC_METHODS "${FUNCNAME}:${LEN}:${TYPES}") + else () + list(APPEND METHODS "${FUNCNAME}:${LEN}:${TYPES}") + endif () + continue() + endif ("${LINE}" MATCHES "^.*\\(.*\\).*$") +endforeach(LINE) + +configure_file(${SCRIPT_API_SOURCE_FILE} ${SCRIPT_API_BINARY_FILE}) diff --git a/cmake/scripts/SquirrelIncludes.cmake b/cmake/scripts/SquirrelIncludes.cmake new file mode 100644 index 0000000000..d6d8b8ec3e --- /dev/null +++ b/cmake/scripts/SquirrelIncludes.cmake @@ -0,0 +1,60 @@ +cmake_minimum_required(VERSION 3.5) + +if (NOT INCLUDES_SOURCE_FILE) + message(FATAL_ERROR "Script needs INCLUDES_SOURCE_FILE defined") +endif (NOT INCLUDES_SOURCE_FILE) +if (NOT INCLUDES_BINARY_FILE) + message(FATAL_ERROR "Script needs INCLUDES_BINARY_FILE defined") +endif (NOT INCLUDES_BINARY_FILE) +if (NOT APILC) + message(FATAL_ERROR "Script needs APILC defined") +endif (NOT APILC) +if (NOT APIUC) + message(FATAL_ERROR "Script needs APIUC defined") +endif (NOT APIUC) + +set(ARGC 1) +set(ARG_READ NO) + +# Read all the arguments given to CMake; we are looking for -- and everything +# that follows. Those are our api files. +while(ARGC LESS CMAKE_ARGC) + set(ARG ${CMAKE_ARGV${ARGC}}) + + if (ARG_READ) + list(APPEND SCRIPT_API_BINARY_FILES "${ARG}") + endif (ARG_READ) + + if (ARG STREQUAL "--") + set(ARG_READ YES) + endif (ARG STREQUAL "--") + + math(EXPR ARGC "${ARGC} + 1") +endwhile() + +foreach(FILE IN LISTS SCRIPT_API_BINARY_FILES) + file(STRINGS "${FILE}" LINES REGEX "^void SQ${APIUC}.*_Register\\(Squirrel \\*engine\\)$") + if (LINES) + string(REGEX REPLACE ".*api/${APILC}/(.*)" "#include \"\\1\"" FILE "${FILE}") + list(APPEND SQUIRREL_INCLUDES "${FILE}") + foreach(LINE IN LISTS LINES) + if ("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register") + continue() + endif ("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register") + string(REGEX REPLACE "^.*void " " " LINE "${LINE}") + string(REGEX REPLACE "Squirrel \\*" "" LINE "${LINE}") + list(APPEND SQUIRREL_REGISTER "${LINE}") + endforeach(LINE) + endif (LINES) +endforeach(FILE) + +list(SORT SQUIRREL_INCLUDES) +string(REPLACE ";" "\n" SQUIRREL_INCLUDES "${SQUIRREL_INCLUDES}") + +string(REGEX REPLACE "_Register" "0000Register" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}") +list(SORT SQUIRREL_REGISTER) +string(REGEX REPLACE "0000Register" "_Register" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}") +string(REPLACE ";" ";\n" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}") +set(SQUIRREL_REGISTER " SQ${APIUC}List_Register(engine);\n${SQUIRREL_REGISTER};") + +configure_file(${INCLUDES_SOURCE_FILE} ${INCLUDES_BINARY_FILE}) diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index 49f8cff64d..9e1f001631 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -24,60 +24,8 @@ /* Manually include the Text glue. */ #include "../script/api/template/template_text.hpp.sq" -/* Convert all AI related classes to Squirrel data. - * Note: this line is a marker in squirrel_export.sh. Do not change! */ -#include "../script/api/ai/ai_accounting.hpp.sq" -#include "../script/api/ai/ai_airport.hpp.sq" -#include "../script/api/ai/ai_base.hpp.sq" -#include "../script/api/ai/ai_basestation.hpp.sq" -#include "../script/api/ai/ai_bridge.hpp.sq" -#include "../script/api/ai/ai_bridgelist.hpp.sq" -#include "../script/api/ai/ai_cargo.hpp.sq" -#include "../script/api/ai/ai_cargolist.hpp.sq" -#include "../script/api/ai/ai_company.hpp.sq" -#include "../script/api/ai/ai_controller.hpp.sq" -#include "../script/api/ai/ai_date.hpp.sq" -#include "../script/api/ai/ai_depotlist.hpp.sq" -#include "../script/api/ai/ai_engine.hpp.sq" -#include "../script/api/ai/ai_enginelist.hpp.sq" -#include "../script/api/ai/ai_error.hpp.sq" -#include "../script/api/ai/ai_event.hpp.sq" -#include "../script/api/ai/ai_event_types.hpp.sq" -#include "../script/api/ai/ai_execmode.hpp.sq" -#include "../script/api/ai/ai_gamesettings.hpp.sq" -#include "../script/api/ai/ai_group.hpp.sq" -#include "../script/api/ai/ai_grouplist.hpp.sq" -#include "../script/api/ai/ai_industry.hpp.sq" -#include "../script/api/ai/ai_industrylist.hpp.sq" -#include "../script/api/ai/ai_industrytype.hpp.sq" -#include "../script/api/ai/ai_industrytypelist.hpp.sq" -#include "../script/api/ai/ai_infrastructure.hpp.sq" -#include "../script/api/ai/ai_list.hpp.sq" -#include "../script/api/ai/ai_log.hpp.sq" -#include "../script/api/ai/ai_map.hpp.sq" -#include "../script/api/ai/ai_marine.hpp.sq" -#include "../script/api/ai/ai_order.hpp.sq" -#include "../script/api/ai/ai_priorityqueue.hpp.sq" -#include "../script/api/ai/ai_rail.hpp.sq" -#include "../script/api/ai/ai_railtypelist.hpp.sq" -#include "../script/api/ai/ai_road.hpp.sq" -#include "../script/api/ai/ai_roadtypelist.hpp.sq" -#include "../script/api/ai/ai_sign.hpp.sq" -#include "../script/api/ai/ai_signlist.hpp.sq" -#include "../script/api/ai/ai_station.hpp.sq" -#include "../script/api/ai/ai_stationlist.hpp.sq" -#include "../script/api/ai/ai_subsidy.hpp.sq" -#include "../script/api/ai/ai_subsidylist.hpp.sq" -#include "../script/api/ai/ai_testmode.hpp.sq" -#include "../script/api/ai/ai_tile.hpp.sq" -#include "../script/api/ai/ai_tilelist.hpp.sq" -#include "../script/api/ai/ai_town.hpp.sq" -#include "../script/api/ai/ai_townlist.hpp.sq" -#include "../script/api/ai/ai_tunnel.hpp.sq" -#include "../script/api/ai/ai_vehicle.hpp.sq" -#include "../script/api/ai/ai_vehiclelist.hpp.sq" -#include "../script/api/ai/ai_waypoint.hpp.sq" -#include "../script/api/ai/ai_waypointlist.hpp.sq" +/* Convert all AI related classes to Squirrel data. */ +#include "../script/api/ai/ai_includes.hpp" #include "../company_base.h" #include "../company_func.h" @@ -102,112 +50,8 @@ void AIInstance::RegisterAPI() { ScriptInstance::RegisterAPI(); -/* Register all classes */ - SQAIList_Register(this->engine); - SQAIAccounting_Register(this->engine); - SQAIAirport_Register(this->engine); - SQAIBase_Register(this->engine); - SQAIBaseStation_Register(this->engine); - SQAIBridge_Register(this->engine); - SQAIBridgeList_Register(this->engine); - SQAIBridgeList_Length_Register(this->engine); - SQAICargo_Register(this->engine); - SQAICargoList_Register(this->engine); - SQAICargoList_IndustryAccepting_Register(this->engine); - SQAICargoList_IndustryProducing_Register(this->engine); - SQAICargoList_StationAccepting_Register(this->engine); - SQAICompany_Register(this->engine); - SQAIDate_Register(this->engine); - SQAIDepotList_Register(this->engine); - SQAIEngine_Register(this->engine); - SQAIEngineList_Register(this->engine); - SQAIError_Register(this->engine); - SQAIEvent_Register(this->engine); - SQAIEventAircraftDestTooFar_Register(this->engine); - SQAIEventCompanyAskMerger_Register(this->engine); - SQAIEventCompanyBankrupt_Register(this->engine); - SQAIEventCompanyInTrouble_Register(this->engine); - SQAIEventCompanyMerger_Register(this->engine); - SQAIEventCompanyNew_Register(this->engine); - SQAIEventCompanyTown_Register(this->engine); - SQAIEventController_Register(this->engine); - SQAIEventDisasterZeppelinerCleared_Register(this->engine); - SQAIEventDisasterZeppelinerCrashed_Register(this->engine); - SQAIEventEngineAvailable_Register(this->engine); - SQAIEventEnginePreview_Register(this->engine); - SQAIEventExclusiveTransportRights_Register(this->engine); - SQAIEventIndustryClose_Register(this->engine); - SQAIEventIndustryOpen_Register(this->engine); - SQAIEventRoadReconstruction_Register(this->engine); - SQAIEventStationFirstVehicle_Register(this->engine); - SQAIEventSubsidyAwarded_Register(this->engine); - SQAIEventSubsidyExpired_Register(this->engine); - SQAIEventSubsidyOffer_Register(this->engine); - SQAIEventSubsidyOfferExpired_Register(this->engine); - SQAIEventTownFounded_Register(this->engine); - SQAIEventVehicleAutoReplaced_Register(this->engine); - SQAIEventVehicleCrashed_Register(this->engine); - SQAIEventVehicleLost_Register(this->engine); - SQAIEventVehicleUnprofitable_Register(this->engine); - SQAIEventVehicleWaitingInDepot_Register(this->engine); - SQAIExecMode_Register(this->engine); - SQAIGameSettings_Register(this->engine); - SQAIGroup_Register(this->engine); - SQAIGroupList_Register(this->engine); - SQAIIndustry_Register(this->engine); - SQAIIndustryList_Register(this->engine); - SQAIIndustryList_CargoAccepting_Register(this->engine); - SQAIIndustryList_CargoProducing_Register(this->engine); - SQAIIndustryType_Register(this->engine); - SQAIIndustryTypeList_Register(this->engine); - SQAIInfrastructure_Register(this->engine); - SQAILog_Register(this->engine); - SQAIMap_Register(this->engine); - SQAIMarine_Register(this->engine); - SQAIOrder_Register(this->engine); - SQAIPriorityQueue_Register(this->engine); - SQAIRail_Register(this->engine); - SQAIRailTypeList_Register(this->engine); - SQAIRoad_Register(this->engine); - SQAIRoadTypeList_Register(this->engine); - SQAISign_Register(this->engine); - SQAISignList_Register(this->engine); - SQAIStation_Register(this->engine); - SQAIStationList_Register(this->engine); - SQAIStationList_Cargo_Register(this->engine); - SQAIStationList_CargoPlanned_Register(this->engine); - SQAIStationList_CargoPlannedByFrom_Register(this->engine); - SQAIStationList_CargoPlannedByVia_Register(this->engine); - SQAIStationList_CargoPlannedFromByVia_Register(this->engine); - SQAIStationList_CargoPlannedViaByFrom_Register(this->engine); - SQAIStationList_CargoWaiting_Register(this->engine); - SQAIStationList_CargoWaitingByFrom_Register(this->engine); - SQAIStationList_CargoWaitingByVia_Register(this->engine); - SQAIStationList_CargoWaitingFromByVia_Register(this->engine); - SQAIStationList_CargoWaitingViaByFrom_Register(this->engine); - SQAIStationList_Vehicle_Register(this->engine); - SQAISubsidy_Register(this->engine); - SQAISubsidyList_Register(this->engine); - SQAITestMode_Register(this->engine); - SQAITile_Register(this->engine); - SQAITileList_Register(this->engine); - SQAITileList_IndustryAccepting_Register(this->engine); - SQAITileList_IndustryProducing_Register(this->engine); - SQAITileList_StationType_Register(this->engine); - SQAITown_Register(this->engine); - SQAITownEffectList_Register(this->engine); - SQAITownList_Register(this->engine); - SQAITunnel_Register(this->engine); - SQAIVehicle_Register(this->engine); - SQAIVehicleList_Register(this->engine); - SQAIVehicleList_DefaultGroup_Register(this->engine); - SQAIVehicleList_Depot_Register(this->engine); - SQAIVehicleList_Group_Register(this->engine); - SQAIVehicleList_SharedOrders_Register(this->engine); - SQAIVehicleList_Station_Register(this->engine); - SQAIWaypoint_Register(this->engine); - SQAIWaypointList_Register(this->engine); - SQAIWaypointList_Vehicle_Register(this->engine); + /* Register all classes */ + SQAI_RegisterAll(this->engine); if (!this->LoadCompatibilityScripts(this->versionAPI, AI_DIR)) this->Died(); } diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 47d51e28ee..842b4b3e47 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -20,72 +20,8 @@ #include "game_text.hpp" #include "game.hpp" -/* Convert all Game related classes to Squirrel data. - * Note: this line is a marker in squirrel_export.sh. Do not change! */ -#include "../script/api/game/game_accounting.hpp.sq" -#include "../script/api/game/game_admin.hpp.sq" -#include "../script/api/game/game_airport.hpp.sq" -#include "../script/api/game/game_base.hpp.sq" -#include "../script/api/game/game_basestation.hpp.sq" -#include "../script/api/game/game_bridge.hpp.sq" -#include "../script/api/game/game_bridgelist.hpp.sq" -#include "../script/api/game/game_cargo.hpp.sq" -#include "../script/api/game/game_cargolist.hpp.sq" -#include "../script/api/game/game_cargomonitor.hpp.sq" -#include "../script/api/game/game_client.hpp.sq" -#include "../script/api/game/game_clientlist.hpp.sq" -#include "../script/api/game/game_company.hpp.sq" -#include "../script/api/game/game_companymode.hpp.sq" -#include "../script/api/game/game_controller.hpp.sq" -#include "../script/api/game/game_date.hpp.sq" -#include "../script/api/game/game_depotlist.hpp.sq" -#include "../script/api/game/game_engine.hpp.sq" -#include "../script/api/game/game_enginelist.hpp.sq" -#include "../script/api/game/game_error.hpp.sq" -#include "../script/api/game/game_event.hpp.sq" -#include "../script/api/game/game_event_types.hpp.sq" -#include "../script/api/game/game_execmode.hpp.sq" -#include "../script/api/game/game_game.hpp.sq" -#include "../script/api/game/game_gamesettings.hpp.sq" -#include "../script/api/game/game_goal.hpp.sq" -#include "../script/api/game/game_industry.hpp.sq" -#include "../script/api/game/game_industrylist.hpp.sq" -#include "../script/api/game/game_industrytype.hpp.sq" -#include "../script/api/game/game_industrytypelist.hpp.sq" -#include "../script/api/game/game_infrastructure.hpp.sq" -#include "../script/api/game/game_list.hpp.sq" -#include "../script/api/game/game_log.hpp.sq" -#include "../script/api/game/game_map.hpp.sq" -#include "../script/api/game/game_marine.hpp.sq" -#include "../script/api/game/game_news.hpp.sq" -#include "../script/api/game/game_order.hpp.sq" -#include "../script/api/game/game_priorityqueue.hpp.sq" -#include "../script/api/game/game_rail.hpp.sq" -#include "../script/api/game/game_railtypelist.hpp.sq" -#include "../script/api/game/game_road.hpp.sq" -#include "../script/api/game/game_roadtypelist.hpp.sq" -#include "../script/api/game/game_sign.hpp.sq" -#include "../script/api/game/game_signlist.hpp.sq" -#include "../script/api/game/game_station.hpp.sq" -#include "../script/api/game/game_stationlist.hpp.sq" -#include "../script/api/game/game_story_page.hpp.sq" -#include "../script/api/game/game_storypageelementlist.hpp.sq" -#include "../script/api/game/game_storypagelist.hpp.sq" -#include "../script/api/game/game_subsidy.hpp.sq" -#include "../script/api/game/game_subsidylist.hpp.sq" -#include "../script/api/game/game_testmode.hpp.sq" -#include "../script/api/game/game_text.hpp.sq" -#include "../script/api/game/game_tile.hpp.sq" -#include "../script/api/game/game_tilelist.hpp.sq" -#include "../script/api/game/game_town.hpp.sq" -#include "../script/api/game/game_townlist.hpp.sq" -#include "../script/api/game/game_tunnel.hpp.sq" -#include "../script/api/game/game_vehicle.hpp.sq" -#include "../script/api/game/game_vehiclelist.hpp.sq" -#include "../script/api/game/game_viewport.hpp.sq" -#include "../script/api/game/game_waypoint.hpp.sq" -#include "../script/api/game/game_waypointlist.hpp.sq" -#include "../script/api/game/game_window.hpp.sq" +/* Convert all Game related classes to Squirrel data. */ +#include "../script/api/game/game_includes.hpp" #include "../safeguards.h" @@ -108,119 +44,8 @@ void GameInstance::RegisterAPI() { ScriptInstance::RegisterAPI(); -/* Register all classes */ - SQGSList_Register(this->engine); - SQGSAccounting_Register(this->engine); - SQGSAdmin_Register(this->engine); - SQGSAirport_Register(this->engine); - SQGSBase_Register(this->engine); - SQGSBaseStation_Register(this->engine); - SQGSBridge_Register(this->engine); - SQGSBridgeList_Register(this->engine); - SQGSBridgeList_Length_Register(this->engine); - SQGSCargo_Register(this->engine); - SQGSCargoList_Register(this->engine); - SQGSCargoList_IndustryAccepting_Register(this->engine); - SQGSCargoList_IndustryProducing_Register(this->engine); - SQGSCargoList_StationAccepting_Register(this->engine); - SQGSCargoMonitor_Register(this->engine); - SQGSClient_Register(this->engine); - SQGSClientList_Register(this->engine); - SQGSClientList_Company_Register(this->engine); - SQGSCompany_Register(this->engine); - SQGSCompanyMode_Register(this->engine); - SQGSDate_Register(this->engine); - SQGSDepotList_Register(this->engine); - SQGSEngine_Register(this->engine); - SQGSEngineList_Register(this->engine); - SQGSError_Register(this->engine); - SQGSEvent_Register(this->engine); - SQGSEventAdminPort_Register(this->engine); - SQGSEventCompanyBankrupt_Register(this->engine); - SQGSEventCompanyInTrouble_Register(this->engine); - SQGSEventCompanyMerger_Register(this->engine); - SQGSEventCompanyNew_Register(this->engine); - SQGSEventCompanyTown_Register(this->engine); - SQGSEventController_Register(this->engine); - SQGSEventExclusiveTransportRights_Register(this->engine); - SQGSEventGoalQuestionAnswer_Register(this->engine); - SQGSEventIndustryClose_Register(this->engine); - SQGSEventIndustryOpen_Register(this->engine); - SQGSEventRoadReconstruction_Register(this->engine); - SQGSEventStationFirstVehicle_Register(this->engine); - SQGSEventStoryPageButtonClick_Register(this->engine); - SQGSEventStoryPageTileSelect_Register(this->engine); - SQGSEventStoryPageVehicleSelect_Register(this->engine); - SQGSEventSubsidyAwarded_Register(this->engine); - SQGSEventSubsidyExpired_Register(this->engine); - SQGSEventSubsidyOffer_Register(this->engine); - SQGSEventSubsidyOfferExpired_Register(this->engine); - SQGSEventTownFounded_Register(this->engine); - SQGSEventVehicleCrashed_Register(this->engine); - SQGSEventWindowWidgetClick_Register(this->engine); - SQGSExecMode_Register(this->engine); - SQGSGame_Register(this->engine); - SQGSGameSettings_Register(this->engine); - SQGSGoal_Register(this->engine); - SQGSIndustry_Register(this->engine); - SQGSIndustryList_Register(this->engine); - SQGSIndustryList_CargoAccepting_Register(this->engine); - SQGSIndustryList_CargoProducing_Register(this->engine); - SQGSIndustryType_Register(this->engine); - SQGSIndustryTypeList_Register(this->engine); - SQGSInfrastructure_Register(this->engine); - SQGSLog_Register(this->engine); - SQGSMap_Register(this->engine); - SQGSMarine_Register(this->engine); - SQGSNews_Register(this->engine); - SQGSOrder_Register(this->engine); - SQGSPriorityQueue_Register(this->engine); - SQGSRail_Register(this->engine); - SQGSRailTypeList_Register(this->engine); - SQGSRoad_Register(this->engine); - SQGSRoadTypeList_Register(this->engine); - SQGSSign_Register(this->engine); - SQGSSignList_Register(this->engine); - SQGSStation_Register(this->engine); - SQGSStationList_Register(this->engine); - SQGSStationList_Cargo_Register(this->engine); - SQGSStationList_CargoPlanned_Register(this->engine); - SQGSStationList_CargoPlannedByFrom_Register(this->engine); - SQGSStationList_CargoPlannedByVia_Register(this->engine); - SQGSStationList_CargoPlannedFromByVia_Register(this->engine); - SQGSStationList_CargoPlannedViaByFrom_Register(this->engine); - SQGSStationList_CargoWaiting_Register(this->engine); - SQGSStationList_CargoWaitingByFrom_Register(this->engine); - SQGSStationList_CargoWaitingByVia_Register(this->engine); - SQGSStationList_CargoWaitingFromByVia_Register(this->engine); - SQGSStationList_CargoWaitingViaByFrom_Register(this->engine); - SQGSStationList_Vehicle_Register(this->engine); - SQGSStoryPage_Register(this->engine); - SQGSStoryPageElementList_Register(this->engine); - SQGSStoryPageList_Register(this->engine); - SQGSSubsidy_Register(this->engine); - SQGSSubsidyList_Register(this->engine); - SQGSTestMode_Register(this->engine); - SQGSText_Register(this->engine); - SQGSTile_Register(this->engine); - SQGSTileList_Register(this->engine); - SQGSTileList_IndustryAccepting_Register(this->engine); - SQGSTileList_IndustryProducing_Register(this->engine); - SQGSTileList_StationType_Register(this->engine); - SQGSTown_Register(this->engine); - SQGSTownEffectList_Register(this->engine); - SQGSTownList_Register(this->engine); - SQGSTunnel_Register(this->engine); - SQGSVehicle_Register(this->engine); - SQGSVehicleList_Register(this->engine); - SQGSVehicleList_Depot_Register(this->engine); - SQGSVehicleList_SharedOrders_Register(this->engine); - SQGSVehicleList_Station_Register(this->engine); - SQGSViewport_Register(this->engine); - SQGSWaypoint_Register(this->engine); - SQGSWaypointList_Register(this->engine); - SQGSWaypointList_Vehicle_Register(this->engine); - SQGSWindow_Register(this->engine); + /* Register all classes */ + SQGS_RegisterAll(this->engine); RegisterGameTranslation(this->engine); diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index f9f5fb7c84..c228679282 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -1,3 +1,7 @@ +add_library(script_api + INTERFACE +) + # Get script_window.hpp dependencies file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/script_window.hpp.in ENUM_LINES REGEX "@enum") foreach(ENUM IN LISTS ENUM_LINES) @@ -13,7 +17,6 @@ add_custom_command_timestamp(OUTPUT ${CMAKE_BINARY_DIR}/generated/script/api/scr -DGENERATE_SOURCE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/script_window.hpp.in -DGENERATE_BINARY_FILE=${CMAKE_BINARY_DIR}/generated/script/api/script_window.hpp -P ${CMAKE_SOURCE_DIR}/cmake/scripts/GenerateWidget.cmake - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/generated/script/api/dummy # dummy directory for #include "../script_window.hpp" MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/script_window.hpp.in DEPENDS ${CMAKE_SOURCE_DIR}/cmake/scripts/GenerateWidget.cmake ${DEPENDENCIES} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} @@ -23,19 +26,94 @@ add_custom_target_timestamp(script_window DEPENDS ${CMAKE_BINARY_DIR}/generated/script/api/script_window.hpp ) - -add_library(script_api - INTERFACE -) target_include_directories(script_api INTERFACE ${CMAKE_BINARY_DIR}/generated/script/api/ - ${CMAKE_BINARY_DIR}/generated/script/api/dummy # dummy path so #include "../script_window.hpp" works ${CMAKE_CURRENT_SOURCE_DIR} ) -add_dependencies(script_api - script_window -) + +file(GLOB SCRIPT_API_FILES "script_*.hpp") +list(APPEND SCRIPT_API_FILES ${CMAKE_BINARY_DIR}/generated/script/api/script_window.hpp) + +foreach(API "ai;AI" "game;GS" "template;Template") + list(GET API 0 APILC) + list(GET API 1 APIUC) + + foreach(SCRIPT_API_FILE IN LISTS SCRIPT_API_FILES) + if ("${SCRIPT_API_FILE}" MATCHES ".*script_controller.*") + continue() + endif ("${SCRIPT_API_FILE}" MATCHES ".*script_controller.*") + get_filename_component(SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE}" NAME) + string(REPLACE "script_" "${APILC}_" SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE_NAME}") + set(SCRIPT_API_BINARY_FILE "${CMAKE_BINARY_DIR}/generated/script/api/${APILC}/${SCRIPT_API_FILE_NAME}.sq") + + add_custom_command_timestamp(OUTPUT ${SCRIPT_API_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} + -DSCRIPT_API_SOURCE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/squirrel_export.hpp.sq.in + -DSCRIPT_API_BINARY_FILE=${SCRIPT_API_BINARY_FILE} + -DSCRIPT_API_FILE=${SCRIPT_API_FILE} + -DAPIUC=${APIUC} + -DAPILC=${APILC} + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/SquirrelExport.cmake + MAIN_DEPENDENCY ${SCRIPT_API_FILE} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/squirrel_export.hpp.sq.in + ${CMAKE_SOURCE_DIR}/cmake/scripts/SquirrelExport.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating ${APILC}/${SCRIPT_API_FILE_NAME}.sq" + ) + list(APPEND SCRIPT_${APIUC}_BINARY_FILES ${SCRIPT_API_BINARY_FILE}) + endforeach(SCRIPT_API_FILE) + + add_custom_target_timestamp(script_${APILC} + DEPENDS + ${SCRIPT_${APIUC}_BINARY_FILES} + ) + add_dependencies(script_${APILC} + script_window + ) + + if (NOT "${APILC}" STREQUAL "template") + list(APPEND SCRIPT_${APIUC}_BINARY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${APILC}/${APILC}_controller.hpp.sq") + set(INCLUDES_BINARY_FILE "${CMAKE_BINARY_DIR}/generated/script/api/${APILC}/${APILC}_includes.hpp") + add_custom_command_timestamp(OUTPUT ${INCLUDES_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} + -DINCLUDES_SOURCE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/script_includes.hpp.in + -DINCLUDES_BINARY_FILE=${INCLUDES_BINARY_FILE} + -DAPIUC=${APIUC} + -DAPILC=${APILC} + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/SquirrelIncludes.cmake + -- + ${SCRIPT_${APIUC}_BINARY_FILES} + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/script_includes.hpp.in + DEPENDS ${SCRIPT_${APIUC}_BINARY_FILES} + ${CMAKE_SOURCE_DIR}/cmake/scripts/SquirrelIncludes.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating ${APILC}/${APILC}_includes.hpp" + ) + add_custom_target_timestamp(script_${APILC}_includes + DEPENDS + ${INCLUDES_BINARY_FILE} + ) + add_dependencies(script_${APILC}_includes + script_${APILC} + ) + add_dependencies(script_api + script_${APILC}_includes + ) + else (NOT "${APILC}" STREQUAL "template") + add_dependencies(script_api + script_${APILC} + ) + endif (NOT "${APILC}" STREQUAL "template") + + target_include_directories(script_api + INTERFACE + ${CMAKE_BINARY_DIR}/generated/script + ${CMAKE_BINARY_DIR}/generated/script/api/${APILC} + ${CMAKE_CURRENT_SOURCE_DIR}/${APILC} + ) +endforeach(API) + add_library(openttd::script_api ALIAS script_api) diff --git a/src/script/api/Doxyfile_AI b/src/script/api/Doxyfile_AI index fbd935b414..fb0abc0567 100644 --- a/src/script/api/Doxyfile_AI +++ b/src/script/api/Doxyfile_AI @@ -98,7 +98,7 @@ FILE_PATTERNS = script_*.hpp \ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = ai_includes.hpp EXCLUDE_SYMBOLS = GetClassName DECLARE_ENUM_AS_BIT_SET DECLARE_POSTFIX_INCREMENT EXAMPLE_PATH = EXAMPLE_PATTERNS = * diff --git a/src/script/api/Doxyfile_Game b/src/script/api/Doxyfile_Game index 238b47f7d1..83f8ad0e87 100644 --- a/src/script/api/Doxyfile_Game +++ b/src/script/api/Doxyfile_Game @@ -98,7 +98,7 @@ FILE_PATTERNS = script_*.hpp \ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = game_includes.hpp EXCLUDE_SYMBOLS = GetClassName DECLARE_ENUM_AS_BIT_SET DECLARE_POSTFIX_INCREMENT EXAMPLE_PATH = EXAMPLE_PATTERNS = * diff --git a/src/script/api/ai/ai_accounting.hpp.sq b/src/script/api/ai/ai_accounting.hpp.sq deleted file mode 100644 index d2bfbb04f5..0000000000 --- a/src/script/api/ai/ai_accounting.hpp.sq +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_accounting.hpp" -#include "../template/template_accounting.hpp.sq" - - -template <> const char *GetClassName() { return "AIAccounting"; } - -void SQAIAccounting_Register(Squirrel *engine) -{ - DefSQClass SQAIAccounting("AIAccounting"); - SQAIAccounting.PreRegister(engine); - SQAIAccounting.AddConstructor(engine, "x"); - - SQAIAccounting.DefSQMethod(engine, &ScriptAccounting::GetCosts, "GetCosts", 1, "x"); - SQAIAccounting.DefSQMethod(engine, &ScriptAccounting::ResetCosts, "ResetCosts", 1, "x"); - - SQAIAccounting.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_airport.hpp.sq b/src/script/api/ai/ai_airport.hpp.sq deleted file mode 100644 index 2d7daeef73..0000000000 --- a/src/script/api/ai/ai_airport.hpp.sq +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_airport.hpp" -#include "../template/template_airport.hpp.sq" - - -template <> const char *GetClassName() { return "AIAirport"; } - -void SQAIAirport_Register(Squirrel *engine) -{ - DefSQClass SQAIAirport("AIAirport"); - SQAIAirport.PreRegister(engine); - SQAIAirport.AddConstructor(engine, "x"); - - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_SMALL, "AT_SMALL"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_LARGE, "AT_LARGE"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_METROPOLITAN, "AT_METROPOLITAN"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_INTERNATIONAL, "AT_INTERNATIONAL"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_COMMUTER, "AT_COMMUTER"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_INTERCON, "AT_INTERCON"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_HELIPORT, "AT_HELIPORT"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_HELISTATION, "AT_HELISTATION"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_HELIDEPOT, "AT_HELIDEPOT"); - SQAIAirport.DefSQConst(engine, ScriptAirport::AT_INVALID, "AT_INVALID"); - SQAIAirport.DefSQConst(engine, ScriptAirport::PT_HELICOPTER, "PT_HELICOPTER"); - SQAIAirport.DefSQConst(engine, ScriptAirport::PT_SMALL_PLANE, "PT_SMALL_PLANE"); - SQAIAirport.DefSQConst(engine, ScriptAirport::PT_BIG_PLANE, "PT_BIG_PLANE"); - SQAIAirport.DefSQConst(engine, ScriptAirport::PT_INVALID, "PT_INVALID"); - - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::IsValidAirportType, "IsValidAirportType", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::IsAirportInformationAvailable, "IsAirportInformationAvailable", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetPrice, "GetPrice", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::IsHangarTile, "IsHangarTile", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::IsAirportTile, "IsAirportTile", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportWidth, "GetAirportWidth", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportHeight, "GetAirportHeight", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportCoverageRadius, "GetAirportCoverageRadius", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNumHangars, "GetNumHangars", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetHangarOfAirport, "GetHangarOfAirport", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::BuildAirport, "BuildAirport", 4, ".iii"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::RemoveAirport, "RemoveAirport", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportType, "GetAirportType", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNoiseLevelIncrease, "GetNoiseLevelIncrease", 3, ".ii"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNearestTown, "GetNearestTown", 3, ".ii"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); - SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMonthlyMaintenanceCost, "GetMonthlyMaintenanceCost", 2, ".i"); - - SQAIAirport.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_base.hpp.sq b/src/script/api/ai/ai_base.hpp.sq deleted file mode 100644 index a03566b4e3..0000000000 --- a/src/script/api/ai/ai_base.hpp.sq +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_base.hpp" -#include "../template/template_base.hpp.sq" - - -template <> const char *GetClassName() { return "AIBase"; } - -void SQAIBase_Register(Squirrel *engine) -{ - DefSQClass SQAIBase("AIBase"); - SQAIBase.PreRegister(engine); - SQAIBase.AddConstructor(engine, "x"); - - SQAIBase.DefSQStaticMethod(engine, &ScriptBase::Rand, "Rand", 1, "."); - SQAIBase.DefSQStaticMethod(engine, &ScriptBase::RandItem, "RandItem", 2, ".i"); - SQAIBase.DefSQStaticMethod(engine, &ScriptBase::RandRange, "RandRange", 2, ".i"); - SQAIBase.DefSQStaticMethod(engine, &ScriptBase::RandRangeItem, "RandRangeItem", 3, ".ii"); - SQAIBase.DefSQStaticMethod(engine, &ScriptBase::Chance, "Chance", 3, ".ii"); - SQAIBase.DefSQStaticMethod(engine, &ScriptBase::ChanceItem, "ChanceItem", 4, ".iii"); - - SQAIBase.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_basestation.hpp.sq b/src/script/api/ai/ai_basestation.hpp.sq deleted file mode 100644 index 13a351b8ea..0000000000 --- a/src/script/api/ai/ai_basestation.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_basestation.hpp" -#include "../template/template_basestation.hpp.sq" - - -template <> const char *GetClassName() { return "AIBaseStation"; } - -void SQAIBaseStation_Register(Squirrel *engine) -{ - DefSQClass SQAIBaseStation("AIBaseStation"); - SQAIBaseStation.PreRegister(engine); - SQAIBaseStation.AddConstructor(engine, "x"); - - SQAIBaseStation.DefSQConst(engine, ScriptBaseStation::STATION_NEW, "STATION_NEW"); - SQAIBaseStation.DefSQConst(engine, ScriptBaseStation::STATION_JOIN_ADJACENT, "STATION_JOIN_ADJACENT"); - SQAIBaseStation.DefSQConst(engine, ScriptBaseStation::STATION_INVALID, "STATION_INVALID"); - - SQAIBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::IsValidBaseStation, "IsValidBaseStation", 2, ".i"); - SQAIBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::GetName, "GetName", 2, ".i"); - SQAIBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::SetName, "SetName", 3, ".i."); - SQAIBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::GetLocation, "GetLocation", 2, ".i"); - SQAIBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::GetConstructionDate, "GetConstructionDate", 2, ".i"); - - SQAIBaseStation.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_bridge.hpp.sq b/src/script/api/ai/ai_bridge.hpp.sq deleted file mode 100644 index 0d026673f9..0000000000 --- a/src/script/api/ai/ai_bridge.hpp.sq +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_bridge.hpp" -#include "../template/template_bridge.hpp.sq" - - -template <> const char *GetClassName() { return "AIBridge"; } - -void SQAIBridge_Register(Squirrel *engine) -{ - DefSQClass SQAIBridge("AIBridge"); - SQAIBridge.PreRegister(engine); - SQAIBridge.AddConstructor(engine, "x"); - - SQAIBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_BASE, "ERR_BRIDGE_BASE"); - SQAIBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_TYPE_UNAVAILABLE, "ERR_BRIDGE_TYPE_UNAVAILABLE"); - SQAIBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_CANNOT_END_IN_WATER, "ERR_BRIDGE_CANNOT_END_IN_WATER"); - SQAIBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT, "ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT"); - - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, ScriptBridge::ERR_BRIDGE_TYPE_UNAVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH, ScriptBridge::ERR_BRIDGE_CANNOT_END_IN_WATER); - ScriptError::RegisterErrorMap(STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT, ScriptBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT); - - ScriptError::RegisterErrorMapString(ScriptBridge::ERR_BRIDGE_TYPE_UNAVAILABLE, "ERR_BRIDGE_TYPE_UNAVAILABLE"); - ScriptError::RegisterErrorMapString(ScriptBridge::ERR_BRIDGE_CANNOT_END_IN_WATER, "ERR_BRIDGE_CANNOT_END_IN_WATER"); - ScriptError::RegisterErrorMapString(ScriptBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT, "ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT"); - - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::IsValidBridge, "IsValidBridge", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::IsBridgeTile, "IsBridgeTile", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetBridgeID, "GetBridgeID", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 3, ".ii"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetPrice, "GetPrice", 3, ".ii"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxLength, "GetMaxLength", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMinLength, "GetMinLength", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::BuildBridge, "BuildBridge", 5, ".iiii"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::RemoveBridge, "RemoveBridge", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetOtherBridgeEnd, "GetOtherBridgeEnd", 2, ".i"); - - SQAIBridge.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_bridgelist.hpp.sq b/src/script/api/ai/ai_bridgelist.hpp.sq deleted file mode 100644 index 35d33f544a..0000000000 --- a/src/script/api/ai/ai_bridgelist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_bridgelist.hpp" -#include "../template/template_bridgelist.hpp.sq" - - -template <> const char *GetClassName() { return "AIBridgeList"; } - -void SQAIBridgeList_Register(Squirrel *engine) -{ - DefSQClass SQAIBridgeList("AIBridgeList"); - SQAIBridgeList.PreRegister(engine, "AIList"); - SQAIBridgeList.AddConstructor(engine, "x"); - - SQAIBridgeList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIBridgeList_Length"; } - -void SQAIBridgeList_Length_Register(Squirrel *engine) -{ - DefSQClass SQAIBridgeList_Length("AIBridgeList_Length"); - SQAIBridgeList_Length.PreRegister(engine, "AIList"); - SQAIBridgeList_Length.AddConstructor(engine, "xi"); - - SQAIBridgeList_Length.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_cargo.hpp.sq b/src/script/api/ai/ai_cargo.hpp.sq deleted file mode 100644 index 119328e411..0000000000 --- a/src/script/api/ai/ai_cargo.hpp.sq +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargo.hpp" -#include "../template/template_cargo.hpp.sq" - - -template <> const char *GetClassName() { return "AICargo"; } - -void SQAICargo_Register(Squirrel *engine) -{ - DefSQClass SQAICargo("AICargo"); - SQAICargo.PreRegister(engine); - SQAICargo.AddConstructor(engine, "x"); - - SQAICargo.DefSQConst(engine, ScriptCargo::CC_PASSENGERS, "CC_PASSENGERS"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_MAIL, "CC_MAIL"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_EXPRESS, "CC_EXPRESS"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_ARMOURED, "CC_ARMOURED"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_BULK, "CC_BULK"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_PIECE_GOODS, "CC_PIECE_GOODS"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_LIQUID, "CC_LIQUID"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_REFRIGERATED, "CC_REFRIGERATED"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_HAZARDOUS, "CC_HAZARDOUS"); - SQAICargo.DefSQConst(engine, ScriptCargo::CC_COVERED, "CC_COVERED"); - SQAICargo.DefSQConst(engine, ScriptCargo::TE_NONE, "TE_NONE"); - SQAICargo.DefSQConst(engine, ScriptCargo::TE_PASSENGERS, "TE_PASSENGERS"); - SQAICargo.DefSQConst(engine, ScriptCargo::TE_MAIL, "TE_MAIL"); - SQAICargo.DefSQConst(engine, ScriptCargo::TE_GOODS, "TE_GOODS"); - SQAICargo.DefSQConst(engine, ScriptCargo::TE_WATER, "TE_WATER"); - SQAICargo.DefSQConst(engine, ScriptCargo::TE_FOOD, "TE_FOOD"); - SQAICargo.DefSQConst(engine, ScriptCargo::CT_AUTO_REFIT, "CT_AUTO_REFIT"); - SQAICargo.DefSQConst(engine, ScriptCargo::CT_NO_REFIT, "CT_NO_REFIT"); - SQAICargo.DefSQConst(engine, ScriptCargo::DT_MANUAL, "DT_MANUAL"); - SQAICargo.DefSQConst(engine, ScriptCargo::DT_ASYMMETRIC, "DT_ASYMMETRIC"); - SQAICargo.DefSQConst(engine, ScriptCargo::DT_SYMMETRIC, "DT_SYMMETRIC"); - SQAICargo.DefSQConst(engine, ScriptCargo::INVALID_DISTRIBUTION_TYPE, "INVALID_DISTRIBUTION_TYPE"); - - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::IsValidCargo, "IsValidCargo", 2, ".i"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::IsValidTownEffect, "IsValidTownEffect", 2, ".i"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::GetCargoLabel, "GetCargoLabel", 2, ".i"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::IsFreight, "IsFreight", 2, ".i"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::HasCargoClass, "HasCargoClass", 3, ".ii"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::GetTownEffect, "GetTownEffect", 2, ".i"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::GetCargoIncome, "GetCargoIncome", 4, ".iii"); - SQAICargo.DefSQStaticMethod(engine, &ScriptCargo::GetDistributionType, "GetDistributionType", 2, ".i"); - - SQAICargo.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_cargolist.hpp.sq b/src/script/api/ai/ai_cargolist.hpp.sq deleted file mode 100644 index d1c1b0b981..0000000000 --- a/src/script/api/ai/ai_cargolist.hpp.sq +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargolist.hpp" -#include "../template/template_cargolist.hpp.sq" - - -template <> const char *GetClassName() { return "AICargoList"; } - -void SQAICargoList_Register(Squirrel *engine) -{ - DefSQClass SQAICargoList("AICargoList"); - SQAICargoList.PreRegister(engine, "AIList"); - SQAICargoList.AddConstructor(engine, "x"); - - SQAICargoList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AICargoList_IndustryAccepting"; } - -void SQAICargoList_IndustryAccepting_Register(Squirrel *engine) -{ - DefSQClass SQAICargoList_IndustryAccepting("AICargoList_IndustryAccepting"); - SQAICargoList_IndustryAccepting.PreRegister(engine, "AIList"); - SQAICargoList_IndustryAccepting.AddConstructor(engine, "xi"); - - SQAICargoList_IndustryAccepting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AICargoList_IndustryProducing"; } - -void SQAICargoList_IndustryProducing_Register(Squirrel *engine) -{ - DefSQClass SQAICargoList_IndustryProducing("AICargoList_IndustryProducing"); - SQAICargoList_IndustryProducing.PreRegister(engine, "AIList"); - SQAICargoList_IndustryProducing.AddConstructor(engine, "xi"); - - SQAICargoList_IndustryProducing.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AICargoList_StationAccepting"; } - -void SQAICargoList_StationAccepting_Register(Squirrel *engine) -{ - DefSQClass SQAICargoList_StationAccepting("AICargoList_StationAccepting"); - SQAICargoList_StationAccepting.PreRegister(engine, "AIList"); - SQAICargoList_StationAccepting.AddConstructor(engine, "xi"); - - SQAICargoList_StationAccepting.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_company.hpp.sq b/src/script/api/ai/ai_company.hpp.sq deleted file mode 100644 index 156b6fcb70..0000000000 --- a/src/script/api/ai/ai_company.hpp.sq +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_company.hpp" -#include "../template/template_company.hpp.sq" - - -template <> const char *GetClassName() { return "AICompany"; } - -void SQAICompany_Register(Squirrel *engine) -{ - DefSQClass SQAICompany("AICompany"); - SQAICompany.PreRegister(engine); - SQAICompany.AddConstructor(engine, "x"); - - SQAICompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_DEFAULT, "LS_DEFAULT"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_STEAM, "LS_STEAM"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_DIESEL, "LS_DIESEL"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_ELECTRIC, "LS_ELECTRIC"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_MONORAIL, "LS_MONORAIL"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_MAGLEV, "LS_MAGLEV"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_DMU, "LS_DMU"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_EMU, "LS_EMU"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_STEAM, "LS_PASSENGER_WAGON_STEAM"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_DIESEL, "LS_PASSENGER_WAGON_DIESEL"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_ELECTRIC, "LS_PASSENGER_WAGON_ELECTRIC"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MONORAIL, "LS_PASSENGER_WAGON_MONORAIL"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MAGLEV, "LS_PASSENGER_WAGON_MAGLEV"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_WAGON, "LS_FREIGHT_WAGON"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_BUS, "LS_BUS"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_TRUCK, "LS_TRUCK"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_SHIP, "LS_PASSENGER_SHIP"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_SHIP, "LS_FREIGHT_SHIP"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_HELICOPTER, "LS_HELICOPTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_SMALL_PLANE, "LS_SMALL_PLANE"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_LARGE_PLANE, "LS_LARGE_PLANE"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_TRAM, "LS_PASSENGER_TRAM"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_TRAM, "LS_FREIGHT_TRAM"); - SQAICompany.DefSQConst(engine, ScriptCompany::LS_INVALID, "LS_INVALID"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_BLUE, "COLOUR_DARK_BLUE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_PALE_GREEN, "COLOUR_PALE_GREEN"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_PINK, "COLOUR_PINK"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_YELLOW, "COLOUR_YELLOW"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_RED, "COLOUR_RED"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_LIGHT_BLUE, "COLOUR_LIGHT_BLUE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_GREEN, "COLOUR_GREEN"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_GREEN, "COLOUR_DARK_GREEN"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_BLUE, "COLOUR_BLUE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_CREAM, "COLOUR_CREAM"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_MAUVE, "COLOUR_MAUVE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_PURPLE, "COLOUR_PURPLE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_ORANGE, "COLOUR_ORANGE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_BROWN, "COLOUR_BROWN"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_GREY, "COLOUR_GREY"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_WHITE, "COLOUR_WHITE"); - SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_INVALID, "COLOUR_INVALID"); - - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::IsMine, "IsMine", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetName, "SetName", 2, ".."); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetName, "GetName", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetPresidentName, "SetPresidentName", 2, ".."); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetPresidentName, "GetPresidentName", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetPresidentGender, "SetPresidentGender", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetPresidentGender, "GetPresidentGender", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetLoanAmount, "SetLoanAmount", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetMinimumLoanAmount, "SetMinimumLoanAmount", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetLoanAmount, "GetLoanAmount", 1, "."); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetMaxLoanAmount, "GetMaxLoanAmount", 1, "."); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetLoanInterval, "GetLoanInterval", 1, "."); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetBankBalance, "GetBankBalance", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyIncome, "GetQuarterlyIncome", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyExpenses, "GetQuarterlyExpenses", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyCargoDelivered, "GetQuarterlyCargoDelivered", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyPerformanceRating, "GetQuarterlyPerformanceRating", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyCompanyValue, "GetQuarterlyCompanyValue", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::BuildCompanyHQ, "BuildCompanyHQ", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetCompanyHQ, "GetCompanyHQ", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetAutoRenewStatus, "SetAutoRenewStatus", 2, ".b"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewStatus, "GetAutoRenewStatus", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetAutoRenewMonths, "SetAutoRenewMonths", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMonths, "GetAutoRenewMonths", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetAutoRenewMoney, "SetAutoRenewMoney", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMoney, "GetAutoRenewMoney", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetPrimaryLiveryColour, "SetPrimaryLiveryColour", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetSecondaryLiveryColour, "SetSecondaryLiveryColour", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetPrimaryLiveryColour, "GetPrimaryLiveryColour", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetSecondaryLiveryColour, "GetSecondaryLiveryColour", 2, ".i"); - - SQAICompany.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_date.hpp.sq b/src/script/api/ai/ai_date.hpp.sq deleted file mode 100644 index 2f98a29189..0000000000 --- a/src/script/api/ai/ai_date.hpp.sq +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_date.hpp" -#include "../template/template_date.hpp.sq" - - -template <> const char *GetClassName() { return "AIDate"; } - -void SQAIDate_Register(Squirrel *engine) -{ - DefSQClass SQAIDate("AIDate"); - SQAIDate.PreRegister(engine); - SQAIDate.AddConstructor(engine, "x"); - - SQAIDate.DefSQConst(engine, ScriptDate::DATE_INVALID, "DATE_INVALID"); - - SQAIDate.DefSQStaticMethod(engine, &ScriptDate::IsValidDate, "IsValidDate", 2, ".i"); - SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetCurrentDate, "GetCurrentDate", 1, "."); - SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetYear, "GetYear", 2, ".i"); - SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetMonth, "GetMonth", 2, ".i"); - SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetDayOfMonth, "GetDayOfMonth", 2, ".i"); - SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetDate, "GetDate", 4, ".iii"); - - SQAIDate.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_depotlist.hpp.sq b/src/script/api/ai/ai_depotlist.hpp.sq deleted file mode 100644 index 72668a4d7f..0000000000 --- a/src/script/api/ai/ai_depotlist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_depotlist.hpp" -#include "../template/template_depotlist.hpp.sq" - - -template <> const char *GetClassName() { return "AIDepotList"; } - -void SQAIDepotList_Register(Squirrel *engine) -{ - DefSQClass SQAIDepotList("AIDepotList"); - SQAIDepotList.PreRegister(engine, "AIList"); - SQAIDepotList.AddConstructor(engine, "xi"); - - SQAIDepotList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_engine.hpp.sq b/src/script/api/ai/ai_engine.hpp.sq deleted file mode 100644 index fa49f919d6..0000000000 --- a/src/script/api/ai/ai_engine.hpp.sq +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_engine.hpp" -#include "../template/template_engine.hpp.sq" - - -template <> const char *GetClassName() { return "AIEngine"; } - -void SQAIEngine_Register(Squirrel *engine) -{ - DefSQClass SQAIEngine("AIEngine"); - SQAIEngine.PreRegister(engine); - SQAIEngine.AddConstructor(engine, "x"); - - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::IsValidEngine, "IsValidEngine", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::IsBuildable, "IsBuildable", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetName, "GetName", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetCargoType, "GetCargoType", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::CanRefitCargo, "CanRefitCargo", 3, ".ii"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::CanPullCargo, "CanPullCargo", 3, ".ii"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetCapacity, "GetCapacity", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetReliability, "GetReliability", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetPrice, "GetPrice", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaxAge, "GetMaxAge", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetRunningCost, "GetRunningCost", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetPower, "GetPower", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetWeight, "GetWeight", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaxTractiveEffort, "GetMaxTractiveEffort", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetDesignDate, "GetDesignDate", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetVehicleType, "GetVehicleType", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::IsWagon, "IsWagon", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::CanRunOnRail, "CanRunOnRail", 3, ".ii"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::HasPowerOnRail, "HasPowerOnRail", 3, ".ii"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::CanRunOnRoad, "CanRunOnRoad", 3, ".ii"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::HasPowerOnRoad, "HasPowerOnRoad", 3, ".ii"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetRoadType, "GetRoadType", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetRailType, "GetRailType", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::IsArticulated, "IsArticulated", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetPlaneType, "GetPlaneType", 2, ".i"); - SQAIEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaximumOrderDistance, "GetMaximumOrderDistance", 2, ".i"); - - SQAIEngine.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_enginelist.hpp.sq b/src/script/api/ai/ai_enginelist.hpp.sq deleted file mode 100644 index 1c1c4cfedb..0000000000 --- a/src/script/api/ai/ai_enginelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_enginelist.hpp" -#include "../template/template_enginelist.hpp.sq" - - -template <> const char *GetClassName() { return "AIEngineList"; } - -void SQAIEngineList_Register(Squirrel *engine) -{ - DefSQClass SQAIEngineList("AIEngineList"); - SQAIEngineList.PreRegister(engine, "AIList"); - SQAIEngineList.AddConstructor(engine, "xi"); - - SQAIEngineList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_error.hpp.sq b/src/script/api/ai/ai_error.hpp.sq deleted file mode 100644 index 792a21f1d8..0000000000 --- a/src/script/api/ai/ai_error.hpp.sq +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_error.hpp" -#include "../template/template_error.hpp.sq" - - -template <> const char *GetClassName() { return "AIError"; } - -void SQAIError_Register(Squirrel *engine) -{ - DefSQClass SQAIError("AIError"); - SQAIError.PreRegister(engine); - SQAIError.AddConstructor(engine, "x"); - - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_NONE, "ERR_CAT_NONE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_GENERAL, "ERR_CAT_GENERAL"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_VEHICLE, "ERR_CAT_VEHICLE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_STATION, "ERR_CAT_STATION"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_BRIDGE, "ERR_CAT_BRIDGE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_TUNNEL, "ERR_CAT_TUNNEL"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_TILE, "ERR_CAT_TILE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_SIGN, "ERR_CAT_SIGN"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_RAIL, "ERR_CAT_RAIL"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_ROAD, "ERR_CAT_ROAD"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_ORDER, "ERR_CAT_ORDER"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_MARINE, "ERR_CAT_MARINE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_WAYPOINT, "ERR_CAT_WAYPOINT"); - SQAIError.DefSQConst(engine, ScriptError::ERR_CAT_BIT_SIZE, "ERR_CAT_BIT_SIZE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_NONE, "ERR_NONE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_UNKNOWN, "ERR_UNKNOWN"); - SQAIError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_FAILED, "ERR_PRECONDITION_FAILED"); - SQAIError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG, "ERR_PRECONDITION_STRING_TOO_LONG"); - SQAIError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, "ERR_PRECONDITION_TOO_MANY_PARAMETERS"); - SQAIError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_INVALID_COMPANY, "ERR_PRECONDITION_INVALID_COMPANY"); - SQAIError.DefSQConst(engine, ScriptError::ERR_NEWGRF_SUPPLIED_ERROR, "ERR_NEWGRF_SUPPLIED_ERROR"); - SQAIError.DefSQConst(engine, ScriptError::ERR_GENERAL_BASE, "ERR_GENERAL_BASE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_NOT_ENOUGH_CASH, "ERR_NOT_ENOUGH_CASH"); - SQAIError.DefSQConst(engine, ScriptError::ERR_LOCAL_AUTHORITY_REFUSES, "ERR_LOCAL_AUTHORITY_REFUSES"); - SQAIError.DefSQConst(engine, ScriptError::ERR_ALREADY_BUILT, "ERR_ALREADY_BUILT"); - SQAIError.DefSQConst(engine, ScriptError::ERR_AREA_NOT_CLEAR, "ERR_AREA_NOT_CLEAR"); - SQAIError.DefSQConst(engine, ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY, "ERR_OWNED_BY_ANOTHER_COMPANY"); - SQAIError.DefSQConst(engine, ScriptError::ERR_NAME_IS_NOT_UNIQUE, "ERR_NAME_IS_NOT_UNIQUE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_FLAT_LAND_REQUIRED, "ERR_FLAT_LAND_REQUIRED"); - SQAIError.DefSQConst(engine, ScriptError::ERR_LAND_SLOPED_WRONG, "ERR_LAND_SLOPED_WRONG"); - SQAIError.DefSQConst(engine, ScriptError::ERR_VEHICLE_IN_THE_WAY, "ERR_VEHICLE_IN_THE_WAY"); - SQAIError.DefSQConst(engine, ScriptError::ERR_SITE_UNSUITABLE, "ERR_SITE_UNSUITABLE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE"); - SQAIError.DefSQConst(engine, ScriptError::ERR_STATION_TOO_SPREAD_OUT, "ERR_STATION_TOO_SPREAD_OUT"); - - 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); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_BUOY_IN_THE_WAY, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_DOCK_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_GENERIC_OBJECT_IN_THE_WAY, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_COMPANY_HEADQUARTERS_IN, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_OBJECT_IN_THE_WAY, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_REMOVE_ROAD_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_EXCAVATION_WOULD_DAMAGE, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_AREA_IS_OWNED_BY_ANOTHER, ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY); - ScriptError::RegisterErrorMap(STR_ERROR_OWNED_BY, ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY); - ScriptError::RegisterErrorMap(STR_ERROR_NAME_MUST_BE_UNIQUE, ScriptError::ERR_NAME_IS_NOT_UNIQUE); - ScriptError::RegisterErrorMap(STR_ERROR_FLAT_LAND_REQUIRED, ScriptError::ERR_FLAT_LAND_REQUIRED); - ScriptError::RegisterErrorMap(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION, ScriptError::ERR_LAND_SLOPED_WRONG); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_VEHICLE_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); - 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); - - ScriptError::RegisterErrorMapString(ScriptError::ERR_NONE, "ERR_NONE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_UNKNOWN, "ERR_UNKNOWN"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_FAILED, "ERR_PRECONDITION_FAILED"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_STRING_TOO_LONG, "ERR_PRECONDITION_STRING_TOO_LONG"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, "ERR_PRECONDITION_TOO_MANY_PARAMETERS"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_INVALID_COMPANY, "ERR_PRECONDITION_INVALID_COMPANY"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_NEWGRF_SUPPLIED_ERROR, "ERR_NEWGRF_SUPPLIED_ERROR"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_NOT_ENOUGH_CASH, "ERR_NOT_ENOUGH_CASH"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_LOCAL_AUTHORITY_REFUSES, "ERR_LOCAL_AUTHORITY_REFUSES"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_ALREADY_BUILT, "ERR_ALREADY_BUILT"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_AREA_NOT_CLEAR, "ERR_AREA_NOT_CLEAR"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY, "ERR_OWNED_BY_ANOTHER_COMPANY"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_NAME_IS_NOT_UNIQUE, "ERR_NAME_IS_NOT_UNIQUE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_FLAT_LAND_REQUIRED, "ERR_FLAT_LAND_REQUIRED"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_LAND_SLOPED_WRONG, "ERR_LAND_SLOPED_WRONG"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_VEHICLE_IN_THE_WAY, "ERR_VEHICLE_IN_THE_WAY"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_SITE_UNSUITABLE, "ERR_SITE_UNSUITABLE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_STATION_TOO_SPREAD_OUT, "ERR_STATION_TOO_SPREAD_OUT"); - - SQAIError.DefSQStaticMethod(engine, &ScriptError::GetErrorCategory, "GetErrorCategory", 1, "."); - SQAIError.DefSQStaticMethod(engine, &ScriptError::GetLastError, "GetLastError", 1, "."); - SQAIError.DefSQStaticMethod(engine, &ScriptError::GetLastErrorString, "GetLastErrorString", 1, "."); - - SQAIError.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_event.hpp.sq b/src/script/api/ai/ai_event.hpp.sq deleted file mode 100644 index 1290008c75..0000000000 --- a/src/script/api/ai/ai_event.hpp.sq +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_event.hpp" -#include "../template/template_event.hpp.sq" - - -template <> const char *GetClassName() { return "AIEvent"; } - -void SQAIEvent_Register(Squirrel *engine) -{ - DefSQClass SQAIEvent("AIEvent"); - SQAIEvent.PreRegister(engine); - SQAIEvent.AddConstructor(engine, "xi"); - - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_INVALID, "ET_INVALID"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_TEST, "ET_TEST"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_OFFER, "ET_SUBSIDY_OFFER"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_OFFER_EXPIRED, "ET_SUBSIDY_OFFER_EXPIRED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_AWARDED, "ET_SUBSIDY_AWARDED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_EXPIRED, "ET_SUBSIDY_EXPIRED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_ENGINE_PREVIEW, "ET_ENGINE_PREVIEW"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_NEW, "ET_COMPANY_NEW"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_IN_TROUBLE, "ET_COMPANY_IN_TROUBLE"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_ASK_MERGER, "ET_COMPANY_ASK_MERGER"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_MERGER, "ET_COMPANY_MERGER"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_BANKRUPT, "ET_COMPANY_BANKRUPT"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_CRASHED, "ET_VEHICLE_CRASHED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_LOST, "ET_VEHICLE_LOST"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_WAITING_IN_DEPOT, "ET_VEHICLE_WAITING_IN_DEPOT"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_UNPROFITABLE, "ET_VEHICLE_UNPROFITABLE"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_INDUSTRY_OPEN, "ET_INDUSTRY_OPEN"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_INDUSTRY_CLOSE, "ET_INDUSTRY_CLOSE"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_ENGINE_AVAILABLE, "ET_ENGINE_AVAILABLE"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STATION_FIRST_VEHICLE, "ET_STATION_FIRST_VEHICLE"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_DISASTER_ZEPPELINER_CRASHED, "ET_DISASTER_ZEPPELINER_CRASHED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_DISASTER_ZEPPELINER_CLEARED, "ET_DISASTER_ZEPPELINER_CLEARED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_TOWN_FOUNDED, "ET_TOWN_FOUNDED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_AIRCRAFT_DEST_TOO_FAR, "ET_AIRCRAFT_DEST_TOO_FAR"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_ADMIN_PORT, "ET_ADMIN_PORT"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_WINDOW_WIDGET_CLICK, "ET_WINDOW_WIDGET_CLICK"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_GOAL_QUESTION_ANSWER, "ET_GOAL_QUESTION_ANSWER"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_EXCLUSIVE_TRANSPORT_RIGHTS, "ET_EXCLUSIVE_TRANSPORT_RIGHTS"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_ROAD_RECONSTRUCTION, "ET_ROAD_RECONSTRUCTION"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_AUTOREPLACED, "ET_VEHICLE_AUTOREPLACED"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_BUTTON_CLICK, "ET_STORYPAGE_BUTTON_CLICK"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_TILE_SELECT, "ET_STORYPAGE_TILE_SELECT"); - SQAIEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_VEHICLE_SELECT, "ET_STORYPAGE_VEHICLE_SELECT"); - - SQAIEvent.DefSQMethod(engine, &ScriptEvent::GetEventType, "GetEventType", 1, "x"); - - SQAIEvent.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventController"; } - -void SQAIEventController_Register(Squirrel *engine) -{ - DefSQClass SQAIEventController("AIEventController"); - SQAIEventController.PreRegister(engine); - SQAIEventController.AddConstructor(engine, "x"); - - SQAIEventController.DefSQStaticMethod(engine, &ScriptEventController::IsEventWaiting, "IsEventWaiting", 1, "."); - SQAIEventController.DefSQStaticMethod(engine, &ScriptEventController::GetNextEvent, "GetNextEvent", 1, "."); - - SQAIEventController.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_event_types.hpp.sq b/src/script/api/ai/ai_event_types.hpp.sq deleted file mode 100644 index 21d0b663a1..0000000000 --- a/src/script/api/ai/ai_event_types.hpp.sq +++ /dev/null @@ -1,421 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_event_types.hpp" -#include "../template/template_event_types.hpp.sq" - - -template <> const char *GetClassName() { return "AIEventVehicleCrashed"; } - -void SQAIEventVehicleCrashed_Register(Squirrel *engine) -{ - DefSQClass SQAIEventVehicleCrashed("AIEventVehicleCrashed"); - SQAIEventVehicleCrashed.PreRegister(engine, "AIEvent"); - - SQAIEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_TRAIN, "CRASH_TRAIN"); - SQAIEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, "CRASH_RV_LEVEL_CROSSING"); - SQAIEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_RV_UFO, "CRASH_RV_UFO"); - SQAIEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, "CRASH_PLANE_LANDING"); - SQAIEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT, "CRASH_AIRCRAFT_NO_AIRPORT"); - SQAIEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_FLOODED, "CRASH_FLOODED"); - - SQAIEventVehicleCrashed.DefSQStaticMethod(engine, &ScriptEventVehicleCrashed::Convert, "Convert", 2, ".x"); - - SQAIEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetVehicleID, "GetVehicleID", 1, "x"); - SQAIEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetCrashSite, "GetCrashSite", 1, "x"); - SQAIEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetCrashReason, "GetCrashReason", 1, "x"); - - SQAIEventVehicleCrashed.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventSubsidyOffer"; } - -void SQAIEventSubsidyOffer_Register(Squirrel *engine) -{ - DefSQClass SQAIEventSubsidyOffer("AIEventSubsidyOffer"); - SQAIEventSubsidyOffer.PreRegister(engine, "AIEvent"); - - SQAIEventSubsidyOffer.DefSQStaticMethod(engine, &ScriptEventSubsidyOffer::Convert, "Convert", 2, ".x"); - - SQAIEventSubsidyOffer.DefSQMethod(engine, &ScriptEventSubsidyOffer::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQAIEventSubsidyOffer.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventSubsidyOfferExpired"; } - -void SQAIEventSubsidyOfferExpired_Register(Squirrel *engine) -{ - DefSQClass SQAIEventSubsidyOfferExpired("AIEventSubsidyOfferExpired"); - SQAIEventSubsidyOfferExpired.PreRegister(engine, "AIEvent"); - - SQAIEventSubsidyOfferExpired.DefSQStaticMethod(engine, &ScriptEventSubsidyOfferExpired::Convert, "Convert", 2, ".x"); - - SQAIEventSubsidyOfferExpired.DefSQMethod(engine, &ScriptEventSubsidyOfferExpired::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQAIEventSubsidyOfferExpired.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventSubsidyAwarded"; } - -void SQAIEventSubsidyAwarded_Register(Squirrel *engine) -{ - DefSQClass SQAIEventSubsidyAwarded("AIEventSubsidyAwarded"); - SQAIEventSubsidyAwarded.PreRegister(engine, "AIEvent"); - - SQAIEventSubsidyAwarded.DefSQStaticMethod(engine, &ScriptEventSubsidyAwarded::Convert, "Convert", 2, ".x"); - - SQAIEventSubsidyAwarded.DefSQMethod(engine, &ScriptEventSubsidyAwarded::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQAIEventSubsidyAwarded.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventSubsidyExpired"; } - -void SQAIEventSubsidyExpired_Register(Squirrel *engine) -{ - DefSQClass SQAIEventSubsidyExpired("AIEventSubsidyExpired"); - SQAIEventSubsidyExpired.PreRegister(engine, "AIEvent"); - - SQAIEventSubsidyExpired.DefSQStaticMethod(engine, &ScriptEventSubsidyExpired::Convert, "Convert", 2, ".x"); - - SQAIEventSubsidyExpired.DefSQMethod(engine, &ScriptEventSubsidyExpired::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQAIEventSubsidyExpired.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventEnginePreview"; } - -void SQAIEventEnginePreview_Register(Squirrel *engine) -{ - DefSQClass SQAIEventEnginePreview("AIEventEnginePreview"); - SQAIEventEnginePreview.PreRegister(engine, "AIEvent"); - - SQAIEventEnginePreview.DefSQStaticMethod(engine, &ScriptEventEnginePreview::Convert, "Convert", 2, ".x"); - - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetName, "GetName", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetCargoType, "GetCargoType", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetCapacity, "GetCapacity", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetMaxSpeed, "GetMaxSpeed", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetPrice, "GetPrice", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetRunningCost, "GetRunningCost", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::GetVehicleType, "GetVehicleType", 1, "x"); - SQAIEventEnginePreview.DefSQMethod(engine, &ScriptEventEnginePreview::AcceptPreview, "AcceptPreview", 1, "x"); - - SQAIEventEnginePreview.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventCompanyNew"; } - -void SQAIEventCompanyNew_Register(Squirrel *engine) -{ - DefSQClass SQAIEventCompanyNew("AIEventCompanyNew"); - SQAIEventCompanyNew.PreRegister(engine, "AIEvent"); - - SQAIEventCompanyNew.DefSQStaticMethod(engine, &ScriptEventCompanyNew::Convert, "Convert", 2, ".x"); - - SQAIEventCompanyNew.DefSQMethod(engine, &ScriptEventCompanyNew::GetCompanyID, "GetCompanyID", 1, "x"); - - SQAIEventCompanyNew.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventCompanyInTrouble"; } - -void SQAIEventCompanyInTrouble_Register(Squirrel *engine) -{ - DefSQClass SQAIEventCompanyInTrouble("AIEventCompanyInTrouble"); - SQAIEventCompanyInTrouble.PreRegister(engine, "AIEvent"); - - SQAIEventCompanyInTrouble.DefSQStaticMethod(engine, &ScriptEventCompanyInTrouble::Convert, "Convert", 2, ".x"); - - SQAIEventCompanyInTrouble.DefSQMethod(engine, &ScriptEventCompanyInTrouble::GetCompanyID, "GetCompanyID", 1, "x"); - - SQAIEventCompanyInTrouble.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventCompanyAskMerger"; } - -void SQAIEventCompanyAskMerger_Register(Squirrel *engine) -{ - DefSQClass SQAIEventCompanyAskMerger("AIEventCompanyAskMerger"); - SQAIEventCompanyAskMerger.PreRegister(engine, "AIEvent"); - - SQAIEventCompanyAskMerger.DefSQStaticMethod(engine, &ScriptEventCompanyAskMerger::Convert, "Convert", 2, ".x"); - - SQAIEventCompanyAskMerger.DefSQMethod(engine, &ScriptEventCompanyAskMerger::GetCompanyID, "GetCompanyID", 1, "x"); - SQAIEventCompanyAskMerger.DefSQMethod(engine, &ScriptEventCompanyAskMerger::GetValue, "GetValue", 1, "x"); - SQAIEventCompanyAskMerger.DefSQMethod(engine, &ScriptEventCompanyAskMerger::AcceptMerger, "AcceptMerger", 1, "x"); - - SQAIEventCompanyAskMerger.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventCompanyMerger"; } - -void SQAIEventCompanyMerger_Register(Squirrel *engine) -{ - DefSQClass SQAIEventCompanyMerger("AIEventCompanyMerger"); - SQAIEventCompanyMerger.PreRegister(engine, "AIEvent"); - - SQAIEventCompanyMerger.DefSQStaticMethod(engine, &ScriptEventCompanyMerger::Convert, "Convert", 2, ".x"); - - SQAIEventCompanyMerger.DefSQMethod(engine, &ScriptEventCompanyMerger::GetOldCompanyID, "GetOldCompanyID", 1, "x"); - SQAIEventCompanyMerger.DefSQMethod(engine, &ScriptEventCompanyMerger::GetNewCompanyID, "GetNewCompanyID", 1, "x"); - - SQAIEventCompanyMerger.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventCompanyBankrupt"; } - -void SQAIEventCompanyBankrupt_Register(Squirrel *engine) -{ - DefSQClass SQAIEventCompanyBankrupt("AIEventCompanyBankrupt"); - SQAIEventCompanyBankrupt.PreRegister(engine, "AIEvent"); - - SQAIEventCompanyBankrupt.DefSQStaticMethod(engine, &ScriptEventCompanyBankrupt::Convert, "Convert", 2, ".x"); - - SQAIEventCompanyBankrupt.DefSQMethod(engine, &ScriptEventCompanyBankrupt::GetCompanyID, "GetCompanyID", 1, "x"); - - SQAIEventCompanyBankrupt.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventVehicleLost"; } - -void SQAIEventVehicleLost_Register(Squirrel *engine) -{ - DefSQClass SQAIEventVehicleLost("AIEventVehicleLost"); - SQAIEventVehicleLost.PreRegister(engine, "AIEvent"); - - SQAIEventVehicleLost.DefSQStaticMethod(engine, &ScriptEventVehicleLost::Convert, "Convert", 2, ".x"); - - SQAIEventVehicleLost.DefSQMethod(engine, &ScriptEventVehicleLost::GetVehicleID, "GetVehicleID", 1, "x"); - - SQAIEventVehicleLost.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventVehicleWaitingInDepot"; } - -void SQAIEventVehicleWaitingInDepot_Register(Squirrel *engine) -{ - DefSQClass SQAIEventVehicleWaitingInDepot("AIEventVehicleWaitingInDepot"); - SQAIEventVehicleWaitingInDepot.PreRegister(engine, "AIEvent"); - - SQAIEventVehicleWaitingInDepot.DefSQStaticMethod(engine, &ScriptEventVehicleWaitingInDepot::Convert, "Convert", 2, ".x"); - - SQAIEventVehicleWaitingInDepot.DefSQMethod(engine, &ScriptEventVehicleWaitingInDepot::GetVehicleID, "GetVehicleID", 1, "x"); - - SQAIEventVehicleWaitingInDepot.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventVehicleUnprofitable"; } - -void SQAIEventVehicleUnprofitable_Register(Squirrel *engine) -{ - DefSQClass SQAIEventVehicleUnprofitable("AIEventVehicleUnprofitable"); - SQAIEventVehicleUnprofitable.PreRegister(engine, "AIEvent"); - - SQAIEventVehicleUnprofitable.DefSQStaticMethod(engine, &ScriptEventVehicleUnprofitable::Convert, "Convert", 2, ".x"); - - SQAIEventVehicleUnprofitable.DefSQMethod(engine, &ScriptEventVehicleUnprofitable::GetVehicleID, "GetVehicleID", 1, "x"); - - SQAIEventVehicleUnprofitable.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventIndustryOpen"; } - -void SQAIEventIndustryOpen_Register(Squirrel *engine) -{ - DefSQClass SQAIEventIndustryOpen("AIEventIndustryOpen"); - SQAIEventIndustryOpen.PreRegister(engine, "AIEvent"); - - SQAIEventIndustryOpen.DefSQStaticMethod(engine, &ScriptEventIndustryOpen::Convert, "Convert", 2, ".x"); - - SQAIEventIndustryOpen.DefSQMethod(engine, &ScriptEventIndustryOpen::GetIndustryID, "GetIndustryID", 1, "x"); - - SQAIEventIndustryOpen.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventIndustryClose"; } - -void SQAIEventIndustryClose_Register(Squirrel *engine) -{ - DefSQClass SQAIEventIndustryClose("AIEventIndustryClose"); - SQAIEventIndustryClose.PreRegister(engine, "AIEvent"); - - SQAIEventIndustryClose.DefSQStaticMethod(engine, &ScriptEventIndustryClose::Convert, "Convert", 2, ".x"); - - SQAIEventIndustryClose.DefSQMethod(engine, &ScriptEventIndustryClose::GetIndustryID, "GetIndustryID", 1, "x"); - - SQAIEventIndustryClose.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventEngineAvailable"; } - -void SQAIEventEngineAvailable_Register(Squirrel *engine) -{ - DefSQClass SQAIEventEngineAvailable("AIEventEngineAvailable"); - SQAIEventEngineAvailable.PreRegister(engine, "AIEvent"); - - SQAIEventEngineAvailable.DefSQStaticMethod(engine, &ScriptEventEngineAvailable::Convert, "Convert", 2, ".x"); - - SQAIEventEngineAvailable.DefSQMethod(engine, &ScriptEventEngineAvailable::GetEngineID, "GetEngineID", 1, "x"); - - SQAIEventEngineAvailable.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventStationFirstVehicle"; } - -void SQAIEventStationFirstVehicle_Register(Squirrel *engine) -{ - DefSQClass SQAIEventStationFirstVehicle("AIEventStationFirstVehicle"); - SQAIEventStationFirstVehicle.PreRegister(engine, "AIEvent"); - - SQAIEventStationFirstVehicle.DefSQStaticMethod(engine, &ScriptEventStationFirstVehicle::Convert, "Convert", 2, ".x"); - - SQAIEventStationFirstVehicle.DefSQMethod(engine, &ScriptEventStationFirstVehicle::GetStationID, "GetStationID", 1, "x"); - SQAIEventStationFirstVehicle.DefSQMethod(engine, &ScriptEventStationFirstVehicle::GetVehicleID, "GetVehicleID", 1, "x"); - - SQAIEventStationFirstVehicle.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventDisasterZeppelinerCrashed"; } - -void SQAIEventDisasterZeppelinerCrashed_Register(Squirrel *engine) -{ - DefSQClass SQAIEventDisasterZeppelinerCrashed("AIEventDisasterZeppelinerCrashed"); - SQAIEventDisasterZeppelinerCrashed.PreRegister(engine, "AIEvent"); - - SQAIEventDisasterZeppelinerCrashed.DefSQStaticMethod(engine, &ScriptEventDisasterZeppelinerCrashed::Convert, "Convert", 2, ".x"); - - SQAIEventDisasterZeppelinerCrashed.DefSQMethod(engine, &ScriptEventDisasterZeppelinerCrashed::GetStationID, "GetStationID", 1, "x"); - - SQAIEventDisasterZeppelinerCrashed.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventDisasterZeppelinerCleared"; } - -void SQAIEventDisasterZeppelinerCleared_Register(Squirrel *engine) -{ - DefSQClass SQAIEventDisasterZeppelinerCleared("AIEventDisasterZeppelinerCleared"); - SQAIEventDisasterZeppelinerCleared.PreRegister(engine, "AIEvent"); - - SQAIEventDisasterZeppelinerCleared.DefSQStaticMethod(engine, &ScriptEventDisasterZeppelinerCleared::Convert, "Convert", 2, ".x"); - - SQAIEventDisasterZeppelinerCleared.DefSQMethod(engine, &ScriptEventDisasterZeppelinerCleared::GetStationID, "GetStationID", 1, "x"); - - SQAIEventDisasterZeppelinerCleared.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventTownFounded"; } - -void SQAIEventTownFounded_Register(Squirrel *engine) -{ - DefSQClass SQAIEventTownFounded("AIEventTownFounded"); - SQAIEventTownFounded.PreRegister(engine, "AIEvent"); - - SQAIEventTownFounded.DefSQStaticMethod(engine, &ScriptEventTownFounded::Convert, "Convert", 2, ".x"); - - SQAIEventTownFounded.DefSQMethod(engine, &ScriptEventTownFounded::GetTownID, "GetTownID", 1, "x"); - - SQAIEventTownFounded.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventAircraftDestTooFar"; } - -void SQAIEventAircraftDestTooFar_Register(Squirrel *engine) -{ - DefSQClass SQAIEventAircraftDestTooFar("AIEventAircraftDestTooFar"); - SQAIEventAircraftDestTooFar.PreRegister(engine, "AIEvent"); - - SQAIEventAircraftDestTooFar.DefSQStaticMethod(engine, &ScriptEventAircraftDestTooFar::Convert, "Convert", 2, ".x"); - - SQAIEventAircraftDestTooFar.DefSQMethod(engine, &ScriptEventAircraftDestTooFar::GetVehicleID, "GetVehicleID", 1, "x"); - - SQAIEventAircraftDestTooFar.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventCompanyTown"; } - -void SQAIEventCompanyTown_Register(Squirrel *engine) -{ - DefSQClass SQAIEventCompanyTown("AIEventCompanyTown"); - SQAIEventCompanyTown.PreRegister(engine, "AIEvent"); - - SQAIEventCompanyTown.DefSQStaticMethod(engine, &ScriptEventCompanyTown::Convert, "Convert", 2, ".x"); - - SQAIEventCompanyTown.DefSQMethod(engine, &ScriptEventCompanyTown::GetCompanyID, "GetCompanyID", 1, "x"); - SQAIEventCompanyTown.DefSQMethod(engine, &ScriptEventCompanyTown::GetTownID, "GetTownID", 1, "x"); - - SQAIEventCompanyTown.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventExclusiveTransportRights"; } - -void SQAIEventExclusiveTransportRights_Register(Squirrel *engine) -{ - DefSQClass SQAIEventExclusiveTransportRights("AIEventExclusiveTransportRights"); - SQAIEventExclusiveTransportRights.PreRegister(engine, "AIEventCompanyTown"); - SQAIEventExclusiveTransportRights.AddConstructor(engine, "xii"); - - SQAIEventExclusiveTransportRights.DefSQStaticMethod(engine, &ScriptEventExclusiveTransportRights::Convert, "Convert", 2, ".x"); - - SQAIEventExclusiveTransportRights.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventRoadReconstruction"; } - -void SQAIEventRoadReconstruction_Register(Squirrel *engine) -{ - DefSQClass SQAIEventRoadReconstruction("AIEventRoadReconstruction"); - SQAIEventRoadReconstruction.PreRegister(engine, "AIEventCompanyTown"); - SQAIEventRoadReconstruction.AddConstructor(engine, "xii"); - - SQAIEventRoadReconstruction.DefSQStaticMethod(engine, &ScriptEventRoadReconstruction::Convert, "Convert", 2, ".x"); - - SQAIEventRoadReconstruction.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIEventVehicleAutoReplaced"; } - -void SQAIEventVehicleAutoReplaced_Register(Squirrel *engine) -{ - DefSQClass SQAIEventVehicleAutoReplaced("AIEventVehicleAutoReplaced"); - SQAIEventVehicleAutoReplaced.PreRegister(engine, "AIEvent"); - - SQAIEventVehicleAutoReplaced.DefSQStaticMethod(engine, &ScriptEventVehicleAutoReplaced::Convert, "Convert", 2, ".x"); - - SQAIEventVehicleAutoReplaced.DefSQMethod(engine, &ScriptEventVehicleAutoReplaced::GetOldVehicleID, "GetOldVehicleID", 1, "x"); - SQAIEventVehicleAutoReplaced.DefSQMethod(engine, &ScriptEventVehicleAutoReplaced::GetNewVehicleID, "GetNewVehicleID", 1, "x"); - - SQAIEventVehicleAutoReplaced.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_execmode.hpp.sq b/src/script/api/ai/ai_execmode.hpp.sq deleted file mode 100644 index fa7d8a2c24..0000000000 --- a/src/script/api/ai/ai_execmode.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_execmode.hpp" -#include "../template/template_execmode.hpp.sq" - - -template <> const char *GetClassName() { return "AIExecMode"; } - -void SQAIExecMode_Register(Squirrel *engine) -{ - DefSQClass SQAIExecMode("AIExecMode"); - SQAIExecMode.PreRegister(engine); - SQAIExecMode.AddConstructor(engine, "x"); - - SQAIExecMode.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_gamesettings.hpp.sq b/src/script/api/ai/ai_gamesettings.hpp.sq deleted file mode 100644 index e5ff4ce17f..0000000000 --- a/src/script/api/ai/ai_gamesettings.hpp.sq +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_gamesettings.hpp" -#include "../template/template_gamesettings.hpp.sq" - - -template <> const char *GetClassName() { return "AIGameSettings"; } - -void SQAIGameSettings_Register(Squirrel *engine) -{ - DefSQClass SQAIGameSettings("AIGameSettings"); - SQAIGameSettings.PreRegister(engine); - SQAIGameSettings.AddConstructor(engine, "x"); - - SQAIGameSettings.DefSQStaticMethod(engine, &ScriptGameSettings::IsValid, "IsValid", 2, ".."); - SQAIGameSettings.DefSQStaticMethod(engine, &ScriptGameSettings::GetValue, "GetValue", 2, ".."); - SQAIGameSettings.DefSQStaticMethod(engine, &ScriptGameSettings::IsDisabledVehicleType, "IsDisabledVehicleType", 2, ".i"); - - SQAIGameSettings.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq deleted file mode 100644 index 2a221df62a..0000000000 --- a/src/script/api/ai/ai_group.hpp.sq +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_group.hpp" -#include "../template/template_group.hpp.sq" - - -template <> const char *GetClassName() { return "AIGroup"; } - -void SQAIGroup_Register(Squirrel *engine) -{ - DefSQClass SQAIGroup("AIGroup"); - SQAIGroup.PreRegister(engine); - SQAIGroup.AddConstructor(engine, "x"); - - SQAIGroup.DefSQConst(engine, ScriptGroup::GROUP_ALL, "GROUP_ALL"); - SQAIGroup.DefSQConst(engine, ScriptGroup::GROUP_DEFAULT, "GROUP_DEFAULT"); - SQAIGroup.DefSQConst(engine, ScriptGroup::GROUP_INVALID, "GROUP_INVALID"); - - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::IsValidGroup, "IsValidGroup", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::CreateGroup, "CreateGroup", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::DeleteGroup, "DeleteGroup", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetVehicleType, "GetVehicleType", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetName, "SetName", 3, ".i."); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetName, "GetName", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetParent, "SetParent", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetParent, "GetParent", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::EnableAutoReplaceProtection, "EnableAutoReplaceProtection", 3, ".ib"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetAutoReplaceProtection, "GetAutoReplaceProtection", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetNumEngines, "GetNumEngines", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::MoveVehicle, "MoveVehicle", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::EnableWagonRemoval, "EnableWagonRemoval", 2, ".b"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::HasWagonRemoval, "HasWagonRemoval", 1, "."); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetAutoReplace, "SetAutoReplace", 4, ".iii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetEngineReplacement, "GetEngineReplacement", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::StopAutoReplace, "StopAutoReplace", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitThisYear, "GetProfitThisYear", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitLastYear, "GetProfitLastYear", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetCurrentUsage, "GetCurrentUsage", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetPrimaryColour, "SetPrimaryColour", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetSecondaryColour, "SetSecondaryColour", 3, ".ii"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetPrimaryColour, "GetPrimaryColour", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetSecondaryColour, "GetSecondaryColour", 2, ".i"); - - SQAIGroup.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_grouplist.hpp.sq b/src/script/api/ai/ai_grouplist.hpp.sq deleted file mode 100644 index 3977a92c81..0000000000 --- a/src/script/api/ai/ai_grouplist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_grouplist.hpp" -#include "../template/template_grouplist.hpp.sq" - - -template <> const char *GetClassName() { return "AIGroupList"; } - -void SQAIGroupList_Register(Squirrel *engine) -{ - DefSQClass SQAIGroupList("AIGroupList"); - SQAIGroupList.PreRegister(engine, "AIList"); - SQAIGroupList.AddConstructor(engine, "x"); - - SQAIGroupList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_industry.hpp.sq b/src/script/api/ai/ai_industry.hpp.sq deleted file mode 100644 index 833c6a9e80..0000000000 --- a/src/script/api/ai/ai_industry.hpp.sq +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industry.hpp" -#include "../template/template_industry.hpp.sq" - - -template <> const char *GetClassName() { return "AIIndustry"; } - -void SQAIIndustry_Register(Squirrel *engine) -{ - DefSQClass SQAIIndustry("AIIndustry"); - SQAIIndustry.PreRegister(engine); - SQAIIndustry.AddConstructor(engine, "x"); - - SQAIIndustry.DefSQConst(engine, ScriptIndustry::CAS_NOT_ACCEPTED, "CAS_NOT_ACCEPTED"); - SQAIIndustry.DefSQConst(engine, ScriptIndustry::CAS_ACCEPTED, "CAS_ACCEPTED"); - SQAIIndustry.DefSQConst(engine, ScriptIndustry::CAS_TEMP_REFUSED, "CAS_TEMP_REFUSED"); - - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetIndustryCount, "GetIndustryCount", 1, "."); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::IsValidIndustry, "IsValidIndustry", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetIndustryID, "GetIndustryID", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetName, "GetName", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::IsCargoAccepted, "IsCargoAccepted", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetStockpiledCargo, "GetStockpiledCargo", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLastMonthProduction, "GetLastMonthProduction", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLastMonthTransported, "GetLastMonthTransported", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLastMonthTransportedPercentage, "GetLastMonthTransportedPercentage", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLocation, "GetLocation", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetAmountOfStationsAround, "GetAmountOfStationsAround", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::IsBuiltOnWater, "IsBuiltOnWater", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::HasHeliport, "HasHeliport", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetHeliportLocation, "GetHeliportLocation", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::HasDock, "HasDock", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetDockLocation, "GetDockLocation", 2, ".i"); - SQAIIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetIndustryType, "GetIndustryType", 2, ".i"); - - SQAIIndustry.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_industrylist.hpp.sq b/src/script/api/ai/ai_industrylist.hpp.sq deleted file mode 100644 index 11a4696dc8..0000000000 --- a/src/script/api/ai/ai_industrylist.hpp.sq +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrylist.hpp" -#include "../template/template_industrylist.hpp.sq" - - -template <> const char *GetClassName() { return "AIIndustryList"; } - -void SQAIIndustryList_Register(Squirrel *engine) -{ - DefSQClass SQAIIndustryList("AIIndustryList"); - SQAIIndustryList.PreRegister(engine, "AIList"); - SQAIIndustryList.AddConstructor(engine, "x"); - - SQAIIndustryList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIIndustryList_CargoAccepting"; } - -void SQAIIndustryList_CargoAccepting_Register(Squirrel *engine) -{ - DefSQClass SQAIIndustryList_CargoAccepting("AIIndustryList_CargoAccepting"); - SQAIIndustryList_CargoAccepting.PreRegister(engine, "AIList"); - SQAIIndustryList_CargoAccepting.AddConstructor(engine, "xi"); - - SQAIIndustryList_CargoAccepting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIIndustryList_CargoProducing"; } - -void SQAIIndustryList_CargoProducing_Register(Squirrel *engine) -{ - DefSQClass SQAIIndustryList_CargoProducing("AIIndustryList_CargoProducing"); - SQAIIndustryList_CargoProducing.PreRegister(engine, "AIList"); - SQAIIndustryList_CargoProducing.AddConstructor(engine, "xi"); - - SQAIIndustryList_CargoProducing.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_industrytype.hpp.sq b/src/script/api/ai/ai_industrytype.hpp.sq deleted file mode 100644 index 1d6648d993..0000000000 --- a/src/script/api/ai/ai_industrytype.hpp.sq +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrytype.hpp" -#include "../template/template_industrytype.hpp.sq" - - -template <> const char *GetClassName() { return "AIIndustryType"; } - -void SQAIIndustryType_Register(Squirrel *engine) -{ - DefSQClass SQAIIndustryType("AIIndustryType"); - SQAIIndustryType.PreRegister(engine); - SQAIIndustryType.AddConstructor(engine, "x"); - - SQAIIndustryType.DefSQConst(engine, ScriptIndustryType::INDUSTRYTYPE_UNKNOWN, "INDUSTRYTYPE_UNKNOWN"); - SQAIIndustryType.DefSQConst(engine, ScriptIndustryType::INDUSTRYTYPE_TOWN, "INDUSTRYTYPE_TOWN"); - - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsValidIndustryType, "IsValidIndustryType", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetName, "GetName", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetProducedCargo, "GetProducedCargo", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetAcceptedCargo, "GetAcceptedCargo", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsRawIndustry, "IsRawIndustry", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsProcessingIndustry, "IsProcessingIndustry", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::ProductionCanIncrease, "ProductionCanIncrease", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetConstructionCost, "GetConstructionCost", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::CanBuildIndustry, "CanBuildIndustry", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::CanProspectIndustry, "CanProspectIndustry", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::BuildIndustry, "BuildIndustry", 3, ".ii"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::ProspectIndustry, "ProspectIndustry", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsBuiltOnWater, "IsBuiltOnWater", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::HasHeliport, "HasHeliport", 2, ".i"); - SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::HasDock, "HasDock", 2, ".i"); - - SQAIIndustryType.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_industrytypelist.hpp.sq b/src/script/api/ai/ai_industrytypelist.hpp.sq deleted file mode 100644 index 104a78ddf0..0000000000 --- a/src/script/api/ai/ai_industrytypelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrytypelist.hpp" -#include "../template/template_industrytypelist.hpp.sq" - - -template <> const char *GetClassName() { return "AIIndustryTypeList"; } - -void SQAIIndustryTypeList_Register(Squirrel *engine) -{ - DefSQClass SQAIIndustryTypeList("AIIndustryTypeList"); - SQAIIndustryTypeList.PreRegister(engine, "AIList"); - SQAIIndustryTypeList.AddConstructor(engine, "x"); - - SQAIIndustryTypeList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_infrastructure.hpp.sq b/src/script/api/ai/ai_infrastructure.hpp.sq deleted file mode 100644 index f16f4b2810..0000000000 --- a/src/script/api/ai/ai_infrastructure.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_infrastructure.hpp" -#include "../template/template_infrastructure.hpp.sq" - - -template <> const char *GetClassName() { return "AIInfrastructure"; } - -void SQAIInfrastructure_Register(Squirrel *engine) -{ - DefSQClass SQAIInfrastructure("AIInfrastructure"); - SQAIInfrastructure.PreRegister(engine); - SQAIInfrastructure.AddConstructor(engine, "x"); - - SQAIInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_RAIL, "INFRASTRUCTURE_RAIL"); - SQAIInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_SIGNALS, "INFRASTRUCTURE_SIGNALS"); - SQAIInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_ROAD, "INFRASTRUCTURE_ROAD"); - SQAIInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_CANAL, "INFRASTRUCTURE_CANAL"); - SQAIInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_STATION, "INFRASTRUCTURE_STATION"); - SQAIInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_AIRPORT, "INFRASTRUCTURE_AIRPORT"); - - SQAIInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetRailPieceCount, "GetRailPieceCount", 3, ".ii"); - SQAIInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetRoadPieceCount, "GetRoadPieceCount", 3, ".ii"); - SQAIInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetInfrastructurePieceCount, "GetInfrastructurePieceCount", 3, ".ii"); - SQAIInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetMonthlyRailCosts, "GetMonthlyRailCosts", 3, ".ii"); - SQAIInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetMonthlyRoadCosts, "GetMonthlyRoadCosts", 3, ".ii"); - SQAIInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetMonthlyInfrastructureCosts, "GetMonthlyInfrastructureCosts", 3, ".ii"); - - SQAIInfrastructure.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_list.hpp.sq b/src/script/api/ai/ai_list.hpp.sq deleted file mode 100644 index ec66200b5e..0000000000 --- a/src/script/api/ai/ai_list.hpp.sq +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_list.hpp" -#include "../template/template_list.hpp.sq" - - -template <> const char *GetClassName() { return "AIList"; } - -void SQAIList_Register(Squirrel *engine) -{ - DefSQClass SQAIList("AIList"); - SQAIList.PreRegister(engine); - SQAIList.AddConstructor(engine, "x"); - - SQAIList.DefSQConst(engine, ScriptList::SORT_BY_VALUE, "SORT_BY_VALUE"); - SQAIList.DefSQConst(engine, ScriptList::SORT_BY_ITEM, "SORT_BY_ITEM"); - - SQAIList.DefSQConst(engine, ScriptList::SORT_ASCENDING, "SORT_ASCENDING"); - SQAIList.DefSQConst(engine, ScriptList::SORT_DESCENDING, "SORT_DESCENDING"); - - SQAIList.DefSQMethod(engine, &ScriptList::AddItem, "AddItem", 3, "xii"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveItem, "RemoveItem", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::Clear, "Clear", 1, "x"); - SQAIList.DefSQMethod(engine, &ScriptList::HasItem, "HasItem", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::Begin, "Begin", 1, "x"); - SQAIList.DefSQMethod(engine, &ScriptList::Next, "Next", 1, "x"); - SQAIList.DefSQMethod(engine, &ScriptList::IsEmpty, "IsEmpty", 1, "x"); - SQAIList.DefSQMethod(engine, &ScriptList::IsEnd, "IsEnd", 1, "x"); - SQAIList.DefSQMethod(engine, &ScriptList::Count, "Count", 1, "x"); - SQAIList.DefSQMethod(engine, &ScriptList::GetValue, "GetValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::SetValue, "SetValue", 3, "xii"); - SQAIList.DefSQMethod(engine, &ScriptList::Sort, "Sort", 3, "xib"); - SQAIList.DefSQMethod(engine, &ScriptList::AddList, "AddList", 2, "xx"); - SQAIList.DefSQMethod(engine, &ScriptList::SwapList, "SwapList", 2, "xx"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveAboveValue, "RemoveAboveValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveBelowValue, "RemoveBelowValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveBetweenValue, "RemoveBetweenValue", 3, "xii"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveValue, "RemoveValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveTop, "RemoveTop", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveBottom, "RemoveBottom", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::RemoveList, "RemoveList", 2, "xx"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepAboveValue, "KeepAboveValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepBelowValue, "KeepBelowValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepBetweenValue, "KeepBetweenValue", 3, "xii"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepValue, "KeepValue", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepTop, "KeepTop", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepBottom, "KeepBottom", 2, "xi"); - SQAIList.DefSQMethod(engine, &ScriptList::KeepList, "KeepList", 2, "xx"); - SQAIList.DefSQAdvancedMethod(engine, &ScriptList::_get, "_get"); - SQAIList.DefSQAdvancedMethod(engine, &ScriptList::_set, "_set"); - SQAIList.DefSQAdvancedMethod(engine, &ScriptList::_nexti, "_nexti"); - SQAIList.DefSQAdvancedMethod(engine, &ScriptList::Valuate, "Valuate"); - - SQAIList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_log.hpp.sq b/src/script/api/ai/ai_log.hpp.sq deleted file mode 100644 index de86769640..0000000000 --- a/src/script/api/ai/ai_log.hpp.sq +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_log.hpp" -#include "../template/template_log.hpp.sq" - - -template <> const char *GetClassName() { return "AILog"; } - -void SQAILog_Register(Squirrel *engine) -{ - DefSQClass SQAILog("AILog"); - SQAILog.PreRegister(engine); - SQAILog.AddConstructor(engine, "x"); - - SQAILog.DefSQStaticMethod(engine, &ScriptLog::Info, "Info", 2, ".."); - SQAILog.DefSQStaticMethod(engine, &ScriptLog::Warning, "Warning", 2, ".."); - SQAILog.DefSQStaticMethod(engine, &ScriptLog::Error, "Error", 2, ".."); - - SQAILog.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_map.hpp.sq b/src/script/api/ai/ai_map.hpp.sq deleted file mode 100644 index 3280e7f510..0000000000 --- a/src/script/api/ai/ai_map.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_map.hpp" -#include "../template/template_map.hpp.sq" - - -template <> const char *GetClassName() { return "AIMap"; } - -void SQAIMap_Register(Squirrel *engine) -{ - DefSQClass SQAIMap("AIMap"); - SQAIMap.PreRegister(engine); - SQAIMap.AddConstructor(engine, "x"); - - SQAIMap.DefSQConst(engine, ScriptMap::TILE_INVALID, "TILE_INVALID"); - - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::IsValidTile, "IsValidTile", 2, ".i"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::GetMapSize, "GetMapSize", 1, "."); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::GetMapSizeX, "GetMapSizeX", 1, "."); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::GetMapSizeY, "GetMapSizeY", 1, "."); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::GetTileX, "GetTileX", 2, ".i"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::GetTileY, "GetTileY", 2, ".i"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::GetTileIndex, "GetTileIndex", 3, ".ii"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::DistanceManhattan, "DistanceManhattan", 3, ".ii"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::DistanceMax, "DistanceMax", 3, ".ii"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::DistanceSquare, "DistanceSquare", 3, ".ii"); - SQAIMap.DefSQStaticMethod(engine, &ScriptMap::DistanceFromEdge, "DistanceFromEdge", 2, ".i"); - - SQAIMap.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_marine.hpp.sq b/src/script/api/ai/ai_marine.hpp.sq deleted file mode 100644 index d23fe09992..0000000000 --- a/src/script/api/ai/ai_marine.hpp.sq +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_marine.hpp" -#include "../template/template_marine.hpp.sq" - - -template <> const char *GetClassName() { return "AIMarine"; } - -void SQAIMarine_Register(Squirrel *engine) -{ - DefSQClass SQAIMarine("AIMarine"); - SQAIMarine.PreRegister(engine); - SQAIMarine.AddConstructor(engine, "x"); - - SQAIMarine.DefSQConst(engine, ScriptMarine::ERR_MARINE_BASE, "ERR_MARINE_BASE"); - SQAIMarine.DefSQConst(engine, ScriptMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER, "ERR_MARINE_MUST_BE_BUILT_ON_WATER"); - SQAIMarine.DefSQConst(engine, ScriptMarine::BT_DOCK, "BT_DOCK"); - SQAIMarine.DefSQConst(engine, ScriptMarine::BT_DEPOT, "BT_DEPOT"); - SQAIMarine.DefSQConst(engine, ScriptMarine::BT_BUOY, "BT_BUOY"); - - ScriptError::RegisterErrorMap(STR_ERROR_MUST_BE_BUILT_ON_WATER, ScriptMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER); - - ScriptError::RegisterErrorMapString(ScriptMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER, "ERR_MARINE_MUST_BE_BUILT_ON_WATER"); - - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::IsWaterDepotTile, "IsWaterDepotTile", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::IsDockTile, "IsDockTile", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::IsBuoyTile, "IsBuoyTile", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::IsLockTile, "IsLockTile", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::IsCanalTile, "IsCanalTile", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::AreWaterTilesConnected, "AreWaterTilesConnected", 3, ".ii"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildWaterDepot, "BuildWaterDepot", 3, ".ii"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildDock, "BuildDock", 3, ".ii"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildBuoy, "BuildBuoy", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildLock, "BuildLock", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildCanal, "BuildCanal", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveWaterDepot, "RemoveWaterDepot", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveDock, "RemoveDock", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveBuoy, "RemoveBuoy", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveLock, "RemoveLock", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveCanal, "RemoveCanal", 2, ".i"); - SQAIMarine.DefSQStaticMethod(engine, &ScriptMarine::GetBuildCost, "GetBuildCost", 2, ".i"); - - SQAIMarine.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_order.hpp.sq b/src/script/api/ai/ai_order.hpp.sq deleted file mode 100644 index 19664ee1eb..0000000000 --- a/src/script/api/ai/ai_order.hpp.sq +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_order.hpp" -#include "../template/template_order.hpp.sq" - - -template <> const char *GetClassName() { return "AIOrder"; } - -void SQAIOrder_Register(Squirrel *engine) -{ - DefSQClass SQAIOrder("AIOrder"); - SQAIOrder.PreRegister(engine); - SQAIOrder.AddConstructor(engine, "x"); - - SQAIOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_BASE, "ERR_ORDER_BASE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_TOO_MANY, "ERR_ORDER_TOO_MANY"); - SQAIOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, "ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION"); - SQAIOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE, "ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_NONE, "OF_NONE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_NON_STOP_INTERMEDIATE, "OF_NON_STOP_INTERMEDIATE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_NON_STOP_DESTINATION, "OF_NON_STOP_DESTINATION"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_UNLOAD, "OF_UNLOAD"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_TRANSFER, "OF_TRANSFER"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_NO_UNLOAD, "OF_NO_UNLOAD"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_FULL_LOAD, "OF_FULL_LOAD"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_FULL_LOAD_ANY, "OF_FULL_LOAD_ANY"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_NO_LOAD, "OF_NO_LOAD"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_SERVICE_IF_NEEDED, "OF_SERVICE_IF_NEEDED"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_STOP_IN_DEPOT, "OF_STOP_IN_DEPOT"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_GOTO_NEAREST_DEPOT, "OF_GOTO_NEAREST_DEPOT"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_NON_STOP_FLAGS, "OF_NON_STOP_FLAGS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_UNLOAD_FLAGS, "OF_UNLOAD_FLAGS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_LOAD_FLAGS, "OF_LOAD_FLAGS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_DEPOT_FLAGS, "OF_DEPOT_FLAGS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OF_INVALID, "OF_INVALID"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_LOAD_PERCENTAGE, "OC_LOAD_PERCENTAGE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_RELIABILITY, "OC_RELIABILITY"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_MAX_RELIABILITY, "OC_MAX_RELIABILITY"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_MAX_SPEED, "OC_MAX_SPEED"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_AGE, "OC_AGE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_REQUIRES_SERVICE, "OC_REQUIRES_SERVICE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_UNCONDITIONALLY, "OC_UNCONDITIONALLY"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_REMAINING_LIFETIME, "OC_REMAINING_LIFETIME"); - SQAIOrder.DefSQConst(engine, ScriptOrder::OC_INVALID, "OC_INVALID"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_EQUALS, "CF_EQUALS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_NOT_EQUALS, "CF_NOT_EQUALS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_LESS_THAN, "CF_LESS_THAN"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_LESS_EQUALS, "CF_LESS_EQUALS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_MORE_THAN, "CF_MORE_THAN"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_MORE_EQUALS, "CF_MORE_EQUALS"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_IS_TRUE, "CF_IS_TRUE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_IS_FALSE, "CF_IS_FALSE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::CF_INVALID, "CF_INVALID"); - SQAIOrder.DefSQConst(engine, ScriptOrder::ORDER_CURRENT, "ORDER_CURRENT"); - SQAIOrder.DefSQConst(engine, ScriptOrder::ORDER_INVALID, "ORDER_INVALID"); - SQAIOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_NEAR, "STOPLOCATION_NEAR"); - SQAIOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_MIDDLE, "STOPLOCATION_MIDDLE"); - SQAIOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_FAR, "STOPLOCATION_FAR"); - SQAIOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_INVALID, "STOPLOCATION_INVALID"); - - ScriptError::RegisterErrorMap(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS, ScriptOrder::ERR_ORDER_TOO_MANY); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION, ScriptOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE, ScriptOrder::ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE); - - ScriptError::RegisterErrorMapString(ScriptOrder::ERR_ORDER_TOO_MANY, "ERR_ORDER_TOO_MANY"); - ScriptError::RegisterErrorMapString(ScriptOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, "ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION"); - ScriptError::RegisterErrorMapString(ScriptOrder::ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE, "ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE"); - - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsValidVehicleOrder, "IsValidVehicleOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsGotoStationOrder, "IsGotoStationOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsGotoDepotOrder, "IsGotoDepotOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsGotoWaypointOrder, "IsGotoWaypointOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsConditionalOrder, "IsConditionalOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsVoidOrder, "IsVoidOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsRefitOrder, "IsRefitOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsCurrentOrderPartOfOrderList, "IsCurrentOrderPartOfOrderList", 2, ".i"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::ResolveOrderPosition, "ResolveOrderPosition", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::AreOrderFlagsValid, "AreOrderFlagsValid", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::IsValidConditionalOrder, "IsValidConditionalOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCount, "GetOrderCount", 2, ".i"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderDestination, "GetOrderDestination", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderFlags, "GetOrderFlags", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderJumpTo, "GetOrderJumpTo", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCondition, "GetOrderCondition", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCompareFunction, "GetOrderCompareFunction", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCompareValue, "GetOrderCompareValue", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetStopLocation, "GetStopLocation", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderRefit, "GetOrderRefit", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetOrderJumpTo, "SetOrderJumpTo", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetOrderCondition, "SetOrderCondition", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetOrderCompareFunction, "SetOrderCompareFunction", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetOrderCompareValue, "SetOrderCompareValue", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetStopLocation, "SetStopLocation", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetOrderRefit, "SetOrderRefit", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::AppendOrder, "AppendOrder", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::AppendConditionalOrder, "AppendConditionalOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::InsertOrder, "InsertOrder", 5, ".iiii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::InsertConditionalOrder, "InsertConditionalOrder", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::RemoveOrder, "RemoveOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SetOrderFlags, "SetOrderFlags", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::MoveOrder, "MoveOrder", 4, ".iii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::SkipToOrder, "SkipToOrder", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::CopyOrders, "CopyOrders", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::ShareOrders, "ShareOrders", 3, ".ii"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::UnshareOrders, "UnshareOrders", 2, ".i"); - SQAIOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderDistance, "GetOrderDistance", 4, ".iii"); - - SQAIOrder.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_priorityqueue.hpp.sq b/src/script/api/ai/ai_priorityqueue.hpp.sq deleted file mode 100644 index 6e5fcf82e9..0000000000 --- a/src/script/api/ai/ai_priorityqueue.hpp.sq +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_priorityqueue.hpp" -#include "../template/template_priorityqueue.hpp.sq" - - -template <> const char *GetClassName() { return "AIPriorityQueue"; } - -void SQAIPriorityQueue_Register(Squirrel *engine) -{ - DefSQClass SQAIPriorityQueue("AIPriorityQueue"); - SQAIPriorityQueue.PreRegister(engine); - SQAIPriorityQueue.AddConstructor(engine, "x"); - - SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Insert, "Insert"); - SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Pop, "Pop"); - SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Peek, "Peek"); - SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Exists, "Exists"); - SQAIPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Clear, "Clear"); - SQAIPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::IsEmpty, "IsEmpty", 1, "x"); - SQAIPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::Count, "Count", 1, "x"); - - SQAIPriorityQueue.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_rail.hpp.sq b/src/script/api/ai/ai_rail.hpp.sq deleted file mode 100644 index f7de00cffd..0000000000 --- a/src/script/api/ai/ai_rail.hpp.sq +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_rail.hpp" -#include "../template/template_rail.hpp.sq" - - -template <> const char *GetClassName() { return "AIRail"; } - -void SQAIRail_Register(Squirrel *engine) -{ - DefSQClass SQAIRail("AIRail"); - SQAIRail.PreRegister(engine); - SQAIRail.AddConstructor(engine, "x"); - - SQAIRail.DefSQConst(engine, ScriptRail::ERR_RAIL_BASE, "ERR_RAIL_BASE"); - SQAIRail.DefSQConst(engine, ScriptRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD"); - SQAIRail.DefSQConst(engine, ScriptRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK"); - SQAIRail.DefSQConst(engine, ScriptRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTYPE_INVALID, "RAILTYPE_INVALID"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_NE_SW, "RAILTRACK_NE_SW"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_NW_SE, "RAILTRACK_NW_SE"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_NW_NE, "RAILTRACK_NW_NE"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_SW_SE, "RAILTRACK_SW_SE"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_NW_SW, "RAILTRACK_NW_SW"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_NE_SE, "RAILTRACK_NE_SE"); - SQAIRail.DefSQConst(engine, ScriptRail::RAILTRACK_INVALID, "RAILTRACK_INVALID"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_NORMAL, "SIGNALTYPE_NORMAL"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_ENTRY, "SIGNALTYPE_ENTRY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_EXIT, "SIGNALTYPE_EXIT"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_COMBO, "SIGNALTYPE_COMBO"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_PBS, "SIGNALTYPE_PBS"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_PBS_ONEWAY, "SIGNALTYPE_PBS_ONEWAY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_TWOWAY, "SIGNALTYPE_TWOWAY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_NORMAL_TWOWAY, "SIGNALTYPE_NORMAL_TWOWAY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_ENTRY_TWOWAY, "SIGNALTYPE_ENTRY_TWOWAY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_EXIT_TWOWAY, "SIGNALTYPE_EXIT_TWOWAY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_COMBO_TWOWAY, "SIGNALTYPE_COMBO_TWOWAY"); - SQAIRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_NONE, "SIGNALTYPE_NONE"); - SQAIRail.DefSQConst(engine, ScriptRail::BT_TRACK, "BT_TRACK"); - SQAIRail.DefSQConst(engine, ScriptRail::BT_SIGNAL, "BT_SIGNAL"); - SQAIRail.DefSQConst(engine, ScriptRail::BT_DEPOT, "BT_DEPOT"); - SQAIRail.DefSQConst(engine, ScriptRail::BT_STATION, "BT_STATION"); - SQAIRail.DefSQConst(engine, ScriptRail::BT_WAYPOINT, "BT_WAYPOINT"); - - ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_ON_ONEWAY_ROAD, ScriptRail::ERR_CROSSING_ON_ONEWAY_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_THERE_IS_NO_RAILROAD_TRACK, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_THERE_ARE_NO_SIGNALS, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_THERE_IS_NO_STATION, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED_RAIL, ScriptRail::ERR_RAILTYPE_DISALLOWS_CROSSING); - - ScriptError::RegisterErrorMapString(ScriptRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD"); - ScriptError::RegisterErrorMapString(ScriptRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK"); - ScriptError::RegisterErrorMapString(ScriptRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); - - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetName, "GetName", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::IsRailTile, "IsRailTile", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::IsLevelCrossingTile, "IsLevelCrossingTile", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::IsRailDepotTile, "IsRailDepotTile", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::IsRailStationTile, "IsRailStationTile", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::IsRailWaypointTile, "IsRailWaypointTile", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::IsRailTypeAvailable, "IsRailTypeAvailable", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetCurrentRailType, "GetCurrentRailType", 1, "."); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::SetCurrentRailType, "SetCurrentRailType", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::TrainCanRunOnRail, "TrainCanRunOnRail", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::TrainHasPowerOnRail, "TrainHasPowerOnRail", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetRailType, "GetRailType", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::ConvertRailType, "ConvertRailType", 4, ".iii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetRailDepotFrontTile, "GetRailDepotFrontTile", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetRailStationDirection, "GetRailStationDirection", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailDepot, "BuildRailDepot", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailStation, "BuildRailStation", 6, ".iiiii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildNewGRFRailStation, "BuildNewGRFRailStation", 11, ".iiiiiiiiib"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailWaypoint, "BuildRailWaypoint", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRailWaypointTileRectangle, "RemoveRailWaypointTileRectangle", 4, ".iib"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRailStationTileRectangle, "RemoveRailStationTileRectangle", 4, ".iib"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetRailTracks, "GetRailTracks", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailTrack, "BuildRailTrack", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRailTrack, "RemoveRailTrack", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::AreTilesConnected, "AreTilesConnected", 4, ".iii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildRail, "BuildRail", 4, ".iii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRail, "RemoveRail", 4, ".iii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetSignalType, "GetSignalType", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::BuildSignal, "BuildSignal", 4, ".iii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::RemoveSignal, "RemoveSignal", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetBuildCost, "GetBuildCost", 3, ".ii"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQAIRail.DefSQStaticMethod(engine, &ScriptRail::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); - - SQAIRail.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_railtypelist.hpp.sq b/src/script/api/ai/ai_railtypelist.hpp.sq deleted file mode 100644 index b676f6e8fe..0000000000 --- a/src/script/api/ai/ai_railtypelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_railtypelist.hpp" -#include "../template/template_railtypelist.hpp.sq" - - -template <> const char *GetClassName() { return "AIRailTypeList"; } - -void SQAIRailTypeList_Register(Squirrel *engine) -{ - DefSQClass SQAIRailTypeList("AIRailTypeList"); - SQAIRailTypeList.PreRegister(engine, "AIList"); - SQAIRailTypeList.AddConstructor(engine, "x"); - - SQAIRailTypeList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_road.hpp.sq b/src/script/api/ai/ai_road.hpp.sq deleted file mode 100644 index b42c54801e..0000000000 --- a/src/script/api/ai/ai_road.hpp.sq +++ /dev/null @@ -1,93 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_road.hpp" -#include "../template/template_road.hpp.sq" - - -template <> const char *GetClassName() { return "AIRoad"; } - -void SQAIRoad_Register(Squirrel *engine) -{ - DefSQClass SQAIRoad("AIRoad"); - SQAIRoad.PreRegister(engine); - SQAIRoad.AddConstructor(engine, "x"); - - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_BASE, "ERR_ROAD_BASE"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING, "ERR_ROADTYPE_DISALLOWS_CROSSING"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ERR_UNSUITABLE_ROAD, "ERR_UNSUITABLE_ROAD"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADTYPE_ROAD, "ROADTYPE_ROAD"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADTYPE_TRAM, "ROADTYPE_TRAM"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADTYPE_INVALID, "ROADTYPE_INVALID"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADTRAMTYPES_ROAD, "ROADTRAMTYPES_ROAD"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADTRAMTYPES_TRAM, "ROADTRAMTYPES_TRAM"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADVEHTYPE_BUS, "ROADVEHTYPE_BUS"); - SQAIRoad.DefSQConst(engine, ScriptRoad::ROADVEHTYPE_TRUCK, "ROADVEHTYPE_TRUCK"); - SQAIRoad.DefSQConst(engine, ScriptRoad::BT_ROAD, "BT_ROAD"); - SQAIRoad.DefSQConst(engine, ScriptRoad::BT_DEPOT, "BT_DEPOT"); - SQAIRoad.DefSQConst(engine, ScriptRoad::BT_BUS_STOP, "BT_BUS_STOP"); - SQAIRoad.DefSQConst(engine, ScriptRoad::BT_TRUCK_STOP, "BT_TRUCK_STOP"); - - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_WORKS_IN_PROGRESS, ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS); - ScriptError::RegisterErrorMap(STR_ERROR_DRIVE_THROUGH_DIRECTION, ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION); - ScriptError::RegisterErrorMap(STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD, ScriptRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION, ScriptRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS); - ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED_ROAD, ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING); - ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_ROAD, ScriptRoad::ERR_UNSUITABLE_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_TRAMWAY, ScriptRoad::ERR_UNSUITABLE_ROAD); - - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING, "ERR_ROADTYPE_DISALLOWS_CROSSING"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_UNSUITABLE_ROAD, "ERR_UNSUITABLE_ROAD"); - - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetName, "GetName", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadVehicleTypeForCargo, "GetRoadVehicleTypeForCargo", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadTile, "IsRoadTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadDepotTile, "IsRoadDepotTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadStationTile, "IsRoadStationTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::IsDriveThroughRoadStationTile, "IsDriveThroughRoadStationTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadTypeAvailable, "IsRoadTypeAvailable", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetCurrentRoadType, "GetCurrentRoadType", 1, "."); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::SetCurrentRoadType, "SetCurrentRoadType", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RoadVehCanRunOnRoad, "RoadVehCanRunOnRoad", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RoadVehHasPowerOnRoad, "RoadVehHasPowerOnRoad", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::ConvertRoadType, "ConvertRoadType", 4, ".iii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::HasRoadType, "HasRoadType", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::AreRoadTilesConnected, "AreRoadTilesConnected", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::CanBuildConnectedRoadParts, "CanBuildConnectedRoadParts", 5, ".iaii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::CanBuildConnectedRoadPartsHere, "CanBuildConnectedRoadPartsHere", 4, ".iii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetNeighbourRoadCount, "GetNeighbourRoadCount", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadDepotFrontTile, "GetRoadDepotFrontTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadStationFrontTile, "GetRoadStationFrontTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetDriveThroughBackTile, "GetDriveThroughBackTile", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoad, "BuildRoad", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildOneWayRoad, "BuildOneWayRoad", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoadFull, "BuildRoadFull", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildOneWayRoadFull, "BuildOneWayRoadFull", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoadDepot, "BuildRoadDepot", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoadStation, "BuildRoadStation", 5, ".iiii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildDriveThroughRoadStation, "BuildDriveThroughRoadStation", 5, ".iiii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoad, "RemoveRoad", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadFull, "RemoveRoadFull", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadDepot, "RemoveRoadDepot", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadStation, "RemoveRoadStation", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetBuildCost, "GetBuildCost", 3, ".ii"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadTramType, "GetRoadTramType", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQAIRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); - - SQAIRoad.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_roadtypelist.hpp.sq b/src/script/api/ai/ai_roadtypelist.hpp.sq deleted file mode 100644 index 43224eea52..0000000000 --- a/src/script/api/ai/ai_roadtypelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_roadtypelist.hpp" -#include "../template/template_roadtypelist.hpp.sq" - - -template <> const char *GetClassName() { return "AIRoadTypeList"; } - -void SQAIRoadTypeList_Register(Squirrel *engine) -{ - DefSQClass SQAIRoadTypeList("AIRoadTypeList"); - SQAIRoadTypeList.PreRegister(engine, "AIList"); - SQAIRoadTypeList.AddConstructor(engine, "xi"); - - SQAIRoadTypeList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_sign.hpp.sq b/src/script/api/ai/ai_sign.hpp.sq deleted file mode 100644 index e6c78c9344..0000000000 --- a/src/script/api/ai/ai_sign.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_sign.hpp" -#include "../template/template_sign.hpp.sq" - - -template <> const char *GetClassName() { return "AISign"; } - -void SQAISign_Register(Squirrel *engine) -{ - DefSQClass SQAISign("AISign"); - SQAISign.PreRegister(engine); - SQAISign.AddConstructor(engine, "x"); - - SQAISign.DefSQConst(engine, ScriptSign::ERR_SIGN_BASE, "ERR_SIGN_BASE"); - SQAISign.DefSQConst(engine, ScriptSign::ERR_SIGN_TOO_MANY_SIGNS, "ERR_SIGN_TOO_MANY_SIGNS"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_SIGNS, ScriptSign::ERR_SIGN_TOO_MANY_SIGNS); - - ScriptError::RegisterErrorMapString(ScriptSign::ERR_SIGN_TOO_MANY_SIGNS, "ERR_SIGN_TOO_MANY_SIGNS"); - - SQAISign.DefSQStaticMethod(engine, &ScriptSign::IsValidSign, "IsValidSign", 2, ".i"); - SQAISign.DefSQStaticMethod(engine, &ScriptSign::SetName, "SetName", 3, ".i."); - SQAISign.DefSQStaticMethod(engine, &ScriptSign::GetName, "GetName", 2, ".i"); - SQAISign.DefSQStaticMethod(engine, &ScriptSign::GetLocation, "GetLocation", 2, ".i"); - SQAISign.DefSQStaticMethod(engine, &ScriptSign::BuildSign, "BuildSign", 3, ".i."); - SQAISign.DefSQStaticMethod(engine, &ScriptSign::RemoveSign, "RemoveSign", 2, ".i"); - - SQAISign.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_signlist.hpp.sq b/src/script/api/ai/ai_signlist.hpp.sq deleted file mode 100644 index 9fbf42ddf4..0000000000 --- a/src/script/api/ai/ai_signlist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_signlist.hpp" -#include "../template/template_signlist.hpp.sq" - - -template <> const char *GetClassName() { return "AISignList"; } - -void SQAISignList_Register(Squirrel *engine) -{ - DefSQClass SQAISignList("AISignList"); - SQAISignList.PreRegister(engine, "AIList"); - SQAISignList.AddConstructor(engine, "x"); - - SQAISignList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_station.hpp.sq b/src/script/api/ai/ai_station.hpp.sq deleted file mode 100644 index 2278faf238..0000000000 --- a/src/script/api/ai/ai_station.hpp.sq +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_station.hpp" -#include "../template/template_station.hpp.sq" - - -template <> const char *GetClassName() { return "AIStation"; } - -void SQAIStation_Register(Squirrel *engine) -{ - DefSQClass SQAIStation("AIStation"); - SQAIStation.PreRegister(engine, "AIBaseStation"); - SQAIStation.AddConstructor(engine, "x"); - - SQAIStation.DefSQConst(engine, ScriptStation::ERR_STATION_BASE, "ERR_STATION_BASE"); - SQAIStation.DefSQConst(engine, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION"); - SQAIStation.DefSQConst(engine, ScriptStation::ERR_STATION_TOO_MANY_STATIONS, "ERR_STATION_TOO_MANY_STATIONS"); - SQAIStation.DefSQConst(engine, ScriptStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, "ERR_STATION_TOO_MANY_STATIONS_IN_TOWN"); - SQAIStation.DefSQConst(engine, ScriptStation::STATION_TRAIN, "STATION_TRAIN"); - SQAIStation.DefSQConst(engine, ScriptStation::STATION_TRUCK_STOP, "STATION_TRUCK_STOP"); - SQAIStation.DefSQConst(engine, ScriptStation::STATION_BUS_STOP, "STATION_BUS_STOP"); - SQAIStation.DefSQConst(engine, ScriptStation::STATION_AIRPORT, "STATION_AIRPORT"); - SQAIStation.DefSQConst(engine, ScriptStation::STATION_DOCK, "STATION_DOCK"); - SQAIStation.DefSQConst(engine, ScriptStation::STATION_ANY, "STATION_ANY"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_STATIONS_LOADING, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_TRUCK_STOPS, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_BUS_STOPS, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); - ScriptError::RegisterErrorMap(STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT, ScriptStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN); - - ScriptError::RegisterErrorMapString(ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION"); - ScriptError::RegisterErrorMapString(ScriptStation::ERR_STATION_TOO_MANY_STATIONS, "ERR_STATION_TOO_MANY_STATIONS"); - ScriptError::RegisterErrorMapString(ScriptStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, "ERR_STATION_TOO_MANY_STATIONS_IN_TOWN"); - - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::IsValidStation, "IsValidStation", 2, ".i"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetStationID, "GetStationID", 2, ".i"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaiting, "GetCargoWaiting", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaitingFrom, "GetCargoWaitingFrom", 4, ".iii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaitingVia, "GetCargoWaitingVia", 4, ".iii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaitingFromVia, "GetCargoWaitingFromVia", 5, ".iiii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlanned, "GetCargoPlanned", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlannedFrom, "GetCargoPlannedFrom", 4, ".iii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlannedVia, "GetCargoPlannedVia", 4, ".iii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlannedFromVia, "GetCargoPlannedFromVia", 5, ".iiii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::HasCargoRating, "HasCargoRating", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoRating, "GetCargoRating", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetCoverageRadius, "GetCoverageRadius", 2, ".i"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetStationCoverageRadius, "GetStationCoverageRadius", 2, ".i"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::HasStationType, "HasStationType", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::HasRoadType, "HasRoadType", 3, ".ii"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::GetNearestTown, "GetNearestTown", 2, ".i"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::IsAirportClosed, "IsAirportClosed", 2, ".i"); - SQAIStation.DefSQStaticMethod(engine, &ScriptStation::OpenCloseAirport, "OpenCloseAirport", 2, ".i"); - - SQAIStation.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_stationlist.hpp.sq b/src/script/api/ai/ai_stationlist.hpp.sq deleted file mode 100644 index d7a63212c3..0000000000 --- a/src/script/api/ai/ai_stationlist.hpp.sq +++ /dev/null @@ -1,174 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_stationlist.hpp" -#include "../template/template_stationlist.hpp.sq" - - -template <> const char *GetClassName() { return "AIStationList"; } - -void SQAIStationList_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList("AIStationList"); - SQAIStationList.PreRegister(engine, "AIList"); - SQAIStationList.AddConstructor(engine, "xi"); - - SQAIStationList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_Cargo"; } - -void SQAIStationList_Cargo_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_Cargo("AIStationList_Cargo"); - SQAIStationList_Cargo.PreRegister(engine, "AIList"); - SQAIStationList_Cargo.AddConstructor(engine, "xiiiii"); - - SQAIStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_BY_FROM, "CS_BY_FROM"); - SQAIStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_VIA_BY_FROM, "CS_VIA_BY_FROM"); - SQAIStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_BY_VIA, "CS_BY_VIA"); - SQAIStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_FROM_BY_VIA, "CS_FROM_BY_VIA"); - SQAIStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CM_WAITING, "CM_WAITING"); - SQAIStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CM_PLANNED, "CM_PLANNED"); - - SQAIStationList_Cargo.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoWaiting"; } - -void SQAIStationList_CargoWaiting_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoWaiting("AIStationList_CargoWaiting"); - SQAIStationList_CargoWaiting.PreRegister(engine, "AIStationList_Cargo"); - SQAIStationList_CargoWaiting.AddConstructor(engine, "xiiii"); - - SQAIStationList_CargoWaiting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoPlanned"; } - -void SQAIStationList_CargoPlanned_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoPlanned("AIStationList_CargoPlanned"); - SQAIStationList_CargoPlanned.PreRegister(engine, "AIStationList_Cargo"); - SQAIStationList_CargoPlanned.AddConstructor(engine, "xiiii"); - - SQAIStationList_CargoPlanned.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoWaitingByFrom"; } - -void SQAIStationList_CargoWaitingByFrom_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoWaitingByFrom("AIStationList_CargoWaitingByFrom"); - SQAIStationList_CargoWaitingByFrom.PreRegister(engine, "AIStationList_CargoWaiting"); - SQAIStationList_CargoWaitingByFrom.AddConstructor(engine, "xii"); - - SQAIStationList_CargoWaitingByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoWaitingViaByFrom"; } - -void SQAIStationList_CargoWaitingViaByFrom_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoWaitingViaByFrom("AIStationList_CargoWaitingViaByFrom"); - SQAIStationList_CargoWaitingViaByFrom.PreRegister(engine, "AIStationList_CargoWaiting"); - SQAIStationList_CargoWaitingViaByFrom.AddConstructor(engine, "xiii"); - - SQAIStationList_CargoWaitingViaByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoWaitingByVia"; } - -void SQAIStationList_CargoWaitingByVia_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoWaitingByVia("AIStationList_CargoWaitingByVia"); - SQAIStationList_CargoWaitingByVia.PreRegister(engine, "AIStationList_CargoWaiting"); - SQAIStationList_CargoWaitingByVia.AddConstructor(engine, "xii"); - - SQAIStationList_CargoWaitingByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoWaitingFromByVia"; } - -void SQAIStationList_CargoWaitingFromByVia_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoWaitingFromByVia("AIStationList_CargoWaitingFromByVia"); - SQAIStationList_CargoWaitingFromByVia.PreRegister(engine, "AIStationList_CargoWaiting"); - SQAIStationList_CargoWaitingFromByVia.AddConstructor(engine, "xiii"); - - SQAIStationList_CargoWaitingFromByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoPlannedByFrom"; } - -void SQAIStationList_CargoPlannedByFrom_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoPlannedByFrom("AIStationList_CargoPlannedByFrom"); - SQAIStationList_CargoPlannedByFrom.PreRegister(engine, "AIStationList_CargoPlanned"); - SQAIStationList_CargoPlannedByFrom.AddConstructor(engine, "xii"); - - SQAIStationList_CargoPlannedByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoPlannedViaByFrom"; } - -void SQAIStationList_CargoPlannedViaByFrom_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoPlannedViaByFrom("AIStationList_CargoPlannedViaByFrom"); - SQAIStationList_CargoPlannedViaByFrom.PreRegister(engine, "AIStationList_CargoPlanned"); - SQAIStationList_CargoPlannedViaByFrom.AddConstructor(engine, "xiii"); - - SQAIStationList_CargoPlannedViaByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoPlannedByVia"; } - -void SQAIStationList_CargoPlannedByVia_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoPlannedByVia("AIStationList_CargoPlannedByVia"); - SQAIStationList_CargoPlannedByVia.PreRegister(engine, "AIStationList_CargoPlanned"); - SQAIStationList_CargoPlannedByVia.AddConstructor(engine, "xii"); - - SQAIStationList_CargoPlannedByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_CargoPlannedFromByVia"; } - -void SQAIStationList_CargoPlannedFromByVia_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_CargoPlannedFromByVia("AIStationList_CargoPlannedFromByVia"); - SQAIStationList_CargoPlannedFromByVia.PreRegister(engine, "AIStationList_CargoPlanned"); - SQAIStationList_CargoPlannedFromByVia.AddConstructor(engine, "xiii"); - - SQAIStationList_CargoPlannedFromByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIStationList_Vehicle"; } - -void SQAIStationList_Vehicle_Register(Squirrel *engine) -{ - DefSQClass SQAIStationList_Vehicle("AIStationList_Vehicle"); - SQAIStationList_Vehicle.PreRegister(engine, "AIList"); - SQAIStationList_Vehicle.AddConstructor(engine, "xi"); - - SQAIStationList_Vehicle.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_subsidy.hpp.sq b/src/script/api/ai/ai_subsidy.hpp.sq deleted file mode 100644 index 34a8173e51..0000000000 --- a/src/script/api/ai/ai_subsidy.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_subsidy.hpp" -#include "../template/template_subsidy.hpp.sq" - - -template <> const char *GetClassName() { return "AISubsidy"; } - -void SQAISubsidy_Register(Squirrel *engine) -{ - DefSQClass SQAISubsidy("AISubsidy"); - SQAISubsidy.PreRegister(engine); - SQAISubsidy.AddConstructor(engine, "x"); - - SQAISubsidy.DefSQConst(engine, ScriptSubsidy::SPT_INDUSTRY, "SPT_INDUSTRY"); - SQAISubsidy.DefSQConst(engine, ScriptSubsidy::SPT_TOWN, "SPT_TOWN"); - SQAISubsidy.DefSQConst(engine, ScriptSubsidy::SPT_INVALID, "SPT_INVALID"); - - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::IsValidSubsidy, "IsValidSubsidy", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::IsAwarded, "IsAwarded", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetAwardedTo, "GetAwardedTo", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetExpireDate, "GetExpireDate", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetCargoType, "GetCargoType", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetSourceType, "GetSourceType", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetSourceIndex, "GetSourceIndex", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetDestinationType, "GetDestinationType", 2, ".i"); - SQAISubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetDestinationIndex, "GetDestinationIndex", 2, ".i"); - - SQAISubsidy.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_subsidylist.hpp.sq b/src/script/api/ai/ai_subsidylist.hpp.sq deleted file mode 100644 index c1a39238a5..0000000000 --- a/src/script/api/ai/ai_subsidylist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_subsidylist.hpp" -#include "../template/template_subsidylist.hpp.sq" - - -template <> const char *GetClassName() { return "AISubsidyList"; } - -void SQAISubsidyList_Register(Squirrel *engine) -{ - DefSQClass SQAISubsidyList("AISubsidyList"); - SQAISubsidyList.PreRegister(engine, "AIList"); - SQAISubsidyList.AddConstructor(engine, "x"); - - SQAISubsidyList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_testmode.hpp.sq b/src/script/api/ai/ai_testmode.hpp.sq deleted file mode 100644 index e80952a610..0000000000 --- a/src/script/api/ai/ai_testmode.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_testmode.hpp" -#include "../template/template_testmode.hpp.sq" - - -template <> const char *GetClassName() { return "AITestMode"; } - -void SQAITestMode_Register(Squirrel *engine) -{ - DefSQClass SQAITestMode("AITestMode"); - SQAITestMode.PreRegister(engine); - SQAITestMode.AddConstructor(engine, "x"); - - SQAITestMode.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_tile.hpp.sq b/src/script/api/ai/ai_tile.hpp.sq deleted file mode 100644 index 4d4f0fe37e..0000000000 --- a/src/script/api/ai/ai_tile.hpp.sq +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tile.hpp" -#include "../template/template_tile.hpp.sq" - - -template <> const char *GetClassName() { return "AITile"; } - -void SQAITile_Register(Squirrel *engine) -{ - DefSQClass SQAITile("AITile"); - SQAITile.PreRegister(engine); - SQAITile.AddConstructor(engine, "x"); - - SQAITile.DefSQConst(engine, ScriptTile::ERR_TILE_BASE, "ERR_TILE_BASE"); - SQAITile.DefSQConst(engine, ScriptTile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH"); - 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"); - SQAITile.DefSQConst(engine, ScriptTile::CORNER_N, "CORNER_N"); - SQAITile.DefSQConst(engine, ScriptTile::CORNER_INVALID, "CORNER_INVALID"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_FLAT, "SLOPE_FLAT"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_W, "SLOPE_W"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_S, "SLOPE_S"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_E, "SLOPE_E"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_N, "SLOPE_N"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_STEEP, "SLOPE_STEEP"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_NW, "SLOPE_NW"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_SW, "SLOPE_SW"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_SE, "SLOPE_SE"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_NE, "SLOPE_NE"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_EW, "SLOPE_EW"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_NS, "SLOPE_NS"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_ELEVATED, "SLOPE_ELEVATED"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_NWS, "SLOPE_NWS"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_WSE, "SLOPE_WSE"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_SEN, "SLOPE_SEN"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_ENW, "SLOPE_ENW"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_W, "SLOPE_STEEP_W"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_S, "SLOPE_STEEP_S"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_E, "SLOPE_STEEP_E"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_N, "SLOPE_STEEP_N"); - SQAITile.DefSQConst(engine, ScriptTile::SLOPE_INVALID, "SLOPE_INVALID"); - SQAITile.DefSQConst(engine, ScriptTile::TRANSPORT_RAIL, "TRANSPORT_RAIL"); - SQAITile.DefSQConst(engine, ScriptTile::TRANSPORT_ROAD, "TRANSPORT_ROAD"); - SQAITile.DefSQConst(engine, ScriptTile::TRANSPORT_WATER, "TRANSPORT_WATER"); - SQAITile.DefSQConst(engine, ScriptTile::TRANSPORT_AIR, "TRANSPORT_AIR"); - SQAITile.DefSQConst(engine, ScriptTile::TRANSPORT_INVALID, "TRANSPORT_INVALID"); - SQAITile.DefSQConst(engine, ScriptTile::BT_FOUNDATION, "BT_FOUNDATION"); - SQAITile.DefSQConst(engine, ScriptTile::BT_TERRAFORM, "BT_TERRAFORM"); - SQAITile.DefSQConst(engine, ScriptTile::BT_BUILD_TREES, "BT_BUILD_TREES"); - SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_GRASS, "BT_CLEAR_GRASS"); - SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_ROUGH, "BT_CLEAR_ROUGH"); - SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_ROCKY, "BT_CLEAR_ROCKY"); - SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_FIELDS, "BT_CLEAR_FIELDS"); - SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_HOUSE, "BT_CLEAR_HOUSE"); - SQAITile.DefSQConst(engine, ScriptTile::TERRAIN_NORMAL, "TERRAIN_NORMAL"); - SQAITile.DefSQConst(engine, ScriptTile::TERRAIN_DESERT, "TERRAIN_DESERT"); - 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_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"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsWaterTile, "IsWaterTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsCoastTile, "IsCoastTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsStationTile, "IsStationTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsSteepSlope, "IsSteepSlope", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsHalftileSlope, "IsHalftileSlope", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::HasTreeOnTile, "HasTreeOnTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsFarmTile, "IsFarmTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsRockTile, "IsRockTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsRoughTile, "IsRoughTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsSnowTile, "IsSnowTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsDesertTile, "IsDesertTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetTerrainType, "GetTerrainType", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetSlope, "GetSlope", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetComplementSlope, "GetComplementSlope", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetMinHeight, "GetMinHeight", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetMaxHeight, "GetMaxHeight", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetCornerHeight, "GetCornerHeight", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetOwner, "GetOwner", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::HasTransportType, "HasTransportType", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetCargoAcceptance, "GetCargoAcceptance", 6, ".iiiii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetCargoProduction, "GetCargoProduction", 6, ".iiiii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::RaiseTile, "RaiseTile", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::LowerTile, "LowerTile", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::LevelTiles, "LevelTiles", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::DemolishTile, "DemolishTile", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::PlantTree, "PlantTree", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::PlantTreeRectangle, "PlantTreeRectangle", 4, ".iii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetTownAuthority, "GetTownAuthority", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetClosestTown, "GetClosestTown", 2, ".i"); - SQAITile.DefSQStaticMethod(engine, &ScriptTile::GetBuildCost, "GetBuildCost", 2, ".i"); - - SQAITile.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_tilelist.hpp.sq b/src/script/api/ai/ai_tilelist.hpp.sq deleted file mode 100644 index 64f666f6c7..0000000000 --- a/src/script/api/ai/ai_tilelist.hpp.sq +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tilelist.hpp" -#include "../template/template_tilelist.hpp.sq" - - -template <> const char *GetClassName() { return "AITileList"; } - -void SQAITileList_Register(Squirrel *engine) -{ - DefSQClass SQAITileList("AITileList"); - SQAITileList.PreRegister(engine, "AIList"); - SQAITileList.AddConstructor(engine, "x"); - - SQAITileList.DefSQMethod(engine, &ScriptTileList::AddRectangle, "AddRectangle", 3, "xii"); - SQAITileList.DefSQMethod(engine, &ScriptTileList::AddTile, "AddTile", 2, "xi"); - SQAITileList.DefSQMethod(engine, &ScriptTileList::RemoveRectangle, "RemoveRectangle", 3, "xii"); - SQAITileList.DefSQMethod(engine, &ScriptTileList::RemoveTile, "RemoveTile", 2, "xi"); - - SQAITileList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AITileList_IndustryAccepting"; } - -void SQAITileList_IndustryAccepting_Register(Squirrel *engine) -{ - DefSQClass SQAITileList_IndustryAccepting("AITileList_IndustryAccepting"); - SQAITileList_IndustryAccepting.PreRegister(engine, "AITileList"); - SQAITileList_IndustryAccepting.AddConstructor(engine, "xii"); - - SQAITileList_IndustryAccepting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AITileList_IndustryProducing"; } - -void SQAITileList_IndustryProducing_Register(Squirrel *engine) -{ - DefSQClass SQAITileList_IndustryProducing("AITileList_IndustryProducing"); - SQAITileList_IndustryProducing.PreRegister(engine, "AITileList"); - SQAITileList_IndustryProducing.AddConstructor(engine, "xii"); - - SQAITileList_IndustryProducing.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AITileList_StationType"; } - -void SQAITileList_StationType_Register(Squirrel *engine) -{ - DefSQClass SQAITileList_StationType("AITileList_StationType"); - SQAITileList_StationType.PreRegister(engine, "AITileList"); - SQAITileList_StationType.AddConstructor(engine, "xii"); - - SQAITileList_StationType.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_town.hpp.sq b/src/script/api/ai/ai_town.hpp.sq deleted file mode 100644 index 8cae7f11a2..0000000000 --- a/src/script/api/ai/ai_town.hpp.sq +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_town.hpp" -#include "../template/template_town.hpp.sq" - - -template <> const char *GetClassName() { return "AITown"; } - -void SQAITown_Register(Squirrel *engine) -{ - DefSQClass SQAITown("AITown"); - SQAITown.PreRegister(engine); - SQAITown.AddConstructor(engine, "x"); - - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ADVERTISE_SMALL, "TOWN_ACTION_ADVERTISE_SMALL"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ADVERTISE_MEDIUM, "TOWN_ACTION_ADVERTISE_MEDIUM"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ADVERTISE_LARGE, "TOWN_ACTION_ADVERTISE_LARGE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ROAD_REBUILD, "TOWN_ACTION_ROAD_REBUILD"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_BUILD_STATUE, "TOWN_ACTION_BUILD_STATUE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_FUND_BUILDINGS, "TOWN_ACTION_FUND_BUILDINGS"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_BUY_RIGHTS, "TOWN_ACTION_BUY_RIGHTS"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_ACTION_BRIBE, "TOWN_ACTION_BRIBE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_NONE, "TOWN_RATING_NONE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_APPALLING, "TOWN_RATING_APPALLING"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_VERY_POOR, "TOWN_RATING_VERY_POOR"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_POOR, "TOWN_RATING_POOR"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_MEDIOCRE, "TOWN_RATING_MEDIOCRE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_GOOD, "TOWN_RATING_GOOD"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_VERY_GOOD, "TOWN_RATING_VERY_GOOD"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_EXCELLENT, "TOWN_RATING_EXCELLENT"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_OUTSTANDING, "TOWN_RATING_OUTSTANDING"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_RATING_INVALID, "TOWN_RATING_INVALID"); - SQAITown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_ORIGINAL, "ROAD_LAYOUT_ORIGINAL"); - SQAITown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_BETTER_ROADS, "ROAD_LAYOUT_BETTER_ROADS"); - SQAITown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_2x2, "ROAD_LAYOUT_2x2"); - SQAITown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_3x3, "ROAD_LAYOUT_3x3"); - SQAITown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_INVALID, "ROAD_LAYOUT_INVALID"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_SIZE_SMALL, "TOWN_SIZE_SMALL"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_SIZE_MEDIUM, "TOWN_SIZE_MEDIUM"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_SIZE_LARGE, "TOWN_SIZE_LARGE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_SIZE_INVALID, "TOWN_SIZE_INVALID"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_GROWTH_NONE, "TOWN_GROWTH_NONE"); - SQAITown.DefSQConst(engine, ScriptTown::TOWN_GROWTH_NORMAL, "TOWN_GROWTH_NORMAL"); - - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetTownCount, "GetTownCount", 1, "."); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::IsValidTown, "IsValidTown", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetName, "GetName", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetPopulation, "GetPopulation", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetHouseCount, "GetHouseCount", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetLocation, "GetLocation", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthProduction, "GetLastMonthProduction", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthSupplied, "GetLastMonthSupplied", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthTransportedPercentage, "GetLastMonthTransportedPercentage", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthReceived, "GetLastMonthReceived", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetCargoGoal, "GetCargoGoal", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetGrowthRate, "GetGrowthRate", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::HasStatue, "HasStatue", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::IsCity, "IsCity", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetRoadReworkDuration, "GetRoadReworkDuration", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetFundBuildingsDuration, "GetFundBuildingsDuration", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetExclusiveRightsCompany, "GetExclusiveRightsCompany", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetExclusiveRightsDuration, "GetExclusiveRightsDuration", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::IsActionAvailable, "IsActionAvailable", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::PerformTownAction, "PerformTownAction", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::FoundTown, "FoundTown", 6, ".iibi."); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetRating, "GetRating", 3, ".ii"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetAllowedNoise, "GetAllowedNoise", 2, ".i"); - SQAITown.DefSQStaticMethod(engine, &ScriptTown::GetRoadLayout, "GetRoadLayout", 2, ".i"); - - SQAITown.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_townlist.hpp.sq b/src/script/api/ai/ai_townlist.hpp.sq deleted file mode 100644 index 7efaa298da..0000000000 --- a/src/script/api/ai/ai_townlist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_townlist.hpp" -#include "../template/template_townlist.hpp.sq" - - -template <> const char *GetClassName() { return "AITownList"; } - -void SQAITownList_Register(Squirrel *engine) -{ - DefSQClass SQAITownList("AITownList"); - SQAITownList.PreRegister(engine, "AIList"); - SQAITownList.AddConstructor(engine, "x"); - - SQAITownList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AITownEffectList"; } - -void SQAITownEffectList_Register(Squirrel *engine) -{ - DefSQClass SQAITownEffectList("AITownEffectList"); - SQAITownEffectList.PreRegister(engine, "AIList"); - SQAITownEffectList.AddConstructor(engine, "x"); - - SQAITownEffectList.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_tunnel.hpp.sq b/src/script/api/ai/ai_tunnel.hpp.sq deleted file mode 100644 index 7c72e83862..0000000000 --- a/src/script/api/ai/ai_tunnel.hpp.sq +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tunnel.hpp" -#include "../template/template_tunnel.hpp.sq" - - -template <> const char *GetClassName() { return "AITunnel"; } - -void SQAITunnel_Register(Squirrel *engine) -{ - DefSQClass SQAITunnel("AITunnel"); - SQAITunnel.PreRegister(engine); - SQAITunnel.AddConstructor(engine, "x"); - - SQAITunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_BASE, "ERR_TUNNEL_BASE"); - SQAITunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER, "ERR_TUNNEL_CANNOT_BUILD_ON_WATER"); - SQAITunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_START_SITE_UNSUITABLE, "ERR_TUNNEL_START_SITE_UNSUITABLE"); - SQAITunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY, "ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY"); - SQAITunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_END_SITE_UNSUITABLE, "ERR_TUNNEL_END_SITE_UNSUITABLE"); - - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUILD_ON_WATER, ScriptTunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER); - ScriptError::RegisterErrorMap(STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL, ScriptTunnel::ERR_TUNNEL_START_SITE_UNSUITABLE); - ScriptError::RegisterErrorMap(STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY, ScriptTunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY); - ScriptError::RegisterErrorMap(STR_ERROR_UNABLE_TO_EXCAVATE_LAND, ScriptTunnel::ERR_TUNNEL_END_SITE_UNSUITABLE); - - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER, "ERR_TUNNEL_CANNOT_BUILD_ON_WATER"); - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_START_SITE_UNSUITABLE, "ERR_TUNNEL_START_SITE_UNSUITABLE"); - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY, "ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY"); - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_END_SITE_UNSUITABLE, "ERR_TUNNEL_END_SITE_UNSUITABLE"); - - SQAITunnel.DefSQStaticMethod(engine, &ScriptTunnel::IsTunnelTile, "IsTunnelTile", 2, ".i"); - SQAITunnel.DefSQStaticMethod(engine, &ScriptTunnel::GetOtherTunnelEnd, "GetOtherTunnelEnd", 2, ".i"); - SQAITunnel.DefSQStaticMethod(engine, &ScriptTunnel::BuildTunnel, "BuildTunnel", 3, ".ii"); - SQAITunnel.DefSQStaticMethod(engine, &ScriptTunnel::RemoveTunnel, "RemoveTunnel", 2, ".i"); - - SQAITunnel.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_vehicle.hpp.sq b/src/script/api/ai/ai_vehicle.hpp.sq deleted file mode 100644 index 20c66254ca..0000000000 --- a/src/script/api/ai/ai_vehicle.hpp.sq +++ /dev/null @@ -1,147 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_vehicle.hpp" -#include "../template/template_vehicle.hpp.sq" - - -template <> const char *GetClassName() { return "AIVehicle"; } - -void SQAIVehicle_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicle("AIVehicle"); - SQAIVehicle.PreRegister(engine); - SQAIVehicle.AddConstructor(engine, "x"); - - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_BASE, "ERR_VEHICLE_BASE"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED, "ERR_VEHICLE_BUILD_DISABLED"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT, "ERR_VEHICLE_WRONG_DEPOT"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT, "ERR_VEHICLE_CANNOT_SEND_TO_DEPOT"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP, "ERR_VEHICLE_CANNOT_START_STOP"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN, "ERR_VEHICLE_CANNOT_TURN"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT, "ERR_VEHICLE_CANNOT_REFIT"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_TOO_LONG, "ERR_VEHICLE_TOO_LONG"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VT_RAIL, "VT_RAIL"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VT_ROAD, "VT_ROAD"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VT_WATER, "VT_WATER"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VT_AIR, "VT_AIR"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VT_INVALID, "VT_INVALID"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_RUNNING, "VS_RUNNING"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_STOPPED, "VS_STOPPED"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_IN_DEPOT, "VS_IN_DEPOT"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_AT_STATION, "VS_AT_STATION"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_BROKEN, "VS_BROKEN"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_CRASHED, "VS_CRASHED"); - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VS_INVALID, "VS_INVALID"); - - SQAIVehicle.DefSQConst(engine, ScriptVehicle::VEHICLE_INVALID, "VEHICLE_INVALID"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME, ScriptVehicle::ERR_VEHICLE_TOO_MANY); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_SHIP_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_TRAIN, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_ROAD_VEHICLE, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_SHIP, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_AIRCRAFT, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_DEPOT_WRONG_DEPOT_TYPE, ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_TRAIN, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_SHIP, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_AIRCRAFT, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_TRAIN, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_SHIP, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_AIRCRAFT, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_VEHICLE_IS_DESTROYED, ScriptVehicle::ERR_VEHICLE_IS_DESTROYED); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT, ScriptVehicle::ERR_VEHICLE_IN_FLIGHT); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_START_NO_POWER, ScriptVehicle::ERR_VEHICLE_NO_POWER); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_TOO_LONG, ScriptVehicle::ERR_VEHICLE_TOO_LONG); - - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED, "ERR_VEHICLE_BUILD_DISABLED"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT, "ERR_VEHICLE_WRONG_DEPOT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT, "ERR_VEHICLE_CANNOT_SEND_TO_DEPOT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP, "ERR_VEHICLE_CANNOT_START_STOP"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_TURN, "ERR_VEHICLE_CANNOT_TURN"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT, "ERR_VEHICLE_CANNOT_REFIT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_TOO_LONG, "ERR_VEHICLE_TOO_LONG"); - - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsValidVehicle, "IsValidVehicle", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetNumWagons, "GetNumWagons", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SetName, "SetName", 3, ".i."); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetName, "GetName", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetLocation, "GetLocation", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetEngineType, "GetEngineType", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetWagonEngineType, "GetWagonEngineType", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetUnitNumber, "GetUnitNumber", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetAge, "GetAge", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetWagonAge, "GetWagonAge", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetMaxAge, "GetMaxAge", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetAgeLeft, "GetAgeLeft", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCurrentSpeed, "GetCurrentSpeed", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetState, "GetState", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetRunningCost, "GetRunningCost", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetProfitThisYear, "GetProfitThisYear", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetProfitLastYear, "GetProfitLastYear", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCurrentValue, "GetCurrentValue", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetVehicleType, "GetVehicleType", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetRoadType, "GetRoadType", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicleWithRefit, "BuildVehicleWithRefit", 4, ".iii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetBuildWithRefitCapacity, "GetBuildWithRefitCapacity", 4, ".iii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetRefitCapacity, "GetRefitCapacity", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::RefitVehicle, "RefitVehicle", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SellVehicle, "SellVehicle", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SellWagon, "SellWagon", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SellWagonChain, "SellWagonChain", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SendVehicleToDepot, "SendVehicleToDepot", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SendVehicleToDepotForServicing, "SendVehicleToDepotForServicing", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::StartStopVehicle, "StartStopVehicle", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::ReverseVehicle, "ReverseVehicle", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCapacity, "GetCapacity", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetLength, "GetLength", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCargoLoad, "GetCargoLoad", 3, ".ii"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetGroupID, "GetGroupID", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsArticulated, "IsArticulated", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::HasSharedOrders, "HasSharedOrders", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetReliability, "GetReliability", 2, ".i"); - SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetMaximumOrderDistance, "GetMaximumOrderDistance", 2, ".i"); - - SQAIVehicle.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_vehiclelist.hpp.sq b/src/script/api/ai/ai_vehiclelist.hpp.sq deleted file mode 100644 index 25a8610c39..0000000000 --- a/src/script/api/ai/ai_vehiclelist.hpp.sq +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_vehiclelist.hpp" -#include "../template/template_vehiclelist.hpp.sq" - - -template <> const char *GetClassName() { return "AIVehicleList"; } - -void SQAIVehicleList_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicleList("AIVehicleList"); - SQAIVehicleList.PreRegister(engine, "AIList"); - SQAIVehicleList.AddConstructor(engine, "x"); - - SQAIVehicleList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIVehicleList_Station"; } - -void SQAIVehicleList_Station_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicleList_Station("AIVehicleList_Station"); - SQAIVehicleList_Station.PreRegister(engine, "AIList"); - SQAIVehicleList_Station.AddConstructor(engine, "xi"); - - SQAIVehicleList_Station.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIVehicleList_Depot"; } - -void SQAIVehicleList_Depot_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicleList_Depot("AIVehicleList_Depot"); - SQAIVehicleList_Depot.PreRegister(engine, "AIList"); - SQAIVehicleList_Depot.AddConstructor(engine, "xi"); - - SQAIVehicleList_Depot.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIVehicleList_SharedOrders"; } - -void SQAIVehicleList_SharedOrders_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicleList_SharedOrders("AIVehicleList_SharedOrders"); - SQAIVehicleList_SharedOrders.PreRegister(engine, "AIList"); - SQAIVehicleList_SharedOrders.AddConstructor(engine, "xi"); - - SQAIVehicleList_SharedOrders.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIVehicleList_Group"; } - -void SQAIVehicleList_Group_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicleList_Group("AIVehicleList_Group"); - SQAIVehicleList_Group.PreRegister(engine, "AIList"); - SQAIVehicleList_Group.AddConstructor(engine, "xi"); - - SQAIVehicleList_Group.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIVehicleList_DefaultGroup"; } - -void SQAIVehicleList_DefaultGroup_Register(Squirrel *engine) -{ - DefSQClass SQAIVehicleList_DefaultGroup("AIVehicleList_DefaultGroup"); - SQAIVehicleList_DefaultGroup.PreRegister(engine, "AIList"); - SQAIVehicleList_DefaultGroup.AddConstructor(engine, "xi"); - - SQAIVehicleList_DefaultGroup.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_waypoint.hpp.sq b/src/script/api/ai/ai_waypoint.hpp.sq deleted file mode 100644 index 3e2b64b465..0000000000 --- a/src/script/api/ai/ai_waypoint.hpp.sq +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_waypoint.hpp" -#include "../template/template_waypoint.hpp.sq" - - -template <> const char *GetClassName() { return "AIWaypoint"; } - -void SQAIWaypoint_Register(Squirrel *engine) -{ - DefSQClass SQAIWaypoint("AIWaypoint"); - SQAIWaypoint.PreRegister(engine, "AIBaseStation"); - SQAIWaypoint.AddConstructor(engine, "x"); - - SQAIWaypoint.DefSQConst(engine, ScriptWaypoint::ERR_WAYPOINT_BASE, "ERR_WAYPOINT_BASE"); - SQAIWaypoint.DefSQConst(engine, ScriptWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT, "ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT"); - SQAIWaypoint.DefSQConst(engine, ScriptWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS, "ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS"); - SQAIWaypoint.DefSQConst(engine, ScriptWaypoint::WAYPOINT_RAIL, "WAYPOINT_RAIL"); - SQAIWaypoint.DefSQConst(engine, ScriptWaypoint::WAYPOINT_BUOY, "WAYPOINT_BUOY"); - SQAIWaypoint.DefSQConst(engine, ScriptWaypoint::WAYPOINT_ANY, "WAYPOINT_ANY"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT, ScriptWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT); - ScriptError::RegisterErrorMap(STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING, ScriptWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS); - - ScriptError::RegisterErrorMapString(ScriptWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT, "ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT"); - ScriptError::RegisterErrorMapString(ScriptWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS, "ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS"); - - SQAIWaypoint.DefSQStaticMethod(engine, &ScriptWaypoint::IsValidWaypoint, "IsValidWaypoint", 2, ".i"); - SQAIWaypoint.DefSQStaticMethod(engine, &ScriptWaypoint::GetWaypointID, "GetWaypointID", 2, ".i"); - SQAIWaypoint.DefSQStaticMethod(engine, &ScriptWaypoint::HasWaypointType, "HasWaypointType", 3, ".ii"); - - SQAIWaypoint.PostRegister(engine); -} diff --git a/src/script/api/ai/ai_waypointlist.hpp.sq b/src/script/api/ai/ai_waypointlist.hpp.sq deleted file mode 100644 index c8359baedf..0000000000 --- a/src/script/api/ai/ai_waypointlist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_waypointlist.hpp" -#include "../template/template_waypointlist.hpp.sq" - - -template <> const char *GetClassName() { return "AIWaypointList"; } - -void SQAIWaypointList_Register(Squirrel *engine) -{ - DefSQClass SQAIWaypointList("AIWaypointList"); - SQAIWaypointList.PreRegister(engine, "AIList"); - SQAIWaypointList.AddConstructor(engine, "xi"); - - SQAIWaypointList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "AIWaypointList_Vehicle"; } - -void SQAIWaypointList_Vehicle_Register(Squirrel *engine) -{ - DefSQClass SQAIWaypointList_Vehicle("AIWaypointList_Vehicle"); - SQAIWaypointList_Vehicle.PreRegister(engine, "AIList"); - SQAIWaypointList_Vehicle.AddConstructor(engine, "xi"); - - SQAIWaypointList_Vehicle.PostRegister(engine); -} diff --git a/src/script/api/game/game_accounting.hpp.sq b/src/script/api/game/game_accounting.hpp.sq deleted file mode 100644 index 5b78909bde..0000000000 --- a/src/script/api/game/game_accounting.hpp.sq +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_accounting.hpp" -#include "../template/template_accounting.hpp.sq" - - -template <> const char *GetClassName() { return "GSAccounting"; } - -void SQGSAccounting_Register(Squirrel *engine) -{ - DefSQClass SQGSAccounting("GSAccounting"); - SQGSAccounting.PreRegister(engine); - SQGSAccounting.AddConstructor(engine, "x"); - - SQGSAccounting.DefSQMethod(engine, &ScriptAccounting::GetCosts, "GetCosts", 1, "x"); - SQGSAccounting.DefSQMethod(engine, &ScriptAccounting::ResetCosts, "ResetCosts", 1, "x"); - - SQGSAccounting.PostRegister(engine); -} diff --git a/src/script/api/game/game_admin.hpp.sq b/src/script/api/game/game_admin.hpp.sq deleted file mode 100644 index 6616f2706e..0000000000 --- a/src/script/api/game/game_admin.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_admin.hpp" -#include "../template/template_admin.hpp.sq" - - -template <> const char *GetClassName() { return "GSAdmin"; } - -void SQGSAdmin_Register(Squirrel *engine) -{ - DefSQClass SQGSAdmin("GSAdmin"); - SQGSAdmin.PreRegister(engine); - SQGSAdmin.AddConstructor(engine, "x"); - - SQGSAdmin.DefSQAdvancedStaticMethod(engine, &ScriptAdmin::Send, "Send"); - - SQGSAdmin.PostRegister(engine); -} diff --git a/src/script/api/game/game_airport.hpp.sq b/src/script/api/game/game_airport.hpp.sq deleted file mode 100644 index 32e0c12a1b..0000000000 --- a/src/script/api/game/game_airport.hpp.sq +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_airport.hpp" -#include "../template/template_airport.hpp.sq" - - -template <> const char *GetClassName() { return "GSAirport"; } - -void SQGSAirport_Register(Squirrel *engine) -{ - DefSQClass SQGSAirport("GSAirport"); - SQGSAirport.PreRegister(engine); - SQGSAirport.AddConstructor(engine, "x"); - - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_SMALL, "AT_SMALL"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_LARGE, "AT_LARGE"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_METROPOLITAN, "AT_METROPOLITAN"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_INTERNATIONAL, "AT_INTERNATIONAL"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_COMMUTER, "AT_COMMUTER"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_INTERCON, "AT_INTERCON"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_HELIPORT, "AT_HELIPORT"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_HELISTATION, "AT_HELISTATION"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_HELIDEPOT, "AT_HELIDEPOT"); - SQGSAirport.DefSQConst(engine, ScriptAirport::AT_INVALID, "AT_INVALID"); - SQGSAirport.DefSQConst(engine, ScriptAirport::PT_HELICOPTER, "PT_HELICOPTER"); - SQGSAirport.DefSQConst(engine, ScriptAirport::PT_SMALL_PLANE, "PT_SMALL_PLANE"); - SQGSAirport.DefSQConst(engine, ScriptAirport::PT_BIG_PLANE, "PT_BIG_PLANE"); - SQGSAirport.DefSQConst(engine, ScriptAirport::PT_INVALID, "PT_INVALID"); - - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::IsValidAirportType, "IsValidAirportType", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::IsAirportInformationAvailable, "IsAirportInformationAvailable", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetPrice, "GetPrice", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::IsHangarTile, "IsHangarTile", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::IsAirportTile, "IsAirportTile", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportWidth, "GetAirportWidth", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportHeight, "GetAirportHeight", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportCoverageRadius, "GetAirportCoverageRadius", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNumHangars, "GetNumHangars", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetHangarOfAirport, "GetHangarOfAirport", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::BuildAirport, "BuildAirport", 4, ".iii"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::RemoveAirport, "RemoveAirport", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetAirportType, "GetAirportType", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNoiseLevelIncrease, "GetNoiseLevelIncrease", 3, ".ii"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNearestTown, "GetNearestTown", 3, ".ii"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); - SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMonthlyMaintenanceCost, "GetMonthlyMaintenanceCost", 2, ".i"); - - SQGSAirport.PostRegister(engine); -} diff --git a/src/script/api/game/game_base.hpp.sq b/src/script/api/game/game_base.hpp.sq deleted file mode 100644 index 01791e186e..0000000000 --- a/src/script/api/game/game_base.hpp.sq +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_base.hpp" -#include "../template/template_base.hpp.sq" - - -template <> const char *GetClassName() { return "GSBase"; } - -void SQGSBase_Register(Squirrel *engine) -{ - DefSQClass SQGSBase("GSBase"); - SQGSBase.PreRegister(engine); - SQGSBase.AddConstructor(engine, "x"); - - SQGSBase.DefSQStaticMethod(engine, &ScriptBase::Rand, "Rand", 1, "."); - SQGSBase.DefSQStaticMethod(engine, &ScriptBase::RandItem, "RandItem", 2, ".i"); - SQGSBase.DefSQStaticMethod(engine, &ScriptBase::RandRange, "RandRange", 2, ".i"); - SQGSBase.DefSQStaticMethod(engine, &ScriptBase::RandRangeItem, "RandRangeItem", 3, ".ii"); - SQGSBase.DefSQStaticMethod(engine, &ScriptBase::Chance, "Chance", 3, ".ii"); - SQGSBase.DefSQStaticMethod(engine, &ScriptBase::ChanceItem, "ChanceItem", 4, ".iii"); - - SQGSBase.PostRegister(engine); -} diff --git a/src/script/api/game/game_basestation.hpp.sq b/src/script/api/game/game_basestation.hpp.sq deleted file mode 100644 index 91f7b575e1..0000000000 --- a/src/script/api/game/game_basestation.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_basestation.hpp" -#include "../template/template_basestation.hpp.sq" - - -template <> const char *GetClassName() { return "GSBaseStation"; } - -void SQGSBaseStation_Register(Squirrel *engine) -{ - DefSQClass SQGSBaseStation("GSBaseStation"); - SQGSBaseStation.PreRegister(engine); - SQGSBaseStation.AddConstructor(engine, "x"); - - SQGSBaseStation.DefSQConst(engine, ScriptBaseStation::STATION_NEW, "STATION_NEW"); - SQGSBaseStation.DefSQConst(engine, ScriptBaseStation::STATION_JOIN_ADJACENT, "STATION_JOIN_ADJACENT"); - SQGSBaseStation.DefSQConst(engine, ScriptBaseStation::STATION_INVALID, "STATION_INVALID"); - - SQGSBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::IsValidBaseStation, "IsValidBaseStation", 2, ".i"); - SQGSBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::GetName, "GetName", 2, ".i"); - SQGSBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::SetName, "SetName", 3, ".i."); - SQGSBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::GetLocation, "GetLocation", 2, ".i"); - SQGSBaseStation.DefSQStaticMethod(engine, &ScriptBaseStation::GetConstructionDate, "GetConstructionDate", 2, ".i"); - - SQGSBaseStation.PostRegister(engine); -} diff --git a/src/script/api/game/game_bridge.hpp.sq b/src/script/api/game/game_bridge.hpp.sq deleted file mode 100644 index be9ef4bdf1..0000000000 --- a/src/script/api/game/game_bridge.hpp.sq +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_bridge.hpp" -#include "../template/template_bridge.hpp.sq" - - -template <> const char *GetClassName() { return "GSBridge"; } - -void SQGSBridge_Register(Squirrel *engine) -{ - DefSQClass SQGSBridge("GSBridge"); - SQGSBridge.PreRegister(engine); - SQGSBridge.AddConstructor(engine, "x"); - - SQGSBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_BASE, "ERR_BRIDGE_BASE"); - SQGSBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_TYPE_UNAVAILABLE, "ERR_BRIDGE_TYPE_UNAVAILABLE"); - SQGSBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_CANNOT_END_IN_WATER, "ERR_BRIDGE_CANNOT_END_IN_WATER"); - SQGSBridge.DefSQConst(engine, ScriptBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT, "ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT"); - - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, ScriptBridge::ERR_BRIDGE_TYPE_UNAVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH, ScriptBridge::ERR_BRIDGE_CANNOT_END_IN_WATER); - ScriptError::RegisterErrorMap(STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT, ScriptBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT); - - ScriptError::RegisterErrorMapString(ScriptBridge::ERR_BRIDGE_TYPE_UNAVAILABLE, "ERR_BRIDGE_TYPE_UNAVAILABLE"); - ScriptError::RegisterErrorMapString(ScriptBridge::ERR_BRIDGE_CANNOT_END_IN_WATER, "ERR_BRIDGE_CANNOT_END_IN_WATER"); - ScriptError::RegisterErrorMapString(ScriptBridge::ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT, "ERR_BRIDGE_HEADS_NOT_ON_SAME_HEIGHT"); - - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::IsValidBridge, "IsValidBridge", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::IsBridgeTile, "IsBridgeTile", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetBridgeID, "GetBridgeID", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 3, ".ii"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetPrice, "GetPrice", 3, ".ii"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxLength, "GetMaxLength", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMinLength, "GetMinLength", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::BuildBridge, "BuildBridge", 5, ".iiii"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::RemoveBridge, "RemoveBridge", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetOtherBridgeEnd, "GetOtherBridgeEnd", 2, ".i"); - - SQGSBridge.PostRegister(engine); -} diff --git a/src/script/api/game/game_bridgelist.hpp.sq b/src/script/api/game/game_bridgelist.hpp.sq deleted file mode 100644 index 36a18bc221..0000000000 --- a/src/script/api/game/game_bridgelist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_bridgelist.hpp" -#include "../template/template_bridgelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSBridgeList"; } - -void SQGSBridgeList_Register(Squirrel *engine) -{ - DefSQClass SQGSBridgeList("GSBridgeList"); - SQGSBridgeList.PreRegister(engine, "GSList"); - SQGSBridgeList.AddConstructor(engine, "x"); - - SQGSBridgeList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSBridgeList_Length"; } - -void SQGSBridgeList_Length_Register(Squirrel *engine) -{ - DefSQClass SQGSBridgeList_Length("GSBridgeList_Length"); - SQGSBridgeList_Length.PreRegister(engine, "GSList"); - SQGSBridgeList_Length.AddConstructor(engine, "xi"); - - SQGSBridgeList_Length.PostRegister(engine); -} diff --git a/src/script/api/game/game_cargo.hpp.sq b/src/script/api/game/game_cargo.hpp.sq deleted file mode 100644 index 0f018bc579..0000000000 --- a/src/script/api/game/game_cargo.hpp.sq +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargo.hpp" -#include "../template/template_cargo.hpp.sq" - - -template <> const char *GetClassName() { return "GSCargo"; } - -void SQGSCargo_Register(Squirrel *engine) -{ - DefSQClass SQGSCargo("GSCargo"); - SQGSCargo.PreRegister(engine); - SQGSCargo.AddConstructor(engine, "x"); - - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_PASSENGERS, "CC_PASSENGERS"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_MAIL, "CC_MAIL"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_EXPRESS, "CC_EXPRESS"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_ARMOURED, "CC_ARMOURED"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_BULK, "CC_BULK"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_PIECE_GOODS, "CC_PIECE_GOODS"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_LIQUID, "CC_LIQUID"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_REFRIGERATED, "CC_REFRIGERATED"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_HAZARDOUS, "CC_HAZARDOUS"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CC_COVERED, "CC_COVERED"); - SQGSCargo.DefSQConst(engine, ScriptCargo::TE_NONE, "TE_NONE"); - SQGSCargo.DefSQConst(engine, ScriptCargo::TE_PASSENGERS, "TE_PASSENGERS"); - SQGSCargo.DefSQConst(engine, ScriptCargo::TE_MAIL, "TE_MAIL"); - SQGSCargo.DefSQConst(engine, ScriptCargo::TE_GOODS, "TE_GOODS"); - SQGSCargo.DefSQConst(engine, ScriptCargo::TE_WATER, "TE_WATER"); - SQGSCargo.DefSQConst(engine, ScriptCargo::TE_FOOD, "TE_FOOD"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CT_AUTO_REFIT, "CT_AUTO_REFIT"); - SQGSCargo.DefSQConst(engine, ScriptCargo::CT_NO_REFIT, "CT_NO_REFIT"); - SQGSCargo.DefSQConst(engine, ScriptCargo::DT_MANUAL, "DT_MANUAL"); - SQGSCargo.DefSQConst(engine, ScriptCargo::DT_ASYMMETRIC, "DT_ASYMMETRIC"); - SQGSCargo.DefSQConst(engine, ScriptCargo::DT_SYMMETRIC, "DT_SYMMETRIC"); - SQGSCargo.DefSQConst(engine, ScriptCargo::INVALID_DISTRIBUTION_TYPE, "INVALID_DISTRIBUTION_TYPE"); - - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::IsValidCargo, "IsValidCargo", 2, ".i"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::IsValidTownEffect, "IsValidTownEffect", 2, ".i"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::GetCargoLabel, "GetCargoLabel", 2, ".i"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::IsFreight, "IsFreight", 2, ".i"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::HasCargoClass, "HasCargoClass", 3, ".ii"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::GetTownEffect, "GetTownEffect", 2, ".i"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::GetCargoIncome, "GetCargoIncome", 4, ".iii"); - SQGSCargo.DefSQStaticMethod(engine, &ScriptCargo::GetDistributionType, "GetDistributionType", 2, ".i"); - - SQGSCargo.PostRegister(engine); -} diff --git a/src/script/api/game/game_cargolist.hpp.sq b/src/script/api/game/game_cargolist.hpp.sq deleted file mode 100644 index f1fd3ef846..0000000000 --- a/src/script/api/game/game_cargolist.hpp.sq +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargolist.hpp" -#include "../template/template_cargolist.hpp.sq" - - -template <> const char *GetClassName() { return "GSCargoList"; } - -void SQGSCargoList_Register(Squirrel *engine) -{ - DefSQClass SQGSCargoList("GSCargoList"); - SQGSCargoList.PreRegister(engine, "GSList"); - SQGSCargoList.AddConstructor(engine, "x"); - - SQGSCargoList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSCargoList_IndustryAccepting"; } - -void SQGSCargoList_IndustryAccepting_Register(Squirrel *engine) -{ - DefSQClass SQGSCargoList_IndustryAccepting("GSCargoList_IndustryAccepting"); - SQGSCargoList_IndustryAccepting.PreRegister(engine, "GSList"); - SQGSCargoList_IndustryAccepting.AddConstructor(engine, "xi"); - - SQGSCargoList_IndustryAccepting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSCargoList_IndustryProducing"; } - -void SQGSCargoList_IndustryProducing_Register(Squirrel *engine) -{ - DefSQClass SQGSCargoList_IndustryProducing("GSCargoList_IndustryProducing"); - SQGSCargoList_IndustryProducing.PreRegister(engine, "GSList"); - SQGSCargoList_IndustryProducing.AddConstructor(engine, "xi"); - - SQGSCargoList_IndustryProducing.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSCargoList_StationAccepting"; } - -void SQGSCargoList_StationAccepting_Register(Squirrel *engine) -{ - DefSQClass SQGSCargoList_StationAccepting("GSCargoList_StationAccepting"); - SQGSCargoList_StationAccepting.PreRegister(engine, "GSList"); - SQGSCargoList_StationAccepting.AddConstructor(engine, "xi"); - - SQGSCargoList_StationAccepting.PostRegister(engine); -} diff --git a/src/script/api/game/game_cargomonitor.hpp.sq b/src/script/api/game/game_cargomonitor.hpp.sq deleted file mode 100644 index ccf9f3d164..0000000000 --- a/src/script/api/game/game_cargomonitor.hpp.sq +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargomonitor.hpp" -#include "../template/template_cargomonitor.hpp.sq" - - -template <> const char *GetClassName() { return "GSCargoMonitor"; } - -void SQGSCargoMonitor_Register(Squirrel *engine) -{ - DefSQClass SQGSCargoMonitor("GSCargoMonitor"); - SQGSCargoMonitor.PreRegister(engine); - SQGSCargoMonitor.AddConstructor(engine, "x"); - - SQGSCargoMonitor.DefSQStaticMethod(engine, &ScriptCargoMonitor::GetTownDeliveryAmount, "GetTownDeliveryAmount", 5, ".iiib"); - SQGSCargoMonitor.DefSQStaticMethod(engine, &ScriptCargoMonitor::GetIndustryDeliveryAmount, "GetIndustryDeliveryAmount", 5, ".iiib"); - SQGSCargoMonitor.DefSQStaticMethod(engine, &ScriptCargoMonitor::GetTownPickupAmount, "GetTownPickupAmount", 5, ".iiib"); - SQGSCargoMonitor.DefSQStaticMethod(engine, &ScriptCargoMonitor::GetIndustryPickupAmount, "GetIndustryPickupAmount", 5, ".iiib"); - SQGSCargoMonitor.DefSQStaticMethod(engine, &ScriptCargoMonitor::StopAllMonitoring, "StopAllMonitoring", 1, "."); - - SQGSCargoMonitor.PostRegister(engine); -} diff --git a/src/script/api/game/game_client.hpp.sq b/src/script/api/game/game_client.hpp.sq deleted file mode 100644 index 3a7f8491f5..0000000000 --- a/src/script/api/game/game_client.hpp.sq +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_client.hpp" -#include "../template/template_client.hpp.sq" - - -template <> const char *GetClassName() { return "GSClient"; } - -void SQGSClient_Register(Squirrel *engine) -{ - DefSQClass SQGSClient("GSClient"); - SQGSClient.PreRegister(engine); - SQGSClient.AddConstructor(engine, "x"); - - SQGSClient.DefSQConst(engine, ScriptClient::CLIENT_INVALID, "CLIENT_INVALID"); - SQGSClient.DefSQConst(engine, ScriptClient::CLIENT_SERVER, "CLIENT_SERVER"); - SQGSClient.DefSQConst(engine, ScriptClient::CLIENT_FIRST, "CLIENT_FIRST"); - - SQGSClient.DefSQStaticMethod(engine, &ScriptClient::ResolveClientID, "ResolveClientID", 2, ".i"); - SQGSClient.DefSQStaticMethod(engine, &ScriptClient::GetName, "GetName", 2, ".i"); - SQGSClient.DefSQStaticMethod(engine, &ScriptClient::GetCompany, "GetCompany", 2, ".i"); - SQGSClient.DefSQStaticMethod(engine, &ScriptClient::GetJoinDate, "GetJoinDate", 2, ".i"); - - SQGSClient.PostRegister(engine); -} diff --git a/src/script/api/game/game_clientlist.hpp.sq b/src/script/api/game/game_clientlist.hpp.sq deleted file mode 100644 index c341786f1d..0000000000 --- a/src/script/api/game/game_clientlist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_clientlist.hpp" -#include "../template/template_clientlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSClientList"; } - -void SQGSClientList_Register(Squirrel *engine) -{ - DefSQClass SQGSClientList("GSClientList"); - SQGSClientList.PreRegister(engine, "GSList"); - SQGSClientList.AddConstructor(engine, "x"); - - SQGSClientList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSClientList_Company"; } - -void SQGSClientList_Company_Register(Squirrel *engine) -{ - DefSQClass SQGSClientList_Company("GSClientList_Company"); - SQGSClientList_Company.PreRegister(engine, "GSList"); - SQGSClientList_Company.AddConstructor(engine, "xi"); - - SQGSClientList_Company.PostRegister(engine); -} diff --git a/src/script/api/game/game_company.hpp.sq b/src/script/api/game/game_company.hpp.sq deleted file mode 100644 index 5bce4065cd..0000000000 --- a/src/script/api/game/game_company.hpp.sq +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_company.hpp" -#include "../template/template_company.hpp.sq" - - -template <> const char *GetClassName() { return "GSCompany"; } - -void SQGSCompany_Register(Squirrel *engine) -{ - DefSQClass SQGSCompany("GSCompany"); - SQGSCompany.PreRegister(engine); - SQGSCompany.AddConstructor(engine, "x"); - - SQGSCompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); - SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_DEFAULT, "LS_DEFAULT"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_STEAM, "LS_STEAM"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_DIESEL, "LS_DIESEL"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_ELECTRIC, "LS_ELECTRIC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_MONORAIL, "LS_MONORAIL"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_MAGLEV, "LS_MAGLEV"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_DMU, "LS_DMU"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_EMU, "LS_EMU"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_STEAM, "LS_PASSENGER_WAGON_STEAM"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_DIESEL, "LS_PASSENGER_WAGON_DIESEL"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_ELECTRIC, "LS_PASSENGER_WAGON_ELECTRIC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MONORAIL, "LS_PASSENGER_WAGON_MONORAIL"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MAGLEV, "LS_PASSENGER_WAGON_MAGLEV"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_WAGON, "LS_FREIGHT_WAGON"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_BUS, "LS_BUS"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_TRUCK, "LS_TRUCK"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_SHIP, "LS_PASSENGER_SHIP"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_SHIP, "LS_FREIGHT_SHIP"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_HELICOPTER, "LS_HELICOPTER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_SMALL_PLANE, "LS_SMALL_PLANE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_LARGE_PLANE, "LS_LARGE_PLANE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_TRAM, "LS_PASSENGER_TRAM"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_TRAM, "LS_FREIGHT_TRAM"); - SQGSCompany.DefSQConst(engine, ScriptCompany::LS_INVALID, "LS_INVALID"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_BLUE, "COLOUR_DARK_BLUE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_PALE_GREEN, "COLOUR_PALE_GREEN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_PINK, "COLOUR_PINK"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_YELLOW, "COLOUR_YELLOW"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_RED, "COLOUR_RED"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_LIGHT_BLUE, "COLOUR_LIGHT_BLUE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_GREEN, "COLOUR_GREEN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_GREEN, "COLOUR_DARK_GREEN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_BLUE, "COLOUR_BLUE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_CREAM, "COLOUR_CREAM"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_MAUVE, "COLOUR_MAUVE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_PURPLE, "COLOUR_PURPLE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_ORANGE, "COLOUR_ORANGE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_BROWN, "COLOUR_BROWN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_GREY, "COLOUR_GREY"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_WHITE, "COLOUR_WHITE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_INVALID, "COLOUR_INVALID"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_CONSTRUCTION, "EXPENSES_CONSTRUCTION"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_NEW_VEHICLES, "EXPENSES_NEW_VEHICLES"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_TRAIN_RUN, "EXPENSES_TRAIN_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_ROADVEH_RUN, "EXPENSES_ROADVEH_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_AIRCRAFT_RUN, "EXPENSES_AIRCRAFT_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_SHIP_RUN, "EXPENSES_SHIP_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_PROPERTY, "EXPENSES_PROPERTY"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_TRAIN_INC, "EXPENSES_TRAIN_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_ROADVEH_INC, "EXPENSES_ROADVEH_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_AIRCRAFT_INC, "EXPENSES_AIRCRAFT_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_SHIP_INC, "EXPENSES_SHIP_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_LOAN_INT, "EXPENSES_LOAN_INT"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_OTHER, "EXPENSES_OTHER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_INVALID, "EXPENSES_INVALID"); - - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetName, "SetName", 2, ".."); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetName, "GetName", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetPresidentName, "SetPresidentName", 2, ".."); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetPresidentName, "GetPresidentName", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetPresidentGender, "GetPresidentGender", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetLoanAmount, "SetLoanAmount", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetMinimumLoanAmount, "SetMinimumLoanAmount", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetLoanAmount, "GetLoanAmount", 1, "."); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetMaxLoanAmount, "GetMaxLoanAmount", 1, "."); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetLoanInterval, "GetLoanInterval", 1, "."); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetBankBalance, "GetBankBalance", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::ChangeBankBalance, "ChangeBankBalance", 4, ".iii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyIncome, "GetQuarterlyIncome", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyExpenses, "GetQuarterlyExpenses", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyCargoDelivered, "GetQuarterlyCargoDelivered", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyPerformanceRating, "GetQuarterlyPerformanceRating", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetQuarterlyCompanyValue, "GetQuarterlyCompanyValue", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::BuildCompanyHQ, "BuildCompanyHQ", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetCompanyHQ, "GetCompanyHQ", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewStatus, "GetAutoRenewStatus", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMonths, "GetAutoRenewMonths", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMoney, "GetAutoRenewMoney", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetPrimaryLiveryColour, "SetPrimaryLiveryColour", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetSecondaryLiveryColour, "SetSecondaryLiveryColour", 3, ".ii"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetPrimaryLiveryColour, "GetPrimaryLiveryColour", 2, ".i"); - SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetSecondaryLiveryColour, "GetSecondaryLiveryColour", 2, ".i"); - - SQGSCompany.PostRegister(engine); -} diff --git a/src/script/api/game/game_companymode.hpp.sq b/src/script/api/game/game_companymode.hpp.sq deleted file mode 100644 index 73eb5e26b4..0000000000 --- a/src/script/api/game/game_companymode.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_companymode.hpp" -#include "../template/template_companymode.hpp.sq" - - -template <> const char *GetClassName() { return "GSCompanyMode"; } - -void SQGSCompanyMode_Register(Squirrel *engine) -{ - DefSQClass SQGSCompanyMode("GSCompanyMode"); - SQGSCompanyMode.PreRegister(engine); - SQGSCompanyMode.AddConstructor(engine, "xi"); - - SQGSCompanyMode.PostRegister(engine); -} diff --git a/src/script/api/game/game_date.hpp.sq b/src/script/api/game/game_date.hpp.sq deleted file mode 100644 index 10dc2ad24d..0000000000 --- a/src/script/api/game/game_date.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_date.hpp" -#include "../template/template_date.hpp.sq" - - -template <> const char *GetClassName() { return "GSDate"; } - -void SQGSDate_Register(Squirrel *engine) -{ - DefSQClass SQGSDate("GSDate"); - SQGSDate.PreRegister(engine); - SQGSDate.AddConstructor(engine, "x"); - - SQGSDate.DefSQConst(engine, ScriptDate::DATE_INVALID, "DATE_INVALID"); - - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::IsValidDate, "IsValidDate", 2, ".i"); - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetCurrentDate, "GetCurrentDate", 1, "."); - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetYear, "GetYear", 2, ".i"); - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetMonth, "GetMonth", 2, ".i"); - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetDayOfMonth, "GetDayOfMonth", 2, ".i"); - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetDate, "GetDate", 4, ".iii"); - SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetSystemTime, "GetSystemTime", 1, "."); - - SQGSDate.PostRegister(engine); -} diff --git a/src/script/api/game/game_depotlist.hpp.sq b/src/script/api/game/game_depotlist.hpp.sq deleted file mode 100644 index e01aa99a0b..0000000000 --- a/src/script/api/game/game_depotlist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_depotlist.hpp" -#include "../template/template_depotlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSDepotList"; } - -void SQGSDepotList_Register(Squirrel *engine) -{ - DefSQClass SQGSDepotList("GSDepotList"); - SQGSDepotList.PreRegister(engine, "GSList"); - SQGSDepotList.AddConstructor(engine, "xi"); - - SQGSDepotList.PostRegister(engine); -} diff --git a/src/script/api/game/game_engine.hpp.sq b/src/script/api/game/game_engine.hpp.sq deleted file mode 100644 index 2efa1414a9..0000000000 --- a/src/script/api/game/game_engine.hpp.sq +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_engine.hpp" -#include "../template/template_engine.hpp.sq" - - -template <> const char *GetClassName() { return "GSEngine"; } - -void SQGSEngine_Register(Squirrel *engine) -{ - DefSQClass SQGSEngine("GSEngine"); - SQGSEngine.PreRegister(engine); - SQGSEngine.AddConstructor(engine, "x"); - - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::IsValidEngine, "IsValidEngine", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::IsBuildable, "IsBuildable", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetName, "GetName", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetCargoType, "GetCargoType", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::CanRefitCargo, "CanRefitCargo", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::CanPullCargo, "CanPullCargo", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetCapacity, "GetCapacity", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetReliability, "GetReliability", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetPrice, "GetPrice", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaxAge, "GetMaxAge", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetRunningCost, "GetRunningCost", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetPower, "GetPower", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetWeight, "GetWeight", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaxTractiveEffort, "GetMaxTractiveEffort", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetDesignDate, "GetDesignDate", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetVehicleType, "GetVehicleType", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::IsWagon, "IsWagon", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::CanRunOnRail, "CanRunOnRail", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::HasPowerOnRail, "HasPowerOnRail", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::CanRunOnRoad, "CanRunOnRoad", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::HasPowerOnRoad, "HasPowerOnRoad", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetRoadType, "GetRoadType", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetRailType, "GetRailType", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::IsArticulated, "IsArticulated", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetPlaneType, "GetPlaneType", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::GetMaximumOrderDistance, "GetMaximumOrderDistance", 2, ".i"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::EnableForCompany, "EnableForCompany", 3, ".ii"); - SQGSEngine.DefSQStaticMethod(engine, &ScriptEngine::DisableForCompany, "DisableForCompany", 3, ".ii"); - - SQGSEngine.PostRegister(engine); -} diff --git a/src/script/api/game/game_enginelist.hpp.sq b/src/script/api/game/game_enginelist.hpp.sq deleted file mode 100644 index 9ffbba636e..0000000000 --- a/src/script/api/game/game_enginelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_enginelist.hpp" -#include "../template/template_enginelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSEngineList"; } - -void SQGSEngineList_Register(Squirrel *engine) -{ - DefSQClass SQGSEngineList("GSEngineList"); - SQGSEngineList.PreRegister(engine, "GSList"); - SQGSEngineList.AddConstructor(engine, "xi"); - - SQGSEngineList.PostRegister(engine); -} diff --git a/src/script/api/game/game_error.hpp.sq b/src/script/api/game/game_error.hpp.sq deleted file mode 100644 index f1f88b3373..0000000000 --- a/src/script/api/game/game_error.hpp.sq +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_error.hpp" -#include "../template/template_error.hpp.sq" - - -template <> const char *GetClassName() { return "GSError"; } - -void SQGSError_Register(Squirrel *engine) -{ - DefSQClass SQGSError("GSError"); - SQGSError.PreRegister(engine); - SQGSError.AddConstructor(engine, "x"); - - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_NONE, "ERR_CAT_NONE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_GENERAL, "ERR_CAT_GENERAL"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_VEHICLE, "ERR_CAT_VEHICLE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_STATION, "ERR_CAT_STATION"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_BRIDGE, "ERR_CAT_BRIDGE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_TUNNEL, "ERR_CAT_TUNNEL"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_TILE, "ERR_CAT_TILE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_SIGN, "ERR_CAT_SIGN"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_RAIL, "ERR_CAT_RAIL"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_ROAD, "ERR_CAT_ROAD"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_ORDER, "ERR_CAT_ORDER"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_MARINE, "ERR_CAT_MARINE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_WAYPOINT, "ERR_CAT_WAYPOINT"); - SQGSError.DefSQConst(engine, ScriptError::ERR_CAT_BIT_SIZE, "ERR_CAT_BIT_SIZE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_NONE, "ERR_NONE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_UNKNOWN, "ERR_UNKNOWN"); - SQGSError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_FAILED, "ERR_PRECONDITION_FAILED"); - SQGSError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG, "ERR_PRECONDITION_STRING_TOO_LONG"); - SQGSError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, "ERR_PRECONDITION_TOO_MANY_PARAMETERS"); - SQGSError.DefSQConst(engine, ScriptError::ERR_PRECONDITION_INVALID_COMPANY, "ERR_PRECONDITION_INVALID_COMPANY"); - SQGSError.DefSQConst(engine, ScriptError::ERR_NEWGRF_SUPPLIED_ERROR, "ERR_NEWGRF_SUPPLIED_ERROR"); - SQGSError.DefSQConst(engine, ScriptError::ERR_GENERAL_BASE, "ERR_GENERAL_BASE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_NOT_ENOUGH_CASH, "ERR_NOT_ENOUGH_CASH"); - SQGSError.DefSQConst(engine, ScriptError::ERR_LOCAL_AUTHORITY_REFUSES, "ERR_LOCAL_AUTHORITY_REFUSES"); - SQGSError.DefSQConst(engine, ScriptError::ERR_ALREADY_BUILT, "ERR_ALREADY_BUILT"); - SQGSError.DefSQConst(engine, ScriptError::ERR_AREA_NOT_CLEAR, "ERR_AREA_NOT_CLEAR"); - SQGSError.DefSQConst(engine, ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY, "ERR_OWNED_BY_ANOTHER_COMPANY"); - SQGSError.DefSQConst(engine, ScriptError::ERR_NAME_IS_NOT_UNIQUE, "ERR_NAME_IS_NOT_UNIQUE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_FLAT_LAND_REQUIRED, "ERR_FLAT_LAND_REQUIRED"); - SQGSError.DefSQConst(engine, ScriptError::ERR_LAND_SLOPED_WRONG, "ERR_LAND_SLOPED_WRONG"); - SQGSError.DefSQConst(engine, ScriptError::ERR_VEHICLE_IN_THE_WAY, "ERR_VEHICLE_IN_THE_WAY"); - SQGSError.DefSQConst(engine, ScriptError::ERR_SITE_UNSUITABLE, "ERR_SITE_UNSUITABLE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE"); - SQGSError.DefSQConst(engine, ScriptError::ERR_STATION_TOO_SPREAD_OUT, "ERR_STATION_TOO_SPREAD_OUT"); - - 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); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_BUOY_IN_THE_WAY, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_DOCK_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_GENERIC_OBJECT_IN_THE_WAY, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_COMPANY_HEADQUARTERS_IN, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_OBJECT_IN_THE_WAY, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_REMOVE_ROAD_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_EXCAVATION_WOULD_DAMAGE, ScriptError::ERR_AREA_NOT_CLEAR); - ScriptError::RegisterErrorMap(STR_ERROR_AREA_IS_OWNED_BY_ANOTHER, ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY); - ScriptError::RegisterErrorMap(STR_ERROR_OWNED_BY, ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY); - ScriptError::RegisterErrorMap(STR_ERROR_NAME_MUST_BE_UNIQUE, ScriptError::ERR_NAME_IS_NOT_UNIQUE); - ScriptError::RegisterErrorMap(STR_ERROR_FLAT_LAND_REQUIRED, ScriptError::ERR_FLAT_LAND_REQUIRED); - ScriptError::RegisterErrorMap(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION, ScriptError::ERR_LAND_SLOPED_WRONG); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_VEHICLE_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); - 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); - - ScriptError::RegisterErrorMapString(ScriptError::ERR_NONE, "ERR_NONE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_UNKNOWN, "ERR_UNKNOWN"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_FAILED, "ERR_PRECONDITION_FAILED"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_STRING_TOO_LONG, "ERR_PRECONDITION_STRING_TOO_LONG"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, "ERR_PRECONDITION_TOO_MANY_PARAMETERS"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_PRECONDITION_INVALID_COMPANY, "ERR_PRECONDITION_INVALID_COMPANY"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_NEWGRF_SUPPLIED_ERROR, "ERR_NEWGRF_SUPPLIED_ERROR"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_NOT_ENOUGH_CASH, "ERR_NOT_ENOUGH_CASH"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_LOCAL_AUTHORITY_REFUSES, "ERR_LOCAL_AUTHORITY_REFUSES"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_ALREADY_BUILT, "ERR_ALREADY_BUILT"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_AREA_NOT_CLEAR, "ERR_AREA_NOT_CLEAR"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_OWNED_BY_ANOTHER_COMPANY, "ERR_OWNED_BY_ANOTHER_COMPANY"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_NAME_IS_NOT_UNIQUE, "ERR_NAME_IS_NOT_UNIQUE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_FLAT_LAND_REQUIRED, "ERR_FLAT_LAND_REQUIRED"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_LAND_SLOPED_WRONG, "ERR_LAND_SLOPED_WRONG"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_VEHICLE_IN_THE_WAY, "ERR_VEHICLE_IN_THE_WAY"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_SITE_UNSUITABLE, "ERR_SITE_UNSUITABLE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE"); - ScriptError::RegisterErrorMapString(ScriptError::ERR_STATION_TOO_SPREAD_OUT, "ERR_STATION_TOO_SPREAD_OUT"); - - SQGSError.DefSQStaticMethod(engine, &ScriptError::GetErrorCategory, "GetErrorCategory", 1, "."); - SQGSError.DefSQStaticMethod(engine, &ScriptError::GetLastError, "GetLastError", 1, "."); - SQGSError.DefSQStaticMethod(engine, &ScriptError::GetLastErrorString, "GetLastErrorString", 1, "."); - - SQGSError.PostRegister(engine); -} diff --git a/src/script/api/game/game_event.hpp.sq b/src/script/api/game/game_event.hpp.sq deleted file mode 100644 index 2be056cd8b..0000000000 --- a/src/script/api/game/game_event.hpp.sq +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_event.hpp" -#include "../template/template_event.hpp.sq" - - -template <> const char *GetClassName() { return "GSEvent"; } - -void SQGSEvent_Register(Squirrel *engine) -{ - DefSQClass SQGSEvent("GSEvent"); - SQGSEvent.PreRegister(engine); - SQGSEvent.AddConstructor(engine, "xi"); - - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_INVALID, "ET_INVALID"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_TEST, "ET_TEST"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_OFFER, "ET_SUBSIDY_OFFER"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_OFFER_EXPIRED, "ET_SUBSIDY_OFFER_EXPIRED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_AWARDED, "ET_SUBSIDY_AWARDED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_SUBSIDY_EXPIRED, "ET_SUBSIDY_EXPIRED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_ENGINE_PREVIEW, "ET_ENGINE_PREVIEW"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_NEW, "ET_COMPANY_NEW"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_IN_TROUBLE, "ET_COMPANY_IN_TROUBLE"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_ASK_MERGER, "ET_COMPANY_ASK_MERGER"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_MERGER, "ET_COMPANY_MERGER"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_COMPANY_BANKRUPT, "ET_COMPANY_BANKRUPT"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_CRASHED, "ET_VEHICLE_CRASHED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_LOST, "ET_VEHICLE_LOST"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_WAITING_IN_DEPOT, "ET_VEHICLE_WAITING_IN_DEPOT"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_UNPROFITABLE, "ET_VEHICLE_UNPROFITABLE"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_INDUSTRY_OPEN, "ET_INDUSTRY_OPEN"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_INDUSTRY_CLOSE, "ET_INDUSTRY_CLOSE"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_ENGINE_AVAILABLE, "ET_ENGINE_AVAILABLE"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STATION_FIRST_VEHICLE, "ET_STATION_FIRST_VEHICLE"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_DISASTER_ZEPPELINER_CRASHED, "ET_DISASTER_ZEPPELINER_CRASHED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_DISASTER_ZEPPELINER_CLEARED, "ET_DISASTER_ZEPPELINER_CLEARED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_TOWN_FOUNDED, "ET_TOWN_FOUNDED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_AIRCRAFT_DEST_TOO_FAR, "ET_AIRCRAFT_DEST_TOO_FAR"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_ADMIN_PORT, "ET_ADMIN_PORT"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_WINDOW_WIDGET_CLICK, "ET_WINDOW_WIDGET_CLICK"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_GOAL_QUESTION_ANSWER, "ET_GOAL_QUESTION_ANSWER"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_EXCLUSIVE_TRANSPORT_RIGHTS, "ET_EXCLUSIVE_TRANSPORT_RIGHTS"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_ROAD_RECONSTRUCTION, "ET_ROAD_RECONSTRUCTION"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_VEHICLE_AUTOREPLACED, "ET_VEHICLE_AUTOREPLACED"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_BUTTON_CLICK, "ET_STORYPAGE_BUTTON_CLICK"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_TILE_SELECT, "ET_STORYPAGE_TILE_SELECT"); - SQGSEvent.DefSQConst(engine, ScriptEvent::ET_STORYPAGE_VEHICLE_SELECT, "ET_STORYPAGE_VEHICLE_SELECT"); - - SQGSEvent.DefSQMethod(engine, &ScriptEvent::GetEventType, "GetEventType", 1, "x"); - - SQGSEvent.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventController"; } - -void SQGSEventController_Register(Squirrel *engine) -{ - DefSQClass SQGSEventController("GSEventController"); - SQGSEventController.PreRegister(engine); - SQGSEventController.AddConstructor(engine, "x"); - - SQGSEventController.DefSQStaticMethod(engine, &ScriptEventController::IsEventWaiting, "IsEventWaiting", 1, "."); - SQGSEventController.DefSQStaticMethod(engine, &ScriptEventController::GetNextEvent, "GetNextEvent", 1, "."); - - SQGSEventController.PostRegister(engine); -} diff --git a/src/script/api/game/game_event_types.hpp.sq b/src/script/api/game/game_event_types.hpp.sq deleted file mode 100644 index 6a0e89b499..0000000000 --- a/src/script/api/game/game_event_types.hpp.sq +++ /dev/null @@ -1,363 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_event_types.hpp" -#include "../template/template_event_types.hpp.sq" - - -template <> const char *GetClassName() { return "GSEventVehicleCrashed"; } - -void SQGSEventVehicleCrashed_Register(Squirrel *engine) -{ - DefSQClass SQGSEventVehicleCrashed("GSEventVehicleCrashed"); - SQGSEventVehicleCrashed.PreRegister(engine, "GSEvent"); - - SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_TRAIN, "CRASH_TRAIN"); - SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_RV_LEVEL_CROSSING, "CRASH_RV_LEVEL_CROSSING"); - SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_RV_UFO, "CRASH_RV_UFO"); - SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_PLANE_LANDING, "CRASH_PLANE_LANDING"); - SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT, "CRASH_AIRCRAFT_NO_AIRPORT"); - SQGSEventVehicleCrashed.DefSQConst(engine, ScriptEventVehicleCrashed::CRASH_FLOODED, "CRASH_FLOODED"); - - SQGSEventVehicleCrashed.DefSQStaticMethod(engine, &ScriptEventVehicleCrashed::Convert, "Convert", 2, ".x"); - - SQGSEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetVehicleID, "GetVehicleID", 1, "x"); - SQGSEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetCrashSite, "GetCrashSite", 1, "x"); - SQGSEventVehicleCrashed.DefSQMethod(engine, &ScriptEventVehicleCrashed::GetCrashReason, "GetCrashReason", 1, "x"); - - SQGSEventVehicleCrashed.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventSubsidyOffer"; } - -void SQGSEventSubsidyOffer_Register(Squirrel *engine) -{ - DefSQClass SQGSEventSubsidyOffer("GSEventSubsidyOffer"); - SQGSEventSubsidyOffer.PreRegister(engine, "GSEvent"); - - SQGSEventSubsidyOffer.DefSQStaticMethod(engine, &ScriptEventSubsidyOffer::Convert, "Convert", 2, ".x"); - - SQGSEventSubsidyOffer.DefSQMethod(engine, &ScriptEventSubsidyOffer::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQGSEventSubsidyOffer.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventSubsidyOfferExpired"; } - -void SQGSEventSubsidyOfferExpired_Register(Squirrel *engine) -{ - DefSQClass SQGSEventSubsidyOfferExpired("GSEventSubsidyOfferExpired"); - SQGSEventSubsidyOfferExpired.PreRegister(engine, "GSEvent"); - - SQGSEventSubsidyOfferExpired.DefSQStaticMethod(engine, &ScriptEventSubsidyOfferExpired::Convert, "Convert", 2, ".x"); - - SQGSEventSubsidyOfferExpired.DefSQMethod(engine, &ScriptEventSubsidyOfferExpired::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQGSEventSubsidyOfferExpired.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventSubsidyAwarded"; } - -void SQGSEventSubsidyAwarded_Register(Squirrel *engine) -{ - DefSQClass SQGSEventSubsidyAwarded("GSEventSubsidyAwarded"); - SQGSEventSubsidyAwarded.PreRegister(engine, "GSEvent"); - - SQGSEventSubsidyAwarded.DefSQStaticMethod(engine, &ScriptEventSubsidyAwarded::Convert, "Convert", 2, ".x"); - - SQGSEventSubsidyAwarded.DefSQMethod(engine, &ScriptEventSubsidyAwarded::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQGSEventSubsidyAwarded.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventSubsidyExpired"; } - -void SQGSEventSubsidyExpired_Register(Squirrel *engine) -{ - DefSQClass SQGSEventSubsidyExpired("GSEventSubsidyExpired"); - SQGSEventSubsidyExpired.PreRegister(engine, "GSEvent"); - - SQGSEventSubsidyExpired.DefSQStaticMethod(engine, &ScriptEventSubsidyExpired::Convert, "Convert", 2, ".x"); - - SQGSEventSubsidyExpired.DefSQMethod(engine, &ScriptEventSubsidyExpired::GetSubsidyID, "GetSubsidyID", 1, "x"); - - SQGSEventSubsidyExpired.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventCompanyNew"; } - -void SQGSEventCompanyNew_Register(Squirrel *engine) -{ - DefSQClass SQGSEventCompanyNew("GSEventCompanyNew"); - SQGSEventCompanyNew.PreRegister(engine, "GSEvent"); - - SQGSEventCompanyNew.DefSQStaticMethod(engine, &ScriptEventCompanyNew::Convert, "Convert", 2, ".x"); - - SQGSEventCompanyNew.DefSQMethod(engine, &ScriptEventCompanyNew::GetCompanyID, "GetCompanyID", 1, "x"); - - SQGSEventCompanyNew.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventCompanyInTrouble"; } - -void SQGSEventCompanyInTrouble_Register(Squirrel *engine) -{ - DefSQClass SQGSEventCompanyInTrouble("GSEventCompanyInTrouble"); - SQGSEventCompanyInTrouble.PreRegister(engine, "GSEvent"); - - SQGSEventCompanyInTrouble.DefSQStaticMethod(engine, &ScriptEventCompanyInTrouble::Convert, "Convert", 2, ".x"); - - SQGSEventCompanyInTrouble.DefSQMethod(engine, &ScriptEventCompanyInTrouble::GetCompanyID, "GetCompanyID", 1, "x"); - - SQGSEventCompanyInTrouble.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventCompanyMerger"; } - -void SQGSEventCompanyMerger_Register(Squirrel *engine) -{ - DefSQClass SQGSEventCompanyMerger("GSEventCompanyMerger"); - SQGSEventCompanyMerger.PreRegister(engine, "GSEvent"); - - SQGSEventCompanyMerger.DefSQStaticMethod(engine, &ScriptEventCompanyMerger::Convert, "Convert", 2, ".x"); - - SQGSEventCompanyMerger.DefSQMethod(engine, &ScriptEventCompanyMerger::GetOldCompanyID, "GetOldCompanyID", 1, "x"); - SQGSEventCompanyMerger.DefSQMethod(engine, &ScriptEventCompanyMerger::GetNewCompanyID, "GetNewCompanyID", 1, "x"); - - SQGSEventCompanyMerger.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventCompanyBankrupt"; } - -void SQGSEventCompanyBankrupt_Register(Squirrel *engine) -{ - DefSQClass SQGSEventCompanyBankrupt("GSEventCompanyBankrupt"); - SQGSEventCompanyBankrupt.PreRegister(engine, "GSEvent"); - - SQGSEventCompanyBankrupt.DefSQStaticMethod(engine, &ScriptEventCompanyBankrupt::Convert, "Convert", 2, ".x"); - - SQGSEventCompanyBankrupt.DefSQMethod(engine, &ScriptEventCompanyBankrupt::GetCompanyID, "GetCompanyID", 1, "x"); - - SQGSEventCompanyBankrupt.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventIndustryOpen"; } - -void SQGSEventIndustryOpen_Register(Squirrel *engine) -{ - DefSQClass SQGSEventIndustryOpen("GSEventIndustryOpen"); - SQGSEventIndustryOpen.PreRegister(engine, "GSEvent"); - - SQGSEventIndustryOpen.DefSQStaticMethod(engine, &ScriptEventIndustryOpen::Convert, "Convert", 2, ".x"); - - SQGSEventIndustryOpen.DefSQMethod(engine, &ScriptEventIndustryOpen::GetIndustryID, "GetIndustryID", 1, "x"); - - SQGSEventIndustryOpen.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventIndustryClose"; } - -void SQGSEventIndustryClose_Register(Squirrel *engine) -{ - DefSQClass SQGSEventIndustryClose("GSEventIndustryClose"); - SQGSEventIndustryClose.PreRegister(engine, "GSEvent"); - - SQGSEventIndustryClose.DefSQStaticMethod(engine, &ScriptEventIndustryClose::Convert, "Convert", 2, ".x"); - - SQGSEventIndustryClose.DefSQMethod(engine, &ScriptEventIndustryClose::GetIndustryID, "GetIndustryID", 1, "x"); - - SQGSEventIndustryClose.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventStationFirstVehicle"; } - -void SQGSEventStationFirstVehicle_Register(Squirrel *engine) -{ - DefSQClass SQGSEventStationFirstVehicle("GSEventStationFirstVehicle"); - SQGSEventStationFirstVehicle.PreRegister(engine, "GSEvent"); - - SQGSEventStationFirstVehicle.DefSQStaticMethod(engine, &ScriptEventStationFirstVehicle::Convert, "Convert", 2, ".x"); - - SQGSEventStationFirstVehicle.DefSQMethod(engine, &ScriptEventStationFirstVehicle::GetStationID, "GetStationID", 1, "x"); - SQGSEventStationFirstVehicle.DefSQMethod(engine, &ScriptEventStationFirstVehicle::GetVehicleID, "GetVehicleID", 1, "x"); - - SQGSEventStationFirstVehicle.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventTownFounded"; } - -void SQGSEventTownFounded_Register(Squirrel *engine) -{ - DefSQClass SQGSEventTownFounded("GSEventTownFounded"); - SQGSEventTownFounded.PreRegister(engine, "GSEvent"); - - SQGSEventTownFounded.DefSQStaticMethod(engine, &ScriptEventTownFounded::Convert, "Convert", 2, ".x"); - - SQGSEventTownFounded.DefSQMethod(engine, &ScriptEventTownFounded::GetTownID, "GetTownID", 1, "x"); - - SQGSEventTownFounded.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventAdminPort"; } - -void SQGSEventAdminPort_Register(Squirrel *engine) -{ - DefSQClass SQGSEventAdminPort("GSEventAdminPort"); - SQGSEventAdminPort.PreRegister(engine, "GSEvent"); - - SQGSEventAdminPort.DefSQStaticMethod(engine, &ScriptEventAdminPort::Convert, "Convert", 2, ".x"); - - SQGSEventAdminPort.DefSQAdvancedMethod(engine, &ScriptEventAdminPort::GetObject, "GetObject"); - - SQGSEventAdminPort.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventWindowWidgetClick"; } - -void SQGSEventWindowWidgetClick_Register(Squirrel *engine) -{ - DefSQClass SQGSEventWindowWidgetClick("GSEventWindowWidgetClick"); - SQGSEventWindowWidgetClick.PreRegister(engine, "GSEvent"); - - SQGSEventWindowWidgetClick.DefSQStaticMethod(engine, &ScriptEventWindowWidgetClick::Convert, "Convert", 2, ".x"); - - SQGSEventWindowWidgetClick.DefSQMethod(engine, &ScriptEventWindowWidgetClick::GetWindowClass, "GetWindowClass", 1, "x"); - SQGSEventWindowWidgetClick.DefSQMethod(engine, &ScriptEventWindowWidgetClick::GetWindowNumber, "GetWindowNumber", 1, "x"); - SQGSEventWindowWidgetClick.DefSQMethod(engine, &ScriptEventWindowWidgetClick::GetWidgetNumber, "GetWidgetNumber", 1, "x"); - - SQGSEventWindowWidgetClick.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventGoalQuestionAnswer"; } - -void SQGSEventGoalQuestionAnswer_Register(Squirrel *engine) -{ - DefSQClass SQGSEventGoalQuestionAnswer("GSEventGoalQuestionAnswer"); - SQGSEventGoalQuestionAnswer.PreRegister(engine, "GSEvent"); - - SQGSEventGoalQuestionAnswer.DefSQStaticMethod(engine, &ScriptEventGoalQuestionAnswer::Convert, "Convert", 2, ".x"); - - SQGSEventGoalQuestionAnswer.DefSQMethod(engine, &ScriptEventGoalQuestionAnswer::GetUniqueID, "GetUniqueID", 1, "x"); - SQGSEventGoalQuestionAnswer.DefSQMethod(engine, &ScriptEventGoalQuestionAnswer::GetCompany, "GetCompany", 1, "x"); - SQGSEventGoalQuestionAnswer.DefSQMethod(engine, &ScriptEventGoalQuestionAnswer::GetButton, "GetButton", 1, "x"); - - SQGSEventGoalQuestionAnswer.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventCompanyTown"; } - -void SQGSEventCompanyTown_Register(Squirrel *engine) -{ - DefSQClass SQGSEventCompanyTown("GSEventCompanyTown"); - SQGSEventCompanyTown.PreRegister(engine, "GSEvent"); - - SQGSEventCompanyTown.DefSQStaticMethod(engine, &ScriptEventCompanyTown::Convert, "Convert", 2, ".x"); - - SQGSEventCompanyTown.DefSQMethod(engine, &ScriptEventCompanyTown::GetCompanyID, "GetCompanyID", 1, "x"); - SQGSEventCompanyTown.DefSQMethod(engine, &ScriptEventCompanyTown::GetTownID, "GetTownID", 1, "x"); - - SQGSEventCompanyTown.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventExclusiveTransportRights"; } - -void SQGSEventExclusiveTransportRights_Register(Squirrel *engine) -{ - DefSQClass SQGSEventExclusiveTransportRights("GSEventExclusiveTransportRights"); - SQGSEventExclusiveTransportRights.PreRegister(engine, "GSEventCompanyTown"); - SQGSEventExclusiveTransportRights.AddConstructor(engine, "xii"); - - SQGSEventExclusiveTransportRights.DefSQStaticMethod(engine, &ScriptEventExclusiveTransportRights::Convert, "Convert", 2, ".x"); - - SQGSEventExclusiveTransportRights.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventRoadReconstruction"; } - -void SQGSEventRoadReconstruction_Register(Squirrel *engine) -{ - DefSQClass SQGSEventRoadReconstruction("GSEventRoadReconstruction"); - SQGSEventRoadReconstruction.PreRegister(engine, "GSEventCompanyTown"); - SQGSEventRoadReconstruction.AddConstructor(engine, "xii"); - - SQGSEventRoadReconstruction.DefSQStaticMethod(engine, &ScriptEventRoadReconstruction::Convert, "Convert", 2, ".x"); - - SQGSEventRoadReconstruction.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventStoryPageButtonClick"; } - -void SQGSEventStoryPageButtonClick_Register(Squirrel *engine) -{ - DefSQClass SQGSEventStoryPageButtonClick("GSEventStoryPageButtonClick"); - SQGSEventStoryPageButtonClick.PreRegister(engine, "GSEvent"); - - SQGSEventStoryPageButtonClick.DefSQStaticMethod(engine, &ScriptEventStoryPageButtonClick::Convert, "Convert", 2, ".x"); - - SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetCompanyID, "GetCompanyID", 1, "x"); - SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetStoryPageID, "GetStoryPageID", 1, "x"); - SQGSEventStoryPageButtonClick.DefSQMethod(engine, &ScriptEventStoryPageButtonClick::GetElementID, "GetElementID", 1, "x"); - - SQGSEventStoryPageButtonClick.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventStoryPageTileSelect"; } - -void SQGSEventStoryPageTileSelect_Register(Squirrel *engine) -{ - DefSQClass SQGSEventStoryPageTileSelect("GSEventStoryPageTileSelect"); - SQGSEventStoryPageTileSelect.PreRegister(engine, "GSEvent"); - - SQGSEventStoryPageTileSelect.DefSQStaticMethod(engine, &ScriptEventStoryPageTileSelect::Convert, "Convert", 2, ".x"); - - SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetCompanyID, "GetCompanyID", 1, "x"); - SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetStoryPageID, "GetStoryPageID", 1, "x"); - SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetElementID, "GetElementID", 1, "x"); - SQGSEventStoryPageTileSelect.DefSQMethod(engine, &ScriptEventStoryPageTileSelect::GetTile, "GetTile", 1, "x"); - - SQGSEventStoryPageTileSelect.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSEventStoryPageVehicleSelect"; } - -void SQGSEventStoryPageVehicleSelect_Register(Squirrel *engine) -{ - DefSQClass SQGSEventStoryPageVehicleSelect("GSEventStoryPageVehicleSelect"); - SQGSEventStoryPageVehicleSelect.PreRegister(engine, "GSEvent"); - - SQGSEventStoryPageVehicleSelect.DefSQStaticMethod(engine, &ScriptEventStoryPageVehicleSelect::Convert, "Convert", 2, ".x"); - - SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetCompanyID, "GetCompanyID", 1, "x"); - SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetStoryPageID, "GetStoryPageID", 1, "x"); - SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetElementID, "GetElementID", 1, "x"); - SQGSEventStoryPageVehicleSelect.DefSQMethod(engine, &ScriptEventStoryPageVehicleSelect::GetVehicleID, "GetVehicleID", 1, "x"); - - SQGSEventStoryPageVehicleSelect.PostRegister(engine); -} diff --git a/src/script/api/game/game_game.hpp.sq b/src/script/api/game/game_game.hpp.sq deleted file mode 100644 index 8c889a05b1..0000000000 --- a/src/script/api/game/game_game.hpp.sq +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_game.hpp" -#include "../template/template_game.hpp.sq" - - -template <> const char *GetClassName() { return "GSGame"; } - -void SQGSGame_Register(Squirrel *engine) -{ - DefSQClass SQGSGame("GSGame"); - SQGSGame.PreRegister(engine); - SQGSGame.AddConstructor(engine, "x"); - - SQGSGame.DefSQConst(engine, ScriptGame::LT_TEMPERATE, "LT_TEMPERATE"); - SQGSGame.DefSQConst(engine, ScriptGame::LT_ARCTIC, "LT_ARCTIC"); - SQGSGame.DefSQConst(engine, ScriptGame::LT_TROPIC, "LT_TROPIC"); - SQGSGame.DefSQConst(engine, ScriptGame::LT_TOYLAND, "LT_TOYLAND"); - - SQGSGame.DefSQStaticMethod(engine, &ScriptGame::Pause, "Pause", 1, "."); - SQGSGame.DefSQStaticMethod(engine, &ScriptGame::Unpause, "Unpause", 1, "."); - SQGSGame.DefSQStaticMethod(engine, &ScriptGame::IsPaused, "IsPaused", 1, "."); - SQGSGame.DefSQStaticMethod(engine, &ScriptGame::GetLandscape, "GetLandscape", 1, "."); - SQGSGame.DefSQStaticMethod(engine, &ScriptGame::IsMultiplayer, "IsMultiplayer", 1, "."); - - SQGSGame.PostRegister(engine); -} diff --git a/src/script/api/game/game_gamesettings.hpp.sq b/src/script/api/game/game_gamesettings.hpp.sq deleted file mode 100644 index a1dbcf7914..0000000000 --- a/src/script/api/game/game_gamesettings.hpp.sq +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_gamesettings.hpp" -#include "../template/template_gamesettings.hpp.sq" - - -template <> const char *GetClassName() { return "GSGameSettings"; } - -void SQGSGameSettings_Register(Squirrel *engine) -{ - DefSQClass SQGSGameSettings("GSGameSettings"); - SQGSGameSettings.PreRegister(engine); - SQGSGameSettings.AddConstructor(engine, "x"); - - SQGSGameSettings.DefSQStaticMethod(engine, &ScriptGameSettings::IsValid, "IsValid", 2, ".."); - SQGSGameSettings.DefSQStaticMethod(engine, &ScriptGameSettings::GetValue, "GetValue", 2, ".."); - SQGSGameSettings.DefSQStaticMethod(engine, &ScriptGameSettings::SetValue, "SetValue", 3, "..i"); - - SQGSGameSettings.PostRegister(engine); -} diff --git a/src/script/api/game/game_goal.hpp.sq b/src/script/api/game/game_goal.hpp.sq deleted file mode 100644 index 9f0384c554..0000000000 --- a/src/script/api/game/game_goal.hpp.sq +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_goal.hpp" -#include "../template/template_goal.hpp.sq" - - -template <> const char *GetClassName() { return "GSGoal"; } - -void SQGSGoal_Register(Squirrel *engine) -{ - DefSQClass SQGSGoal("GSGoal"); - SQGSGoal.PreRegister(engine); - SQGSGoal.AddConstructor(engine, "x"); - - SQGSGoal.DefSQConst(engine, ScriptGoal::GOAL_INVALID, "GOAL_INVALID"); - SQGSGoal.DefSQConst(engine, ScriptGoal::GT_NONE, "GT_NONE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::GT_TILE, "GT_TILE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::GT_INDUSTRY, "GT_INDUSTRY"); - SQGSGoal.DefSQConst(engine, ScriptGoal::GT_TOWN, "GT_TOWN"); - SQGSGoal.DefSQConst(engine, ScriptGoal::GT_COMPANY, "GT_COMPANY"); - SQGSGoal.DefSQConst(engine, ScriptGoal::GT_STORY_PAGE, "GT_STORY_PAGE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::QT_QUESTION, "QT_QUESTION"); - SQGSGoal.DefSQConst(engine, ScriptGoal::QT_INFORMATION, "QT_INFORMATION"); - SQGSGoal.DefSQConst(engine, ScriptGoal::QT_WARNING, "QT_WARNING"); - SQGSGoal.DefSQConst(engine, ScriptGoal::QT_ERROR, "QT_ERROR"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_CANCEL, "BUTTON_CANCEL"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_OK, "BUTTON_OK"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_NO, "BUTTON_NO"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_YES, "BUTTON_YES"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_DECLINE, "BUTTON_DECLINE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_ACCEPT, "BUTTON_ACCEPT"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_IGNORE, "BUTTON_IGNORE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_RETRY, "BUTTON_RETRY"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_PREVIOUS, "BUTTON_PREVIOUS"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_NEXT, "BUTTON_NEXT"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_STOP, "BUTTON_STOP"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_START, "BUTTON_START"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_GO, "BUTTON_GO"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_CONTINUE, "BUTTON_CONTINUE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_RESTART, "BUTTON_RESTART"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_POSTPONE, "BUTTON_POSTPONE"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_SURRENDER, "BUTTON_SURRENDER"); - SQGSGoal.DefSQConst(engine, ScriptGoal::BUTTON_CLOSE, "BUTTON_CLOSE"); - - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::IsValidGoal, "IsValidGoal", 2, ".i"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::New, "New", 5, ".i.ii"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::Remove, "Remove", 2, ".i"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::SetText, "SetText", 3, ".i."); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::SetProgress, "SetProgress", 3, ".i."); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::SetCompleted, "SetCompleted", 3, ".ib"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::IsCompleted, "IsCompleted", 2, ".i"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::Question, "Question", 6, ".ii.ii"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::QuestionClient, "QuestionClient", 6, ".ii.ii"); - SQGSGoal.DefSQStaticMethod(engine, &ScriptGoal::CloseQuestion, "CloseQuestion", 2, ".i"); - - SQGSGoal.PostRegister(engine); -} diff --git a/src/script/api/game/game_industry.hpp.sq b/src/script/api/game/game_industry.hpp.sq deleted file mode 100644 index 281ee638fa..0000000000 --- a/src/script/api/game/game_industry.hpp.sq +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industry.hpp" -#include "../template/template_industry.hpp.sq" - - -template <> const char *GetClassName() { return "GSIndustry"; } - -void SQGSIndustry_Register(Squirrel *engine) -{ - DefSQClass SQGSIndustry("GSIndustry"); - SQGSIndustry.PreRegister(engine); - SQGSIndustry.AddConstructor(engine, "x"); - - SQGSIndustry.DefSQConst(engine, ScriptIndustry::CAS_NOT_ACCEPTED, "CAS_NOT_ACCEPTED"); - SQGSIndustry.DefSQConst(engine, ScriptIndustry::CAS_ACCEPTED, "CAS_ACCEPTED"); - SQGSIndustry.DefSQConst(engine, ScriptIndustry::CAS_TEMP_REFUSED, "CAS_TEMP_REFUSED"); - - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetIndustryCount, "GetIndustryCount", 1, "."); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::IsValidIndustry, "IsValidIndustry", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetIndustryID, "GetIndustryID", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetName, "GetName", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::IsCargoAccepted, "IsCargoAccepted", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetStockpiledCargo, "GetStockpiledCargo", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLastMonthProduction, "GetLastMonthProduction", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLastMonthTransported, "GetLastMonthTransported", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLastMonthTransportedPercentage, "GetLastMonthTransportedPercentage", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetLocation, "GetLocation", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetAmountOfStationsAround, "GetAmountOfStationsAround", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::IsBuiltOnWater, "IsBuiltOnWater", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::HasHeliport, "HasHeliport", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetHeliportLocation, "GetHeliportLocation", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::HasDock, "HasDock", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetDockLocation, "GetDockLocation", 2, ".i"); - SQGSIndustry.DefSQStaticMethod(engine, &ScriptIndustry::GetIndustryType, "GetIndustryType", 2, ".i"); - - SQGSIndustry.PostRegister(engine); -} diff --git a/src/script/api/game/game_industrylist.hpp.sq b/src/script/api/game/game_industrylist.hpp.sq deleted file mode 100644 index 71ea5633b0..0000000000 --- a/src/script/api/game/game_industrylist.hpp.sq +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrylist.hpp" -#include "../template/template_industrylist.hpp.sq" - - -template <> const char *GetClassName() { return "GSIndustryList"; } - -void SQGSIndustryList_Register(Squirrel *engine) -{ - DefSQClass SQGSIndustryList("GSIndustryList"); - SQGSIndustryList.PreRegister(engine, "GSList"); - SQGSIndustryList.AddConstructor(engine, "x"); - - SQGSIndustryList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSIndustryList_CargoAccepting"; } - -void SQGSIndustryList_CargoAccepting_Register(Squirrel *engine) -{ - DefSQClass SQGSIndustryList_CargoAccepting("GSIndustryList_CargoAccepting"); - SQGSIndustryList_CargoAccepting.PreRegister(engine, "GSList"); - SQGSIndustryList_CargoAccepting.AddConstructor(engine, "xi"); - - SQGSIndustryList_CargoAccepting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSIndustryList_CargoProducing"; } - -void SQGSIndustryList_CargoProducing_Register(Squirrel *engine) -{ - DefSQClass SQGSIndustryList_CargoProducing("GSIndustryList_CargoProducing"); - SQGSIndustryList_CargoProducing.PreRegister(engine, "GSList"); - SQGSIndustryList_CargoProducing.AddConstructor(engine, "xi"); - - SQGSIndustryList_CargoProducing.PostRegister(engine); -} diff --git a/src/script/api/game/game_industrytype.hpp.sq b/src/script/api/game/game_industrytype.hpp.sq deleted file mode 100644 index 67b9a2470c..0000000000 --- a/src/script/api/game/game_industrytype.hpp.sq +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrytype.hpp" -#include "../template/template_industrytype.hpp.sq" - - -template <> const char *GetClassName() { return "GSIndustryType"; } - -void SQGSIndustryType_Register(Squirrel *engine) -{ - DefSQClass SQGSIndustryType("GSIndustryType"); - SQGSIndustryType.PreRegister(engine); - SQGSIndustryType.AddConstructor(engine, "x"); - - SQGSIndustryType.DefSQConst(engine, ScriptIndustryType::INDUSTRYTYPE_UNKNOWN, "INDUSTRYTYPE_UNKNOWN"); - SQGSIndustryType.DefSQConst(engine, ScriptIndustryType::INDUSTRYTYPE_TOWN, "INDUSTRYTYPE_TOWN"); - - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsValidIndustryType, "IsValidIndustryType", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetName, "GetName", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetProducedCargo, "GetProducedCargo", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetAcceptedCargo, "GetAcceptedCargo", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsRawIndustry, "IsRawIndustry", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsProcessingIndustry, "IsProcessingIndustry", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::ProductionCanIncrease, "ProductionCanIncrease", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetConstructionCost, "GetConstructionCost", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::CanBuildIndustry, "CanBuildIndustry", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::CanProspectIndustry, "CanProspectIndustry", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::BuildIndustry, "BuildIndustry", 3, ".ii"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::ProspectIndustry, "ProspectIndustry", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsBuiltOnWater, "IsBuiltOnWater", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::HasHeliport, "HasHeliport", 2, ".i"); - SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::HasDock, "HasDock", 2, ".i"); - - SQGSIndustryType.PostRegister(engine); -} diff --git a/src/script/api/game/game_industrytypelist.hpp.sq b/src/script/api/game/game_industrytypelist.hpp.sq deleted file mode 100644 index 365bba6e89..0000000000 --- a/src/script/api/game/game_industrytypelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrytypelist.hpp" -#include "../template/template_industrytypelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSIndustryTypeList"; } - -void SQGSIndustryTypeList_Register(Squirrel *engine) -{ - DefSQClass SQGSIndustryTypeList("GSIndustryTypeList"); - SQGSIndustryTypeList.PreRegister(engine, "GSList"); - SQGSIndustryTypeList.AddConstructor(engine, "x"); - - SQGSIndustryTypeList.PostRegister(engine); -} diff --git a/src/script/api/game/game_infrastructure.hpp.sq b/src/script/api/game/game_infrastructure.hpp.sq deleted file mode 100644 index d241a8223e..0000000000 --- a/src/script/api/game/game_infrastructure.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_infrastructure.hpp" -#include "../template/template_infrastructure.hpp.sq" - - -template <> const char *GetClassName() { return "GSInfrastructure"; } - -void SQGSInfrastructure_Register(Squirrel *engine) -{ - DefSQClass SQGSInfrastructure("GSInfrastructure"); - SQGSInfrastructure.PreRegister(engine); - SQGSInfrastructure.AddConstructor(engine, "x"); - - SQGSInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_RAIL, "INFRASTRUCTURE_RAIL"); - SQGSInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_SIGNALS, "INFRASTRUCTURE_SIGNALS"); - SQGSInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_ROAD, "INFRASTRUCTURE_ROAD"); - SQGSInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_CANAL, "INFRASTRUCTURE_CANAL"); - SQGSInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_STATION, "INFRASTRUCTURE_STATION"); - SQGSInfrastructure.DefSQConst(engine, ScriptInfrastructure::INFRASTRUCTURE_AIRPORT, "INFRASTRUCTURE_AIRPORT"); - - SQGSInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetRailPieceCount, "GetRailPieceCount", 3, ".ii"); - SQGSInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetRoadPieceCount, "GetRoadPieceCount", 3, ".ii"); - SQGSInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetInfrastructurePieceCount, "GetInfrastructurePieceCount", 3, ".ii"); - SQGSInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetMonthlyRailCosts, "GetMonthlyRailCosts", 3, ".ii"); - SQGSInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetMonthlyRoadCosts, "GetMonthlyRoadCosts", 3, ".ii"); - SQGSInfrastructure.DefSQStaticMethod(engine, &ScriptInfrastructure::GetMonthlyInfrastructureCosts, "GetMonthlyInfrastructureCosts", 3, ".ii"); - - SQGSInfrastructure.PostRegister(engine); -} diff --git a/src/script/api/game/game_list.hpp.sq b/src/script/api/game/game_list.hpp.sq deleted file mode 100644 index 9b9e614ced..0000000000 --- a/src/script/api/game/game_list.hpp.sq +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_list.hpp" -#include "../template/template_list.hpp.sq" - - -template <> const char *GetClassName() { return "GSList"; } - -void SQGSList_Register(Squirrel *engine) -{ - DefSQClass SQGSList("GSList"); - SQGSList.PreRegister(engine); - SQGSList.AddConstructor(engine, "x"); - - SQGSList.DefSQConst(engine, ScriptList::SORT_BY_VALUE, "SORT_BY_VALUE"); - SQGSList.DefSQConst(engine, ScriptList::SORT_BY_ITEM, "SORT_BY_ITEM"); - - SQGSList.DefSQConst(engine, ScriptList::SORT_ASCENDING, "SORT_ASCENDING"); - SQGSList.DefSQConst(engine, ScriptList::SORT_DESCENDING, "SORT_DESCENDING"); - - SQGSList.DefSQMethod(engine, &ScriptList::AddItem, "AddItem", 3, "xii"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveItem, "RemoveItem", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::Clear, "Clear", 1, "x"); - SQGSList.DefSQMethod(engine, &ScriptList::HasItem, "HasItem", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::Begin, "Begin", 1, "x"); - SQGSList.DefSQMethod(engine, &ScriptList::Next, "Next", 1, "x"); - SQGSList.DefSQMethod(engine, &ScriptList::IsEmpty, "IsEmpty", 1, "x"); - SQGSList.DefSQMethod(engine, &ScriptList::IsEnd, "IsEnd", 1, "x"); - SQGSList.DefSQMethod(engine, &ScriptList::Count, "Count", 1, "x"); - SQGSList.DefSQMethod(engine, &ScriptList::GetValue, "GetValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::SetValue, "SetValue", 3, "xii"); - SQGSList.DefSQMethod(engine, &ScriptList::Sort, "Sort", 3, "xib"); - SQGSList.DefSQMethod(engine, &ScriptList::AddList, "AddList", 2, "xx"); - SQGSList.DefSQMethod(engine, &ScriptList::SwapList, "SwapList", 2, "xx"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveAboveValue, "RemoveAboveValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveBelowValue, "RemoveBelowValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveBetweenValue, "RemoveBetweenValue", 3, "xii"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveValue, "RemoveValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveTop, "RemoveTop", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveBottom, "RemoveBottom", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::RemoveList, "RemoveList", 2, "xx"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepAboveValue, "KeepAboveValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepBelowValue, "KeepBelowValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepBetweenValue, "KeepBetweenValue", 3, "xii"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepValue, "KeepValue", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepTop, "KeepTop", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepBottom, "KeepBottom", 2, "xi"); - SQGSList.DefSQMethod(engine, &ScriptList::KeepList, "KeepList", 2, "xx"); - SQGSList.DefSQAdvancedMethod(engine, &ScriptList::_get, "_get"); - SQGSList.DefSQAdvancedMethod(engine, &ScriptList::_set, "_set"); - SQGSList.DefSQAdvancedMethod(engine, &ScriptList::_nexti, "_nexti"); - SQGSList.DefSQAdvancedMethod(engine, &ScriptList::Valuate, "Valuate"); - - SQGSList.PostRegister(engine); -} diff --git a/src/script/api/game/game_log.hpp.sq b/src/script/api/game/game_log.hpp.sq deleted file mode 100644 index c2c387489b..0000000000 --- a/src/script/api/game/game_log.hpp.sq +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_log.hpp" -#include "../template/template_log.hpp.sq" - - -template <> const char *GetClassName() { return "GSLog"; } - -void SQGSLog_Register(Squirrel *engine) -{ - DefSQClass SQGSLog("GSLog"); - SQGSLog.PreRegister(engine); - SQGSLog.AddConstructor(engine, "x"); - - SQGSLog.DefSQStaticMethod(engine, &ScriptLog::Info, "Info", 2, ".."); - SQGSLog.DefSQStaticMethod(engine, &ScriptLog::Warning, "Warning", 2, ".."); - SQGSLog.DefSQStaticMethod(engine, &ScriptLog::Error, "Error", 2, ".."); - - SQGSLog.PostRegister(engine); -} diff --git a/src/script/api/game/game_map.hpp.sq b/src/script/api/game/game_map.hpp.sq deleted file mode 100644 index 139b2e4d6e..0000000000 --- a/src/script/api/game/game_map.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_map.hpp" -#include "../template/template_map.hpp.sq" - - -template <> const char *GetClassName() { return "GSMap"; } - -void SQGSMap_Register(Squirrel *engine) -{ - DefSQClass SQGSMap("GSMap"); - SQGSMap.PreRegister(engine); - SQGSMap.AddConstructor(engine, "x"); - - SQGSMap.DefSQConst(engine, ScriptMap::TILE_INVALID, "TILE_INVALID"); - - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::IsValidTile, "IsValidTile", 2, ".i"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::GetMapSize, "GetMapSize", 1, "."); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::GetMapSizeX, "GetMapSizeX", 1, "."); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::GetMapSizeY, "GetMapSizeY", 1, "."); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::GetTileX, "GetTileX", 2, ".i"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::GetTileY, "GetTileY", 2, ".i"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::GetTileIndex, "GetTileIndex", 3, ".ii"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::DistanceManhattan, "DistanceManhattan", 3, ".ii"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::DistanceMax, "DistanceMax", 3, ".ii"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::DistanceSquare, "DistanceSquare", 3, ".ii"); - SQGSMap.DefSQStaticMethod(engine, &ScriptMap::DistanceFromEdge, "DistanceFromEdge", 2, ".i"); - - SQGSMap.PostRegister(engine); -} diff --git a/src/script/api/game/game_marine.hpp.sq b/src/script/api/game/game_marine.hpp.sq deleted file mode 100644 index 4029f78db1..0000000000 --- a/src/script/api/game/game_marine.hpp.sq +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_marine.hpp" -#include "../template/template_marine.hpp.sq" - - -template <> const char *GetClassName() { return "GSMarine"; } - -void SQGSMarine_Register(Squirrel *engine) -{ - DefSQClass SQGSMarine("GSMarine"); - SQGSMarine.PreRegister(engine); - SQGSMarine.AddConstructor(engine, "x"); - - SQGSMarine.DefSQConst(engine, ScriptMarine::ERR_MARINE_BASE, "ERR_MARINE_BASE"); - SQGSMarine.DefSQConst(engine, ScriptMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER, "ERR_MARINE_MUST_BE_BUILT_ON_WATER"); - SQGSMarine.DefSQConst(engine, ScriptMarine::BT_DOCK, "BT_DOCK"); - SQGSMarine.DefSQConst(engine, ScriptMarine::BT_DEPOT, "BT_DEPOT"); - SQGSMarine.DefSQConst(engine, ScriptMarine::BT_BUOY, "BT_BUOY"); - - ScriptError::RegisterErrorMap(STR_ERROR_MUST_BE_BUILT_ON_WATER, ScriptMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER); - - ScriptError::RegisterErrorMapString(ScriptMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER, "ERR_MARINE_MUST_BE_BUILT_ON_WATER"); - - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::IsWaterDepotTile, "IsWaterDepotTile", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::IsDockTile, "IsDockTile", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::IsBuoyTile, "IsBuoyTile", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::IsLockTile, "IsLockTile", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::IsCanalTile, "IsCanalTile", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::AreWaterTilesConnected, "AreWaterTilesConnected", 3, ".ii"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildWaterDepot, "BuildWaterDepot", 3, ".ii"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildDock, "BuildDock", 3, ".ii"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildBuoy, "BuildBuoy", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildLock, "BuildLock", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::BuildCanal, "BuildCanal", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveWaterDepot, "RemoveWaterDepot", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveDock, "RemoveDock", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveBuoy, "RemoveBuoy", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveLock, "RemoveLock", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::RemoveCanal, "RemoveCanal", 2, ".i"); - SQGSMarine.DefSQStaticMethod(engine, &ScriptMarine::GetBuildCost, "GetBuildCost", 2, ".i"); - - SQGSMarine.PostRegister(engine); -} diff --git a/src/script/api/game/game_news.hpp.sq b/src/script/api/game/game_news.hpp.sq deleted file mode 100644 index 5a3c7f9739..0000000000 --- a/src/script/api/game/game_news.hpp.sq +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_news.hpp" -#include "../template/template_news.hpp.sq" - - -template <> const char *GetClassName() { return "GSNews"; } - -void SQGSNews_Register(Squirrel *engine) -{ - DefSQClass SQGSNews("GSNews"); - SQGSNews.PreRegister(engine); - SQGSNews.AddConstructor(engine, "x"); - - SQGSNews.DefSQConst(engine, ScriptNews::NT_ACCIDENT, "NT_ACCIDENT"); - SQGSNews.DefSQConst(engine, ScriptNews::NT_COMPANY_INFO, "NT_COMPANY_INFO"); - SQGSNews.DefSQConst(engine, ScriptNews::NT_ECONOMY, "NT_ECONOMY"); - SQGSNews.DefSQConst(engine, ScriptNews::NT_ADVICE, "NT_ADVICE"); - SQGSNews.DefSQConst(engine, ScriptNews::NT_ACCEPTANCE, "NT_ACCEPTANCE"); - SQGSNews.DefSQConst(engine, ScriptNews::NT_SUBSIDIES, "NT_SUBSIDIES"); - SQGSNews.DefSQConst(engine, ScriptNews::NT_GENERAL, "NT_GENERAL"); - SQGSNews.DefSQConst(engine, ScriptNews::NR_NONE, "NR_NONE"); - SQGSNews.DefSQConst(engine, ScriptNews::NR_TILE, "NR_TILE"); - SQGSNews.DefSQConst(engine, ScriptNews::NR_STATION, "NR_STATION"); - SQGSNews.DefSQConst(engine, ScriptNews::NR_INDUSTRY, "NR_INDUSTRY"); - SQGSNews.DefSQConst(engine, ScriptNews::NR_TOWN, "NR_TOWN"); - - SQGSNews.DefSQStaticMethod(engine, &ScriptNews::Create, "Create", 6, ".i.iii"); - - SQGSNews.PostRegister(engine); -} diff --git a/src/script/api/game/game_order.hpp.sq b/src/script/api/game/game_order.hpp.sq deleted file mode 100644 index 77a44acde6..0000000000 --- a/src/script/api/game/game_order.hpp.sq +++ /dev/null @@ -1,99 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_order.hpp" -#include "../template/template_order.hpp.sq" - - -template <> const char *GetClassName() { return "GSOrder"; } - -void SQGSOrder_Register(Squirrel *engine) -{ - DefSQClass SQGSOrder("GSOrder"); - SQGSOrder.PreRegister(engine); - SQGSOrder.AddConstructor(engine, "x"); - - SQGSOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_BASE, "ERR_ORDER_BASE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_TOO_MANY, "ERR_ORDER_TOO_MANY"); - SQGSOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, "ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION"); - SQGSOrder.DefSQConst(engine, ScriptOrder::ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE, "ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_NONE, "OF_NONE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_NON_STOP_INTERMEDIATE, "OF_NON_STOP_INTERMEDIATE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_NON_STOP_DESTINATION, "OF_NON_STOP_DESTINATION"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_UNLOAD, "OF_UNLOAD"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_TRANSFER, "OF_TRANSFER"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_NO_UNLOAD, "OF_NO_UNLOAD"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_FULL_LOAD, "OF_FULL_LOAD"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_FULL_LOAD_ANY, "OF_FULL_LOAD_ANY"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_NO_LOAD, "OF_NO_LOAD"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_SERVICE_IF_NEEDED, "OF_SERVICE_IF_NEEDED"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_STOP_IN_DEPOT, "OF_STOP_IN_DEPOT"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_GOTO_NEAREST_DEPOT, "OF_GOTO_NEAREST_DEPOT"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_NON_STOP_FLAGS, "OF_NON_STOP_FLAGS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_UNLOAD_FLAGS, "OF_UNLOAD_FLAGS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_LOAD_FLAGS, "OF_LOAD_FLAGS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_DEPOT_FLAGS, "OF_DEPOT_FLAGS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OF_INVALID, "OF_INVALID"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_LOAD_PERCENTAGE, "OC_LOAD_PERCENTAGE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_RELIABILITY, "OC_RELIABILITY"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_MAX_RELIABILITY, "OC_MAX_RELIABILITY"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_MAX_SPEED, "OC_MAX_SPEED"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_AGE, "OC_AGE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_REQUIRES_SERVICE, "OC_REQUIRES_SERVICE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_UNCONDITIONALLY, "OC_UNCONDITIONALLY"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_REMAINING_LIFETIME, "OC_REMAINING_LIFETIME"); - SQGSOrder.DefSQConst(engine, ScriptOrder::OC_INVALID, "OC_INVALID"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_EQUALS, "CF_EQUALS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_NOT_EQUALS, "CF_NOT_EQUALS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_LESS_THAN, "CF_LESS_THAN"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_LESS_EQUALS, "CF_LESS_EQUALS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_MORE_THAN, "CF_MORE_THAN"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_MORE_EQUALS, "CF_MORE_EQUALS"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_IS_TRUE, "CF_IS_TRUE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_IS_FALSE, "CF_IS_FALSE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::CF_INVALID, "CF_INVALID"); - SQGSOrder.DefSQConst(engine, ScriptOrder::ORDER_CURRENT, "ORDER_CURRENT"); - SQGSOrder.DefSQConst(engine, ScriptOrder::ORDER_INVALID, "ORDER_INVALID"); - SQGSOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_NEAR, "STOPLOCATION_NEAR"); - SQGSOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_MIDDLE, "STOPLOCATION_MIDDLE"); - SQGSOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_FAR, "STOPLOCATION_FAR"); - SQGSOrder.DefSQConst(engine, ScriptOrder::STOPLOCATION_INVALID, "STOPLOCATION_INVALID"); - - ScriptError::RegisterErrorMap(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS, ScriptOrder::ERR_ORDER_TOO_MANY); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION, ScriptOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE, ScriptOrder::ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE); - - ScriptError::RegisterErrorMapString(ScriptOrder::ERR_ORDER_TOO_MANY, "ERR_ORDER_TOO_MANY"); - ScriptError::RegisterErrorMapString(ScriptOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, "ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION"); - ScriptError::RegisterErrorMapString(ScriptOrder::ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE, "ERR_ORDER_AIRCRAFT_NOT_ENOUGH_RANGE"); - - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsValidVehicleOrder, "IsValidVehicleOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsGotoStationOrder, "IsGotoStationOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsGotoDepotOrder, "IsGotoDepotOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsGotoWaypointOrder, "IsGotoWaypointOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsConditionalOrder, "IsConditionalOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsVoidOrder, "IsVoidOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsRefitOrder, "IsRefitOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsCurrentOrderPartOfOrderList, "IsCurrentOrderPartOfOrderList", 2, ".i"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::ResolveOrderPosition, "ResolveOrderPosition", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::AreOrderFlagsValid, "AreOrderFlagsValid", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::IsValidConditionalOrder, "IsValidConditionalOrder", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCount, "GetOrderCount", 2, ".i"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderDestination, "GetOrderDestination", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderFlags, "GetOrderFlags", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderJumpTo, "GetOrderJumpTo", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCondition, "GetOrderCondition", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCompareFunction, "GetOrderCompareFunction", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderCompareValue, "GetOrderCompareValue", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetStopLocation, "GetStopLocation", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderRefit, "GetOrderRefit", 3, ".ii"); - SQGSOrder.DefSQStaticMethod(engine, &ScriptOrder::GetOrderDistance, "GetOrderDistance", 4, ".iii"); - - SQGSOrder.PostRegister(engine); -} diff --git a/src/script/api/game/game_priorityqueue.hpp.sq b/src/script/api/game/game_priorityqueue.hpp.sq deleted file mode 100644 index fade5e2a1e..0000000000 --- a/src/script/api/game/game_priorityqueue.hpp.sq +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_priorityqueue.hpp" -#include "../template/template_priorityqueue.hpp.sq" - - -template <> const char *GetClassName() { return "GSPriorityQueue"; } - -void SQGSPriorityQueue_Register(Squirrel *engine) -{ - DefSQClass SQGSPriorityQueue("GSPriorityQueue"); - SQGSPriorityQueue.PreRegister(engine); - SQGSPriorityQueue.AddConstructor(engine, "x"); - - SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Insert, "Insert"); - SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Pop, "Pop"); - SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Peek, "Peek"); - SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Exists, "Exists"); - SQGSPriorityQueue.DefSQAdvancedMethod(engine, &ScriptPriorityQueue::Clear, "Clear"); - SQGSPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::IsEmpty, "IsEmpty", 1, "x"); - SQGSPriorityQueue.DefSQMethod(engine, &ScriptPriorityQueue::Count, "Count", 1, "x"); - - SQGSPriorityQueue.PostRegister(engine); -} diff --git a/src/script/api/game/game_rail.hpp.sq b/src/script/api/game/game_rail.hpp.sq deleted file mode 100644 index cd32d5d254..0000000000 --- a/src/script/api/game/game_rail.hpp.sq +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_rail.hpp" -#include "../template/template_rail.hpp.sq" - - -template <> const char *GetClassName() { return "GSRail"; } - -void SQGSRail_Register(Squirrel *engine) -{ - DefSQClass SQGSRail("GSRail"); - SQGSRail.PreRegister(engine); - SQGSRail.AddConstructor(engine, "x"); - - SQGSRail.DefSQConst(engine, ScriptRail::ERR_RAIL_BASE, "ERR_RAIL_BASE"); - SQGSRail.DefSQConst(engine, ScriptRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD"); - SQGSRail.DefSQConst(engine, ScriptRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK"); - SQGSRail.DefSQConst(engine, ScriptRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTYPE_INVALID, "RAILTYPE_INVALID"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_NE_SW, "RAILTRACK_NE_SW"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_NW_SE, "RAILTRACK_NW_SE"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_NW_NE, "RAILTRACK_NW_NE"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_SW_SE, "RAILTRACK_SW_SE"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_NW_SW, "RAILTRACK_NW_SW"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_NE_SE, "RAILTRACK_NE_SE"); - SQGSRail.DefSQConst(engine, ScriptRail::RAILTRACK_INVALID, "RAILTRACK_INVALID"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_NORMAL, "SIGNALTYPE_NORMAL"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_ENTRY, "SIGNALTYPE_ENTRY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_EXIT, "SIGNALTYPE_EXIT"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_COMBO, "SIGNALTYPE_COMBO"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_PBS, "SIGNALTYPE_PBS"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_PBS_ONEWAY, "SIGNALTYPE_PBS_ONEWAY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_TWOWAY, "SIGNALTYPE_TWOWAY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_NORMAL_TWOWAY, "SIGNALTYPE_NORMAL_TWOWAY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_ENTRY_TWOWAY, "SIGNALTYPE_ENTRY_TWOWAY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_EXIT_TWOWAY, "SIGNALTYPE_EXIT_TWOWAY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_COMBO_TWOWAY, "SIGNALTYPE_COMBO_TWOWAY"); - SQGSRail.DefSQConst(engine, ScriptRail::SIGNALTYPE_NONE, "SIGNALTYPE_NONE"); - SQGSRail.DefSQConst(engine, ScriptRail::BT_TRACK, "BT_TRACK"); - SQGSRail.DefSQConst(engine, ScriptRail::BT_SIGNAL, "BT_SIGNAL"); - SQGSRail.DefSQConst(engine, ScriptRail::BT_DEPOT, "BT_DEPOT"); - SQGSRail.DefSQConst(engine, ScriptRail::BT_STATION, "BT_STATION"); - SQGSRail.DefSQConst(engine, ScriptRail::BT_WAYPOINT, "BT_WAYPOINT"); - - ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_ON_ONEWAY_ROAD, ScriptRail::ERR_CROSSING_ON_ONEWAY_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_THERE_IS_NO_RAILROAD_TRACK, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_THERE_ARE_NO_SIGNALS, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_THERE_IS_NO_STATION, ScriptRail::ERR_UNSUITABLE_TRACK); - ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED_RAIL, ScriptRail::ERR_RAILTYPE_DISALLOWS_CROSSING); - - ScriptError::RegisterErrorMapString(ScriptRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD"); - ScriptError::RegisterErrorMapString(ScriptRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK"); - ScriptError::RegisterErrorMapString(ScriptRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); - - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetName, "GetName", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::IsRailTile, "IsRailTile", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::IsLevelCrossingTile, "IsLevelCrossingTile", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::IsRailDepotTile, "IsRailDepotTile", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::IsRailStationTile, "IsRailStationTile", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::IsRailWaypointTile, "IsRailWaypointTile", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::IsRailTypeAvailable, "IsRailTypeAvailable", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetCurrentRailType, "GetCurrentRailType", 1, "."); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::SetCurrentRailType, "SetCurrentRailType", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::TrainCanRunOnRail, "TrainCanRunOnRail", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::TrainHasPowerOnRail, "TrainHasPowerOnRail", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetRailType, "GetRailType", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::ConvertRailType, "ConvertRailType", 4, ".iii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetRailDepotFrontTile, "GetRailDepotFrontTile", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetRailStationDirection, "GetRailStationDirection", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailDepot, "BuildRailDepot", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailStation, "BuildRailStation", 6, ".iiiii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildNewGRFRailStation, "BuildNewGRFRailStation", 11, ".iiiiiiiiib"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailWaypoint, "BuildRailWaypoint", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRailWaypointTileRectangle, "RemoveRailWaypointTileRectangle", 4, ".iib"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRailStationTileRectangle, "RemoveRailStationTileRectangle", 4, ".iib"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetRailTracks, "GetRailTracks", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildRailTrack, "BuildRailTrack", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRailTrack, "RemoveRailTrack", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::AreTilesConnected, "AreTilesConnected", 4, ".iii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildRail, "BuildRail", 4, ".iii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::RemoveRail, "RemoveRail", 4, ".iii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetSignalType, "GetSignalType", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::BuildSignal, "BuildSignal", 4, ".iii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::RemoveSignal, "RemoveSignal", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetBuildCost, "GetBuildCost", 3, ".ii"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQGSRail.DefSQStaticMethod(engine, &ScriptRail::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); - - SQGSRail.PostRegister(engine); -} diff --git a/src/script/api/game/game_railtypelist.hpp.sq b/src/script/api/game/game_railtypelist.hpp.sq deleted file mode 100644 index b829724bb5..0000000000 --- a/src/script/api/game/game_railtypelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_railtypelist.hpp" -#include "../template/template_railtypelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSRailTypeList"; } - -void SQGSRailTypeList_Register(Squirrel *engine) -{ - DefSQClass SQGSRailTypeList("GSRailTypeList"); - SQGSRailTypeList.PreRegister(engine, "GSList"); - SQGSRailTypeList.AddConstructor(engine, "x"); - - SQGSRailTypeList.PostRegister(engine); -} diff --git a/src/script/api/game/game_road.hpp.sq b/src/script/api/game/game_road.hpp.sq deleted file mode 100644 index 4398b21df4..0000000000 --- a/src/script/api/game/game_road.hpp.sq +++ /dev/null @@ -1,93 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_road.hpp" -#include "../template/template_road.hpp.sq" - - -template <> const char *GetClassName() { return "GSRoad"; } - -void SQGSRoad_Register(Squirrel *engine) -{ - DefSQClass SQGSRoad("GSRoad"); - SQGSRoad.PreRegister(engine); - SQGSRoad.AddConstructor(engine, "x"); - - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_BASE, "ERR_ROAD_BASE"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING, "ERR_ROADTYPE_DISALLOWS_CROSSING"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ERR_UNSUITABLE_ROAD, "ERR_UNSUITABLE_ROAD"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADTYPE_ROAD, "ROADTYPE_ROAD"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADTYPE_TRAM, "ROADTYPE_TRAM"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADTYPE_INVALID, "ROADTYPE_INVALID"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADTRAMTYPES_ROAD, "ROADTRAMTYPES_ROAD"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADTRAMTYPES_TRAM, "ROADTRAMTYPES_TRAM"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADVEHTYPE_BUS, "ROADVEHTYPE_BUS"); - SQGSRoad.DefSQConst(engine, ScriptRoad::ROADVEHTYPE_TRUCK, "ROADVEHTYPE_TRUCK"); - SQGSRoad.DefSQConst(engine, ScriptRoad::BT_ROAD, "BT_ROAD"); - SQGSRoad.DefSQConst(engine, ScriptRoad::BT_DEPOT, "BT_DEPOT"); - SQGSRoad.DefSQConst(engine, ScriptRoad::BT_BUS_STOP, "BT_BUS_STOP"); - SQGSRoad.DefSQConst(engine, ScriptRoad::BT_TRUCK_STOP, "BT_TRUCK_STOP"); - - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_WORKS_IN_PROGRESS, ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS); - ScriptError::RegisterErrorMap(STR_ERROR_DRIVE_THROUGH_DIRECTION, ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION); - ScriptError::RegisterErrorMap(STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD, ScriptRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION, ScriptRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS); - ScriptError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED_ROAD, ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING); - ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_ROAD, ScriptRoad::ERR_UNSUITABLE_ROAD); - ScriptError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_TRAMWAY, ScriptRoad::ERR_UNSUITABLE_ROAD); - - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_ROADTYPE_DISALLOWS_CROSSING, "ERR_ROADTYPE_DISALLOWS_CROSSING"); - ScriptError::RegisterErrorMapString(ScriptRoad::ERR_UNSUITABLE_ROAD, "ERR_UNSUITABLE_ROAD"); - - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetName, "GetName", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadVehicleTypeForCargo, "GetRoadVehicleTypeForCargo", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadTile, "IsRoadTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadDepotTile, "IsRoadDepotTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadStationTile, "IsRoadStationTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::IsDriveThroughRoadStationTile, "IsDriveThroughRoadStationTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::IsRoadTypeAvailable, "IsRoadTypeAvailable", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetCurrentRoadType, "GetCurrentRoadType", 1, "."); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::SetCurrentRoadType, "SetCurrentRoadType", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RoadVehCanRunOnRoad, "RoadVehCanRunOnRoad", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RoadVehHasPowerOnRoad, "RoadVehHasPowerOnRoad", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::ConvertRoadType, "ConvertRoadType", 4, ".iii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::HasRoadType, "HasRoadType", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::AreRoadTilesConnected, "AreRoadTilesConnected", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::CanBuildConnectedRoadParts, "CanBuildConnectedRoadParts", 5, ".iaii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::CanBuildConnectedRoadPartsHere, "CanBuildConnectedRoadPartsHere", 4, ".iii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetNeighbourRoadCount, "GetNeighbourRoadCount", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadDepotFrontTile, "GetRoadDepotFrontTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadStationFrontTile, "GetRoadStationFrontTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetDriveThroughBackTile, "GetDriveThroughBackTile", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoad, "BuildRoad", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildOneWayRoad, "BuildOneWayRoad", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoadFull, "BuildRoadFull", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildOneWayRoadFull, "BuildOneWayRoadFull", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoadDepot, "BuildRoadDepot", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildRoadStation, "BuildRoadStation", 5, ".iiii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::BuildDriveThroughRoadStation, "BuildDriveThroughRoadStation", 5, ".iiii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoad, "RemoveRoad", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadFull, "RemoveRoadFull", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadDepot, "RemoveRoadDepot", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::RemoveRoadStation, "RemoveRoadStation", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetBuildCost, "GetBuildCost", 3, ".ii"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetRoadTramType, "GetRoadTramType", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); - SQGSRoad.DefSQStaticMethod(engine, &ScriptRoad::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); - - SQGSRoad.PostRegister(engine); -} diff --git a/src/script/api/game/game_roadtypelist.hpp.sq b/src/script/api/game/game_roadtypelist.hpp.sq deleted file mode 100644 index 0c5a74c577..0000000000 --- a/src/script/api/game/game_roadtypelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_roadtypelist.hpp" -#include "../template/template_roadtypelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSRoadTypeList"; } - -void SQGSRoadTypeList_Register(Squirrel *engine) -{ - DefSQClass SQGSRoadTypeList("GSRoadTypeList"); - SQGSRoadTypeList.PreRegister(engine, "GSList"); - SQGSRoadTypeList.AddConstructor(engine, "xi"); - - SQGSRoadTypeList.PostRegister(engine); -} diff --git a/src/script/api/game/game_sign.hpp.sq b/src/script/api/game/game_sign.hpp.sq deleted file mode 100644 index 0ae48f1c00..0000000000 --- a/src/script/api/game/game_sign.hpp.sq +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_sign.hpp" -#include "../template/template_sign.hpp.sq" - - -template <> const char *GetClassName() { return "GSSign"; } - -void SQGSSign_Register(Squirrel *engine) -{ - DefSQClass SQGSSign("GSSign"); - SQGSSign.PreRegister(engine); - SQGSSign.AddConstructor(engine, "x"); - - SQGSSign.DefSQConst(engine, ScriptSign::ERR_SIGN_BASE, "ERR_SIGN_BASE"); - SQGSSign.DefSQConst(engine, ScriptSign::ERR_SIGN_TOO_MANY_SIGNS, "ERR_SIGN_TOO_MANY_SIGNS"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_SIGNS, ScriptSign::ERR_SIGN_TOO_MANY_SIGNS); - - ScriptError::RegisterErrorMapString(ScriptSign::ERR_SIGN_TOO_MANY_SIGNS, "ERR_SIGN_TOO_MANY_SIGNS"); - - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::IsValidSign, "IsValidSign", 2, ".i"); - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::SetName, "SetName", 3, ".i."); - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::GetName, "GetName", 2, ".i"); - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::GetOwner, "GetOwner", 2, ".i"); - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::GetLocation, "GetLocation", 2, ".i"); - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::BuildSign, "BuildSign", 3, ".i."); - SQGSSign.DefSQStaticMethod(engine, &ScriptSign::RemoveSign, "RemoveSign", 2, ".i"); - - SQGSSign.PostRegister(engine); -} diff --git a/src/script/api/game/game_signlist.hpp.sq b/src/script/api/game/game_signlist.hpp.sq deleted file mode 100644 index 15a9d6903d..0000000000 --- a/src/script/api/game/game_signlist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_signlist.hpp" -#include "../template/template_signlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSSignList"; } - -void SQGSSignList_Register(Squirrel *engine) -{ - DefSQClass SQGSSignList("GSSignList"); - SQGSSignList.PreRegister(engine, "GSList"); - SQGSSignList.AddConstructor(engine, "x"); - - SQGSSignList.PostRegister(engine); -} diff --git a/src/script/api/game/game_station.hpp.sq b/src/script/api/game/game_station.hpp.sq deleted file mode 100644 index 5c412850a4..0000000000 --- a/src/script/api/game/game_station.hpp.sq +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_station.hpp" -#include "../template/template_station.hpp.sq" - - -template <> const char *GetClassName() { return "GSStation"; } - -void SQGSStation_Register(Squirrel *engine) -{ - DefSQClass SQGSStation("GSStation"); - SQGSStation.PreRegister(engine, "GSBaseStation"); - SQGSStation.AddConstructor(engine, "x"); - - SQGSStation.DefSQConst(engine, ScriptStation::ERR_STATION_BASE, "ERR_STATION_BASE"); - SQGSStation.DefSQConst(engine, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION"); - SQGSStation.DefSQConst(engine, ScriptStation::ERR_STATION_TOO_MANY_STATIONS, "ERR_STATION_TOO_MANY_STATIONS"); - SQGSStation.DefSQConst(engine, ScriptStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, "ERR_STATION_TOO_MANY_STATIONS_IN_TOWN"); - SQGSStation.DefSQConst(engine, ScriptStation::STATION_TRAIN, "STATION_TRAIN"); - SQGSStation.DefSQConst(engine, ScriptStation::STATION_TRUCK_STOP, "STATION_TRUCK_STOP"); - SQGSStation.DefSQConst(engine, ScriptStation::STATION_BUS_STOP, "STATION_BUS_STOP"); - SQGSStation.DefSQConst(engine, ScriptStation::STATION_AIRPORT, "STATION_AIRPORT"); - SQGSStation.DefSQConst(engine, ScriptStation::STATION_DOCK, "STATION_DOCK"); - SQGSStation.DefSQConst(engine, ScriptStation::STATION_ANY, "STATION_ANY"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_STATIONS_LOADING, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_TRUCK_STOPS, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_BUS_STOPS, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); - ScriptError::RegisterErrorMap(STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT, ScriptStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN); - - ScriptError::RegisterErrorMapString(ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION"); - ScriptError::RegisterErrorMapString(ScriptStation::ERR_STATION_TOO_MANY_STATIONS, "ERR_STATION_TOO_MANY_STATIONS"); - ScriptError::RegisterErrorMapString(ScriptStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, "ERR_STATION_TOO_MANY_STATIONS_IN_TOWN"); - - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::IsValidStation, "IsValidStation", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetOwner, "GetOwner", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetStationID, "GetStationID", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaiting, "GetCargoWaiting", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaitingFrom, "GetCargoWaitingFrom", 4, ".iii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaitingVia, "GetCargoWaitingVia", 4, ".iii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoWaitingFromVia, "GetCargoWaitingFromVia", 5, ".iiii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlanned, "GetCargoPlanned", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlannedFrom, "GetCargoPlannedFrom", 4, ".iii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlannedVia, "GetCargoPlannedVia", 4, ".iii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoPlannedFromVia, "GetCargoPlannedFromVia", 5, ".iiii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::HasCargoRating, "HasCargoRating", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCargoRating, "GetCargoRating", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetCoverageRadius, "GetCoverageRadius", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetStationCoverageRadius, "GetStationCoverageRadius", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::HasStationType, "HasStationType", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::HasRoadType, "HasRoadType", 3, ".ii"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::GetNearestTown, "GetNearestTown", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::IsAirportClosed, "IsAirportClosed", 2, ".i"); - SQGSStation.DefSQStaticMethod(engine, &ScriptStation::OpenCloseAirport, "OpenCloseAirport", 2, ".i"); - - SQGSStation.PostRegister(engine); -} diff --git a/src/script/api/game/game_stationlist.hpp.sq b/src/script/api/game/game_stationlist.hpp.sq deleted file mode 100644 index e783778712..0000000000 --- a/src/script/api/game/game_stationlist.hpp.sq +++ /dev/null @@ -1,174 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_stationlist.hpp" -#include "../template/template_stationlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSStationList"; } - -void SQGSStationList_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList("GSStationList"); - SQGSStationList.PreRegister(engine, "GSList"); - SQGSStationList.AddConstructor(engine, "xi"); - - SQGSStationList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_Cargo"; } - -void SQGSStationList_Cargo_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_Cargo("GSStationList_Cargo"); - SQGSStationList_Cargo.PreRegister(engine, "GSList"); - SQGSStationList_Cargo.AddConstructor(engine, "xiiiii"); - - SQGSStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_BY_FROM, "CS_BY_FROM"); - SQGSStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_VIA_BY_FROM, "CS_VIA_BY_FROM"); - SQGSStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_BY_VIA, "CS_BY_VIA"); - SQGSStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CS_FROM_BY_VIA, "CS_FROM_BY_VIA"); - SQGSStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CM_WAITING, "CM_WAITING"); - SQGSStationList_Cargo.DefSQConst(engine, ScriptStationList_Cargo::CM_PLANNED, "CM_PLANNED"); - - SQGSStationList_Cargo.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoWaiting"; } - -void SQGSStationList_CargoWaiting_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoWaiting("GSStationList_CargoWaiting"); - SQGSStationList_CargoWaiting.PreRegister(engine, "GSStationList_Cargo"); - SQGSStationList_CargoWaiting.AddConstructor(engine, "xiiii"); - - SQGSStationList_CargoWaiting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoPlanned"; } - -void SQGSStationList_CargoPlanned_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoPlanned("GSStationList_CargoPlanned"); - SQGSStationList_CargoPlanned.PreRegister(engine, "GSStationList_Cargo"); - SQGSStationList_CargoPlanned.AddConstructor(engine, "xiiii"); - - SQGSStationList_CargoPlanned.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoWaitingByFrom"; } - -void SQGSStationList_CargoWaitingByFrom_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoWaitingByFrom("GSStationList_CargoWaitingByFrom"); - SQGSStationList_CargoWaitingByFrom.PreRegister(engine, "GSStationList_CargoWaiting"); - SQGSStationList_CargoWaitingByFrom.AddConstructor(engine, "xii"); - - SQGSStationList_CargoWaitingByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoWaitingViaByFrom"; } - -void SQGSStationList_CargoWaitingViaByFrom_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoWaitingViaByFrom("GSStationList_CargoWaitingViaByFrom"); - SQGSStationList_CargoWaitingViaByFrom.PreRegister(engine, "GSStationList_CargoWaiting"); - SQGSStationList_CargoWaitingViaByFrom.AddConstructor(engine, "xiii"); - - SQGSStationList_CargoWaitingViaByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoWaitingByVia"; } - -void SQGSStationList_CargoWaitingByVia_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoWaitingByVia("GSStationList_CargoWaitingByVia"); - SQGSStationList_CargoWaitingByVia.PreRegister(engine, "GSStationList_CargoWaiting"); - SQGSStationList_CargoWaitingByVia.AddConstructor(engine, "xii"); - - SQGSStationList_CargoWaitingByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoWaitingFromByVia"; } - -void SQGSStationList_CargoWaitingFromByVia_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoWaitingFromByVia("GSStationList_CargoWaitingFromByVia"); - SQGSStationList_CargoWaitingFromByVia.PreRegister(engine, "GSStationList_CargoWaiting"); - SQGSStationList_CargoWaitingFromByVia.AddConstructor(engine, "xiii"); - - SQGSStationList_CargoWaitingFromByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoPlannedByFrom"; } - -void SQGSStationList_CargoPlannedByFrom_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoPlannedByFrom("GSStationList_CargoPlannedByFrom"); - SQGSStationList_CargoPlannedByFrom.PreRegister(engine, "GSStationList_CargoPlanned"); - SQGSStationList_CargoPlannedByFrom.AddConstructor(engine, "xii"); - - SQGSStationList_CargoPlannedByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoPlannedViaByFrom"; } - -void SQGSStationList_CargoPlannedViaByFrom_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoPlannedViaByFrom("GSStationList_CargoPlannedViaByFrom"); - SQGSStationList_CargoPlannedViaByFrom.PreRegister(engine, "GSStationList_CargoPlanned"); - SQGSStationList_CargoPlannedViaByFrom.AddConstructor(engine, "xiii"); - - SQGSStationList_CargoPlannedViaByFrom.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoPlannedByVia"; } - -void SQGSStationList_CargoPlannedByVia_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoPlannedByVia("GSStationList_CargoPlannedByVia"); - SQGSStationList_CargoPlannedByVia.PreRegister(engine, "GSStationList_CargoPlanned"); - SQGSStationList_CargoPlannedByVia.AddConstructor(engine, "xii"); - - SQGSStationList_CargoPlannedByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_CargoPlannedFromByVia"; } - -void SQGSStationList_CargoPlannedFromByVia_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_CargoPlannedFromByVia("GSStationList_CargoPlannedFromByVia"); - SQGSStationList_CargoPlannedFromByVia.PreRegister(engine, "GSStationList_CargoPlanned"); - SQGSStationList_CargoPlannedFromByVia.AddConstructor(engine, "xiii"); - - SQGSStationList_CargoPlannedFromByVia.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSStationList_Vehicle"; } - -void SQGSStationList_Vehicle_Register(Squirrel *engine) -{ - DefSQClass SQGSStationList_Vehicle("GSStationList_Vehicle"); - SQGSStationList_Vehicle.PreRegister(engine, "GSList"); - SQGSStationList_Vehicle.AddConstructor(engine, "xi"); - - SQGSStationList_Vehicle.PostRegister(engine); -} diff --git a/src/script/api/game/game_story_page.hpp.sq b/src/script/api/game/game_story_page.hpp.sq deleted file mode 100644 index b9fbf60260..0000000000 --- a/src/script/api/game/game_story_page.hpp.sq +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_story_page.hpp" -#include "../template/template_story_page.hpp.sq" - - -template <> const char *GetClassName() { return "GSStoryPage"; } - -void SQGSStoryPage_Register(Squirrel *engine) -{ - DefSQClass SQGSStoryPage("GSStoryPage"); - SQGSStoryPage.PreRegister(engine); - SQGSStoryPage.AddConstructor(engine, "x"); - - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::STORY_PAGE_INVALID, "STORY_PAGE_INVALID"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::STORY_PAGE_ELEMENT_INVALID, "STORY_PAGE_ELEMENT_INVALID"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_TEXT, "SPET_TEXT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_LOCATION, "SPET_LOCATION"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_GOAL, "SPET_GOAL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_PUSH, "SPET_BUTTON_PUSH"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_TILE, "SPET_BUTTON_TILE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPET_BUTTON_VEHICLE, "SPET_BUTTON_VEHICLE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_NONE, "SPBF_NONE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_FLOAT_LEFT, "SPBF_FLOAT_LEFT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBF_FLOAT_RIGHT, "SPBF_FLOAT_RIGHT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MOUSE, "SPBC_MOUSE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ZZZ, "SPBC_ZZZ"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUOY, "SPBC_BUOY"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_QUERY, "SPBC_QUERY"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_HQ, "SPBC_HQ"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_SHIP_DEPOT, "SPBC_SHIP_DEPOT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_SIGN, "SPBC_SIGN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TREE, "SPBC_TREE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUY_LAND, "SPBC_BUY_LAND"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LEVEL_LAND, "SPBC_LEVEL_LAND"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TOWN, "SPBC_TOWN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_INDUSTRY, "SPBC_INDUSTRY"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROCKY_AREA, "SPBC_ROCKY_AREA"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DESERT, "SPBC_DESERT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TRANSMITTER, "SPBC_TRANSMITTER"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AIRPORT, "SPBC_AIRPORT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DOCK, "SPBC_DOCK"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CANAL, "SPBC_CANAL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LOCK, "SPBC_LOCK"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RIVER, "SPBC_RIVER"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AQUEDUCT, "SPBC_AQUEDUCT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BRIDGE, "SPBC_BRIDGE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAIL_STATION, "SPBC_RAIL_STATION"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_RAIL, "SPBC_TUNNEL_RAIL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_ELRAIL, "SPBC_TUNNEL_ELRAIL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_MONO, "SPBC_TUNNEL_MONO"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TUNNEL_MAGLEV, "SPBC_TUNNEL_MAGLEV"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTORAIL, "SPBC_AUTORAIL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOELRAIL, "SPBC_AUTOELRAIL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOMONO, "SPBC_AUTOMONO"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOMAGLEV, "SPBC_AUTOMAGLEV"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_WAYPOINT, "SPBC_WAYPOINT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAIL_DEPOT, "SPBC_RAIL_DEPOT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ELRAIL_DEPOT, "SPBC_ELRAIL_DEPOT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MONO_DEPOT, "SPBC_MONO_DEPOT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MAGLEV_DEPOT, "SPBC_MAGLEV_DEPOT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_RAIL, "SPBC_CONVERT_RAIL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_ELRAIL, "SPBC_CONVERT_ELRAIL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_MONO, "SPBC_CONVERT_MONO"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CONVERT_MAGLEV, "SPBC_CONVERT_MAGLEV"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOROAD, "SPBC_AUTOROAD"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_AUTOTRAM, "SPBC_AUTOTRAM"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROAD_DEPOT, "SPBC_ROAD_DEPOT"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUS_STATION, "SPBC_BUS_STATION"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_TRUCK_STATION, "SPBC_TRUCK_STATION"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ROAD_TUNNEL, "SPBC_ROAD_TUNNEL"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_TRAIN, "SPBC_CLONE_TRAIN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_ROADVEH, "SPBC_CLONE_ROADVEH"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_SHIP, "SPBC_CLONE_SHIP"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CLONE_AIRPLANE, "SPBC_CLONE_AIRPLANE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DEMOLISH, "SPBC_DEMOLISH"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LOWERLAND, "SPBC_LOWERLAND"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RAISELAND, "SPBC_RAISELAND"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PICKSTATION, "SPBC_PICKSTATION"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BUILDSIGNALS, "SPBC_BUILDSIGNALS"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DARK_BLUE, "SPBC_DARK_BLUE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PALE_GREEN, "SPBC_PALE_GREEN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PINK, "SPBC_PINK"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_YELLOW, "SPBC_YELLOW"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_RED, "SPBC_RED"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_LIGHT_BLUE, "SPBC_LIGHT_BLUE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_GREEN, "SPBC_GREEN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_DARK_GREEN, "SPBC_DARK_GREEN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BLUE, "SPBC_BLUE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_CREAM, "SPBC_CREAM"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_MAUVE, "SPBC_MAUVE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_PURPLE, "SPBC_PURPLE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_ORANGE, "SPBC_ORANGE"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_BROWN, "SPBC_BROWN"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_GREY, "SPBC_GREY"); - SQGSStoryPage.DefSQConst(engine, ScriptStoryPage::SPBC_WHITE, "SPBC_WHITE"); - - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPage, "IsValidStoryPage", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::IsValidStoryPageElement, "IsValidStoryPageElement", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::New, "New", 3, ".i."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::NewElement, "NewElement", 5, ".iii."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::UpdateElement, "UpdateElement", 4, ".ii."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSortValue, "GetPageSortValue", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSortValue, "GetPageElementSortValue", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetCompany, "GetCompany", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetDate, "GetDate", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetDate, "SetDate", 3, ".ii"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetTitle, "SetTitle", 3, ".i."); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Show, "Show", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Remove, "Remove", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::RemoveElement, "RemoveElement", 2, ".i"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakePushButtonReference, "MakePushButtonReference", 3, ".ii"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakeTileButtonReference, "MakeTileButtonReference", 4, ".iii"); - SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::MakeVehicleButtonReference, "MakeVehicleButtonReference", 5, ".iiii"); - - SQGSStoryPage.PostRegister(engine); -} diff --git a/src/script/api/game/game_storypageelementlist.hpp.sq b/src/script/api/game/game_storypageelementlist.hpp.sq deleted file mode 100644 index 3c70a196cb..0000000000 --- a/src/script/api/game/game_storypageelementlist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_storypageelementlist.hpp" -#include "../template/template_storypageelementlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSStoryPageElementList"; } - -void SQGSStoryPageElementList_Register(Squirrel *engine) -{ - DefSQClass SQGSStoryPageElementList("GSStoryPageElementList"); - SQGSStoryPageElementList.PreRegister(engine, "GSList"); - SQGSStoryPageElementList.AddConstructor(engine, "xi"); - - SQGSStoryPageElementList.PostRegister(engine); -} diff --git a/src/script/api/game/game_storypagelist.hpp.sq b/src/script/api/game/game_storypagelist.hpp.sq deleted file mode 100644 index b6577e3b8a..0000000000 --- a/src/script/api/game/game_storypagelist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_storypagelist.hpp" -#include "../template/template_storypagelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSStoryPageList"; } - -void SQGSStoryPageList_Register(Squirrel *engine) -{ - DefSQClass SQGSStoryPageList("GSStoryPageList"); - SQGSStoryPageList.PreRegister(engine, "GSList"); - SQGSStoryPageList.AddConstructor(engine, "xi"); - - SQGSStoryPageList.PostRegister(engine); -} diff --git a/src/script/api/game/game_subsidy.hpp.sq b/src/script/api/game/game_subsidy.hpp.sq deleted file mode 100644 index 8d2c4b200b..0000000000 --- a/src/script/api/game/game_subsidy.hpp.sq +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_subsidy.hpp" -#include "../template/template_subsidy.hpp.sq" - - -template <> const char *GetClassName() { return "GSSubsidy"; } - -void SQGSSubsidy_Register(Squirrel *engine) -{ - DefSQClass SQGSSubsidy("GSSubsidy"); - SQGSSubsidy.PreRegister(engine); - SQGSSubsidy.AddConstructor(engine, "x"); - - SQGSSubsidy.DefSQConst(engine, ScriptSubsidy::SPT_INDUSTRY, "SPT_INDUSTRY"); - SQGSSubsidy.DefSQConst(engine, ScriptSubsidy::SPT_TOWN, "SPT_TOWN"); - SQGSSubsidy.DefSQConst(engine, ScriptSubsidy::SPT_INVALID, "SPT_INVALID"); - - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::IsValidSubsidy, "IsValidSubsidy", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::IsAwarded, "IsAwarded", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::Create, "Create", 6, ".iiiii"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetAwardedTo, "GetAwardedTo", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetExpireDate, "GetExpireDate", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetCargoType, "GetCargoType", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetSourceType, "GetSourceType", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetSourceIndex, "GetSourceIndex", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetDestinationType, "GetDestinationType", 2, ".i"); - SQGSSubsidy.DefSQStaticMethod(engine, &ScriptSubsidy::GetDestinationIndex, "GetDestinationIndex", 2, ".i"); - - SQGSSubsidy.PostRegister(engine); -} diff --git a/src/script/api/game/game_subsidylist.hpp.sq b/src/script/api/game/game_subsidylist.hpp.sq deleted file mode 100644 index ff68ae3221..0000000000 --- a/src/script/api/game/game_subsidylist.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_subsidylist.hpp" -#include "../template/template_subsidylist.hpp.sq" - - -template <> const char *GetClassName() { return "GSSubsidyList"; } - -void SQGSSubsidyList_Register(Squirrel *engine) -{ - DefSQClass SQGSSubsidyList("GSSubsidyList"); - SQGSSubsidyList.PreRegister(engine, "GSList"); - SQGSSubsidyList.AddConstructor(engine, "x"); - - SQGSSubsidyList.PostRegister(engine); -} diff --git a/src/script/api/game/game_text.hpp.sq b/src/script/api/game/game_text.hpp.sq deleted file mode 100644 index b0563eaba7..0000000000 --- a/src/script/api/game/game_text.hpp.sq +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_text.hpp" -#include "../template/template_text.hpp.sq" - - -template <> const char *GetClassName() { return "GSText"; } - -void SQGSText_Register(Squirrel *engine) -{ - DefSQClass SQGSText("GSText"); - SQGSText.PreRegister(engine); - SQGSText.AddSQAdvancedConstructor(engine); - - SQGSText.DefSQConst(engine, ScriptText::SCRIPT_TEXT_MAX_PARAMETERS, "SCRIPT_TEXT_MAX_PARAMETERS"); - - SQGSText.DefSQAdvancedMethod(engine, &ScriptText::_set, "_set"); - SQGSText.DefSQAdvancedMethod(engine, &ScriptText::SetParam, "SetParam"); - SQGSText.DefSQAdvancedMethod(engine, &ScriptText::AddParam, "AddParam"); - - SQGSText.PostRegister(engine); -} diff --git a/src/script/api/game/game_tile.hpp.sq b/src/script/api/game/game_tile.hpp.sq deleted file mode 100644 index 694708c8eb..0000000000 --- a/src/script/api/game/game_tile.hpp.sq +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tile.hpp" -#include "../template/template_tile.hpp.sq" - - -template <> const char *GetClassName() { return "GSTile"; } - -void SQGSTile_Register(Squirrel *engine) -{ - DefSQClass SQGSTile("GSTile"); - SQGSTile.PreRegister(engine); - SQGSTile.AddConstructor(engine, "x"); - - SQGSTile.DefSQConst(engine, ScriptTile::ERR_TILE_BASE, "ERR_TILE_BASE"); - SQGSTile.DefSQConst(engine, ScriptTile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH"); - 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"); - SQGSTile.DefSQConst(engine, ScriptTile::CORNER_N, "CORNER_N"); - SQGSTile.DefSQConst(engine, ScriptTile::CORNER_INVALID, "CORNER_INVALID"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_FLAT, "SLOPE_FLAT"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_W, "SLOPE_W"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_S, "SLOPE_S"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_E, "SLOPE_E"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_N, "SLOPE_N"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_STEEP, "SLOPE_STEEP"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_NW, "SLOPE_NW"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_SW, "SLOPE_SW"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_SE, "SLOPE_SE"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_NE, "SLOPE_NE"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_EW, "SLOPE_EW"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_NS, "SLOPE_NS"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_ELEVATED, "SLOPE_ELEVATED"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_NWS, "SLOPE_NWS"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_WSE, "SLOPE_WSE"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_SEN, "SLOPE_SEN"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_ENW, "SLOPE_ENW"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_W, "SLOPE_STEEP_W"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_S, "SLOPE_STEEP_S"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_E, "SLOPE_STEEP_E"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_STEEP_N, "SLOPE_STEEP_N"); - SQGSTile.DefSQConst(engine, ScriptTile::SLOPE_INVALID, "SLOPE_INVALID"); - SQGSTile.DefSQConst(engine, ScriptTile::TRANSPORT_RAIL, "TRANSPORT_RAIL"); - SQGSTile.DefSQConst(engine, ScriptTile::TRANSPORT_ROAD, "TRANSPORT_ROAD"); - SQGSTile.DefSQConst(engine, ScriptTile::TRANSPORT_WATER, "TRANSPORT_WATER"); - SQGSTile.DefSQConst(engine, ScriptTile::TRANSPORT_AIR, "TRANSPORT_AIR"); - SQGSTile.DefSQConst(engine, ScriptTile::TRANSPORT_INVALID, "TRANSPORT_INVALID"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_FOUNDATION, "BT_FOUNDATION"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_TERRAFORM, "BT_TERRAFORM"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_BUILD_TREES, "BT_BUILD_TREES"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_GRASS, "BT_CLEAR_GRASS"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_ROUGH, "BT_CLEAR_ROUGH"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_ROCKY, "BT_CLEAR_ROCKY"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_FIELDS, "BT_CLEAR_FIELDS"); - SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_HOUSE, "BT_CLEAR_HOUSE"); - SQGSTile.DefSQConst(engine, ScriptTile::TERRAIN_NORMAL, "TERRAIN_NORMAL"); - SQGSTile.DefSQConst(engine, ScriptTile::TERRAIN_DESERT, "TERRAIN_DESERT"); - 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_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"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsWaterTile, "IsWaterTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsCoastTile, "IsCoastTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsStationTile, "IsStationTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsSteepSlope, "IsSteepSlope", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsHalftileSlope, "IsHalftileSlope", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::HasTreeOnTile, "HasTreeOnTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsFarmTile, "IsFarmTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsRockTile, "IsRockTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsRoughTile, "IsRoughTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsSnowTile, "IsSnowTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsDesertTile, "IsDesertTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetTerrainType, "GetTerrainType", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetSlope, "GetSlope", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetComplementSlope, "GetComplementSlope", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetMinHeight, "GetMinHeight", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetMaxHeight, "GetMaxHeight", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetCornerHeight, "GetCornerHeight", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetOwner, "GetOwner", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::HasTransportType, "HasTransportType", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetCargoAcceptance, "GetCargoAcceptance", 6, ".iiiii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetCargoProduction, "GetCargoProduction", 6, ".iiiii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::RaiseTile, "RaiseTile", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::LowerTile, "LowerTile", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::LevelTiles, "LevelTiles", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::DemolishTile, "DemolishTile", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::PlantTree, "PlantTree", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::PlantTreeRectangle, "PlantTreeRectangle", 4, ".iii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetTownAuthority, "GetTownAuthority", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetClosestTown, "GetClosestTown", 2, ".i"); - SQGSTile.DefSQStaticMethod(engine, &ScriptTile::GetBuildCost, "GetBuildCost", 2, ".i"); - - SQGSTile.PostRegister(engine); -} diff --git a/src/script/api/game/game_tilelist.hpp.sq b/src/script/api/game/game_tilelist.hpp.sq deleted file mode 100644 index 5cf05e785f..0000000000 --- a/src/script/api/game/game_tilelist.hpp.sq +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tilelist.hpp" -#include "../template/template_tilelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSTileList"; } - -void SQGSTileList_Register(Squirrel *engine) -{ - DefSQClass SQGSTileList("GSTileList"); - SQGSTileList.PreRegister(engine, "GSList"); - SQGSTileList.AddConstructor(engine, "x"); - - SQGSTileList.DefSQMethod(engine, &ScriptTileList::AddRectangle, "AddRectangle", 3, "xii"); - SQGSTileList.DefSQMethod(engine, &ScriptTileList::AddTile, "AddTile", 2, "xi"); - SQGSTileList.DefSQMethod(engine, &ScriptTileList::RemoveRectangle, "RemoveRectangle", 3, "xii"); - SQGSTileList.DefSQMethod(engine, &ScriptTileList::RemoveTile, "RemoveTile", 2, "xi"); - - SQGSTileList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSTileList_IndustryAccepting"; } - -void SQGSTileList_IndustryAccepting_Register(Squirrel *engine) -{ - DefSQClass SQGSTileList_IndustryAccepting("GSTileList_IndustryAccepting"); - SQGSTileList_IndustryAccepting.PreRegister(engine, "GSTileList"); - SQGSTileList_IndustryAccepting.AddConstructor(engine, "xii"); - - SQGSTileList_IndustryAccepting.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSTileList_IndustryProducing"; } - -void SQGSTileList_IndustryProducing_Register(Squirrel *engine) -{ - DefSQClass SQGSTileList_IndustryProducing("GSTileList_IndustryProducing"); - SQGSTileList_IndustryProducing.PreRegister(engine, "GSTileList"); - SQGSTileList_IndustryProducing.AddConstructor(engine, "xii"); - - SQGSTileList_IndustryProducing.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSTileList_StationType"; } - -void SQGSTileList_StationType_Register(Squirrel *engine) -{ - DefSQClass SQGSTileList_StationType("GSTileList_StationType"); - SQGSTileList_StationType.PreRegister(engine, "GSTileList"); - SQGSTileList_StationType.AddConstructor(engine, "xii"); - - SQGSTileList_StationType.PostRegister(engine); -} diff --git a/src/script/api/game/game_town.hpp.sq b/src/script/api/game/game_town.hpp.sq deleted file mode 100644 index 5cf394ca1c..0000000000 --- a/src/script/api/game/game_town.hpp.sq +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_town.hpp" -#include "../template/template_town.hpp.sq" - - -template <> const char *GetClassName() { return "GSTown"; } - -void SQGSTown_Register(Squirrel *engine) -{ - DefSQClass SQGSTown("GSTown"); - SQGSTown.PreRegister(engine); - SQGSTown.AddConstructor(engine, "x"); - - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ADVERTISE_SMALL, "TOWN_ACTION_ADVERTISE_SMALL"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ADVERTISE_MEDIUM, "TOWN_ACTION_ADVERTISE_MEDIUM"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ADVERTISE_LARGE, "TOWN_ACTION_ADVERTISE_LARGE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_ROAD_REBUILD, "TOWN_ACTION_ROAD_REBUILD"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_BUILD_STATUE, "TOWN_ACTION_BUILD_STATUE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_FUND_BUILDINGS, "TOWN_ACTION_FUND_BUILDINGS"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_BUY_RIGHTS, "TOWN_ACTION_BUY_RIGHTS"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_ACTION_BRIBE, "TOWN_ACTION_BRIBE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_NONE, "TOWN_RATING_NONE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_APPALLING, "TOWN_RATING_APPALLING"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_VERY_POOR, "TOWN_RATING_VERY_POOR"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_POOR, "TOWN_RATING_POOR"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_MEDIOCRE, "TOWN_RATING_MEDIOCRE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_GOOD, "TOWN_RATING_GOOD"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_VERY_GOOD, "TOWN_RATING_VERY_GOOD"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_EXCELLENT, "TOWN_RATING_EXCELLENT"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_OUTSTANDING, "TOWN_RATING_OUTSTANDING"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_RATING_INVALID, "TOWN_RATING_INVALID"); - SQGSTown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_ORIGINAL, "ROAD_LAYOUT_ORIGINAL"); - SQGSTown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_BETTER_ROADS, "ROAD_LAYOUT_BETTER_ROADS"); - SQGSTown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_2x2, "ROAD_LAYOUT_2x2"); - SQGSTown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_3x3, "ROAD_LAYOUT_3x3"); - SQGSTown.DefSQConst(engine, ScriptTown::ROAD_LAYOUT_INVALID, "ROAD_LAYOUT_INVALID"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_SIZE_SMALL, "TOWN_SIZE_SMALL"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_SIZE_MEDIUM, "TOWN_SIZE_MEDIUM"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_SIZE_LARGE, "TOWN_SIZE_LARGE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_SIZE_INVALID, "TOWN_SIZE_INVALID"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_GROWTH_NONE, "TOWN_GROWTH_NONE"); - SQGSTown.DefSQConst(engine, ScriptTown::TOWN_GROWTH_NORMAL, "TOWN_GROWTH_NORMAL"); - - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetTownCount, "GetTownCount", 1, "."); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::IsValidTown, "IsValidTown", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetName, "GetName", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::SetName, "SetName", 3, ".i."); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::SetText, "SetText", 3, ".i."); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetPopulation, "GetPopulation", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetHouseCount, "GetHouseCount", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetLocation, "GetLocation", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthProduction, "GetLastMonthProduction", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthSupplied, "GetLastMonthSupplied", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthTransportedPercentage, "GetLastMonthTransportedPercentage", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetLastMonthReceived, "GetLastMonthReceived", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::SetCargoGoal, "SetCargoGoal", 4, ".iii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetCargoGoal, "GetCargoGoal", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::SetGrowthRate, "SetGrowthRate", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetGrowthRate, "GetGrowthRate", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::HasStatue, "HasStatue", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::IsCity, "IsCity", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetRoadReworkDuration, "GetRoadReworkDuration", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetFundBuildingsDuration, "GetFundBuildingsDuration", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetExclusiveRightsCompany, "GetExclusiveRightsCompany", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetExclusiveRightsDuration, "GetExclusiveRightsDuration", 2, ".i"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::IsActionAvailable, "IsActionAvailable", 3, ".ii"); - SQGSTown.DefSQStaticMethod(engine, &ScriptTown::PerformTownAction, "PerformTownAction", 3, ".ii"); - 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"); - - SQGSTown.PostRegister(engine); -} diff --git a/src/script/api/game/game_townlist.hpp.sq b/src/script/api/game/game_townlist.hpp.sq deleted file mode 100644 index 2445305b98..0000000000 --- a/src/script/api/game/game_townlist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_townlist.hpp" -#include "../template/template_townlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSTownList"; } - -void SQGSTownList_Register(Squirrel *engine) -{ - DefSQClass SQGSTownList("GSTownList"); - SQGSTownList.PreRegister(engine, "GSList"); - SQGSTownList.AddConstructor(engine, "x"); - - SQGSTownList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSTownEffectList"; } - -void SQGSTownEffectList_Register(Squirrel *engine) -{ - DefSQClass SQGSTownEffectList("GSTownEffectList"); - SQGSTownEffectList.PreRegister(engine, "GSList"); - SQGSTownEffectList.AddConstructor(engine, "x"); - - SQGSTownEffectList.PostRegister(engine); -} diff --git a/src/script/api/game/game_tunnel.hpp.sq b/src/script/api/game/game_tunnel.hpp.sq deleted file mode 100644 index 8639036796..0000000000 --- a/src/script/api/game/game_tunnel.hpp.sq +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tunnel.hpp" -#include "../template/template_tunnel.hpp.sq" - - -template <> const char *GetClassName() { return "GSTunnel"; } - -void SQGSTunnel_Register(Squirrel *engine) -{ - DefSQClass SQGSTunnel("GSTunnel"); - SQGSTunnel.PreRegister(engine); - SQGSTunnel.AddConstructor(engine, "x"); - - SQGSTunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_BASE, "ERR_TUNNEL_BASE"); - SQGSTunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER, "ERR_TUNNEL_CANNOT_BUILD_ON_WATER"); - SQGSTunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_START_SITE_UNSUITABLE, "ERR_TUNNEL_START_SITE_UNSUITABLE"); - SQGSTunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY, "ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY"); - SQGSTunnel.DefSQConst(engine, ScriptTunnel::ERR_TUNNEL_END_SITE_UNSUITABLE, "ERR_TUNNEL_END_SITE_UNSUITABLE"); - - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUILD_ON_WATER, ScriptTunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER); - ScriptError::RegisterErrorMap(STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL, ScriptTunnel::ERR_TUNNEL_START_SITE_UNSUITABLE); - ScriptError::RegisterErrorMap(STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY, ScriptTunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY); - ScriptError::RegisterErrorMap(STR_ERROR_UNABLE_TO_EXCAVATE_LAND, ScriptTunnel::ERR_TUNNEL_END_SITE_UNSUITABLE); - - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_CANNOT_BUILD_ON_WATER, "ERR_TUNNEL_CANNOT_BUILD_ON_WATER"); - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_START_SITE_UNSUITABLE, "ERR_TUNNEL_START_SITE_UNSUITABLE"); - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY, "ERR_TUNNEL_ANOTHER_TUNNEL_IN_THE_WAY"); - ScriptError::RegisterErrorMapString(ScriptTunnel::ERR_TUNNEL_END_SITE_UNSUITABLE, "ERR_TUNNEL_END_SITE_UNSUITABLE"); - - SQGSTunnel.DefSQStaticMethod(engine, &ScriptTunnel::IsTunnelTile, "IsTunnelTile", 2, ".i"); - SQGSTunnel.DefSQStaticMethod(engine, &ScriptTunnel::GetOtherTunnelEnd, "GetOtherTunnelEnd", 2, ".i"); - SQGSTunnel.DefSQStaticMethod(engine, &ScriptTunnel::BuildTunnel, "BuildTunnel", 3, ".ii"); - SQGSTunnel.DefSQStaticMethod(engine, &ScriptTunnel::RemoveTunnel, "RemoveTunnel", 2, ".i"); - - SQGSTunnel.PostRegister(engine); -} diff --git a/src/script/api/game/game_vehicle.hpp.sq b/src/script/api/game/game_vehicle.hpp.sq deleted file mode 100644 index de58e05e64..0000000000 --- a/src/script/api/game/game_vehicle.hpp.sq +++ /dev/null @@ -1,148 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_vehicle.hpp" -#include "../template/template_vehicle.hpp.sq" - - -template <> const char *GetClassName() { return "GSVehicle"; } - -void SQGSVehicle_Register(Squirrel *engine) -{ - DefSQClass SQGSVehicle("GSVehicle"); - SQGSVehicle.PreRegister(engine); - SQGSVehicle.AddConstructor(engine, "x"); - - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_BASE, "ERR_VEHICLE_BASE"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED, "ERR_VEHICLE_BUILD_DISABLED"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT, "ERR_VEHICLE_WRONG_DEPOT"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT, "ERR_VEHICLE_CANNOT_SEND_TO_DEPOT"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP, "ERR_VEHICLE_CANNOT_START_STOP"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN, "ERR_VEHICLE_CANNOT_TURN"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT, "ERR_VEHICLE_CANNOT_REFIT"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::ERR_VEHICLE_TOO_LONG, "ERR_VEHICLE_TOO_LONG"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VT_RAIL, "VT_RAIL"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VT_ROAD, "VT_ROAD"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VT_WATER, "VT_WATER"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VT_AIR, "VT_AIR"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VT_INVALID, "VT_INVALID"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_RUNNING, "VS_RUNNING"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_STOPPED, "VS_STOPPED"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_IN_DEPOT, "VS_IN_DEPOT"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_AT_STATION, "VS_AT_STATION"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_BROKEN, "VS_BROKEN"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_CRASHED, "VS_CRASHED"); - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VS_INVALID, "VS_INVALID"); - - SQGSVehicle.DefSQConst(engine, ScriptVehicle::VEHICLE_INVALID, "VEHICLE_INVALID"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME, ScriptVehicle::ERR_VEHICLE_TOO_MANY); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_SHIP_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE, ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_TRAIN, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_ROAD_VEHICLE, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_SHIP, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_BUY_AIRCRAFT, ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - ScriptError::RegisterErrorMap(STR_ERROR_DEPOT_WRONG_DEPOT_TYPE, ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR, ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_TRAIN, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_SHIP, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_STOP_START_AIRCRAFT, ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS, ScriptVehicle::ERR_VEHICLE_CANNOT_TURN); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_TRAIN, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_SHIP, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_CAN_T_REFIT_AIRCRAFT, ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT); - ScriptError::RegisterErrorMap(STR_ERROR_VEHICLE_IS_DESTROYED, ScriptVehicle::ERR_VEHICLE_IS_DESTROYED); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT, ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT); - ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT, ScriptVehicle::ERR_VEHICLE_IN_FLIGHT); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_START_NO_POWER, ScriptVehicle::ERR_VEHICLE_NO_POWER); - ScriptError::RegisterErrorMap(STR_ERROR_TRAIN_TOO_LONG, ScriptVehicle::ERR_VEHICLE_TOO_LONG); - - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED, "ERR_VEHICLE_BUILD_DISABLED"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT, "ERR_VEHICLE_WRONG_DEPOT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT, "ERR_VEHICLE_CANNOT_SEND_TO_DEPOT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_START_STOP, "ERR_VEHICLE_CANNOT_START_STOP"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_TURN, "ERR_VEHICLE_CANNOT_TURN"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_CANNOT_REFIT, "ERR_VEHICLE_CANNOT_REFIT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER"); - ScriptError::RegisterErrorMapString(ScriptVehicle::ERR_VEHICLE_TOO_LONG, "ERR_VEHICLE_TOO_LONG"); - - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsValidVehicle, "IsValidVehicle", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetNumWagons, "GetNumWagons", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SetName, "SetName", 3, ".i."); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetName, "GetName", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetOwner, "GetOwner", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetLocation, "GetLocation", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetEngineType, "GetEngineType", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetWagonEngineType, "GetWagonEngineType", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetUnitNumber, "GetUnitNumber", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetAge, "GetAge", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetWagonAge, "GetWagonAge", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetMaxAge, "GetMaxAge", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetAgeLeft, "GetAgeLeft", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCurrentSpeed, "GetCurrentSpeed", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetState, "GetState", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetRunningCost, "GetRunningCost", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetProfitThisYear, "GetProfitThisYear", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetProfitLastYear, "GetProfitLastYear", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCurrentValue, "GetCurrentValue", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetVehicleType, "GetVehicleType", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetRoadType, "GetRoadType", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicleWithRefit, "BuildVehicleWithRefit", 4, ".iii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetBuildWithRefitCapacity, "GetBuildWithRefitCapacity", 4, ".iii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetRefitCapacity, "GetRefitCapacity", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::RefitVehicle, "RefitVehicle", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SellVehicle, "SellVehicle", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SellWagon, "SellWagon", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SellWagonChain, "SellWagonChain", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SendVehicleToDepot, "SendVehicleToDepot", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::SendVehicleToDepotForServicing, "SendVehicleToDepotForServicing", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::StartStopVehicle, "StartStopVehicle", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::ReverseVehicle, "ReverseVehicle", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCapacity, "GetCapacity", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetLength, "GetLength", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetCargoLoad, "GetCargoLoad", 3, ".ii"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetGroupID, "GetGroupID", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsArticulated, "IsArticulated", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::HasSharedOrders, "HasSharedOrders", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetReliability, "GetReliability", 2, ".i"); - SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetMaximumOrderDistance, "GetMaximumOrderDistance", 2, ".i"); - - SQGSVehicle.PostRegister(engine); -} diff --git a/src/script/api/game/game_vehiclelist.hpp.sq b/src/script/api/game/game_vehiclelist.hpp.sq deleted file mode 100644 index b4dcf4b82c..0000000000 --- a/src/script/api/game/game_vehiclelist.hpp.sq +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_vehiclelist.hpp" -#include "../template/template_vehiclelist.hpp.sq" - - -template <> const char *GetClassName() { return "GSVehicleList"; } - -void SQGSVehicleList_Register(Squirrel *engine) -{ - DefSQClass SQGSVehicleList("GSVehicleList"); - SQGSVehicleList.PreRegister(engine, "GSList"); - SQGSVehicleList.AddConstructor(engine, "x"); - - SQGSVehicleList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSVehicleList_Station"; } - -void SQGSVehicleList_Station_Register(Squirrel *engine) -{ - DefSQClass SQGSVehicleList_Station("GSVehicleList_Station"); - SQGSVehicleList_Station.PreRegister(engine, "GSList"); - SQGSVehicleList_Station.AddConstructor(engine, "xi"); - - SQGSVehicleList_Station.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSVehicleList_Depot"; } - -void SQGSVehicleList_Depot_Register(Squirrel *engine) -{ - DefSQClass SQGSVehicleList_Depot("GSVehicleList_Depot"); - SQGSVehicleList_Depot.PreRegister(engine, "GSList"); - SQGSVehicleList_Depot.AddConstructor(engine, "xi"); - - SQGSVehicleList_Depot.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSVehicleList_SharedOrders"; } - -void SQGSVehicleList_SharedOrders_Register(Squirrel *engine) -{ - DefSQClass SQGSVehicleList_SharedOrders("GSVehicleList_SharedOrders"); - SQGSVehicleList_SharedOrders.PreRegister(engine, "GSList"); - SQGSVehicleList_SharedOrders.AddConstructor(engine, "xi"); - - SQGSVehicleList_SharedOrders.PostRegister(engine); -} diff --git a/src/script/api/game/game_viewport.hpp.sq b/src/script/api/game/game_viewport.hpp.sq deleted file mode 100644 index 6d7d2a8a96..0000000000 --- a/src/script/api/game/game_viewport.hpp.sq +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_viewport.hpp" -#include "../template/template_viewport.hpp.sq" - - -template <> const char *GetClassName() { return "GSViewport"; } - -void SQGSViewport_Register(Squirrel *engine) -{ - DefSQClass SQGSViewport("GSViewport"); - SQGSViewport.PreRegister(engine); - SQGSViewport.AddConstructor(engine, "x"); - - SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollTo, "ScrollTo", 2, ".i"); - SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollEveryoneTo, "ScrollEveryoneTo", 2, ".i"); - SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollCompanyClientsTo, "ScrollCompanyClientsTo", 3, ".ii"); - SQGSViewport.DefSQStaticMethod(engine, &ScriptViewport::ScrollClientTo, "ScrollClientTo", 3, ".ii"); - - SQGSViewport.PostRegister(engine); -} diff --git a/src/script/api/game/game_waypoint.hpp.sq b/src/script/api/game/game_waypoint.hpp.sq deleted file mode 100644 index f74902c97f..0000000000 --- a/src/script/api/game/game_waypoint.hpp.sq +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_waypoint.hpp" -#include "../template/template_waypoint.hpp.sq" - - -template <> const char *GetClassName() { return "GSWaypoint"; } - -void SQGSWaypoint_Register(Squirrel *engine) -{ - DefSQClass SQGSWaypoint("GSWaypoint"); - SQGSWaypoint.PreRegister(engine, "GSBaseStation"); - SQGSWaypoint.AddConstructor(engine, "x"); - - SQGSWaypoint.DefSQConst(engine, ScriptWaypoint::ERR_WAYPOINT_BASE, "ERR_WAYPOINT_BASE"); - SQGSWaypoint.DefSQConst(engine, ScriptWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT, "ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT"); - SQGSWaypoint.DefSQConst(engine, ScriptWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS, "ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS"); - SQGSWaypoint.DefSQConst(engine, ScriptWaypoint::WAYPOINT_RAIL, "WAYPOINT_RAIL"); - SQGSWaypoint.DefSQConst(engine, ScriptWaypoint::WAYPOINT_BUOY, "WAYPOINT_BUOY"); - SQGSWaypoint.DefSQConst(engine, ScriptWaypoint::WAYPOINT_ANY, "WAYPOINT_ANY"); - - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT, ScriptWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT); - ScriptError::RegisterErrorMap(STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING, ScriptWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS); - - ScriptError::RegisterErrorMapString(ScriptWaypoint::ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT, "ERR_WAYPOINT_TOO_CLOSE_TO_ANOTHER_WAYPOINT"); - ScriptError::RegisterErrorMapString(ScriptWaypoint::ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS, "ERR_WAYPOINT_ADJOINS_MULTIPLE_WAYPOINTS"); - - SQGSWaypoint.DefSQStaticMethod(engine, &ScriptWaypoint::IsValidWaypoint, "IsValidWaypoint", 2, ".i"); - SQGSWaypoint.DefSQStaticMethod(engine, &ScriptWaypoint::GetWaypointID, "GetWaypointID", 2, ".i"); - SQGSWaypoint.DefSQStaticMethod(engine, &ScriptWaypoint::HasWaypointType, "HasWaypointType", 3, ".ii"); - - SQGSWaypoint.PostRegister(engine); -} diff --git a/src/script/api/game/game_waypointlist.hpp.sq b/src/script/api/game/game_waypointlist.hpp.sq deleted file mode 100644 index 92827c89be..0000000000 --- a/src/script/api/game/game_waypointlist.hpp.sq +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_waypointlist.hpp" -#include "../template/template_waypointlist.hpp.sq" - - -template <> const char *GetClassName() { return "GSWaypointList"; } - -void SQGSWaypointList_Register(Squirrel *engine) -{ - DefSQClass SQGSWaypointList("GSWaypointList"); - SQGSWaypointList.PreRegister(engine, "GSList"); - SQGSWaypointList.AddConstructor(engine, "xi"); - - SQGSWaypointList.PostRegister(engine); -} - - -template <> const char *GetClassName() { return "GSWaypointList_Vehicle"; } - -void SQGSWaypointList_Vehicle_Register(Squirrel *engine) -{ - DefSQClass SQGSWaypointList_Vehicle("GSWaypointList_Vehicle"); - SQGSWaypointList_Vehicle.PreRegister(engine, "GSList"); - SQGSWaypointList_Vehicle.AddConstructor(engine, "xi"); - - SQGSWaypointList_Vehicle.PostRegister(engine); -} diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq deleted file mode 100644 index 0d5ab2bc0c..0000000000 --- a/src/script/api/game/game_window.hpp.sq +++ /dev/null @@ -1,1390 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_window.hpp" -#include "../template/template_window.hpp.sq" - - -template <> const char *GetClassName() { return "GSWindow"; } - -void SQGSWindow_Register(Squirrel *engine) -{ - DefSQClass SQGSWindow("GSWindow"); - SQGSWindow.PreRegister(engine); - SQGSWindow.AddConstructor(engine, "x"); - - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_GAME_OPTIONS_AI, "WN_GAME_OPTIONS_AI"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_GAME_OPTIONS_ABOUT, "WN_GAME_OPTIONS_ABOUT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_GAME_OPTIONS_NEWGRF_STATE, "WN_GAME_OPTIONS_NEWGRF_STATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_GAME_OPTIONS_GAME_OPTIONS, "WN_GAME_OPTIONS_GAME_OPTIONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_GAME_OPTIONS_GAME_SETTINGS, "WN_GAME_OPTIONS_GAME_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_QUERY_STRING, "WN_QUERY_STRING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_QUERY_STRING_SIGN, "WN_QUERY_STRING_SIGN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_CONFIRM_POPUP_QUERY, "WN_CONFIRM_POPUP_QUERY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_CONFIRM_POPUP_QUERY_BOOTSTRAP, "WN_CONFIRM_POPUP_QUERY_BOOTSTRAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_NETWORK_WINDOW_GAME, "WN_NETWORK_WINDOW_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_NETWORK_WINDOW_LOBBY, "WN_NETWORK_WINDOW_LOBBY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_NETWORK_WINDOW_CONTENT_LIST, "WN_NETWORK_WINDOW_CONTENT_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_NETWORK_WINDOW_START, "WN_NETWORK_WINDOW_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_NETWORK_STATUS_WINDOW_JOIN, "WN_NETWORK_STATUS_WINDOW_JOIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD, "WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_NONE, "WC_NONE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MAIN_WINDOW, "WC_MAIN_WINDOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MAIN_TOOLBAR, "WC_MAIN_TOOLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_STATUS_BAR, "WC_STATUS_BAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_TOOLBAR, "WC_BUILD_TOOLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SCEN_BUILD_TOOLBAR, "WC_SCEN_BUILD_TOOLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_TREES, "WC_BUILD_TREES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TRANSPARENCY_TOOLBAR, "WC_TRANSPARENCY_TOOLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_SIGNAL, "WC_BUILD_SIGNAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SMALLMAP, "WC_SMALLMAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_ERRMSG, "WC_ERRMSG"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TOOLTIPS, "WC_TOOLTIPS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_QUERY_STRING, "WC_QUERY_STRING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_CONFIRM_POPUP_QUERY, "WC_CONFIRM_POPUP_QUERY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_GOAL_QUESTION, "WC_GOAL_QUESTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SAVELOAD, "WC_SAVELOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_LAND_INFO, "WC_LAND_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_DROPDOWN_MENU, "WC_DROPDOWN_MENU"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_OSK, "WC_OSK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SET_DATE, "WC_SET_DATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_AI_SETTINGS, "WC_AI_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_GRF_PARAMETERS, "WC_GRF_PARAMETERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TEXTFILE, "WC_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TOWN_AUTHORITY, "WC_TOWN_AUTHORITY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_VEHICLE_DETAILS, "WC_VEHICLE_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_VEHICLE_REFIT, "WC_VEHICLE_REFIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_VEHICLE_ORDERS, "WC_VEHICLE_ORDERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_REPLACE_VEHICLE, "WC_REPLACE_VEHICLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_VEHICLE_TIMETABLE, "WC_VEHICLE_TIMETABLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY_COLOUR, "WC_COMPANY_COLOUR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY_MANAGER_FACE, "WC_COMPANY_MANAGER_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SELECT_STATION, "WC_SELECT_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_NEWS_WINDOW, "WC_NEWS_WINDOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TOWN_DIRECTORY, "WC_TOWN_DIRECTORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SUBSIDIES_LIST, "WC_SUBSIDIES_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_INDUSTRY_DIRECTORY, "WC_INDUSTRY_DIRECTORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MESSAGE_HISTORY, "WC_MESSAGE_HISTORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SIGN_LIST, "WC_SIGN_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_AI_LIST, "WC_AI_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_GOALS_LIST, "WC_GOALS_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_STORY_BOOK, "WC_STORY_BOOK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_STATION_LIST, "WC_STATION_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TRAINS_LIST, "WC_TRAINS_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_ROADVEH_LIST, "WC_ROADVEH_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SHIPS_LIST, "WC_SHIPS_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_AIRCRAFT_LIST, "WC_AIRCRAFT_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TOWN_VIEW, "WC_TOWN_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_VEHICLE_VIEW, "WC_VEHICLE_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_STATION_VIEW, "WC_STATION_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_VEHICLE_DEPOT, "WC_VEHICLE_DEPOT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_WAYPOINT_VIEW, "WC_WAYPOINT_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_INDUSTRY_VIEW, "WC_INDUSTRY_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY, "WC_COMPANY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_OBJECT, "WC_BUILD_OBJECT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_VEHICLE, "WC_BUILD_VEHICLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_BRIDGE, "WC_BUILD_BRIDGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_STATION, "WC_BUILD_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUS_STATION, "WC_BUS_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TRUCK_STATION, "WC_TRUCK_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_DEPOT, "WC_BUILD_DEPOT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_WAYPOINT, "WC_BUILD_WAYPOINT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_FOUND_TOWN, "WC_FOUND_TOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_INDUSTRY, "WC_BUILD_INDUSTRY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SELECT_GAME, "WC_SELECT_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SCEN_LAND_GEN, "WC_SCEN_LAND_GEN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_GENERATE_LANDSCAPE, "WC_GENERATE_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MODAL_PROGRESS, "WC_MODAL_PROGRESS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_NETWORK_WINDOW, "WC_NETWORK_WINDOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_CLIENT_LIST, "WC_CLIENT_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_CLIENT_LIST_POPUP, "WC_CLIENT_LIST_POPUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_NETWORK_STATUS_WINDOW, "WC_NETWORK_STATUS_WINDOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SEND_NETWORK_MSG, "WC_SEND_NETWORK_MSG"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY_PASSWORD_WINDOW, "WC_COMPANY_PASSWORD_WINDOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_INDUSTRY_CARGOES, "WC_INDUSTRY_CARGOES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_GRAPH_LEGEND, "WC_GRAPH_LEGEND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_FINANCES, "WC_FINANCES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_INCOME_GRAPH, "WC_INCOME_GRAPH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_OPERATING_PROFIT, "WC_OPERATING_PROFIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_DELIVERED_CARGO, "WC_DELIVERED_CARGO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_PERFORMANCE_HISTORY, "WC_PERFORMANCE_HISTORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY_VALUE, "WC_COMPANY_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY_LEAGUE, "WC_COMPANY_LEAGUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_PAYMENT_RATES, "WC_PAYMENT_RATES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_PERFORMANCE_DETAIL, "WC_PERFORMANCE_DETAIL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_COMPANY_INFRASTRUCTURE, "WC_COMPANY_INFRASTRUCTURE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUY_COMPANY, "WC_BUY_COMPANY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_ENGINE_PREVIEW, "WC_ENGINE_PREVIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MUSIC_WINDOW, "WC_MUSIC_WINDOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MUSIC_TRACK_SELECTION, "WC_MUSIC_TRACK_SELECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_GAME_OPTIONS, "WC_GAME_OPTIONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_CUSTOM_CURRENCY, "WC_CUSTOM_CURRENCY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_CHEATS, "WC_CHEATS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_EXTRA_VIEW_PORT, "WC_EXTRA_VIEW_PORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_CONSOLE, "WC_CONSOLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BOOTSTRAP, "WC_BOOTSTRAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_HIGHSCORE, "WC_HIGHSCORE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_ENDSCREEN, "WC_ENDSCREEN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_AI_DEBUG, "WC_AI_DEBUG"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_NEWGRF_INSPECT, "WC_NEWGRF_INSPECT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SPRITE_ALIGNER, "WC_SPRITE_ALIGNER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WC_LINKGRAPH_LEGEND, "WC_LINKGRAPH_LEGEND"); - 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"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_GOLD, "TC_GOLD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_RED, "TC_RED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_PURPLE, "TC_PURPLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_LIGHT_BROWN, "TC_LIGHT_BROWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_ORANGE, "TC_ORANGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_GREEN, "TC_GREEN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_YELLOW, "TC_YELLOW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_DARK_GREEN, "TC_DARK_GREEN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_CREAM, "TC_CREAM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_BROWN, "TC_BROWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_WHITE, "TC_WHITE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_LIGHT_BLUE, "TC_LIGHT_BLUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_GREY, "TC_GREY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_DARK_BLUE, "TC_DARK_BLUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_BLACK, "TC_BLACK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::TC_INVALID, "TC_INVALID"); - SQGSWindow.DefSQConst(engine, ScriptWindow::NUMBER_ALL, "NUMBER_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WIDGET_ALL, "WIDGET_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIL_CAPTION, "WID_AIL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIL_LIST, "WID_AIL_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIL_SCROLLBAR, "WID_AIL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIL_INFO_BG, "WID_AIL_INFO_BG"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIL_ACCEPT, "WID_AIL_ACCEPT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIL_CANCEL, "WID_AIL_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIS_CAPTION, "WID_AIS_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIS_BACKGROUND, "WID_AIS_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIS_SCROLLBAR, "WID_AIS_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIS_ACCEPT, "WID_AIS_ACCEPT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIS_RESET, "WID_AIS_RESET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_BACKGROUND, "WID_AIC_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_DECREASE, "WID_AIC_DECREASE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_INCREASE, "WID_AIC_INCREASE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_NUMBER, "WID_AIC_NUMBER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_GAMELIST, "WID_AIC_GAMELIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_LIST, "WID_AIC_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_SCROLLBAR, "WID_AIC_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_MOVE_UP, "WID_AIC_MOVE_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_MOVE_DOWN, "WID_AIC_MOVE_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_CHANGE, "WID_AIC_CHANGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_CONFIGURE, "WID_AIC_CONFIGURE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_CLOSE, "WID_AIC_CLOSE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_TEXTFILE, "WID_AIC_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AIC_CONTENT_DOWNLOAD, "WID_AIC_CONTENT_DOWNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_VIEW, "WID_AID_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_NAME_TEXT, "WID_AID_NAME_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_SETTINGS, "WID_AID_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_SCRIPT_GAME, "WID_AID_SCRIPT_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_RELOAD_TOGGLE, "WID_AID_RELOAD_TOGGLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_LOG_PANEL, "WID_AID_LOG_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_SCROLLBAR, "WID_AID_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_COMPANY_BUTTON_START, "WID_AID_COMPANY_BUTTON_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_COMPANY_BUTTON_END, "WID_AID_COMPANY_BUTTON_END"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_BREAK_STRING_WIDGETS, "WID_AID_BREAK_STRING_WIDGETS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_BREAK_STR_ON_OFF_BTN, "WID_AID_BREAK_STR_ON_OFF_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_BREAK_STR_EDIT_BOX, "WID_AID_BREAK_STR_EDIT_BOX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_MATCH_CASE_BTN, "WID_AID_MATCH_CASE_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AID_CONTINUE_BTN, "WID_AID_CONTINUE_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AT_AIRPORT, "WID_AT_AIRPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AT_DEMOLISH, "WID_AT_DEMOLISH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_CLASS_DROPDOWN, "WID_AP_CLASS_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_AIRPORT_LIST, "WID_AP_AIRPORT_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_SCROLLBAR, "WID_AP_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_LAYOUT_NUM, "WID_AP_LAYOUT_NUM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_LAYOUT_DECREASE, "WID_AP_LAYOUT_DECREASE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_LAYOUT_INCREASE, "WID_AP_LAYOUT_INCREASE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_AIRPORT_SPRITE, "WID_AP_AIRPORT_SPRITE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_EXTRA_TEXT, "WID_AP_EXTRA_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_BOTTOMPANEL, "WID_AP_BOTTOMPANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_COVERAGE_LABEL, "WID_AP_COVERAGE_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_BTN_DONTHILIGHT, "WID_AP_BTN_DONTHILIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_AP_BTN_DOHILIGHT, "WID_AP_BTN_DOHILIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_CAPTION, "WID_RV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_SORT_ASCENDING_DESCENDING, "WID_RV_SORT_ASCENDING_DESCENDING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_SHOW_HIDDEN_ENGINES, "WID_RV_SHOW_HIDDEN_ENGINES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_SORT_DROPDOWN, "WID_RV_SORT_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_LEFT_MATRIX, "WID_RV_LEFT_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_LEFT_SCROLLBAR, "WID_RV_LEFT_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_RIGHT_MATRIX, "WID_RV_RIGHT_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_RIGHT_SCROLLBAR, "WID_RV_RIGHT_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_LEFT_DETAILS, "WID_RV_LEFT_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_RIGHT_DETAILS, "WID_RV_RIGHT_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_START_REPLACE, "WID_RV_START_REPLACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_INFO_TAB, "WID_RV_INFO_TAB"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_STOP_REPLACE, "WID_RV_STOP_REPLACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_RAIL_ROAD_TYPE_DROPDOWN, "WID_RV_RAIL_ROAD_TYPE_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_ENGINEWAGON_DROPDOWN, "WID_RV_TRAIN_ENGINEWAGON_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RV_TRAIN_WAGONREMOVE_TOGGLE, "WID_RV_TRAIN_WAGONREMOVE_TOGGLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BB_BACKGROUND, "WID_BB_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BAFD_QUESTION, "WID_BAFD_QUESTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BAFD_YES, "WID_BAFD_YES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BAFD_NO, "WID_BAFD_NO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BBS_CAPTION, "WID_BBS_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BBS_DROPDOWN_ORDER, "WID_BBS_DROPDOWN_ORDER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BBS_DROPDOWN_CRITERIA, "WID_BBS_DROPDOWN_CRITERIA"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BBS_BRIDGE_LIST, "WID_BBS_BRIDGE_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BBS_SCROLLBAR, "WID_BBS_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_CAPTION, "WID_BV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_SORT_ASCENDING_DESCENDING, "WID_BV_SORT_ASCENDING_DESCENDING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_SORT_DROPDOWN, "WID_BV_SORT_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_CARGO_FILTER_DROPDOWN, "WID_BV_CARGO_FILTER_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_SHOW_HIDDEN_ENGINES, "WID_BV_SHOW_HIDDEN_ENGINES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_LIST, "WID_BV_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_SCROLLBAR, "WID_BV_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_PANEL, "WID_BV_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_BUILD, "WID_BV_BUILD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_SHOW_HIDE, "WID_BV_SHOW_HIDE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_BUILD_SEL, "WID_BV_BUILD_SEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BV_RENAME, "WID_BV_RENAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_PANEL, "WID_C_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_CAPTION, "WID_C_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_FACE, "WID_C_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_FACE_TITLE, "WID_C_FACE_TITLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_INAUGURATION, "WID_C_DESC_INAUGURATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_COLOUR_SCHEME, "WID_C_DESC_COLOUR_SCHEME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_COLOUR_SCHEME_EXAMPLE, "WID_C_DESC_COLOUR_SCHEME_EXAMPLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_VEHICLE, "WID_C_DESC_VEHICLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_VEHICLE_COUNTS, "WID_C_DESC_VEHICLE_COUNTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_COMPANY_VALUE, "WID_C_DESC_COMPANY_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_INFRASTRUCTURE, "WID_C_DESC_INFRASTRUCTURE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_INFRASTRUCTURE_COUNTS, "WID_C_DESC_INFRASTRUCTURE_COUNTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_SELECT_DESC_OWNERS, "WID_C_SELECT_DESC_OWNERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_DESC_OWNERS, "WID_C_DESC_OWNERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_SELECT_BUTTONS, "WID_C_SELECT_BUTTONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_NEW_FACE, "WID_C_NEW_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_COLOUR_SCHEME, "WID_C_COLOUR_SCHEME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_PRESIDENT_NAME, "WID_C_PRESIDENT_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_COMPANY_NAME, "WID_C_COMPANY_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_BUY_SHARE, "WID_C_BUY_SHARE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_SELL_SHARE, "WID_C_SELL_SHARE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_SELECT_VIEW_BUILD_HQ, "WID_C_SELECT_VIEW_BUILD_HQ"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_VIEW_HQ, "WID_C_VIEW_HQ"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_BUILD_HQ, "WID_C_BUILD_HQ"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_SELECT_RELOCATE, "WID_C_SELECT_RELOCATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_RELOCATE_HQ, "WID_C_RELOCATE_HQ"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_VIEW_INFRASTRUCTURE, "WID_C_VIEW_INFRASTRUCTURE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_HAS_PASSWORD, "WID_C_HAS_PASSWORD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_SELECT_MULTIPLAYER, "WID_C_SELECT_MULTIPLAYER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_COMPANY_PASSWORD, "WID_C_COMPANY_PASSWORD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_COMPANY_JOIN, "WID_C_COMPANY_JOIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_CAPTION, "WID_CF_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_TOGGLE_SIZE, "WID_CF_TOGGLE_SIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_SEL_PANEL, "WID_CF_SEL_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_EXPS_CATEGORY, "WID_CF_EXPS_CATEGORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_EXPS_PRICE1, "WID_CF_EXPS_PRICE1"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_EXPS_PRICE2, "WID_CF_EXPS_PRICE2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_EXPS_PRICE3, "WID_CF_EXPS_PRICE3"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_TOTAL_PANEL, "WID_CF_TOTAL_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_SEL_MAXLOAN, "WID_CF_SEL_MAXLOAN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_BALANCE_VALUE, "WID_CF_BALANCE_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_LOAN_VALUE, "WID_CF_LOAN_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_LOAN_LINE, "WID_CF_LOAN_LINE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_TOTAL_VALUE, "WID_CF_TOTAL_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_MAXLOAN_GAP, "WID_CF_MAXLOAN_GAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_MAXLOAN_VALUE, "WID_CF_MAXLOAN_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_SEL_BUTTONS, "WID_CF_SEL_BUTTONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_INCREASE_LOAN, "WID_CF_INCREASE_LOAN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_REPAY_LOAN, "WID_CF_REPAY_LOAN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CF_INFRASTRUCTURE, "WID_CF_INFRASTRUCTURE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CAPTION, "WID_SCL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_GENERAL, "WID_SCL_CLASS_GENERAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_RAIL, "WID_SCL_CLASS_RAIL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_ROAD, "WID_SCL_CLASS_ROAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_SHIP, "WID_SCL_CLASS_SHIP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_AIRCRAFT, "WID_SCL_CLASS_AIRCRAFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_RAIL, "WID_SCL_GROUPS_RAIL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_ROAD, "WID_SCL_GROUPS_ROAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_SHIP, "WID_SCL_GROUPS_SHIP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_AIRCRAFT, "WID_SCL_GROUPS_AIRCRAFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_SPACER_DROPDOWN, "WID_SCL_SPACER_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_PRI_COL_DROPDOWN, "WID_SCL_PRI_COL_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_SEC_COL_DROPDOWN, "WID_SCL_SEC_COL_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_MATRIX, "WID_SCL_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_MATRIX_SCROLLBAR, "WID_SCL_MATRIX_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CAPTION, "WID_SCMF_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TOGGLE_LARGE_SMALL, "WID_SCMF_TOGGLE_LARGE_SMALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_SELECT_FACE, "WID_SCMF_SELECT_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CANCEL, "WID_SCMF_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_ACCEPT, "WID_SCMF_ACCEPT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_MALE, "WID_SCMF_MALE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_FEMALE, "WID_SCMF_FEMALE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_MALE2, "WID_SCMF_MALE2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_FEMALE2, "WID_SCMF_FEMALE2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_SEL_LOADSAVE, "WID_SCMF_SEL_LOADSAVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_SEL_MALEFEMALE, "WID_SCMF_SEL_MALEFEMALE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_SEL_PARTS, "WID_SCMF_SEL_PARTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_RANDOM_NEW_FACE, "WID_SCMF_RANDOM_NEW_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON, "WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_FACE, "WID_SCMF_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_LOAD, "WID_SCMF_LOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_FACECODE, "WID_SCMF_FACECODE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_SAVE, "WID_SCMF_SAVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT, "WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TIE_EARRING_TEXT, "WID_SCMF_TIE_EARRING_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_LIPS_MOUSTACHE_TEXT, "WID_SCMF_LIPS_MOUSTACHE_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAS_GLASSES_TEXT, "WID_SCMF_HAS_GLASSES_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAIR_TEXT, "WID_SCMF_HAIR_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYEBROWS_TEXT, "WID_SCMF_EYEBROWS_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYECOLOUR_TEXT, "WID_SCMF_EYECOLOUR_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_GLASSES_TEXT, "WID_SCMF_GLASSES_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_NOSE_TEXT, "WID_SCMF_NOSE_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CHIN_TEXT, "WID_SCMF_CHIN_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_JACKET_TEXT, "WID_SCMF_JACKET_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_COLLAR_TEXT, "WID_SCMF_COLLAR_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_ETHNICITY_EUR, "WID_SCMF_ETHNICITY_EUR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_ETHNICITY_AFR, "WID_SCMF_ETHNICITY_AFR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAS_MOUSTACHE_EARRING, "WID_SCMF_HAS_MOUSTACHE_EARRING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAS_GLASSES, "WID_SCMF_HAS_GLASSES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYECOLOUR_L, "WID_SCMF_EYECOLOUR_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYECOLOUR, "WID_SCMF_EYECOLOUR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYECOLOUR_R, "WID_SCMF_EYECOLOUR_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CHIN_L, "WID_SCMF_CHIN_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CHIN, "WID_SCMF_CHIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CHIN_R, "WID_SCMF_CHIN_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYEBROWS_L, "WID_SCMF_EYEBROWS_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYEBROWS, "WID_SCMF_EYEBROWS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_EYEBROWS_R, "WID_SCMF_EYEBROWS_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_LIPS_MOUSTACHE_L, "WID_SCMF_LIPS_MOUSTACHE_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_LIPS_MOUSTACHE, "WID_SCMF_LIPS_MOUSTACHE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_LIPS_MOUSTACHE_R, "WID_SCMF_LIPS_MOUSTACHE_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_NOSE_L, "WID_SCMF_NOSE_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_NOSE, "WID_SCMF_NOSE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_NOSE_R, "WID_SCMF_NOSE_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAIR_L, "WID_SCMF_HAIR_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAIR, "WID_SCMF_HAIR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_HAIR_R, "WID_SCMF_HAIR_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_JACKET_L, "WID_SCMF_JACKET_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_JACKET, "WID_SCMF_JACKET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_JACKET_R, "WID_SCMF_JACKET_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_COLLAR_L, "WID_SCMF_COLLAR_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_COLLAR, "WID_SCMF_COLLAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_COLLAR_R, "WID_SCMF_COLLAR_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TIE_EARRING_L, "WID_SCMF_TIE_EARRING_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TIE_EARRING, "WID_SCMF_TIE_EARRING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TIE_EARRING_R, "WID_SCMF_TIE_EARRING_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_GLASSES_L, "WID_SCMF_GLASSES_L"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_GLASSES, "WID_SCMF_GLASSES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_GLASSES_R, "WID_SCMF_GLASSES_R"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_CAPTION, "WID_CI_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_RAIL_DESC, "WID_CI_RAIL_DESC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_RAIL_COUNT, "WID_CI_RAIL_COUNT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_ROAD_DESC, "WID_CI_ROAD_DESC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_ROAD_COUNT, "WID_CI_ROAD_COUNT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_TRAM_DESC, "WID_CI_TRAM_DESC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_TRAM_COUNT, "WID_CI_TRAM_COUNT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_WATER_DESC, "WID_CI_WATER_DESC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_WATER_COUNT, "WID_CI_WATER_COUNT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_STATION_DESC, "WID_CI_STATION_DESC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_STATION_COUNT, "WID_CI_STATION_COUNT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_TOTAL_DESC, "WID_CI_TOTAL_DESC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CI_TOTAL, "WID_CI_TOTAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BC_CAPTION, "WID_BC_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BC_FACE, "WID_BC_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BC_QUESTION, "WID_BC_QUESTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BC_NO, "WID_BC_NO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BC_YES, "WID_BC_YES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_C_BACKGROUND, "WID_C_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SD_DAY, "WID_SD_DAY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SD_MONTH, "WID_SD_MONTH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SD_YEAR, "WID_SD_YEAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SD_SET_DATE, "WID_SD_SET_DATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_CAPTION, "WID_D_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_SELL, "WID_D_SELL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_SHOW_SELL_CHAIN, "WID_D_SHOW_SELL_CHAIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_SELL_CHAIN, "WID_D_SELL_CHAIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_SELL_ALL, "WID_D_SELL_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_AUTOREPLACE, "WID_D_AUTOREPLACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_MATRIX, "WID_D_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_V_SCROLL, "WID_D_V_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_SHOW_H_SCROLL, "WID_D_SHOW_H_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_H_SCROLL, "WID_D_H_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_BUILD, "WID_D_BUILD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_CLONE, "WID_D_CLONE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_LOCATION, "WID_D_LOCATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_SHOW_RENAME, "WID_D_SHOW_RENAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_RENAME, "WID_D_RENAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_VEHICLE_LIST, "WID_D_VEHICLE_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_STOP_ALL, "WID_D_STOP_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_D_START_ALL, "WID_D_START_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BDD_BACKGROUND, "WID_BDD_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BDD_X, "WID_BDD_X"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BDD_Y, "WID_BDD_Y"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_CANAL, "WID_DT_CANAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_LOCK, "WID_DT_LOCK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_DEMOLISH, "WID_DT_DEMOLISH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_DEPOT, "WID_DT_DEPOT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_STATION, "WID_DT_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_BUOY, "WID_DT_BUOY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_RIVER, "WID_DT_RIVER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_BUILD_AQUEDUCT, "WID_DT_BUILD_AQUEDUCT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DT_INVALID, "WID_DT_INVALID"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DM_ITEMS, "WID_DM_ITEMS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DM_SHOW_SCROLL, "WID_DM_SHOW_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DM_SCROLL, "WID_DM_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EP_QUESTION, "WID_EP_QUESTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EP_NO, "WID_EP_NO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EP_YES, "WID_EP_YES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EM_CAPTION, "WID_EM_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EM_FACE, "WID_EM_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EM_MESSAGE, "WID_EM_MESSAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_CAPTION, "WID_SL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SORT_BYNAME, "WID_SL_SORT_BYNAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SORT_BYDATE, "WID_SL_SORT_BYDATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_FILTER, "WID_SL_FILTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_BACKGROUND, "WID_SL_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_FILE_BACKGROUND, "WID_SL_FILE_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_HOME_BUTTON, "WID_SL_HOME_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_DRIVES_DIRECTORIES_LIST, "WID_SL_DRIVES_DIRECTORIES_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SCROLLBAR, "WID_SL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_CONTENT_DOWNLOAD, "WID_SL_CONTENT_DOWNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SAVE_OSK_TITLE, "WID_SL_SAVE_OSK_TITLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_DELETE_SELECTION, "WID_SL_DELETE_SELECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SAVE_GAME, "WID_SL_SAVE_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_CONTENT_DOWNLOAD_SEL, "WID_SL_CONTENT_DOWNLOAD_SEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_DETAILS, "WID_SL_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_NEWGRF_INFO, "WID_SL_NEWGRF_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_LOAD_BUTTON, "WID_SL_LOAD_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_MISSING_NEWGRFS, "WID_SL_MISSING_NEWGRFS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_CAPTION, "WID_FRW_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_RATE_GAMELOOP, "WID_FRW_RATE_GAMELOOP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_RATE_DRAWING, "WID_FRW_RATE_DRAWING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_RATE_FACTOR, "WID_FRW_RATE_FACTOR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_INFO_DATA_POINTS, "WID_FRW_INFO_DATA_POINTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_NAMES, "WID_FRW_TIMES_NAMES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_CURRENT, "WID_FRW_TIMES_CURRENT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_AVERAGE, "WID_FRW_TIMES_AVERAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_ALLOCSIZE, "WID_FRW_ALLOCSIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_SEL_MEMORY, "WID_FRW_SEL_MEMORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_SCROLLBAR, "WID_FRW_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FGW_CAPTION, "WID_FGW_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FGW_GRAPH, "WID_FGW_GRAPH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TEMPERATE, "WID_GL_TEMPERATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_ARCTIC, "WID_GL_ARCTIC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TROPICAL, "WID_GL_TROPICAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TOYLAND, "WID_GL_TOYLAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_MAPSIZE_X_PULLDOWN, "WID_GL_MAPSIZE_X_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_MAPSIZE_Y_PULLDOWN, "WID_GL_MAPSIZE_Y_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TOWN_PULLDOWN, "WID_GL_TOWN_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_INDUSTRY_PULLDOWN, "WID_GL_INDUSTRY_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_GENERATE_BUTTON, "WID_GL_GENERATE_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_MAX_HEIGHTLEVEL_DOWN, "WID_GL_MAX_HEIGHTLEVEL_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_MAX_HEIGHTLEVEL_TEXT, "WID_GL_MAX_HEIGHTLEVEL_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_MAX_HEIGHTLEVEL_UP, "WID_GL_MAX_HEIGHTLEVEL_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_START_DATE_DOWN, "WID_GL_START_DATE_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_START_DATE_TEXT, "WID_GL_START_DATE_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_START_DATE_UP, "WID_GL_START_DATE_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_SNOW_LEVEL_DOWN, "WID_GL_SNOW_LEVEL_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_SNOW_LEVEL_TEXT, "WID_GL_SNOW_LEVEL_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_SNOW_LEVEL_UP, "WID_GL_SNOW_LEVEL_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TREE_PULLDOWN, "WID_GL_TREE_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LANDSCAPE_PULLDOWN, "WID_GL_LANDSCAPE_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_HEIGHTMAP_NAME_TEXT, "WID_GL_HEIGHTMAP_NAME_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_HEIGHTMAP_SIZE_TEXT, "WID_GL_HEIGHTMAP_SIZE_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_HEIGHTMAP_ROTATION_PULLDOWN, "WID_GL_HEIGHTMAP_ROTATION_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TERRAIN_PULLDOWN, "WID_GL_TERRAIN_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_WATER_PULLDOWN, "WID_GL_WATER_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_RIVER_PULLDOWN, "WID_GL_RIVER_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_SMOOTHNESS_PULLDOWN, "WID_GL_SMOOTHNESS_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_VARIETY_PULLDOWN, "WID_GL_VARIETY_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_BORDERS_RANDOM, "WID_GL_BORDERS_RANDOM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_WATER_NW, "WID_GL_WATER_NW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_WATER_NE, "WID_GL_WATER_NE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_WATER_SE, "WID_GL_WATER_SE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_WATER_SW, "WID_GL_WATER_SW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_TEMPERATE, "WID_CS_TEMPERATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_ARCTIC, "WID_CS_ARCTIC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_TROPICAL, "WID_CS_TROPICAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_TOYLAND, "WID_CS_TOYLAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_EMPTY_WORLD, "WID_CS_EMPTY_WORLD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_RANDOM_WORLD, "WID_CS_RANDOM_WORLD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_MAPSIZE_X_PULLDOWN, "WID_CS_MAPSIZE_X_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_MAPSIZE_Y_PULLDOWN, "WID_CS_MAPSIZE_Y_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_START_DATE_DOWN, "WID_CS_START_DATE_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_START_DATE_TEXT, "WID_CS_START_DATE_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_START_DATE_UP, "WID_CS_START_DATE_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_FLAT_LAND_HEIGHT_DOWN, "WID_CS_FLAT_LAND_HEIGHT_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_FLAT_LAND_HEIGHT_TEXT, "WID_CS_FLAT_LAND_HEIGHT_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CS_FLAT_LAND_HEIGHT_UP, "WID_CS_FLAT_LAND_HEIGHT_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GP_PROGRESS_BAR, "WID_GP_PROGRESS_BAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GP_PROGRESS_TEXT, "WID_GP_PROGRESS_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GP_ABORT, "WID_GP_ABORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GOAL_CAPTION, "WID_GOAL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GOAL_LIST, "WID_GOAL_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GOAL_SCROLLBAR, "WID_GOAL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GQ_CAPTION, "WID_GQ_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GQ_QUESTION, "WID_GQ_QUESTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GQ_BUTTONS, "WID_GQ_BUTTONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GQ_BUTTON_1, "WID_GQ_BUTTON_1"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GQ_BUTTON_2, "WID_GQ_BUTTON_2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GQ_BUTTON_3, "WID_GQ_BUTTON_3"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_BACKGROUND, "WID_GL_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_FIRST_COMPANY, "WID_GL_FIRST_COMPANY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LAST_COMPANY, "WID_GL_LAST_COMPANY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CV_KEY_BUTTON, "WID_CV_KEY_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CV_BACKGROUND, "WID_CV_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CV_GRAPH, "WID_CV_GRAPH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CV_RESIZE, "WID_CV_RESIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PHG_KEY, "WID_PHG_KEY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PHG_DETAILED_PERFORMANCE, "WID_PHG_DETAILED_PERFORMANCE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PHG_BACKGROUND, "WID_PHG_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PHG_GRAPH, "WID_PHG_GRAPH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PHG_RESIZE, "WID_PHG_RESIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_BACKGROUND, "WID_CPR_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_HEADER, "WID_CPR_HEADER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_GRAPH, "WID_CPR_GRAPH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_RESIZE, "WID_CPR_RESIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_FOOTER, "WID_CPR_FOOTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_ENABLE_CARGOES, "WID_CPR_ENABLE_CARGOES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_DISABLE_CARGOES, "WID_CPR_DISABLE_CARGOES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_MATRIX, "WID_CPR_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_MATRIX_SCROLLBAR, "WID_CPR_MATRIX_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CL_BACKGROUND, "WID_CL_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PRD_SCORE_FIRST, "WID_PRD_SCORE_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PRD_SCORE_LAST, "WID_PRD_SCORE_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PRD_COMPANY_FIRST, "WID_PRD_COMPANY_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PRD_COMPANY_LAST, "WID_PRD_COMPANY_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_CAPTION, "WID_GL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_SORT_BY_ORDER, "WID_GL_SORT_BY_ORDER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_SORT_BY_DROPDOWN, "WID_GL_SORT_BY_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LIST_VEHICLE, "WID_GL_LIST_VEHICLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LIST_VEHICLE_SCROLLBAR, "WID_GL_LIST_VEHICLE_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_AVAILABLE_VEHICLES, "WID_GL_AVAILABLE_VEHICLES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_MANAGE_VEHICLES_DROPDOWN, "WID_GL_MANAGE_VEHICLES_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_STOP_ALL, "WID_GL_STOP_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_START_ALL, "WID_GL_START_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_ALL_VEHICLES, "WID_GL_ALL_VEHICLES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_DEFAULT_VEHICLES, "WID_GL_DEFAULT_VEHICLES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LIST_GROUP, "WID_GL_LIST_GROUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LIST_GROUP_SCROLLBAR, "WID_GL_LIST_GROUP_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_CREATE_GROUP, "WID_GL_CREATE_GROUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_DELETE_GROUP, "WID_GL_DELETE_GROUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_RENAME_GROUP, "WID_GL_RENAME_GROUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LIVERY_GROUP, "WID_GL_LIVERY_GROUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_REPLACE_PROTECTION, "WID_GL_REPLACE_PROTECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_INFO, "WID_GL_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_H_BACKGROUND, "WID_H_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DPI_MATRIX_WIDGET, "WID_DPI_MATRIX_WIDGET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DPI_SCROLLBAR, "WID_DPI_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DPI_INFOPANEL, "WID_DPI_INFOPANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DPI_DISPLAY_WIDGET, "WID_DPI_DISPLAY_WIDGET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_DPI_FUND_WIDGET, "WID_DPI_FUND_WIDGET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IV_CAPTION, "WID_IV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IV_VIEWPORT, "WID_IV_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IV_INFO, "WID_IV_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IV_GOTO, "WID_IV_GOTO"); - 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"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IC_NOTIFY, "WID_IC_NOTIFY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IC_PANEL, "WID_IC_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IC_SCROLLBAR, "WID_IC_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IC_CARGO_DROPDOWN, "WID_IC_CARGO_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IC_IND_DROPDOWN, "WID_IC_IND_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_GENERATE_GAME, "WID_SGI_GENERATE_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_LOAD_GAME, "WID_SGI_LOAD_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_PLAY_SCENARIO, "WID_SGI_PLAY_SCENARIO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_PLAY_HEIGHTMAP, "WID_SGI_PLAY_HEIGHTMAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_EDIT_SCENARIO, "WID_SGI_EDIT_SCENARIO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_PLAY_NETWORK, "WID_SGI_PLAY_NETWORK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TEMPERATE_LANDSCAPE, "WID_SGI_TEMPERATE_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_ARCTIC_LANDSCAPE, "WID_SGI_ARCTIC_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TROPIC_LANDSCAPE, "WID_SGI_TROPIC_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TOYLAND_LANDSCAPE, "WID_SGI_TOYLAND_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_BASESET_SELECTION, "WID_SGI_BASESET_SELECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_BASESET, "WID_SGI_BASESET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TRANSLATION_SELECTION, "WID_SGI_TRANSLATION_SELECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_TRANSLATION, "WID_SGI_TRANSLATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_OPTIONS, "WID_SGI_OPTIONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_HIGHSCORE, "WID_SGI_HIGHSCORE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_SETTINGS_OPTIONS, "WID_SGI_SETTINGS_OPTIONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_GRF_SETTINGS, "WID_SGI_GRF_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_CONTENT_DOWNLOAD, "WID_SGI_CONTENT_DOWNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_AI_SETTINGS, "WID_SGI_AI_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SGI_EXIT, "WID_SGI_EXIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_CAPTION, "WID_LGL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_SATURATION, "WID_LGL_SATURATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_SATURATION_FIRST, "WID_LGL_SATURATION_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_SATURATION_LAST, "WID_LGL_SATURATION_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_COMPANIES, "WID_LGL_COMPANIES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_COMPANY_FIRST, "WID_LGL_COMPANY_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_COMPANY_LAST, "WID_LGL_COMPANY_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_COMPANIES_ALL, "WID_LGL_COMPANIES_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_COMPANIES_NONE, "WID_LGL_COMPANIES_NONE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_CARGOES, "WID_LGL_CARGOES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_CARGO_FIRST, "WID_LGL_CARGO_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_CARGO_LAST, "WID_LGL_CARGO_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_CARGOES_ALL, "WID_LGL_CARGOES_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LGL_CARGOES_NONE, "WID_LGL_CARGOES_NONE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_VIEWPORT, "WID_M_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_LI_BACKGROUND, "WID_LI_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BACKGROUND, "WID_TT_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_A_SCROLLING_TEXT, "WID_A_SCROLLING_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_A_WEBSITE, "WID_A_WEBSITE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_A_COPYRIGHT, "WID_A_COPYRIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_CAPTION, "WID_QS_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_TEXT, "WID_QS_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_WARNING, "WID_QS_WARNING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_DEFAULT, "WID_QS_DEFAULT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_CANCEL, "WID_QS_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QS_OK, "WID_QS_OK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_Q_CAPTION, "WID_Q_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_Q_TEXT, "WID_Q_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_Q_NO, "WID_Q_NO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_Q_YES, "WID_Q_YES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_CAPTION, "WID_TF_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_WRAPTEXT, "WID_TF_WRAPTEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_BACKGROUND, "WID_TF_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_VSCROLLBAR, "WID_TF_VSCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_HSCROLLBAR, "WID_TF_HSCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_CAPTION, "WID_MTS_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_LIST_LEFT, "WID_MTS_LIST_LEFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_PLAYLIST, "WID_MTS_PLAYLIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_LIST_RIGHT, "WID_MTS_LIST_RIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_MUSICSET, "WID_MTS_MUSICSET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_ALL, "WID_MTS_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_OLD, "WID_MTS_OLD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_NEW, "WID_MTS_NEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_EZY, "WID_MTS_EZY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_CUSTOM1, "WID_MTS_CUSTOM1"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_CUSTOM2, "WID_MTS_CUSTOM2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_CLEAR, "WID_MTS_CLEAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_PREV, "WID_M_PREV"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_NEXT, "WID_M_NEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_STOP, "WID_M_STOP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_PLAY, "WID_M_PLAY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_SLIDERS, "WID_M_SLIDERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_MUSIC_VOL, "WID_M_MUSIC_VOL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_EFFECT_VOL, "WID_M_EFFECT_VOL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_BACKGROUND, "WID_M_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_TRACK, "WID_M_TRACK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_TRACK_NR, "WID_M_TRACK_NR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_TRACK_TITLE, "WID_M_TRACK_TITLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_TRACK_NAME, "WID_M_TRACK_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_SHUFFLE, "WID_M_SHUFFLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_PROGRAMME, "WID_M_PROGRAMME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_ALL, "WID_M_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_OLD, "WID_M_OLD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_NEW, "WID_M_NEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_EZY, "WID_M_EZY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_CUSTOM1, "WID_M_CUSTOM1"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_M_CUSTOM2, "WID_M_CUSTOM2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NC_CLOSE, "WID_NC_CLOSE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NC_BACKGROUND, "WID_NC_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NC_DESTINATION, "WID_NC_DESTINATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NC_TEXTBOX, "WID_NC_TEXTBOX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NC_SENDBUTTON, "WID_NC_SENDBUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCDS_BACKGROUND, "WID_NCDS_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCDS_CANCELOK, "WID_NCDS_CANCELOK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_BACKGROUND, "WID_NCL_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_FILTER_CAPT, "WID_NCL_FILTER_CAPT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_FILTER, "WID_NCL_FILTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_CHECKBOX, "WID_NCL_CHECKBOX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_TYPE, "WID_NCL_TYPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_NAME, "WID_NCL_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_MATRIX, "WID_NCL_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_SCROLLBAR, "WID_NCL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_DETAILS, "WID_NCL_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_TEXTFILE, "WID_NCL_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_SELECT_ALL, "WID_NCL_SELECT_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_SELECT_UPDATE, "WID_NCL_SELECT_UPDATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_UNSELECT, "WID_NCL_UNSELECT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_OPEN_URL, "WID_NCL_OPEN_URL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_CANCEL, "WID_NCL_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_DOWNLOAD, "WID_NCL_DOWNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_SEL_ALL_UPDATE, "WID_NCL_SEL_ALL_UPDATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCL_SEARCH_EXTERNAL, "WID_NCL_SEARCH_EXTERNAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_MAIN, "WID_NG_MAIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_CONNECTION, "WID_NG_CONNECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_CONN_BTN, "WID_NG_CONN_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_CLIENT_LABEL, "WID_NG_CLIENT_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_CLIENT, "WID_NG_CLIENT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_FILTER_LABEL, "WID_NG_FILTER_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_FILTER, "WID_NG_FILTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_HEADER, "WID_NG_HEADER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_NAME, "WID_NG_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_CLIENTS, "WID_NG_CLIENTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_MAPSIZE, "WID_NG_MAPSIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_DATE, "WID_NG_DATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_YEARS, "WID_NG_YEARS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_INFO, "WID_NG_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_MATRIX, "WID_NG_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_SCROLLBAR, "WID_NG_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_LASTJOINED_LABEL, "WID_NG_LASTJOINED_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_LASTJOINED, "WID_NG_LASTJOINED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_LASTJOINED_SPACER, "WID_NG_LASTJOINED_SPACER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_DETAILS, "WID_NG_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_DETAILS_SPACER, "WID_NG_DETAILS_SPACER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_JOIN, "WID_NG_JOIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_REFRESH, "WID_NG_REFRESH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_NEWGRF, "WID_NG_NEWGRF"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_NEWGRF_SEL, "WID_NG_NEWGRF_SEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_NEWGRF_MISSING, "WID_NG_NEWGRF_MISSING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_NEWGRF_MISSING_SEL, "WID_NG_NEWGRF_MISSING_SEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_FIND, "WID_NG_FIND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_ADD, "WID_NG_ADD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_START, "WID_NG_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NG_CANCEL, "WID_NG_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_BACKGROUND, "WID_NSS_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_GAMENAME_LABEL, "WID_NSS_GAMENAME_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_GAMENAME, "WID_NSS_GAMENAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_SETPWD, "WID_NSS_SETPWD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CONNTYPE_LABEL, "WID_NSS_CONNTYPE_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CONNTYPE_BTN, "WID_NSS_CONNTYPE_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CLIENTS_LABEL, "WID_NSS_CLIENTS_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CLIENTS_BTND, "WID_NSS_CLIENTS_BTND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CLIENTS_TXT, "WID_NSS_CLIENTS_TXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CLIENTS_BTNU, "WID_NSS_CLIENTS_BTNU"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_COMPANIES_LABEL, "WID_NSS_COMPANIES_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_COMPANIES_BTND, "WID_NSS_COMPANIES_BTND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_COMPANIES_TXT, "WID_NSS_COMPANIES_TXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_COMPANIES_BTNU, "WID_NSS_COMPANIES_BTNU"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_SPECTATORS_LABEL, "WID_NSS_SPECTATORS_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_SPECTATORS_BTND, "WID_NSS_SPECTATORS_BTND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_SPECTATORS_TXT, "WID_NSS_SPECTATORS_TXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_SPECTATORS_BTNU, "WID_NSS_SPECTATORS_BTNU"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_LANGUAGE_LABEL, "WID_NSS_LANGUAGE_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_LANGUAGE_BTN, "WID_NSS_LANGUAGE_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_GENERATE_GAME, "WID_NSS_GENERATE_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_LOAD_GAME, "WID_NSS_LOAD_GAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_PLAY_SCENARIO, "WID_NSS_PLAY_SCENARIO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_PLAY_HEIGHTMAP, "WID_NSS_PLAY_HEIGHTMAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NSS_CANCEL, "WID_NSS_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_BACKGROUND, "WID_NL_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_TEXT, "WID_NL_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_HEADER, "WID_NL_HEADER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_MATRIX, "WID_NL_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_SCROLLBAR, "WID_NL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_DETAILS, "WID_NL_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_JOIN, "WID_NL_JOIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_NEW, "WID_NL_NEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_SPECTATE, "WID_NL_SPECTATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_REFRESH, "WID_NL_REFRESH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NL_CANCEL, "WID_NL_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CL_PANEL, "WID_CL_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CLP_PANEL, "WID_CLP_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NJS_BACKGROUND, "WID_NJS_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NJS_CANCELOK, "WID_NJS_CANCELOK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_BACKGROUND, "WID_NCP_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_LABEL, "WID_NCP_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_PASSWORD, "WID_NCP_PASSWORD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_SAVE_AS_DEFAULT_PASSWORD, "WID_NCP_SAVE_AS_DEFAULT_PASSWORD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_WARNING, "WID_NCP_WARNING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_CANCEL, "WID_NCP_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NCP_OK, "WID_NCP_OK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_CAPTION, "WID_NGRFI_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_PARENT, "WID_NGRFI_PARENT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_VEH_PREV, "WID_NGRFI_VEH_PREV"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_VEH_NEXT, "WID_NGRFI_VEH_NEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_VEH_CHAIN, "WID_NGRFI_VEH_CHAIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_MAINPANEL, "WID_NGRFI_MAINPANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NGRFI_SCROLLBAR, "WID_NGRFI_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_CAPTION, "WID_SA_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_PREVIOUS, "WID_SA_PREVIOUS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_GOTO, "WID_SA_GOTO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_NEXT, "WID_SA_NEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_UP, "WID_SA_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_LEFT, "WID_SA_LEFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_RIGHT, "WID_SA_RIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_DOWN, "WID_SA_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_SPRITE, "WID_SA_SPRITE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_OFFSETS_ABS, "WID_SA_OFFSETS_ABS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_OFFSETS_REL, "WID_SA_OFFSETS_REL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_PICKER, "WID_SA_PICKER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_LIST, "WID_SA_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_SCROLLBAR, "WID_SA_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_RESET_REL, "WID_SA_RESET_REL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_SHOW_NUMPAR, "WID_NP_SHOW_NUMPAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_DEC, "WID_NP_NUMPAR_DEC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_INC, "WID_NP_NUMPAR_INC"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR, "WID_NP_NUMPAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_TEXT, "WID_NP_NUMPAR_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_BACKGROUND, "WID_NP_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_SCROLLBAR, "WID_NP_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_ACCEPT, "WID_NP_ACCEPT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_RESET, "WID_NP_RESET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_SHOW_DESCRIPTION, "WID_NP_SHOW_DESCRIPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_DESCRIPTION, "WID_NP_DESCRIPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_PRESET_LIST, "WID_NS_PRESET_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_PRESET_SAVE, "WID_NS_PRESET_SAVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_PRESET_DELETE, "WID_NS_PRESET_DELETE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_ADD, "WID_NS_ADD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_REMOVE, "WID_NS_REMOVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_MOVE_UP, "WID_NS_MOVE_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_MOVE_DOWN, "WID_NS_MOVE_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_UPGRADE, "WID_NS_UPGRADE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_FILTER, "WID_NS_FILTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_FILE_LIST, "WID_NS_FILE_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_SCROLLBAR, "WID_NS_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_AVAIL_LIST, "WID_NS_AVAIL_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_SCROLL2BAR, "WID_NS_SCROLL2BAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_NEWGRF_INFO_TITLE, "WID_NS_NEWGRF_INFO_TITLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_NEWGRF_INFO, "WID_NS_NEWGRF_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_OPEN_URL, "WID_NS_OPEN_URL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_NEWGRF_TEXTFILE, "WID_NS_NEWGRF_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_SET_PARAMETERS, "WID_NS_SET_PARAMETERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_VIEW_PARAMETERS, "WID_NS_VIEW_PARAMETERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_TOGGLE_PALETTE, "WID_NS_TOGGLE_PALETTE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_APPLY_CHANGES, "WID_NS_APPLY_CHANGES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_RESCAN_FILES, "WID_NS_RESCAN_FILES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_RESCAN_FILES2, "WID_NS_RESCAN_FILES2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_CONTENT_DOWNLOAD, "WID_NS_CONTENT_DOWNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_CONTENT_DOWNLOAD2, "WID_NS_CONTENT_DOWNLOAD2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_SHOW_REMOVE, "WID_NS_SHOW_REMOVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NS_SHOW_APPLY, "WID_NS_SHOW_APPLY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SVP_PRESET_LIST, "WID_SVP_PRESET_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SVP_SCROLLBAR, "WID_SVP_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SVP_EDITBOX, "WID_SVP_EDITBOX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SVP_CANCEL, "WID_SVP_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SVP_SAVE, "WID_SVP_SAVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SP_PROGRESS_BAR, "WID_SP_PROGRESS_BAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SP_PROGRESS_TEXT, "WID_SP_PROGRESS_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_PANEL, "WID_N_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_TITLE, "WID_N_TITLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_HEADLINE, "WID_N_HEADLINE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_CLOSEBOX, "WID_N_CLOSEBOX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_DATE, "WID_N_DATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_CAPTION, "WID_N_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_INSET, "WID_N_INSET"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_VIEWPORT, "WID_N_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_COMPANY_MSG, "WID_N_COMPANY_MSG"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_MESSAGE, "WID_N_MESSAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_MGR_FACE, "WID_N_MGR_FACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_MGR_NAME, "WID_N_MGR_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_VEH_TITLE, "WID_N_VEH_TITLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_VEH_BKGND, "WID_N_VEH_BKGND"); - 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"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_CLASS_LIST, "WID_BO_CLASS_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_SCROLLBAR, "WID_BO_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_OBJECT_MATRIX, "WID_BO_OBJECT_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_OBJECT_SPRITE, "WID_BO_OBJECT_SPRITE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_OBJECT_NAME, "WID_BO_OBJECT_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_OBJECT_SIZE, "WID_BO_OBJECT_SIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_INFO, "WID_BO_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_SELECT_MATRIX, "WID_BO_SELECT_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_SELECT_IMAGE, "WID_BO_SELECT_IMAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BO_SELECT_SCROLL, "WID_BO_SELECT_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_CAPTION, "WID_O_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_TIMETABLE_VIEW, "WID_O_TIMETABLE_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_ORDER_LIST, "WID_O_ORDER_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SCROLLBAR, "WID_O_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SKIP, "WID_O_SKIP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_DELETE, "WID_O_DELETE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_STOP_SHARING, "WID_O_STOP_SHARING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_NON_STOP, "WID_O_NON_STOP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_GOTO, "WID_O_GOTO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_FULL_LOAD, "WID_O_FULL_LOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_UNLOAD, "WID_O_UNLOAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_REFIT, "WID_O_REFIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SERVICE, "WID_O_SERVICE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_EMPTY, "WID_O_EMPTY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_REFIT_DROPDOWN, "WID_O_REFIT_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_COND_VARIABLE, "WID_O_COND_VARIABLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_COND_COMPARATOR, "WID_O_COND_COMPARATOR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_COND_VALUE, "WID_O_COND_VALUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SEL_TOP_LEFT, "WID_O_SEL_TOP_LEFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SEL_TOP_MIDDLE, "WID_O_SEL_TOP_MIDDLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SEL_TOP_RIGHT, "WID_O_SEL_TOP_RIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SEL_TOP_ROW_GROUNDVEHICLE, "WID_O_SEL_TOP_ROW_GROUNDVEHICLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SEL_TOP_ROW, "WID_O_SEL_TOP_ROW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SEL_BOTTOM_MIDDLE, "WID_O_SEL_BOTTOM_MIDDLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_O_SHARED_ORDER_LIST, "WID_O_SHARED_ORDER_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_CAPTION, "WID_OSK_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_TEXT, "WID_OSK_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_CANCEL, "WID_OSK_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_OK, "WID_OSK_OK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_BACKSPACE, "WID_OSK_BACKSPACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_SPECIAL, "WID_OSK_SPECIAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_CAPS, "WID_OSK_CAPS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_SHIFT, "WID_OSK_SHIFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_SPACE, "WID_OSK_SPACE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_LEFT, "WID_OSK_LEFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_RIGHT, "WID_OSK_RIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_LETTERS, "WID_OSK_LETTERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_NUMBERS_FIRST, "WID_OSK_NUMBERS_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_NUMBERS_LAST, "WID_OSK_NUMBERS_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_QWERTY_FIRST, "WID_OSK_QWERTY_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_QWERTY_LAST, "WID_OSK_QWERTY_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_ASDFG_FIRST, "WID_OSK_ASDFG_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_ASDFG_LAST, "WID_OSK_ASDFG_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_ZXCVB_FIRST, "WID_OSK_ZXCVB_FIRST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_OSK_ZXCVB_LAST, "WID_OSK_ZXCVB_LAST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_CAPTION, "WID_RAT_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_NS, "WID_RAT_BUILD_NS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_X, "WID_RAT_BUILD_X"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_EW, "WID_RAT_BUILD_EW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_Y, "WID_RAT_BUILD_Y"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_AUTORAIL, "WID_RAT_AUTORAIL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_DEMOLISH, "WID_RAT_DEMOLISH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_DEPOT, "WID_RAT_BUILD_DEPOT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_WAYPOINT, "WID_RAT_BUILD_WAYPOINT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_STATION, "WID_RAT_BUILD_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_SIGNALS, "WID_RAT_BUILD_SIGNALS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_BRIDGE, "WID_RAT_BUILD_BRIDGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_BUILD_TUNNEL, "WID_RAT_BUILD_TUNNEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_REMOVE, "WID_RAT_REMOVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_RAT_CONVERT_RAIL, "WID_RAT_CONVERT_RAIL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_DIR_X, "WID_BRAS_PLATFORM_DIR_X"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_DIR_Y, "WID_BRAS_PLATFORM_DIR_Y"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_1, "WID_BRAS_PLATFORM_NUM_1"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_2, "WID_BRAS_PLATFORM_NUM_2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_3, "WID_BRAS_PLATFORM_NUM_3"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_4, "WID_BRAS_PLATFORM_NUM_4"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_5, "WID_BRAS_PLATFORM_NUM_5"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_6, "WID_BRAS_PLATFORM_NUM_6"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_7, "WID_BRAS_PLATFORM_NUM_7"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_1, "WID_BRAS_PLATFORM_LEN_1"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_2, "WID_BRAS_PLATFORM_LEN_2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_3, "WID_BRAS_PLATFORM_LEN_3"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_4, "WID_BRAS_PLATFORM_LEN_4"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_5, "WID_BRAS_PLATFORM_LEN_5"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_6, "WID_BRAS_PLATFORM_LEN_6"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_7, "WID_BRAS_PLATFORM_LEN_7"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_DRAG_N_DROP, "WID_BRAS_PLATFORM_DRAG_N_DROP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_HIGHLIGHT_OFF, "WID_BRAS_HIGHLIGHT_OFF"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_HIGHLIGHT_ON, "WID_BRAS_HIGHLIGHT_ON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_COVERAGE_TEXTS, "WID_BRAS_COVERAGE_TEXTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_MATRIX, "WID_BRAS_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_IMAGE, "WID_BRAS_IMAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_MATRIX_SCROLL, "WID_BRAS_MATRIX_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_SHOW_NEWST_DEFSIZE, "WID_BRAS_SHOW_NEWST_DEFSIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_SHOW_NEWST_ADDITIONS, "WID_BRAS_SHOW_NEWST_ADDITIONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_SHOW_NEWST_MATRIX, "WID_BRAS_SHOW_NEWST_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_SHOW_NEWST_RESIZE, "WID_BRAS_SHOW_NEWST_RESIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_SHOW_NEWST_TYPE, "WID_BRAS_SHOW_NEWST_TYPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_NEWST_LIST, "WID_BRAS_NEWST_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_NEWST_SCROLL, "WID_BRAS_NEWST_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_NUM_BEGIN, "WID_BRAS_PLATFORM_NUM_BEGIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAS_PLATFORM_LEN_BEGIN, "WID_BRAS_PLATFORM_LEN_BEGIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_SEMAPHORE_NORM, "WID_BS_SEMAPHORE_NORM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_SEMAPHORE_ENTRY, "WID_BS_SEMAPHORE_ENTRY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_SEMAPHORE_EXIT, "WID_BS_SEMAPHORE_EXIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_SEMAPHORE_COMBO, "WID_BS_SEMAPHORE_COMBO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_SEMAPHORE_PBS, "WID_BS_SEMAPHORE_PBS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_SEMAPHORE_PBS_OWAY, "WID_BS_SEMAPHORE_PBS_OWAY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_ELECTRIC_NORM, "WID_BS_ELECTRIC_NORM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_ELECTRIC_ENTRY, "WID_BS_ELECTRIC_ENTRY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_ELECTRIC_EXIT, "WID_BS_ELECTRIC_EXIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_ELECTRIC_COMBO, "WID_BS_ELECTRIC_COMBO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_ELECTRIC_PBS, "WID_BS_ELECTRIC_PBS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_ELECTRIC_PBS_OWAY, "WID_BS_ELECTRIC_PBS_OWAY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_CONVERT, "WID_BS_CONVERT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_DRAG_SIGNALS_DENSITY_LABEL, "WID_BS_DRAG_SIGNALS_DENSITY_LABEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_DRAG_SIGNALS_DENSITY_DECREASE, "WID_BS_DRAG_SIGNALS_DENSITY_DECREASE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, "WID_BS_DRAG_SIGNALS_DENSITY_INCREASE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAD_DEPOT_NE, "WID_BRAD_DEPOT_NE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAD_DEPOT_SE, "WID_BRAD_DEPOT_SE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAD_DEPOT_SW, "WID_BRAD_DEPOT_SW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRAD_DEPOT_NW, "WID_BRAD_DEPOT_NW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRW_WAYPOINT_MATRIX, "WID_BRW_WAYPOINT_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRW_WAYPOINT, "WID_BRW_WAYPOINT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BRW_SCROLL, "WID_BRW_SCROLL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_CAPTION, "WID_ROT_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_ROAD_X, "WID_ROT_ROAD_X"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_ROAD_Y, "WID_ROT_ROAD_Y"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_AUTOROAD, "WID_ROT_AUTOROAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_DEMOLISH, "WID_ROT_DEMOLISH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_DEPOT, "WID_ROT_DEPOT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_BUS_STATION, "WID_ROT_BUS_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_TRUCK_STATION, "WID_ROT_TRUCK_STATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_ONE_WAY, "WID_ROT_ONE_WAY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_BUILD_BRIDGE, "WID_ROT_BUILD_BRIDGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_BUILD_TUNNEL, "WID_ROT_BUILD_TUNNEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_REMOVE, "WID_ROT_REMOVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ROT_CONVERT_ROAD, "WID_ROT_CONVERT_ROAD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROD_CAPTION, "WID_BROD_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROD_DEPOT_NE, "WID_BROD_DEPOT_NE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROD_DEPOT_SE, "WID_BROD_DEPOT_SE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROD_DEPOT_SW, "WID_BROD_DEPOT_SW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROD_DEPOT_NW, "WID_BROD_DEPOT_NW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_CAPTION, "WID_BROS_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_BACKGROUND, "WID_BROS_BACKGROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_STATION_NE, "WID_BROS_STATION_NE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_STATION_SE, "WID_BROS_STATION_SE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_STATION_SW, "WID_BROS_STATION_SW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_STATION_NW, "WID_BROS_STATION_NW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_STATION_X, "WID_BROS_STATION_X"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_STATION_Y, "WID_BROS_STATION_Y"); - 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_SC_TAKE_MINIMAP, "WID_SC_TAKE_MINIMAP"); - 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"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_ROADSIDE_DROPDOWN, "WID_GO_ROADSIDE_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_TOWNNAME_DROPDOWN, "WID_GO_TOWNNAME_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_AUTOSAVE_DROPDOWN, "WID_GO_AUTOSAVE_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_LANG_DROPDOWN, "WID_GO_LANG_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_RESOLUTION_DROPDOWN, "WID_GO_RESOLUTION_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FULLSCREEN_BUTTON, "WID_GO_FULLSCREEN_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_GUI_ZOOM_DROPDOWN, "WID_GO_GUI_ZOOM_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_DROPDOWN, "WID_GO_BASE_GRF_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_STATUS, "WID_GO_BASE_GRF_STATUS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_TEXTFILE, "WID_GO_BASE_GRF_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_DESCRIPTION, "WID_GO_BASE_GRF_DESCRIPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_SFX_DROPDOWN, "WID_GO_BASE_SFX_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_SFX_TEXTFILE, "WID_GO_BASE_SFX_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_SFX_DESCRIPTION, "WID_GO_BASE_SFX_DESCRIPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_DROPDOWN, "WID_GO_BASE_MUSIC_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_STATUS, "WID_GO_BASE_MUSIC_STATUS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_TEXTFILE, "WID_GO_BASE_MUSIC_TEXTFILE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_DESCRIPTION, "WID_GO_BASE_MUSIC_DESCRIPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FONT_ZOOM_DROPDOWN, "WID_GO_FONT_ZOOM_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_FILTER, "WID_GS_FILTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_OPTIONSPANEL, "WID_GS_OPTIONSPANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_SCROLLBAR, "WID_GS_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_HELP_TEXT, "WID_GS_HELP_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_EXPAND_ALL, "WID_GS_EXPAND_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_COLLAPSE_ALL, "WID_GS_COLLAPSE_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_RESTRICT_CATEGORY, "WID_GS_RESTRICT_CATEGORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_RESTRICT_TYPE, "WID_GS_RESTRICT_TYPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_RESTRICT_DROPDOWN, "WID_GS_RESTRICT_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_TYPE_DROPDOWN, "WID_GS_TYPE_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_RATE_DOWN, "WID_CC_RATE_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_RATE_UP, "WID_CC_RATE_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_RATE, "WID_CC_RATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_SEPARATOR_EDIT, "WID_CC_SEPARATOR_EDIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_SEPARATOR, "WID_CC_SEPARATOR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_PREFIX_EDIT, "WID_CC_PREFIX_EDIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_PREFIX, "WID_CC_PREFIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_SUFFIX_EDIT, "WID_CC_SUFFIX_EDIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_SUFFIX, "WID_CC_SUFFIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_YEAR_DOWN, "WID_CC_YEAR_DOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_YEAR_UP, "WID_CC_YEAR_UP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_YEAR, "WID_CC_YEAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CC_PREVIEW, "WID_CC_PREVIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SIL_CAPTION, "WID_SIL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SIL_LIST, "WID_SIL_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SIL_SCROLLBAR, "WID_SIL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SIL_FILTER_TEXT, "WID_SIL_FILTER_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SIL_FILTER_MATCH_CASE_BTN, "WID_SIL_FILTER_MATCH_CASE_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SIL_FILTER_ENTER_BTN, "WID_SIL_FILTER_ENTER_BTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_CAPTION, "WID_QES_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_TEXT, "WID_QES_TEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_OK, "WID_QES_OK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_CANCEL, "WID_QES_CANCEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_DELETE, "WID_QES_DELETE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_PREVIOUS, "WID_QES_PREVIOUS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_QES_NEXT, "WID_QES_NEXT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_CAPTION, "WID_SM_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_MAP_BORDER, "WID_SM_MAP_BORDER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_MAP, "WID_SM_MAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_LEGEND, "WID_SM_LEGEND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_BLANK, "WID_SM_BLANK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_ZOOM_IN, "WID_SM_ZOOM_IN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_ZOOM_OUT, "WID_SM_ZOOM_OUT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_CONTOUR, "WID_SM_CONTOUR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_VEHICLES, "WID_SM_VEHICLES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_INDUSTRIES, "WID_SM_INDUSTRIES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_LINKSTATS, "WID_SM_LINKSTATS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_ROUTES, "WID_SM_ROUTES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_VEGETATION, "WID_SM_VEGETATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_OWNERS, "WID_SM_OWNERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_CENTERMAP, "WID_SM_CENTERMAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_TOGGLETOWNNAME, "WID_SM_TOGGLETOWNNAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_SELECT_BUTTONS, "WID_SM_SELECT_BUTTONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_ENABLE_ALL, "WID_SM_ENABLE_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_DISABLE_ALL, "WID_SM_DISABLE_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SM_SHOW_HEIGHT, "WID_SM_SHOW_HEIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_CAPTION, "WID_SV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_SORT_ORDER, "WID_SV_SORT_ORDER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_SORT_BY, "WID_SV_SORT_BY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_GROUP, "WID_SV_GROUP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_GROUP_BY, "WID_SV_GROUP_BY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_WAITING, "WID_SV_WAITING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_SCROLLBAR, "WID_SV_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_ACCEPT_RATING_LIST, "WID_SV_ACCEPT_RATING_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_LOCATION, "WID_SV_LOCATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_ACCEPTS_RATINGS, "WID_SV_ACCEPTS_RATINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_RENAME, "WID_SV_RENAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_CLOSE_AIRPORT, "WID_SV_CLOSE_AIRPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_TRAINS, "WID_SV_TRAINS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_ROADVEHS, "WID_SV_ROADVEHS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_SHIPS, "WID_SV_SHIPS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_PLANES, "WID_SV_PLANES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SV_CATCHMENT, "WID_SV_CATCHMENT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_CAPTION, "WID_STL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_LIST, "WID_STL_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_SCROLLBAR, "WID_STL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_TRAIN, "WID_STL_TRAIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_TRUCK, "WID_STL_TRUCK"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_BUS, "WID_STL_BUS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_AIRPLANE, "WID_STL_AIRPLANE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_SHIP, "WID_STL_SHIP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_FACILALL, "WID_STL_FACILALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_NOCARGOWAITING, "WID_STL_NOCARGOWAITING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_CARGOALL, "WID_STL_CARGOALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_SORTBY, "WID_STL_SORTBY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_SORTDROPBTN, "WID_STL_SORTDROPBTN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_STL_CARGOSTART, "WID_STL_CARGOSTART"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_JS_CAPTION, "WID_JS_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_JS_PANEL, "WID_JS_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_JS_SCROLLBAR, "WID_JS_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_S_LEFT, "WID_S_LEFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_S_MIDDLE, "WID_S_MIDDLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_S_RIGHT, "WID_S_RIGHT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SB_CAPTION, "WID_SB_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SB_SEL_PAGE, "WID_SB_SEL_PAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SB_PAGE_PANEL, "WID_SB_PAGE_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SB_SCROLLBAR, "WID_SB_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SB_PREV_PAGE, "WID_SB_PREV_PAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SB_NEXT_PAGE, "WID_SB_NEXT_PAGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SUL_PANEL, "WID_SUL_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SUL_SCROLLBAR, "WID_SUL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_SHOW_PLACE_OBJECT, "WID_TT_SHOW_PLACE_OBJECT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BUTTONS_START, "WID_TT_BUTTONS_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_LOWER_LAND, "WID_TT_LOWER_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_RAISE_LAND, "WID_TT_RAISE_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_LEVEL_LAND, "WID_TT_LEVEL_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_DEMOLISH, "WID_TT_DEMOLISH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BUY_LAND, "WID_TT_BUY_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_PLANT_TREES, "WID_TT_PLANT_TREES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_PLACE_SIGN, "WID_TT_PLACE_SIGN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_PLACE_OBJECT, "WID_TT_PLACE_OBJECT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_SHOW_PLACE_DESERT, "WID_ETT_SHOW_PLACE_DESERT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_START, "WID_ETT_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_DOTS, "WID_ETT_DOTS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_BUTTONS_START, "WID_ETT_BUTTONS_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_DEMOLISH, "WID_ETT_DEMOLISH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_LOWER_LAND, "WID_ETT_LOWER_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_RAISE_LAND, "WID_ETT_RAISE_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_LEVEL_LAND, "WID_ETT_LEVEL_LAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_PLACE_ROCKS, "WID_ETT_PLACE_ROCKS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_PLACE_DESERT, "WID_ETT_PLACE_DESERT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_PLACE_OBJECT, "WID_ETT_PLACE_OBJECT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_BUTTONS_END, "WID_ETT_BUTTONS_END"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_INCREASE_SIZE, "WID_ETT_INCREASE_SIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_DECREASE_SIZE, "WID_ETT_DECREASE_SIZE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_NEW_SCENARIO, "WID_ETT_NEW_SCENARIO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ETT_RESET_LANDSCAPE, "WID_ETT_RESET_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_CAPTION, "WID_VT_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_ORDER_VIEW, "WID_VT_ORDER_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_TIMETABLE_PANEL, "WID_VT_TIMETABLE_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_ARRIVAL_DEPARTURE_PANEL, "WID_VT_ARRIVAL_DEPARTURE_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_SCROLLBAR, "WID_VT_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_SUMMARY_PANEL, "WID_VT_SUMMARY_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_START_DATE, "WID_VT_START_DATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_CHANGE_TIME, "WID_VT_CHANGE_TIME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_CLEAR_TIME, "WID_VT_CLEAR_TIME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_RESET_LATENESS, "WID_VT_RESET_LATENESS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_AUTOFILL, "WID_VT_AUTOFILL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_EXPECTED, "WID_VT_EXPECTED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_SHARED_ORDER_LIST, "WID_VT_SHARED_ORDER_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_ARRIVAL_DEPARTURE_SELECTION, "WID_VT_ARRIVAL_DEPARTURE_SELECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_EXPECTED_SELECTION, "WID_VT_EXPECTED_SELECTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_CHANGE_SPEED, "WID_VT_CHANGE_SPEED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VT_CLEAR_SPEED, "WID_VT_CLEAR_SPEED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_PAUSE, "WID_TN_PAUSE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_FAST_FORWARD, "WID_TN_FAST_FORWARD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_SETTINGS, "WID_TN_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_SAVE, "WID_TN_SAVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_SMALL_MAP, "WID_TN_SMALL_MAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_TOWNS, "WID_TN_TOWNS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_SUBSIDIES, "WID_TN_SUBSIDIES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_STATIONS, "WID_TN_STATIONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_FINANCES, "WID_TN_FINANCES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_COMPANIES, "WID_TN_COMPANIES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_STORY, "WID_TN_STORY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_GOAL, "WID_TN_GOAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_GRAPHS, "WID_TN_GRAPHS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_LEAGUE, "WID_TN_LEAGUE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_INDUSTRIES, "WID_TN_INDUSTRIES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_VEHICLE_START, "WID_TN_VEHICLE_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_TRAINS, "WID_TN_TRAINS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ROADVEHS, "WID_TN_ROADVEHS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_SHIPS, "WID_TN_SHIPS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_AIRCRAFT, "WID_TN_AIRCRAFT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ZOOM_IN, "WID_TN_ZOOM_IN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ZOOM_OUT, "WID_TN_ZOOM_OUT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_BUILDING_TOOLS_START, "WID_TN_BUILDING_TOOLS_START"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_RAILS, "WID_TN_RAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_ROADS, "WID_TN_ROADS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_TRAMS, "WID_TN_TRAMS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_WATER, "WID_TN_WATER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_AIR, "WID_TN_AIR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_LANDSCAPE, "WID_TN_LANDSCAPE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_MUSIC_SOUND, "WID_TN_MUSIC_SOUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_MESSAGES, "WID_TN_MESSAGES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_HELP, "WID_TN_HELP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_SWITCH_BAR, "WID_TN_SWITCH_BAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TN_END, "WID_TN_END"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_PAUSE, "WID_TE_PAUSE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_FAST_FORWARD, "WID_TE_FAST_FORWARD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SETTINGS, "WID_TE_SETTINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SAVE, "WID_TE_SAVE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SPACER, "WID_TE_SPACER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_DATE, "WID_TE_DATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_DATE_BACKWARD, "WID_TE_DATE_BACKWARD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_DATE_FORWARD, "WID_TE_DATE_FORWARD"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SMALL_MAP, "WID_TE_SMALL_MAP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_ZOOM_IN, "WID_TE_ZOOM_IN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_ZOOM_OUT, "WID_TE_ZOOM_OUT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_LAND_GENERATE, "WID_TE_LAND_GENERATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_TOWN_GENERATE, "WID_TE_TOWN_GENERATE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_INDUSTRY, "WID_TE_INDUSTRY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_ROADS, "WID_TE_ROADS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_TRAMS, "WID_TE_TRAMS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_WATER, "WID_TE_WATER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_TREES, "WID_TE_TREES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SIGNS, "WID_TE_SIGNS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_DATE_PANEL, "WID_TE_DATE_PANEL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_MUSIC_SOUND, "WID_TE_MUSIC_SOUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_HELP, "WID_TE_HELP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SWITCH_BAR, "WID_TE_SWITCH_BAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SORT_ORDER, "WID_TD_SORT_ORDER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SORT_CRITERIA, "WID_TD_SORT_CRITERIA"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_FILTER, "WID_TD_FILTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_LIST, "WID_TD_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SCROLLBAR, "WID_TD_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_WORLD_POPULATION, "WID_TD_WORLD_POPULATION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_CAPTION, "WID_TA_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_ZONE_BUTTON, "WID_TA_ZONE_BUTTON"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_RATING_INFO, "WID_TA_RATING_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_COMMAND_LIST, "WID_TA_COMMAND_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_SCROLLBAR, "WID_TA_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_ACTION_INFO, "WID_TA_ACTION_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TA_EXECUTE, "WID_TA_EXECUTE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_CAPTION, "WID_TV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_VIEWPORT, "WID_TV_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_INFO, "WID_TV_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_CENTER_VIEW, "WID_TV_CENTER_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_SHOW_AUTHORITY, "WID_TV_SHOW_AUTHORITY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_CHANGE_NAME, "WID_TV_CHANGE_NAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_CATCHMENT, "WID_TV_CATCHMENT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_EXPAND, "WID_TV_EXPAND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TV_DELETE, "WID_TV_DELETE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_NEW_TOWN, "WID_TF_NEW_TOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_RANDOM_TOWN, "WID_TF_RANDOM_TOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_MANY_RANDOM_TOWNS, "WID_TF_MANY_RANDOM_TOWNS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_TOWN_NAME_EDITBOX, "WID_TF_TOWN_NAME_EDITBOX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_TOWN_NAME_RANDOM, "WID_TF_TOWN_NAME_RANDOM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_SIZE_SMALL, "WID_TF_SIZE_SMALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_SIZE_MEDIUM, "WID_TF_SIZE_MEDIUM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_SIZE_LARGE, "WID_TF_SIZE_LARGE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_SIZE_RANDOM, "WID_TF_SIZE_RANDOM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_CITY, "WID_TF_CITY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_LAYOUT_ORIGINAL, "WID_TF_LAYOUT_ORIGINAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_LAYOUT_BETTER, "WID_TF_LAYOUT_BETTER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_LAYOUT_GRID2, "WID_TF_LAYOUT_GRID2"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_LAYOUT_GRID3, "WID_TF_LAYOUT_GRID3"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_LAYOUT_RANDOM, "WID_TF_LAYOUT_RANDOM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BEGIN, "WID_TT_BEGIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_SIGNS, "WID_TT_SIGNS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_TREES, "WID_TT_TREES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_HOUSES, "WID_TT_HOUSES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_INDUSTRIES, "WID_TT_INDUSTRIES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BUILDINGS, "WID_TT_BUILDINGS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BRIDGES, "WID_TT_BRIDGES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_STRUCTURES, "WID_TT_STRUCTURES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_CATENARY, "WID_TT_CATENARY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_LOADING, "WID_TT_LOADING"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_END, "WID_TT_END"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_BUTTONS, "WID_TT_BUTTONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_11, "WID_BT_TYPE_11"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_12, "WID_BT_TYPE_12"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_13, "WID_BT_TYPE_13"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_14, "WID_BT_TYPE_14"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_21, "WID_BT_TYPE_21"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_22, "WID_BT_TYPE_22"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_23, "WID_BT_TYPE_23"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_24, "WID_BT_TYPE_24"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_31, "WID_BT_TYPE_31"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_32, "WID_BT_TYPE_32"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_33, "WID_BT_TYPE_33"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_34, "WID_BT_TYPE_34"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_TYPE_RANDOM, "WID_BT_TYPE_RANDOM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BT_MANY_RANDOM, "WID_BT_MANY_RANDOM"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_CAPTION, "WID_VV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_VIEWPORT, "WID_VV_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_START_STOP, "WID_VV_START_STOP"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_CENTER_MAIN_VIEW, "WID_VV_CENTER_MAIN_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_GOTO_DEPOT, "WID_VV_GOTO_DEPOT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_REFIT, "WID_VV_REFIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_SHOW_ORDERS, "WID_VV_SHOW_ORDERS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_SHOW_DETAILS, "WID_VV_SHOW_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_CLONE, "WID_VV_CLONE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_SELECT_DEPOT_CLONE, "WID_VV_SELECT_DEPOT_CLONE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_SELECT_REFIT_TURN, "WID_VV_SELECT_REFIT_TURN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_TURN_AROUND, "WID_VV_TURN_AROUND"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VV_FORCE_PROCEED, "WID_VV_FORCE_PROCEED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_CAPTION, "WID_VR_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_VEHICLE_PANEL_DISPLAY, "WID_VR_VEHICLE_PANEL_DISPLAY"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_SHOW_HSCROLLBAR, "WID_VR_SHOW_HSCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_HSCROLLBAR, "WID_VR_HSCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_SELECT_HEADER, "WID_VR_SELECT_HEADER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_MATRIX, "WID_VR_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_SCROLLBAR, "WID_VR_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_INFO, "WID_VR_INFO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VR_REFIT, "WID_VR_REFIT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_CAPTION, "WID_VD_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_RENAME_VEHICLE, "WID_VD_RENAME_VEHICLE"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_TOP_DETAILS, "WID_VD_TOP_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_INCREASE_SERVICING_INTERVAL, "WID_VD_INCREASE_SERVICING_INTERVAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_DECREASE_SERVICING_INTERVAL, "WID_VD_DECREASE_SERVICING_INTERVAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_SERVICE_INTERVAL_DROPDOWN, "WID_VD_SERVICE_INTERVAL_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_SERVICING_INTERVAL, "WID_VD_SERVICING_INTERVAL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_MIDDLE_DETAILS, "WID_VD_MIDDLE_DETAILS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_MATRIX, "WID_VD_MATRIX"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_SCROLLBAR, "WID_VD_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_DETAILS_CARGO_CARRIED, "WID_VD_DETAILS_CARGO_CARRIED"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_DETAILS_TRAIN_VEHICLES, "WID_VD_DETAILS_TRAIN_VEHICLES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_DETAILS_CAPACITY_OF_EACH, "WID_VD_DETAILS_CAPACITY_OF_EACH"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VD_DETAILS_TOTAL_CARGO, "WID_VD_DETAILS_TOTAL_CARGO"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_CAPTION, "WID_VL_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_SORT_ORDER, "WID_VL_SORT_ORDER"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_SORT_BY_PULLDOWN, "WID_VL_SORT_BY_PULLDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_LIST, "WID_VL_LIST"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_SCROLLBAR, "WID_VL_SCROLLBAR"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_HIDE_BUTTONS, "WID_VL_HIDE_BUTTONS"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_AVAILABLE_VEHICLES, "WID_VL_AVAILABLE_VEHICLES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_MANAGE_VEHICLES_DROPDOWN, "WID_VL_MANAGE_VEHICLES_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_STOP_ALL, "WID_VL_STOP_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_VL_START_ALL, "WID_VL_START_ALL"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EV_CAPTION, "WID_EV_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EV_VIEWPORT, "WID_EV_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EV_ZOOM_IN, "WID_EV_ZOOM_IN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EV_ZOOM_OUT, "WID_EV_ZOOM_OUT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EV_MAIN_TO_VIEW, "WID_EV_MAIN_TO_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_EV_VIEW_TO_MAIN, "WID_EV_VIEW_TO_MAIN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_W_CAPTION, "WID_W_CAPTION"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_W_VIEWPORT, "WID_W_VIEWPORT"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_W_CENTER_VIEW, "WID_W_CENTER_VIEW"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_W_RENAME, "WID_W_RENAME"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_W_SHOW_VEHICLES, "WID_W_SHOW_VEHICLES"); - - SQGSWindow.DefSQStaticMethod(engine, &ScriptWindow::Close, "Close", 3, ".ii"); - SQGSWindow.DefSQStaticMethod(engine, &ScriptWindow::IsOpen, "IsOpen", 3, ".ii"); - SQGSWindow.DefSQStaticMethod(engine, &ScriptWindow::Highlight, "Highlight", 5, ".iiii"); - - SQGSWindow.PostRegister(engine); -} diff --git a/src/script/api/game/game_execmode.hpp.sq b/src/script/api/script_includes.hpp.in similarity index 60% rename from src/script/api/game/game_execmode.hpp.sq rename to src/script/api/script_includes.hpp.in index 14946ba127..75f1249ef4 100644 --- a/src/script/api/game/game_execmode.hpp.sq +++ b/src/script/api/script_includes.hpp.in @@ -7,17 +7,9 @@ /* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ -#include "../script_execmode.hpp" -#include "../template/template_execmode.hpp.sq" +${SQUIRREL_INCLUDES} - -template <> const char *GetClassName() { return "GSExecMode"; } - -void SQGSExecMode_Register(Squirrel *engine) +void SQ${APIUC}_RegisterAll(Squirrel *engine) { - DefSQClass SQGSExecMode("GSExecMode"); - SQGSExecMode.PreRegister(engine); - SQGSExecMode.AddConstructor(engine, "x"); - - SQGSExecMode.PostRegister(engine); +${SQUIRREL_REGISTER} } diff --git a/src/script/api/squirrel_export.awk b/src/script/api/squirrel_export.awk deleted file mode 100644 index 29305b7896..0000000000 --- a/src/script/api/squirrel_export.awk +++ /dev/null @@ -1,563 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. -# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - -# -# Awk script to automatically generate the code needed -# to export the script APIs to Squirrel. -# -# Note that arrays are 1 based... -# - -# Simple insertion sort. -function array_sort(ARRAY, ELEMENTS, temp, i, j) -{ - for (i = 2; i <= ELEMENTS; i++) - for (j = i; ARRAY[j - 1] > ARRAY[j]; --j) { - temp = ARRAY[j] - ARRAY[j] = ARRAY[j - 1] - ARRAY[j - 1] = temp - } - return -} - -function dump_class_templates(name) -{ - realname = name - gsub("^Script", "", realname) - - print " template <> inline " name " *GetParam(ForceType<" name " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" CR - print " template <> inline " name " &GetParam(ForceType<" name " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" CR - print " template <> inline const " name " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" CR - print " template <> inline const " name " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" CR - if (name == "ScriptEvent") { - print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, nullptr, DefSQDestructorCallback<" name ">, true); return 1; }" CR - } else if (name == "ScriptText") { - print "" CR - print " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {" CR - print " if (sq_gettype(vm, index) == OT_INSTANCE) {" CR - print " return GetParam(ForceType(), vm, index, ptr);" CR - print " }" CR - print " if (sq_gettype(vm, index) == OT_STRING) {" CR - print " return new RawText(GetParam(ForceType(), vm, index, ptr));" CR - print " }" CR - print " return nullptr;" CR - print " }" CR - } else { - print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, nullptr, DefSQDestructorCallback<" name ">, true); return 1; }" CR - } -} - -function dump_fileheader() -{ - print "/*" CR - print " * This file is part of OpenTTD." CR - print " * 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." CR - print " * 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." CR - print " * 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 ." CR - print " */" CR - print "" CR - print "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */" CR - print "" CR - print "#include \"../" filename "\"" CR - if (api != "Template") { - gsub("script_", "template_", filename) - print "#include \"../template/" filename ".sq\"" CR - } -} - -function reset_reader() -{ - enum_size = 0 - enum_value_size = 0 - enum_string_to_error_size = 0 - enum_error_to_string_size = 0 - struct_size = 0 - method_size = 0 - static_method_size = 0 - cls = "" - start_squirrel_define_on_next_line = "false" - cls_level = 0 - cls_in_api = "" -} - -BEGIN { - enum_size = 0 - enum_value_size = 0 - enum_string_to_error_size = 0 - enum_error_to_string_size = 0 - const_size = 0 - struct_size = 0 - method_size = 0 - static_method_size = 0 - super_cls = "" - cls = "" - api_selected = "" - cls_in_api = "" - start_squirrel_define_on_next_line = "false" - has_fileheader = "false" - cls_level = 0 - apis = tolower(api) - if (apis == "gs") apis = "game" -} - -{ CR = (match($0, "\\r$") > 0 ? "\r" : "") } - -/@file/ { - filename = $3 - gsub("^" apis "_", "script_", filename) -} - -# Ignore special doxygen blocks -/^#ifndef DOXYGEN_API/ { doxygen_skip = "next"; next; } -/^#ifdef DOXYGEN_API/ { doxygen_skip = "true"; next; } -/^#endif \/\* DOXYGEN_API \*\// { doxygen_skip = "false"; next; } -/^#else/ { - if (doxygen_skip == "next") { - doxygen_skip = "true"; - } else { - doxygen_skip = "false"; - } - next; -} -{ if (doxygen_skip == "true") next } - -/^([ ]*)\* @api/ { - # By default, classes are not selected - if (cls_level == 0) api_selected = "false" - - gsub("^([ ]*)", "", $0) - gsub("* @api ", "", $0) - - if (api == "Template") { - api_selected = "true" - if ($0 == "none" CR || $0 == "-all" CR) api_selected = "false" - next - } - - if ($0 == "none" CR) { - api_selected = "false" - } else if ($0 == "-all" CR) { - api_selected = "false" - } else if (match($0, "-" apis)) { - api_selected = "false" - } else if (match($0, apis)) { - api_selected = "true" - } - - next -} - -# Remove the old squirrel stuff -/#ifdef DEFINE_SQUIRREL_CLASS/ { squirrel_stuff = "true"; next; } -/^#endif \/\* DEFINE_SQUIRREL_CLASS \*\// { if (squirrel_stuff == "true") { squirrel_stuff = "false"; next; } } -{ if (squirrel_stuff == "true") next; } - -# Ignore forward declarations of classes -/^( *)class(.*);/ { next; } -# We only want to have public functions exported for now -/^( *)class/ { - if (cls_level == 0) { - if (api_selected == "") { - print "Class '"$2"' has no @api. It won't be published to any API." > "/dev/stderr" - api_selected = "false" - } - public = "false" - cls_param[0] = "" - cls_param[1] = 1 - cls_param[2] = "x" - cls_in_api = api_selected - api_selected = "" - cls = $2 - if (match($4, "public") || match($4, "protected") || match($4, "private")) { - super_cls = $5 - } else { - super_cls = $4 - } - } else if (cls_level == 1) { - if (api_selected == "") api_selected = cls_in_api - - if (api_selected == "true") { - struct_size++ - structs[struct_size] = cls "::" $2 - } - api_selected = "" - } - cls_level++ - next -} -/^( *)public/ { if (cls_level == 1) public = "true"; next; } -/^( *)protected/ { if (cls_level == 1) public = "false"; next; } -/^( *)private/ { if (cls_level == 1) public = "false"; next; } - -# Ignore the comments -/^#/ { next; } -/\/\*.*\*\// { comment = "false"; next; } -/\/\*/ { comment = "true"; next; } -/\*\// { comment = "false"; next; } -{ if (comment == "true") next } - -# We need to make specialized conversions for structs -/^( *)struct/ { - cls_level++ - - # Check if we want to publish this struct - if (api_selected == "") api_selected = cls_in_api - if (api_selected == "false") { - api_selected = "" - next - } - api_selected = "" - - if (public == "false") next - if (cls_level != 1) next - - struct_size++ - structs[struct_size] = cls "::" $2 - - next -} - -# We need to make specialized conversions for enums -/^( *)enum/ { - cls_level++ - - # Check if we want to publish this enum - if (api_selected == "") api_selected = cls_in_api - if (api_selected == "false") { - api_selected = "" - next - } - api_selected = "" - - if (public == "false") next - - in_enum = "true" - enum_size++ - enums[enum_size] = cls "::" $2 - - next -} - -# Maybe the end of the class, if so we can start with the Squirrel export pretty soon -/};/ { - cls_level-- - if (cls_level != 0) { - in_enum = "false"; - next; - } - if (cls == "") { - next; - } - start_squirrel_define_on_next_line = "true" - next; -} - -# Empty/white lines. When we may do the Squirrel export, do that export. -/^([ ]*)\r*$/ { - if (start_squirrel_define_on_next_line == "false") next - - if (cls_in_api != "true") { - reset_reader() - next - } - if (has_fileheader == "false") { - dump_fileheader() - has_fileheader = "true" - } - - spaces = " "; - public = "false" - namespace_opened = "false" - - api_cls = cls - gsub("^Script", api, api_cls) - api_super_cls = super_cls - gsub("^Script", api, api_super_cls) - - print "" CR - - if (api == "Template") { - # First check whether we have enums to print - if (enum_size != 0) { - if (namespace_opened == "false") { - print "namespace SQConvert {" CR - namespace_opened = "true" - } - print " /* Allow enums to be used as Squirrel parameters */" CR - for (i = 1; i <= enum_size; i++) { - print " template <> inline " enums[i] " GetParam(ForceType<" enums[i] ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" enums[i] ")tmp; }" CR - print " template <> inline int Return<" enums[i] ">(HSQUIRRELVM vm, " enums[i] " res) { sq_pushinteger(vm, (int32)res); return 1; }" CR - delete enums[i] - } - } - - # Then check whether we have structs/classes to print - if (struct_size != 0) { - if (namespace_opened == "false") { - print "namespace SQConvert {" CR - namespace_opened = "true" - } - print " /* Allow inner classes/structs to be used as Squirrel parameters */" CR - for (i = 1; i <= struct_size; i++) { - dump_class_templates(structs[i]) - delete structs[i] - } - } - - if (namespace_opened == "false") { - print "namespace SQConvert {" CR - namespace_opened = "true" - } else { - print "" CR - } - print " /* Allow " cls " to be used as Squirrel parameter */" CR - dump_class_templates(cls) - - print "} // namespace SQConvert" CR - - reset_reader() - next - } - - print "" CR - print "template <> const char *GetClassName<" cls ", ST_" toupper(api) ">() { return \"" api_cls "\"; }" CR - print "" CR - - # Then do the registration functions of the class. */ - print "void SQ" api_cls "_Register(Squirrel *engine)" CR - print "{" CR - print " DefSQClass<" cls ", ST_" toupper(api) "> SQ" api_cls "(\"" api_cls "\");" CR - if (super_cls == "Text" || super_cls == "ScriptObject" || super_cls == "AIAbstractList::Valuator") { - print " SQ" api_cls ".PreRegister(engine);" CR - } else { - print " SQ" api_cls ".PreRegister(engine, \"" api_super_cls "\");" CR - } - if (super_cls != "ScriptEvent") { - if (cls_param[2] == "v") { - print " SQ" api_cls ".AddSQAdvancedConstructor(engine);" CR - } else { - print " SQ" api_cls ".AddConstructor(engine, \"" cls_param[2] "\");" CR - } - } - print "" CR - - # Enum values - mlen = 0 - for (i = 1; i <= enum_value_size; i++) { - if (mlen <= length(enum_value[i])) mlen = length(enum_value[i]) - } - for (i = 1; i <= enum_value_size; i++) { - print " SQ" api_cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\"" enum_value[i] "\");" CR - delete enum_value[i] - } - if (enum_value_size != 0) print "" CR - - # Const values - mlen = 0 - for (i = 1; i <= const_size; i++) { - if (mlen <= length(const_value[i])) mlen = length(const_value[i]) - } - for (i = 1; i <= const_size; i++) { - print " SQ" api_cls ".DefSQConst(engine, " cls "::" const_value[i] ", " substr(spaces, 1, mlen - length(const_value[i])) "\"" const_value[i] "\");" CR - delete const_value[i] - } - if (const_size != 0) print "" CR - - # Mapping of OTTD strings to errors - mlen = 0 - for (i = 1; i <= enum_string_to_error_size; i++) { - if (mlen <= length(enum_string_to_error_mapping_string[i])) mlen = length(enum_string_to_error_mapping_string[i]) - } - for (i = 1; i <= enum_string_to_error_size; i++) { - print " ScriptError::RegisterErrorMap(" enum_string_to_error_mapping_string[i] ", " substr(spaces, 1, mlen - length(enum_string_to_error_mapping_string[i])) cls "::" enum_string_to_error_mapping_error[i] ");" CR - - delete enum_string_to_error_mapping_string[i] - } - if (enum_string_to_error_size != 0) print "" CR - - # Mapping of errors to human 'readable' strings. - mlen = 0 - for (i = 1; i <= enum_error_to_string_size; i++) { - if (mlen <= length(enum_error_to_string_mapping[i])) mlen = length(enum_error_to_string_mapping[i]) - } - for (i = 1; i <= enum_error_to_string_size; i++) { - print " ScriptError::RegisterErrorMapString(" cls "::" enum_error_to_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_to_string_mapping[i])) "\"" enum_error_to_string_mapping[i] "\");" CR - delete enum_error_to_string_mapping[i] - } - if (enum_error_to_string_size != 0) print "" CR - - # Static methods - mlen = 0 - for (i = 1; i <= static_method_size; i++) { - if (mlen <= length(static_methods[i, 0])) mlen = length(static_methods[i, 0]) - } - for (i = 1; i <= static_method_size; i++) { - if (static_methods[i, 2] == "v") { - print " SQ" api_cls ".DefSQAdvancedStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0]) - 8) "\"" static_methods[i, 0] "\");" CR - } else { - print " SQ" api_cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\"" static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");" CR - } - delete static_methods[i] - } - if (static_method_size != 0) print "" CR - - # Non-static methods - mlen = 0 - for (i = 1; i <= method_size; i++) { - if (mlen <= length(methods[i, 0])) mlen = length(methods[i, 0]) - } - for (i = 1; i <= method_size; i++) { - if (methods[i, 2] == "v") { - print " SQ" api_cls ".DefSQAdvancedMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0]) - 8) "\"" methods[i, 0] "\");" CR - } else { - print " SQ" api_cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\"" methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");" CR - } - delete methods[i] - } - if (method_size != 0) print "" CR - - print " SQ" api_cls ".PostRegister(engine);" CR - print "}" CR - - reset_reader() - - next -} - -# Skip non-public functions -{ if (public == "false") next } - -# Add enums -{ - if (in_enum == "true") { - enum_value_size++ - sub(",", "", $1) - sub("\r", "", $1) - enum_value[enum_value_size] = $1 - - # Check if this a special error enum - if (match(enums[enum_size], ".*::ErrorMessages") != 0) { - # syntax: - # enum ErrorMessages { - # ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] - # } - - # Set the mappings - if (match($0, "\\[.*\\]") != 0) { - mappings = substr($0, RSTART, RLENGTH); - gsub("([\\[[:space:]\\]])", "", mappings); - - split(mappings, mapitems, ","); - for (i = 1; i <= length(mapitems); i++) { - enum_string_to_error_size++ - enum_string_to_error_mapping_string[enum_string_to_error_size] = mapitems[i] - enum_string_to_error_mapping_error[enum_string_to_error_size] = $1 - } - - enum_error_to_string_size++ - enum_error_to_string_mapping[enum_error_to_string_size] = $1 - } - } - next - } -} - -# Add a const (non-enum) value -/^[ ]*static const \w+ \w+ = -?\(?\w*\)?\w+;/ { - const_size++ - const_value[const_size] = $4 - next -} - -# Add a method to the list -/^.*\(.*\).*\r*$/ { - if (cls_level != 1) next - if (match($0, "~")) { - if (api_selected != "") { - print "Destructor for '"cls"' has @api. Tag ignored." > "/dev/stderr" - api_selected = "" - } - next - } - - is_static = match($0, "static") - gsub("\\yvirtual\\y", "", $0) - gsub("\\ystatic\\y", "", $0) - gsub("\\yconst\\y", "", $0) - gsub("{.*", "", $0) - param_s = $0 - gsub("\\*", "", $0) - gsub("\\(.*", "", $0) - - sub(".*\\(", "", param_s) - sub("\\).*", "", param_s) - - funcname = $2 - if ($1 == cls && funcname == "") { - if (api_selected != "") { - print "Constructor for '"cls"' has @api. Tag ignored." > "/dev/stderr" - api_selected = "" - } - cls_param[0] = param_s - if (param_s == "") next - } else if (funcname == "") next - - split(param_s, params, ",") - if (is_static) { - types = "." - } else { - types = "x" - } - for (len = 1; params[len] != ""; len++) { - sub("^[ ]*", "", params[len]) - if (match(params[len], "\\*") || match(params[len], "&")) { - if (match(params[len], "^char")) { - # Many types can be converted to string, so use '.', not 's'. (handled by our glue code) - types = types "." - } else if (match(params[len], "^void")) { - types = types "p" - } else if (match(params[len], "^Array")) { - types = types "a" - } else if (match(params[len], "^struct Array")) { - types = types "a" - } else if (match(params[len], "^Text")) { - types = types "." - } else { - types = types "x" - } - } else if (match(params[len], "^bool")) { - types = types "b" - } else if (match(params[len], "^HSQUIRRELVM")) { - types = "v" - } else { - types = types "i" - } - } - - # Check if we want to publish this function - if (api_selected == "") api_selected = cls_in_api - if (api_selected == "false") { - api_selected = "" - next - } - api_selected = "" - - if ($1 == cls && funcname == "") { - cls_param[1] = len; - cls_param[2] = types; - } else if (substr(funcname, 0, 1) == "_" && types != "v") { - } else if (is_static) { - static_method_size++ - static_methods[static_method_size, 0] = funcname - static_methods[static_method_size, 1] = len - static_methods[static_method_size, 2] = types - } else { - method_size++ - methods[method_size, 0] = funcname - methods[method_size, 1] = len - methods[method_size, 2] = types - } - next -} diff --git a/src/script/api/game/game_testmode.hpp.sq b/src/script/api/squirrel_export.hpp.sq.in similarity index 59% rename from src/script/api/game/game_testmode.hpp.sq rename to src/script/api/squirrel_export.hpp.sq.in index 8b6ab26fef..09b7da764c 100644 --- a/src/script/api/game/game_testmode.hpp.sq +++ b/src/script/api/squirrel_export.hpp.sq.in @@ -6,18 +6,4 @@ */ /* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_testmode.hpp" -#include "../template/template_testmode.hpp.sq" - - -template <> const char *GetClassName() { return "GSTestMode"; } - -void SQGSTestMode_Register(Squirrel *engine) -{ - DefSQClass SQGSTestMode("GSTestMode"); - SQGSTestMode.PreRegister(engine); - SQGSTestMode.AddConstructor(engine, "x"); - - SQGSTestMode.PostRegister(engine); -} +${SQUIRREL_EXPORT} diff --git a/src/script/api/squirrel_export.sh b/src/script/api/squirrel_export.sh deleted file mode 100755 index 96bd102f9b..0000000000 --- a/src/script/api/squirrel_export.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/bash - -# 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 . - -# Set neutral locale so sort behaves the same everywhere -LC_ALL=C -export LC_ALL - -# We really need gawk for this! -AWK=gawk - -${AWK} --version > /dev/null 2> /dev/null -if [ "$?" != "0" ]; then - echo "This script needs gawk to run properly" - exit 1 -fi - -# This must be called from within a src/???/api directory. -scriptdir=`dirname $0` -apilc=`pwd | sed "s@/api@@;s@.*/@@"` - -# Check if we are in the root directory of the API, as then we generate all APIs -if [ "$apilc" = "script" ]; then - for api in `find . -type d | cut -b3-`; do - if [ -z "$api" ]; then continue; fi - echo "Generating for API '$api' ..." - cd $api - sh $scriptdir/../`basename $0` - cd .. - done - exit 0 -fi - -case $apilc in - template) apiuc="Template" ;; - ai) apiuc="AI" ;; - game) apiuc="GS" ;; - *) echo "Unknown API type."; exit 1 ;; -esac - -for f in `ls ../*.hpp`; do - bf=`basename ${f} | sed s@script_@${apilc}_@` - - # ScriptController has custom code, and should not be generated - if [ "`basename ${f}`" = "script_controller.hpp" ]; then continue; fi - - ${AWK} -v BINMODE=1 -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp - - if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then - if [ -f "${bf}.sq" ]; then - echo "Deleted: ${bf}.sq" - rm -f ${bf}.sq - fi - rm -f ${bf}.tmp - elif ! [ -f "${bf}.sq" ] || [ -n "`diff -I '$Id' ${bf}.tmp ${bf}.sq 2> /dev/null || echo boo`" ]; then - mv ${bf}.tmp ${bf}.sq - echo "Updated: ${bf}.sq" - else - rm -f ${bf}.tmp - fi -done - -# Remove .hpp.sq if .hpp doesn't exist anymore -for f in `ls *.hpp.sq`; do - f=`echo ${f} | sed "s/.hpp.sq$/.hpp/;s@${apilc}_@script_@"` - if [ ! -f ../${f} ];then - echo "Deleted: ${f}.sq" - rm -f ${f}.sq - fi -done - -if [ "$apilc" = "template" ]; then exit 0; fi - -# Add stuff to ${apilc}_instance.cpp -f="../../../${apilc}/${apilc}_instance.cpp" - -functions=`` - -echo " -{ } -/.hpp.sq/ { if (match(\$0, \"template\")) print \$0; next } -/SQ${apiuc}Controller_Register/ { print \$0; next } -/SQ${apiuc}.*_Register/ { next } - -/Note: this line is a marker in squirrel_export.sh. Do not change!/ { - print \$0 - gsub(\"^.*/\", \"\") - split(\"`grep '^void SQ'${apiuc}'.*_Register(Squirrel \*engine).\?$' *.hpp.sq | sed 's/:.*$//' | sort | uniq | tr -d '\r' | tr '\n' ' '`\", files, \" \") - - for (i = 1; files[i] != \"\"; i++) { - print \"#include \\\"../script/api/${apilc}/\" files[i] \"\\\"\" \$0 - } - - next; -} - -/\/\* Register all classes \*\// { - print \$0 - gsub(\"^.*/\", \"\") - # List needs to be registered with squirrel before all List subclasses. - print \" SQ${apiuc}List_Register(this->engine);\" \$0 - split(\"`grep '^void SQ'${apiuc}'.*_Register(Squirrel \*engine).\?$' *.hpp.sq | grep -v 'SQ'${apiuc}'List_Register' | sed 's/^.*void //;s/Squirrel \*/this->/;s/$/;/;s/_Register/0000Register/g;' | sort | sed 's/0000Register/_Register/g' | tr -d '\r' | tr '\n' ' '`\", regs, \" \") - - for (i = 1; regs[i] != \"\"; i++) { - if (regs[i] == \"SQ${apiuc}Controller_Register(this->engine);\") continue - print \" \" regs[i] \$0 - } - - next -} - -{ print \$0; } -" > ${f}.awk - -${AWK} -v BINMODE=1 -f ${f}.awk ${f} > ${f}.tmp - -if ! [ -f "${f}" ] || [ -n "`diff -I '$Id' ${f} ${f}.tmp 2> /dev/null || echo boo`" ]; then - mv ${f}.tmp ${f} - echo "Updated: ${f}" -else - rm -f ${f}.tmp -fi -rm -f ${f}.awk diff --git a/src/script/api/squirrel_export.vbs b/src/script/api/squirrel_export.vbs deleted file mode 100644 index 2ebc77136a..0000000000 --- a/src/script/api/squirrel_export.vbs +++ /dev/null @@ -1,941 +0,0 @@ -Option Explicit - -' 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 . - -Dim FSO -Dim enum_size, enums, enum_value_size, enum_value -Dim enum_string_to_error_size, enum_string_to_error_mapping_string, enum_string_to_error_mapping_error -Dim enum_error_to_string_size, enum_error_to_string_mapping, const_size, const_value -Dim struct_size, structs, method_size, methods, static_method_size, static_methods -Dim super_cls, cls, api_selected, cls_in_api, start_squirrel_define_on_next_line, has_fileheader, cls_level -Dim apis, filename, doxygen_skip, squirrel_stuff, is_public, cls_param(2), comment, in_enum - -Set FSO = CreateObject("Scripting.FileSystemObject") - -Function CompareFiles(filename1, filename2) - Dim file, lines1, lines2 - - If Not FSO.FileExists(filename1) Then - CompareFiles = False - Exit Function - End If - Set file = FSO.OpenTextFile(filename1, 1) - If Not file.AtEndOfStream Then - lines1 = file.ReadAll - End IF - file.Close - - If Not FSO.FileExists(filename2) Then - CompareFiles = False - Exit Function - End If - Set file = FSO.OpenTextFile(filename2, 1) - If Not file.AtEndOfStream Then - lines2 = file.ReadAll - End IF - file.Close - - CompareFiles = (lines1 = lines2) -End Function - -Function IsEmptyFile(filename) - Dim file - Set file = FSO.OpenTextFile(filename, 1) - IsEmptyFile = file.AtEndOfStream - file.Close -End Function - -Function DumpClassTemplates(name, file) - Dim re, realname - Set re = New RegExp - - re.Pattern = "^Script" - realname = re.Replace(name, "") - - file.WriteLine " template <> inline " & name & " *GetParam(ForceType<" & name & " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" & name & " *)instance; }" - file.WriteLine " template <> inline " & name & " &GetParam(ForceType<" & name & " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" & name & " *)instance; }" - file.WriteLine " template <> inline const " & name & " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" & name & " *)instance; }" - file.WriteLine " template <> inline const " & name & " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" & name & " *)instance; }" - If name = "ScriptEvent" Then - file.WriteLine " template <> inline int Return<" & name & " *>(HSQUIRRELVM vm, " & name & " *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, " & Chr(34) & realname & Chr(34) & ", res, nullptr, DefSQDestructorCallback<" & name & ">, true); return 1; }" - ElseIf name = "ScriptText" Then - file.WriteLine "" - file.WriteLine " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {" - file.WriteLine " if (sq_gettype(vm, index) == OT_INSTANCE) {" - file.WriteLine " return GetParam(ForceType(), vm, index, ptr);" - file.WriteLine " }" - file.WriteLine " if (sq_gettype(vm, index) == OT_STRING) {" - file.WriteLine " return new RawText(GetParam(ForceType(), vm, index, ptr));" - file.WriteLine " }" - file.WriteLine " return nullptr;" - file.WriteLine " }" - Else - file.WriteLine " template <> inline int Return<" & name & " *>(HSQUIRRELVM vm, " & name & " *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, " & Chr(34) & realname & Chr(34) & ", res, nullptr, DefSQDestructorCallback<" & name & ">, true); return 1; }" - End If -End Function - -Function DumpFileheader(api, file) - Dim re - Set re = New RegExp - file.WriteLine "/*" - file.WriteLine " * This file is part of OpenTTD." - file.WriteLine " * 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." - file.WriteLine " * 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." - file.WriteLine " * 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.WriteLine " */" - file.WriteLine "" - file.WriteLine "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */" - file.WriteLine "" - file.WriteLine "#include " & Chr(34) & "../" & filename & Chr(34) - If api <> "Template" Then - re.Pattern = "script_" - filename = re.Replace(filename, "template_") - file.WriteLine "#include " & Chr(34) & "../template/" & filename & ".sq" & Chr(34) - End If -End Function - -Function ResetReader() - enum_size = 0 - enums.RemoveAll - enum_value_size = 0 - enum_value.RemoveAll - enum_string_to_error_size = 0 - enum_string_to_error_mapping_string.RemoveAll - enum_string_to_error_mapping_error.RemoveAll - enum_error_to_string_size = 0 - enum_error_to_string_mapping.RemoveAll - const_size = 0 - const_value.RemoveAll - struct_size = 0 - structs.RemoveAll - method_size = 0 - methods.RemoveAll - static_method_size = 0 - static_methods.RemoveAll - cls = "" - start_squirrel_define_on_next_line = False - cls_level = 0 - cls_in_api = "" -End Function - -Sub SquirrelExportParse(api, line, file) - Dim re - Set re = New RegExp - - re.Pattern = "@file" - If re.Test(line) Then - filename = Split(line)(2) - re.Pattern = "^" & apis & "_" - filename = re.Replace(filename, "script_") - End If - - ' Ignore special doxygen blocks - re.Pattern = "^#ifndef DOXYGEN_API" - If re.Test(line) Then - doxygen_skip = "next" - Exit Sub - End If - re.Pattern = "^#ifdef DOXYGEN_API" - If re.Test(line) Then - doxygen_skip = "true" - Exit Sub - End If - re.Pattern = "^#endif /\* DOXYGEN_API \*/" - If re.Test(line) Then - doxygen_skip = "false" - Exit Sub - End If - re.Pattern = "^#else" - If re.Test(line) Then - If doxygen_skip = "next" Then - doxygen_skip = "true" - Else - doxygen_skip = "false" - End If - Exit Sub - End If - If doxygen_skip = "true" Then Exit Sub - - re.Pattern = "^([ ]*)\* @api" - If re.Test(line) Then - ' By default, classes are not selected - If cls_level = 0 Then api_selected = "false" - - re.Pattern = "^([ ]*)" - line = re.Replace(line, "") - re.Pattern = "\* @api " - line = re.Replace(line, "") - - If api = "Template" Then - api_selected = "true" - If line = "none" Or line = "-all" Then api_selected = "false" - Exit Sub - End If - - If line = "none" Then - api_selected = "false" - ElseIf line = "-all" Then - api_selected = "false" - Else - re.Pattern = "-" & apis - If re.Test(line) Then - api_selected = "false" - Else - re.Pattern = apis - If re.Test(line) Then - api_selected = "true" - End If - End If - End If - Exit Sub - End If - - ' Remove the old squirrel stuff - re.Pattern = "#ifdef DEFINE_SQUIRREL_CLASS" - If re.Test(line) Then - squirrel_stuff = True - Exit Sub - End If - re.Pattern = "^#endif /\* DEFINE_SQUIRREL_CLASS \*/" - If re.Test(line) Then - If squirrel_stuff Then squirrel_stuff = False - Exit Sub - End If - If squirrel_stuff Then Exit Sub - - ' Ignore forward declarations of classes - re.Pattern = "^( *)class(.*);" - If re.Test(line) Then Exit Sub - ' We only want to have public functions exported for now - re.Pattern = "^( *)class" - If re.Test(line) Then - line = Split(line) - If cls_level = 0 Then - If api_selected = "" Then - WScript.Echo "Class '" & line(1) & "' has no @api. It won't be published to any API." - api_selected = "false" - End If - is_public = False - cls_param(0) = "" - cls_param(1) = 1 - cls_param(2) = "x" - cls_in_api = api_selected - api_selected = "" - cls = line(1) - re.Pattern = "public|protected|private" - If UBound(line) > 2 Then - If re.Test(line(3)) Then - super_cls = line(4) - Else - super_cls = line(3) - End If - End If - ElseIf cls_level = 1 Then - If api_selected = "" Then api_selected = cls_in_api - - If api_selected = "true" Then - struct_size = struct_size + 1 - structs.Item(struct_size) = cls & "::" & line(1) - End If - api_selected = "" - End If - cls_level = cls_level + 1 - Exit Sub - End If - re.Pattern = "^( *)public" - If re.Test(line) Then - If cls_level = 1 Then is_public = True - Exit Sub - End If - re.Pattern = "^( *)protected" - If re.Test(line) Then - If cls_level = 1 Then is_public = False - Exit Sub - End If - re.Pattern = "^( *)private" - If re.Test(line) Then - If cls_level = 1 Then is_public = False - Exit Sub - End If - - ' Ignore the comments - re.Pattern = "^#" - If re.Test(line) Then Exit Sub - re.Pattern = "/\*.*\*/" - If re.Test(line) Then - comment = False - Exit Sub - End If - re.Pattern = "/\*" - If re.Test(line) Then - comment = True - Exit Sub - End If - re.Pattern = "\*/" - If re.Test(line) Then - comment = False - Exit Sub - End If - If comment Then Exit Sub - - ' We need to make specialized conversions for structs - re.Pattern = "^( *)struct" - If re.Test(line) Then - cls_level = cls_level + 1 - - ' Check if we want to publish this struct - If api_selected = "" Then api_selected = cls_in_api - If api_selected = "false" Then - api_selected = "" - Exit Sub - End If - api_selected = "" - - If Not is_public Then Exit Sub - If cls_level <> 1 Then Exit Sub - - struct_size = struct_size + 1 - structs.Item(struct_size) = cls & "::" & Split(line)(1) - Exit Sub - End If - - ' We need to make specialized conversions for enums - re.Pattern = "^( *)enum" - If re.Test(line) Then - cls_level = cls_level + 1 - - ' Check if we want to publish this enum - If api_selected = "" Then api_selected = cls_in_api - If api_selected = "false" Then - api_selected = "" - Exit Sub - End If - api_selected = "" - - If Not is_public Then Exit Sub - - in_enum = True - enum_size = enum_size + 1 - enums.Item(enum_size) = cls & "::" & Split(line)(1) - Exit Sub - End If - - ' Maybe the end of the class, if so we can start with the Squirrel export pretty soon - re.Pattern = "};" - If re.Test(line) Then - cls_level = cls_level - 1 - If cls_level <> 0 Then - in_enum = False - Exit Sub - End If - - If cls = "" Then Exit Sub - start_squirrel_define_on_next_line = True - Exit Sub - End If - - ' Empty/white lines. When we may do the Squirrel export, do that export. - re.Pattern = "^([ ]*)$" - If re.Test(line) Then - Dim namespace_opened, api_cls, api_super_cls, i, mlen, spaces - - If Not start_squirrel_define_on_next_line Then Exit Sub - - If cls_in_api <> "true" Then - ResetReader - Exit Sub - End If - If Not has_fileheader Then - DumpFileHeader api, file - has_fileheader = True - End If - - is_public = False - namespace_opened = False - - re.Pattern = "^Script" - api_cls = re.Replace(cls, api) - api_super_cls = re.Replace(super_cls, api) - - file.WriteLine "" - - If api = "Template" Then - ' First check whether we have enums to print - If enum_size <> 0 Then - If Not namespace_opened Then - file.WriteLine "namespace SQConvert {" - namespace_opened = True - End If - file.WriteLine " /* Allow enums to be used as Squirrel parameters */" - For i = 1 To enum_size - file.WriteLine " template <> inline " & enums.Item(i) & " GetParam(ForceType<" & enums.Item(i) & ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" & enums.Item(i) & ")tmp; }" - file.WriteLine " template <> inline int Return<" & enums.Item(i) & ">(HSQUIRRELVM vm, " & enums.Item(i) & " res) { sq_pushinteger(vm, (int32)res); return 1; }" - Next - End If - - ' Then check whether we have structs/classes to print - If struct_size <> 0 Then - If Not namespace_opened Then - file.WriteLine "namespace SQConvert {" - namespace_opened = True - End If - file.WriteLine " /* Allow inner classes/structs to be used as Squirrel parameters */" - For i = 1 To struct_size - DumpClassTemplates structs.Item(i), file - Next - End If - - If Not namespace_opened Then - file.WriteLine "namespace SQConvert {" - namespace_opened = True - Else - file.WriteLine "" - End If - file.WriteLine " /* Allow " & cls & " to be used as Squirrel parameter */" - DumpClassTemplates cls, file - - file.WriteLine "} // namespace SQConvert" - - ResetReader - Exit Sub - End If - - file.WriteLine "" - file.WriteLine "template <> const char *GetClassName<" & cls & ", ST_" & UCase(api) & ">() { return " & Chr(34) & api_cls & Chr(34) & "; }" - file.WriteLine "" - - ' Then do the registration functions of the class. - file.WriteLine "void SQ" & api_cls & "_Register(Squirrel *engine)" - file.WriteLine "{" - file.WriteLine " DefSQClass<" & cls & ", ST_" & UCase(api) & "> SQ" & api_cls & "(" & Chr(34) & api_cls & Chr(34) & ");" - If super_cls = "Text" Or super_cls = "ScriptObject" Or super_cls = "AIAbstractiveList::Valuator" Then - file.WriteLine " SQ" & api_cls & ".PreRegister(engine);" - Else - file.WriteLine " SQ" & api_cls & ".PreRegister(engine, " & Chr(34) & api_super_cls & Chr(34) & ");" - End If - If super_cls <> "ScriptEvent" Then - If cls_param(2) = "v" Then - file.WriteLine " SQ" & api_cls & ".AddSQAdvancedConstructor(engine);" - Else - file.WriteLine " SQ" & api_cls & ".AddConstructor(engine, " & Chr(34) & cls_param(2) & Chr(34) & ");" - End If - End If - file.WriteLine "" - - ' Enum values - mlen = 0 - For i = 1 To enum_value_size - If mlen <= Len(enum_value.Item(i)) Then mlen = Len(enum_value.Item(i)) - Next - For i = 1 To enum_value_size - file.WriteLine " SQ" & api_cls & ".DefSQConst(engine, " & cls & "::" & enum_value.Item(i) & ", " & Space(mlen - Len(enum_value.Item(i))) & Chr(34) & enum_value.Item(i) & Chr(34) & ");" - Next - If enum_value_size <> 0 Then file.WriteLine "" - - ' Const values - mlen = 0 - For i = 1 To const_size - If mlen <= Len(const_value.Item(i)) Then mlen = Len(const_value.Item(i)) - Next - For i = 1 To const_size - file.WriteLine " SQ" & api_cls & ".DefSQConst(engine, " & cls & "::" & const_value.Item(i) & ", " & Space(mlen - Len(const_value.Item(i))) & Chr(34) & const_value.Item(i) & Chr(34) & ");" - Next - If const_size <> 0 Then file.WriteLine "" - - ' Mapping of OTTD strings to errors - mlen = 0 - For i = 1 To enum_string_to_error_size - If mlen <= Len(enum_string_to_error_mapping_string.Item(i)) Then mlen = Len(enum_string_to_error_mapping_string.Item(i)) - Next - For i = 1 To enum_string_to_error_size - file.WriteLine " ScriptError::RegisterErrorMap(" & enum_string_to_error_mapping_string.Item(i) & ", " & Space(mlen - Len(enum_string_to_error_mapping_string.Item(i))) & cls & "::" & enum_string_to_error_mapping_error.Item(i) & ");" - Next - If enum_string_to_error_size <> 0 Then file.WriteLine "" - - ' Mapping of errors to human 'readable' strings. - mlen = 0 - For i = 1 To enum_error_to_string_size - If mlen <= Len(enum_error_to_string_mapping.Item(i)) Then mlen = Len(enum_error_to_string_mapping.Item(i)) - Next - For i = 1 To enum_error_to_string_size - file.WriteLine " ScriptError::RegisterErrorMapString(" & cls & "::" & enum_error_to_string_mapping.Item(i) & ", " & Space(mlen - Len(enum_error_to_string_mapping.Item(i))) & Chr(34) & enum_error_to_string_mapping.Item(i) & Chr(34) & ");" - Next - If enum_error_to_string_size <> 0 Then file.WriteLine "" - - ' Static methods - mlen = 0 - For i = 1 To static_method_size - If mlen <= Len(static_methods.Item(i)(0)) Then mlen = Len(static_methods.Item(i)(0)) - Next - For i = 1 To static_method_size - If static_methods.Item(i)(2) = "v" Then - spaces = mlen - Len(static_methods.Item(i)(0)) - 8 - If spaces < 0 Then spaces = 0 - file.WriteLine " SQ" & api_cls & ".DefSQAdvancedStaticMethod(engine, &" & cls & "::" & static_methods.Item(i)(0) & ", " & Space(spaces) & Chr(34) & static_methods.Item(i)(0) & Chr(34) & ");" - Else - file.WriteLine " SQ" & api_cls & ".DefSQStaticMethod(engine, &" & cls & "::" & static_methods.Item(i)(0) & ", " & Space(mlen - Len(static_methods.Item(i)(0))) & Chr(34) & static_methods.Item(i)(0) & Chr(34) & ", " & Space(mlen - Len(static_methods.Item(i)(0))) & static_methods.Item(i)(1) & ", " & Chr(34) & static_methods.Item(i)(2) & Chr(34) & ");" - End If - Next - If static_method_size <> 0 Then file.WriteLine "" - - ' Non-static methods - mlen = 0 - For i = 1 To method_size - If mlen <= Len(methods.Item(i)(0)) Then mlen = Len(methods.Item(i)(0)) - Next - For i = 1 To method_size - If methods.Item(i)(2) = "v" Then - spaces = mlen - Len(methods.Item(i)(0)) - 8 - If spaces < 0 Then spaces = 0 - file.WriteLine " SQ" & api_cls & ".DefSQAdvancedMethod(engine, &" & cls & "::" & methods.Item(i)(0) & ", " & Space(spaces) & Chr(34) & methods.Item(i)(0) & Chr(34) & ");" - Else - file.WriteLine " SQ" & api_cls & ".DefSQMethod(engine, &" & cls & "::" & methods.Item(i)(0) & ", " & Space(mlen - Len(methods.Item(i)(0))) & Chr(34) & methods.Item(i)(0) & Chr(34) & ", " & Space(mlen - Len(methods.Item(i)(0))) & methods.Item(i)(1) & ", " & Chr(34) & methods.Item(i)(2) & Chr(34) & ");" - End If - Next - If method_size <> 0 Then file.WriteLine "" - - file.WriteLine " SQ" & api_cls & ".PostRegister(engine);" - file.WriteLine "}" - - ResetReader - - Exit Sub - End If - - ' Skip non-public functions - If Not is_public Then Exit Sub - - ' Add enums - If in_enum Then - enum_value_size = enum_value_size + 1 - re.Pattern = "[, ]" - re.Global = True - enum_value.Item(enum_value_size) = re.Replace(split(line)(0), "") - - ' Check if this a special error enum - re.Pattern = ".*::ErrorMessages" - If re.Test(enums.Item(enum_size)) Then - ' syntax: - ' enum ErrorMessages { - ' ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] - ' } - - ' Set the mappings - re.Pattern = "\[.*\]" - If re.Test(line) Then - Dim mappings - mappings = re.Execute(line)(0).Value - re.Pattern = "[\[ \]]" - mappings = re.Replace(mappings, "") - - mappings = Split(mappings, ",") - For i = LBound(mappings) To UBound(mappings) - enum_string_to_error_size = enum_string_to_error_size + 1 - enum_string_to_error_mapping_string.Item(enum_string_to_error_size) = mappings(i) - enum_string_to_error_mapping_error.Item(enum_string_to_error_size) = enum_value.Item(enum_value_size) - Next - - enum_error_to_string_size = enum_error_to_string_size + 1 - enum_error_to_string_mapping.Item(enum_error_to_string_size) = enum_value.Item(enum_value_size) - End If - End If - re.Global = False - Exit Sub - End If - - ' Add a const (non-enum) value - re.Pattern = "^[ ]*static const \w+ \w+ = -?\(?\w*\)?\w+;" - If re.Test(line) Then - const_size = const_size + 1 - const_value.Item(const_size) = Split(line)(3) - Exit Sub - End If - - ' Add a method to the list - re.Pattern = "^.*\(.*\).*$" - If re.Test(line) Then - Dim is_static, param_s, func, funcname, params, types - If cls_level <> 1 Then Exit Sub - re.Pattern = "~" - If re.Test(line) Then - If api_selected <> "" Then - WScript.Echo "Destructor for '" & cls & "' has @api. Tag ignored." - api_selected = "" - End If - Exit Sub - End If - - re.Pattern = "static" - is_static = re.Test(line) - re.Pattern = "\bvirtual\b" - line = re.Replace(line, "") - re.Pattern = "\bstatic\b" - line = re.Replace(line, "") - re.Pattern = "\bconst\b" - line = re.Replace(line, "") - re.Pattern = "{.*" - line = re.Replace(line, "") - param_s = line - re.Pattern = "\*" - line = re.Replace(line, "") - re.Pattern = "\(.*" - line = re.Replace(line, "") - re.Pattern = "^[ ]*" - line = re.Replace(line, "") - - re.Pattern = ".*\(" - param_s = re.Replace(param_s, "") - re.Pattern = "\).*" - param_s = re.Replace(param_s, "") - - func = Split(line) - If UBound(func) > 0 Then - funcname = func(1) - Else - funcname = "" - End If - If func(0) = cls And funcname = "" Then - If api_selected <> "" Then - WScript.Echo "Constructor for '" & cls & "' has @api. Tag ignored." - api_selected = "" - End If - cls_param(0) = param_s - If param_s = "" Then Exit Sub - ElseIf funcname = "" Then - Exit Sub - End If - - params = Split(param_s, ",") - If is_static Then - types = "." - Else - types = "x" - End If - For i = LBound(params) To UBound(params) - Do ' null loop for logic short-circuit - re.Pattern = "^[ ]*" - params(i) = re.Replace(params(i), "") - re.Pattern = "\*|&" - If re.Test(params(i)) Then - re.Pattern = "^char" - If re.test(params(i)) Then - ' Many types can be converted to string, so use '.', not 's'. (handled by our glue code) - types = types & "." - Exit Do - End If - re.Pattern = "^void" - If re.test(params(i)) Then - types = types & "p" - Exit Do - End If - re.Pattern = "^Array" - If re.test(params(i)) Then - types = types & "a" - Exit Do - End If - re.Pattern = "^struct Array" - If re.test(params(i)) Then - types = types & "a" - Exit Do - End If - re.Pattern = "^Text" - If re.test(params(i)) Then - types = types & "." - Exit Do - End If - types = types & "x" - Exit Do - End If - re.Pattern = "^bool" - If re.Test(params(i)) Then - types = types & "b" - Exit Do - End If - re.Pattern = "^HSQUIRRELVM" - If re.Test(params(i)) Then - types = "v" - Exit Do - End If - types = types & "i" - Loop While False ' end of null loop - Next - i = i + 1 - - ' Check if we want to publish this function - If api_selected = "" Then api_selected = cls_in_api - If api_selected = "false" Then - api_selected = "" - Exit Sub - End If - api_selected = "" - - If func(0) = cls And funcname = "" Then - cls_param(1) = i - cls_param(2) = types - Exit Sub - End If - If Left(funcname, 1) = "_" And types <> "v" Then Exit Sub - If is_static Then - static_method_size = static_method_size + 1 - static_methods.Item(static_method_size) = Array(funcname, i, types) - Exit Sub - End If - method_size = method_size + 1 - methods.Item(method_size) = Array(funcname, i, types) - Exit Sub - End If -End Sub - -Sub SquirrelExport(api, srcfilename, dstfilename) - Dim src, dst, line - Set src = FSO.OpenTextFile(srcfilename, 1) - Set dst = FSO.OpenTextFile(dstfilename, 2, True) - - enum_size = 0 - Set enums = CreateObject("Scripting.Dictionary") - enum_value_size = 0 - Set enum_value = CreateObject("Scripting.Dictionary") - enum_string_to_error_size = 0 - Set enum_string_to_error_mapping_string = CreateObject("Scripting.Dictionary") - Set enum_string_to_error_mapping_error = CreateObject("Scripting.Dictionary") - enum_error_to_string_size = 0 - Set enum_error_to_string_mapping = CreateObject("Scripting.Dictionary") - const_size = 0 - Set const_value = CreateObject("Scripting.Dictionary") - struct_size = 0 - Set structs = CreateObject("Scripting.Dictionary") - method_size = 0 - Set methods = CreateObject("Scripting.Dictionary") - static_method_size = 0 - Set static_methods = CreateObject("Scripting.Dictionary") - super_cls = "" - cls = "" - api_selected = "" - cls_in_api = "" - start_squirrel_define_on_next_line = False - has_fileheader = False - cls_level = 0 - apis = LCase(api) - If apis = "gs" Then apis = "game" - - While Not src.AtEndOfStream - line = src.ReadLine - SquirrelExportParse api, line, dst - Wend - - src.Close - dst.Close -End Sub - -Function SortDict(dict) - Set SortDict = CreateObject("Scripting.Dictionary") - While dict.Count <> 0 - Dim first, i - first = "" - For Each i in dict - If first = "" Or StrComp(first, i) = 1 Then first = i - Next - SortDict.Add first, first - dict.Remove(first) - Wend -End Function - -Sub ExportInstanceParse(apiuc, apilc, line, file) - Dim re, fname, f, files, r, regs - Set re = New RegExp - - re.Pattern = "\.hpp\.sq" - If re.Test(line) Then - re.Pattern = "template" - If re.Test(line) Then - file.WriteLine line - End If - Exit Sub - End If - - re.Pattern = "SQ" & apiuc & "Controller_Register" - If re.Test(line) Then - file.WriteLine line - Exit Sub - End If - - re.Pattern = "SQ" & apiuc & ".*_Register" - If re.Test(line) Then Exit Sub - - re.Pattern = "Note: this line is a marker in squirrel_export.sh. Do not change!" - If re.Test(line) Then - file.WriteLine line - Set files = CreateObject("Scripting.Dictionary") - For Each fname In FSO.GetFolder(".").Files - Do ' null loop for logic short-circuit - re.Pattern = ".*_(.*)\.hpp\.sq" - If Not re.Test(fname) Then Exit Do - Set f = FSO.OpenTextFile(fname, 1) - fname = fname.Name - re.Pattern = "^void SQ" & apiuc & ".*Register\(Squirrel \*engine\)$" - While Not f.AtEndOfStream - If re.Test(f.ReadLine) And Not files.Exists(fname) Then - files.Add fname, fname - End If - Wend - f.Close - Loop While False ' end of null loop - Next - Set files = SortDict(files) - For Each f in files - file.WriteLine "#include " & Chr(34) & "../script/api/" & apilc & "/" & f & Chr(34) - Next - Exit Sub - End If - - re.Pattern = "/\* Register all classes \*/" - If re.Test(line) Then - file.WriteLine line - Set regs = CreateObject("Scripting.Dictionary") - ' List needs to be registered with squirrel before all List subclasses - file.WriteLine " SQ" & apiuc & "List_Register(this->engine);" - For Each fname In FSO.GetFolder(".").Files - Do ' null loop for logic short-circuit - re.Pattern = ".*_(.*)\.hpp\.sq" - If Not re.Test(fname) Then Exit Do - Set f = FSO.OpenTextFile(fname, 1) - While Not f.AtEndOfStream - Do ' null loop for logic short-circuit - r = f.ReadLine - re.Pattern = "^void SQ" & apiuc & ".*Register\(Squirrel \*engine\)$" - If Not re.Test(r) Then Exit Do - re.Pattern = "SQ" & apiuc & "List_Register" - If re.Test(r) Then Exit Do - re.Pattern = "^.*void " - r = re.Replace(r, "") - re.Pattern = "Squirrel \*" - r = re.Replace(r, "this->") - re.Pattern = "$" - r = re.Replace(r, ";") - re.Pattern = "_Register" - r = re.Replace(r, "0000Register") - If Not regs.Exists(r) Then regs.Add r, r - Loop While False ' end of null loop - Wend - f.Close - Loop While False ' end of null loop - Next - Set regs = SortDict(regs) - re.Pattern = "0000Register" - For Each r in regs.Items - r = re.Replace(r, "_Register") - If r <> "SQ" & apiuc & "Controller_Register(this->engine);" Then file.WriteLine " " & r - Next - Exit Sub - End If - - file.WriteLine line -End Sub - -Sub ExportInstance(apiuc, apilc, srcfilename, dstfilename) - Dim src, dst, line - Set src = FSO.OpenTextFile(srcfilename, 1) - Set dst = FSO.OpenTextFile(dstfilename, 2, True) - - While Not src.AtEndOfStream - line = src.ReadLine - ExportInstanceParse apiuc, apilc, line, dst - Wend - - src.Close - dst.Close -End Sub - -' Recursive entry point -Sub Main - Dim WSH, scriptdir, apilc, re, api, apiuc, f, bf - Set WSH = CreateObject("WScript.Shell") - Set re = New RegExp - - ' This must be called from within a src/???/api directory. - scriptdir = FSO.GetParentFolderName(WScript.ScriptFullName) - apilc = WSH.CurrentDirectory - re.Pattern = "\\api" - apilc = re.Replace(apilc, "") - re.Pattern = ".*\\" - apilc = re.Replace(apilc, "") - - ' Check if we are in the root directory of the API, as then we generate all APIs - If apilc = "script" Then - For Each api In FSO.GetFolder(".").SubFolders - WScript.Echo "Generating for API '" & api.Name & "' ..." - WSH.CurrentDirectory = api - Main - Next - WScript.Quit 0 - End If - - Select Case apilc - Case "template" apiuc = "Template" - Case "ai" apiuc = "AI" - Case "game" apiuc = "GS" - Case Else - WScript.Echo "Unknown API type." - Exit Sub - End Select - - For Each f in FSO.GetFolder("..").Files - Do ' null loop for logic short-circuit - re.Pattern = ".*\.hpp" - If Not re.Test(f) Then Exit Do - ' ScriptController has custom code, and should not be generated - If f.Name = "script_controller.hpp" Then Exit Do - re.Pattern = "script_" - bf = re.Replace(f.name, apilc & "_") - SquirrelExport apiuc, f, bf & ".tmp" - If IsEmptyFile(bf & ".tmp") Then - If FSO.FileExists(bf & ".sq") Then - WScript.Echo "Deleted: " & bf & ".sq" - FSO.DeleteFile bf & ".sq" - End If - FSO.DeleteFile bf & ".tmp" - ElseIf Not FSO.FileExists(bf & ".sq") Or Not CompareFiles(bf & ".sq", bf & ".tmp") Then - If FSO.FileExists(bf & ".sq") Then FSO.DeleteFile bf & ".sq" - FSO.MoveFile bf & ".tmp", bf & ".sq" - WScript.Echo "Updated: " & bf & ".sq" - Else - FSO.DeleteFile bf & ".tmp" - End If - Loop While False ' end of null loop - Next - - ' Remove .hpp.sq if .hpp doesn't exist anymore - For Each f in FSO.GetFolder(".").Files - Do ' null loop for logic short-circuit - re.Pattern = ".*\.hpp\.sq" - If Not re.Test(f) Then Exit Do - f = f.Name - re.Pattern = "\.hpp\.sq$" - f = re.Replace(f, ".hpp") - re.Pattern = apilc & "_" - f = re.Replace(f, "script_") - If Not FSO.FileExists("..\" & f) Then - WScript.Echo "Deleted: " & f & ".sq" - 'FSO.DeleteFile f & ".sq" - End If - Loop While False ' end of null loop - Next - - If apilc = "template" Then Exit Sub - - ' Add stuff to ${apilc}_instance.cpp - f = "..\..\..\" & apilc & "\" & apilc & "_instance.cpp" - ExportInstance apiuc, apilc, f, f & ".tmp" - If Not FSO.FileExists(f) Or Not CompareFiles(f, f & ".tmp") Then - If FSO.FileExists(f) Then FSO.DeleteFile f - FSO.MoveFile f & ".tmp", f - WScript.Echo "Updated: " & f - Else - FSO.DeleteFile f & ".tmp" - End If -End Sub - -Main diff --git a/src/script/api/template/template_accounting.hpp.sq b/src/script/api/template/template_accounting.hpp.sq deleted file mode 100644 index 06be408c94..0000000000 --- a/src/script/api/template/template_accounting.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_accounting.hpp" - -namespace SQConvert { - /* Allow ScriptAccounting to be used as Squirrel parameter */ - template <> inline ScriptAccounting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptAccounting *)instance; } - template <> inline ScriptAccounting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptAccounting *)instance; } - template <> inline const ScriptAccounting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptAccounting *)instance; } - template <> inline const ScriptAccounting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptAccounting *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptAccounting *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Accounting", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_admin.hpp.sq b/src/script/api/template/template_admin.hpp.sq deleted file mode 100644 index 3fd8a2face..0000000000 --- a/src/script/api/template/template_admin.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_admin.hpp" - -namespace SQConvert { - /* Allow ScriptAdmin to be used as Squirrel parameter */ - template <> inline ScriptAdmin *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptAdmin *)instance; } - template <> inline ScriptAdmin &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptAdmin *)instance; } - template <> inline const ScriptAdmin *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptAdmin *)instance; } - template <> inline const ScriptAdmin &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptAdmin *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptAdmin *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Admin", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_airport.hpp.sq b/src/script/api/template/template_airport.hpp.sq deleted file mode 100644 index 7f82808135..0000000000 --- a/src/script/api/template/template_airport.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_airport.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptAirport::AirportType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptAirport::AirportType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptAirport::AirportType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptAirport::PlaneType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptAirport::PlaneType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptAirport::PlaneType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptAirport to be used as Squirrel parameter */ - template <> inline ScriptAirport *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptAirport *)instance; } - template <> inline ScriptAirport &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptAirport *)instance; } - template <> inline const ScriptAirport *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptAirport *)instance; } - template <> inline const ScriptAirport &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptAirport *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptAirport *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Airport", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_base.hpp.sq b/src/script/api/template/template_base.hpp.sq deleted file mode 100644 index b2ce115481..0000000000 --- a/src/script/api/template/template_base.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_base.hpp" - -namespace SQConvert { - /* Allow ScriptBase to be used as Squirrel parameter */ - template <> inline ScriptBase *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBase *)instance; } - template <> inline ScriptBase &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBase *)instance; } - template <> inline const ScriptBase *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBase *)instance; } - template <> inline const ScriptBase &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBase *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBase *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Base", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_basestation.hpp.sq b/src/script/api/template/template_basestation.hpp.sq deleted file mode 100644 index 297bb0c4a5..0000000000 --- a/src/script/api/template/template_basestation.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_basestation.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptBaseStation::SpecialStationIDs GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptBaseStation::SpecialStationIDs)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBaseStation::SpecialStationIDs res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptBaseStation to be used as Squirrel parameter */ - template <> inline ScriptBaseStation *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBaseStation *)instance; } - template <> inline ScriptBaseStation &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBaseStation *)instance; } - template <> inline const ScriptBaseStation *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBaseStation *)instance; } - template <> inline const ScriptBaseStation &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBaseStation *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBaseStation *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "BaseStation", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_bridge.hpp.sq b/src/script/api/template/template_bridge.hpp.sq deleted file mode 100644 index f3f9371d98..0000000000 --- a/src/script/api/template/template_bridge.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_bridge.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptBridge::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptBridge::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBridge::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptBridge to be used as Squirrel parameter */ - template <> inline ScriptBridge *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBridge *)instance; } - template <> inline ScriptBridge &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBridge *)instance; } - template <> inline const ScriptBridge *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBridge *)instance; } - template <> inline const ScriptBridge &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBridge *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBridge *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Bridge", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_bridgelist.hpp.sq b/src/script/api/template/template_bridgelist.hpp.sq deleted file mode 100644 index d007a1aeec..0000000000 --- a/src/script/api/template/template_bridgelist.hpp.sq +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_bridgelist.hpp" - -namespace SQConvert { - /* Allow ScriptBridgeList to be used as Squirrel parameter */ - template <> inline ScriptBridgeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBridgeList *)instance; } - template <> inline ScriptBridgeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBridgeList *)instance; } - template <> inline const ScriptBridgeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBridgeList *)instance; } - template <> inline const ScriptBridgeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBridgeList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBridgeList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "BridgeList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptBridgeList_Length to be used as Squirrel parameter */ - template <> inline ScriptBridgeList_Length *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBridgeList_Length *)instance; } - template <> inline ScriptBridgeList_Length &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBridgeList_Length *)instance; } - template <> inline const ScriptBridgeList_Length *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptBridgeList_Length *)instance; } - template <> inline const ScriptBridgeList_Length &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptBridgeList_Length *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptBridgeList_Length *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "BridgeList_Length", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_cargo.hpp.sq b/src/script/api/template/template_cargo.hpp.sq deleted file mode 100644 index 5d46fdd373..0000000000 --- a/src/script/api/template/template_cargo.hpp.sq +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargo.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptCargo::CargoClass GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCargo::CargoClass)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargo::CargoClass res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCargo::TownEffect GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCargo::TownEffect)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargo::TownEffect res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCargo::SpecialCargoID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCargo::SpecialCargoID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargo::SpecialCargoID res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCargo::DistributionType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCargo::DistributionType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargo::DistributionType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptCargo to be used as Squirrel parameter */ - template <> inline ScriptCargo *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargo *)instance; } - template <> inline ScriptCargo &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargo *)instance; } - template <> inline const ScriptCargo *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargo *)instance; } - template <> inline const ScriptCargo &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargo *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargo *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Cargo", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_cargolist.hpp.sq b/src/script/api/template/template_cargolist.hpp.sq deleted file mode 100644 index 394d20f91d..0000000000 --- a/src/script/api/template/template_cargolist.hpp.sq +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargolist.hpp" - -namespace SQConvert { - /* Allow ScriptCargoList to be used as Squirrel parameter */ - template <> inline ScriptCargoList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList *)instance; } - template <> inline ScriptCargoList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList *)instance; } - template <> inline const ScriptCargoList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList *)instance; } - template <> inline const ScriptCargoList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargoList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "CargoList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptCargoList_IndustryAccepting to be used as Squirrel parameter */ - template <> inline ScriptCargoList_IndustryAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList_IndustryAccepting *)instance; } - template <> inline ScriptCargoList_IndustryAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList_IndustryAccepting *)instance; } - template <> inline const ScriptCargoList_IndustryAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList_IndustryAccepting *)instance; } - template <> inline const ScriptCargoList_IndustryAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList_IndustryAccepting *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargoList_IndustryAccepting *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "CargoList_IndustryAccepting", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptCargoList_IndustryProducing to be used as Squirrel parameter */ - template <> inline ScriptCargoList_IndustryProducing *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList_IndustryProducing *)instance; } - template <> inline ScriptCargoList_IndustryProducing &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList_IndustryProducing *)instance; } - template <> inline const ScriptCargoList_IndustryProducing *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList_IndustryProducing *)instance; } - template <> inline const ScriptCargoList_IndustryProducing &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList_IndustryProducing *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargoList_IndustryProducing *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "CargoList_IndustryProducing", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptCargoList_StationAccepting to be used as Squirrel parameter */ - template <> inline ScriptCargoList_StationAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList_StationAccepting *)instance; } - template <> inline ScriptCargoList_StationAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList_StationAccepting *)instance; } - template <> inline const ScriptCargoList_StationAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoList_StationAccepting *)instance; } - template <> inline const ScriptCargoList_StationAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoList_StationAccepting *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargoList_StationAccepting *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "CargoList_StationAccepting", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_cargomonitor.hpp.sq b/src/script/api/template/template_cargomonitor.hpp.sq deleted file mode 100644 index 6d6965777f..0000000000 --- a/src/script/api/template/template_cargomonitor.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_cargomonitor.hpp" - -namespace SQConvert { - /* Allow ScriptCargoMonitor to be used as Squirrel parameter */ - template <> inline ScriptCargoMonitor *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoMonitor *)instance; } - template <> inline ScriptCargoMonitor &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoMonitor *)instance; } - template <> inline const ScriptCargoMonitor *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCargoMonitor *)instance; } - template <> inline const ScriptCargoMonitor &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCargoMonitor *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCargoMonitor *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "CargoMonitor", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_client.hpp.sq b/src/script/api/template/template_client.hpp.sq deleted file mode 100644 index c37bd9a6ed..0000000000 --- a/src/script/api/template/template_client.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_client.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptClient::ClientID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptClient::ClientID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptClient::ClientID res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptClient to be used as Squirrel parameter */ - template <> inline ScriptClient *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClient *)instance; } - template <> inline ScriptClient &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClient *)instance; } - template <> inline const ScriptClient *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClient *)instance; } - template <> inline const ScriptClient &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClient *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptClient *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Client", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_clientlist.hpp.sq b/src/script/api/template/template_clientlist.hpp.sq deleted file mode 100644 index 7021a59cd6..0000000000 --- a/src/script/api/template/template_clientlist.hpp.sq +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_clientlist.hpp" - -namespace SQConvert { - /* Allow ScriptClientList to be used as Squirrel parameter */ - template <> inline ScriptClientList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList *)instance; } - template <> inline ScriptClientList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList *)instance; } - template <> inline const ScriptClientList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList *)instance; } - template <> inline const ScriptClientList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptClientList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "ClientList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptClientList_Company to be used as Squirrel parameter */ - template <> inline ScriptClientList_Company *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList_Company *)instance; } - template <> inline ScriptClientList_Company &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList_Company *)instance; } - template <> inline const ScriptClientList_Company *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptClientList_Company *)instance; } - template <> inline const ScriptClientList_Company &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptClientList_Company *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptClientList_Company *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "ClientList_Company", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_company.hpp.sq b/src/script/api/template/template_company.hpp.sq deleted file mode 100644 index 97461448a9..0000000000 --- a/src/script/api/template/template_company.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_company.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptCompany::Quarter GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::Quarter)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::Quarter res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCompany::CompanyID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::CompanyID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::CompanyID res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCompany::Gender GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::Gender)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::Gender res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCompany::LiveryScheme GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::LiveryScheme)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::LiveryScheme res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCompany::Colours GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::Colours)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::Colours res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptCompany::ExpensesType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::ExpensesType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::ExpensesType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptCompany to be used as Squirrel parameter */ - template <> inline ScriptCompany *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCompany *)instance; } - template <> inline ScriptCompany &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCompany *)instance; } - template <> inline const ScriptCompany *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCompany *)instance; } - template <> inline const ScriptCompany &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCompany *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompany *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Company", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_companymode.hpp.sq b/src/script/api/template/template_companymode.hpp.sq deleted file mode 100644 index aa3edd6b70..0000000000 --- a/src/script/api/template/template_companymode.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_companymode.hpp" - -namespace SQConvert { - /* Allow ScriptCompanyMode to be used as Squirrel parameter */ - template <> inline ScriptCompanyMode *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCompanyMode *)instance; } - template <> inline ScriptCompanyMode &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCompanyMode *)instance; } - template <> inline const ScriptCompanyMode *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptCompanyMode *)instance; } - template <> inline const ScriptCompanyMode &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptCompanyMode *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptCompanyMode *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "CompanyMode", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_date.hpp.sq b/src/script/api/template/template_date.hpp.sq deleted file mode 100644 index 747ead207e..0000000000 --- a/src/script/api/template/template_date.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_date.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptDate::Date GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptDate::Date)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptDate::Date res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptDate to be used as Squirrel parameter */ - template <> inline ScriptDate *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptDate *)instance; } - template <> inline ScriptDate &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptDate *)instance; } - template <> inline const ScriptDate *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptDate *)instance; } - template <> inline const ScriptDate &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptDate *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptDate *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Date", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_depotlist.hpp.sq b/src/script/api/template/template_depotlist.hpp.sq deleted file mode 100644 index 9981f80ce7..0000000000 --- a/src/script/api/template/template_depotlist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_depotlist.hpp" - -namespace SQConvert { - /* Allow ScriptDepotList to be used as Squirrel parameter */ - template <> inline ScriptDepotList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptDepotList *)instance; } - template <> inline ScriptDepotList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptDepotList *)instance; } - template <> inline const ScriptDepotList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptDepotList *)instance; } - template <> inline const ScriptDepotList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptDepotList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptDepotList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "DepotList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_engine.hpp.sq b/src/script/api/template/template_engine.hpp.sq deleted file mode 100644 index 4ae741eac2..0000000000 --- a/src/script/api/template/template_engine.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_engine.hpp" - -namespace SQConvert { - /* Allow ScriptEngine to be used as Squirrel parameter */ - template <> inline ScriptEngine *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEngine *)instance; } - template <> inline ScriptEngine &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEngine *)instance; } - template <> inline const ScriptEngine *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEngine *)instance; } - template <> inline const ScriptEngine &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEngine *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEngine *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Engine", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_enginelist.hpp.sq b/src/script/api/template/template_enginelist.hpp.sq deleted file mode 100644 index 3e98f9c8a0..0000000000 --- a/src/script/api/template/template_enginelist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_enginelist.hpp" - -namespace SQConvert { - /* Allow ScriptEngineList to be used as Squirrel parameter */ - template <> inline ScriptEngineList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEngineList *)instance; } - template <> inline ScriptEngineList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEngineList *)instance; } - template <> inline const ScriptEngineList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEngineList *)instance; } - template <> inline const ScriptEngineList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEngineList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEngineList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EngineList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_error.hpp.sq b/src/script/api/template/template_error.hpp.sq deleted file mode 100644 index 99b37eafec..0000000000 --- a/src/script/api/template/template_error.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_error.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptError::ErrorCategories GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptError::ErrorCategories)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptError::ErrorCategories res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptError::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptError::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptError::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptError to be used as Squirrel parameter */ - template <> inline ScriptError *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptError *)instance; } - template <> inline ScriptError &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptError *)instance; } - template <> inline const ScriptError *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptError *)instance; } - template <> inline const ScriptError &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptError *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptError *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Error", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_event.hpp.sq b/src/script/api/template/template_event.hpp.sq deleted file mode 100644 index 38ba818b40..0000000000 --- a/src/script/api/template/template_event.hpp.sq +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_event.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptEvent::ScriptEventType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptEvent::ScriptEventType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEvent::ScriptEventType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptEvent to be used as Squirrel parameter */ - template <> inline ScriptEvent *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEvent *)instance; } - template <> inline ScriptEvent &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEvent *)instance; } - template <> inline const ScriptEvent *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEvent *)instance; } - template <> inline const ScriptEvent &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEvent *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEvent *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, "Event", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventController to be used as Squirrel parameter */ - template <> inline ScriptEventController *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventController *)instance; } - template <> inline ScriptEventController &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventController *)instance; } - template <> inline const ScriptEventController *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventController *)instance; } - template <> inline const ScriptEventController &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventController *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventController *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventController", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_event_types.hpp.sq b/src/script/api/template/template_event_types.hpp.sq deleted file mode 100644 index 4e82de63c7..0000000000 --- a/src/script/api/template/template_event_types.hpp.sq +++ /dev/null @@ -1,302 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_event_types.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptEventVehicleCrashed::CrashReason GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptEventVehicleCrashed::CrashReason)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleCrashed::CrashReason res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptEventVehicleCrashed to be used as Squirrel parameter */ - template <> inline ScriptEventVehicleCrashed *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleCrashed *)instance; } - template <> inline ScriptEventVehicleCrashed &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleCrashed *)instance; } - template <> inline const ScriptEventVehicleCrashed *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleCrashed *)instance; } - template <> inline const ScriptEventVehicleCrashed &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleCrashed *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleCrashed *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventVehicleCrashed", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventSubsidyOffer to be used as Squirrel parameter */ - template <> inline ScriptEventSubsidyOffer *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyOffer *)instance; } - template <> inline ScriptEventSubsidyOffer &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyOffer *)instance; } - template <> inline const ScriptEventSubsidyOffer *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyOffer *)instance; } - template <> inline const ScriptEventSubsidyOffer &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyOffer *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventSubsidyOffer *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventSubsidyOffer", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventSubsidyOfferExpired to be used as Squirrel parameter */ - template <> inline ScriptEventSubsidyOfferExpired *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyOfferExpired *)instance; } - template <> inline ScriptEventSubsidyOfferExpired &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyOfferExpired *)instance; } - template <> inline const ScriptEventSubsidyOfferExpired *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyOfferExpired *)instance; } - template <> inline const ScriptEventSubsidyOfferExpired &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyOfferExpired *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventSubsidyOfferExpired *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventSubsidyOfferExpired", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventSubsidyAwarded to be used as Squirrel parameter */ - template <> inline ScriptEventSubsidyAwarded *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyAwarded *)instance; } - template <> inline ScriptEventSubsidyAwarded &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyAwarded *)instance; } - template <> inline const ScriptEventSubsidyAwarded *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyAwarded *)instance; } - template <> inline const ScriptEventSubsidyAwarded &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyAwarded *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventSubsidyAwarded *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventSubsidyAwarded", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventSubsidyExpired to be used as Squirrel parameter */ - template <> inline ScriptEventSubsidyExpired *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyExpired *)instance; } - template <> inline ScriptEventSubsidyExpired &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyExpired *)instance; } - template <> inline const ScriptEventSubsidyExpired *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventSubsidyExpired *)instance; } - template <> inline const ScriptEventSubsidyExpired &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventSubsidyExpired *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventSubsidyExpired *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventSubsidyExpired", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventEnginePreview to be used as Squirrel parameter */ - template <> inline ScriptEventEnginePreview *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventEnginePreview *)instance; } - template <> inline ScriptEventEnginePreview &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventEnginePreview *)instance; } - template <> inline const ScriptEventEnginePreview *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventEnginePreview *)instance; } - template <> inline const ScriptEventEnginePreview &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventEnginePreview *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventEnginePreview *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventEnginePreview", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventCompanyNew to be used as Squirrel parameter */ - template <> inline ScriptEventCompanyNew *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyNew *)instance; } - template <> inline ScriptEventCompanyNew &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyNew *)instance; } - template <> inline const ScriptEventCompanyNew *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyNew *)instance; } - template <> inline const ScriptEventCompanyNew &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyNew *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventCompanyNew *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventCompanyNew", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventCompanyInTrouble to be used as Squirrel parameter */ - template <> inline ScriptEventCompanyInTrouble *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyInTrouble *)instance; } - template <> inline ScriptEventCompanyInTrouble &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyInTrouble *)instance; } - template <> inline const ScriptEventCompanyInTrouble *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyInTrouble *)instance; } - template <> inline const ScriptEventCompanyInTrouble &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyInTrouble *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventCompanyInTrouble *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventCompanyInTrouble", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventCompanyAskMerger to be used as Squirrel parameter */ - template <> inline ScriptEventCompanyAskMerger *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyAskMerger *)instance; } - template <> inline ScriptEventCompanyAskMerger &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyAskMerger *)instance; } - template <> inline const ScriptEventCompanyAskMerger *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyAskMerger *)instance; } - template <> inline const ScriptEventCompanyAskMerger &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyAskMerger *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventCompanyAskMerger *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventCompanyAskMerger", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventCompanyMerger to be used as Squirrel parameter */ - template <> inline ScriptEventCompanyMerger *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyMerger *)instance; } - template <> inline ScriptEventCompanyMerger &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyMerger *)instance; } - template <> inline const ScriptEventCompanyMerger *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyMerger *)instance; } - template <> inline const ScriptEventCompanyMerger &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyMerger *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventCompanyMerger *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventCompanyMerger", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventCompanyBankrupt to be used as Squirrel parameter */ - template <> inline ScriptEventCompanyBankrupt *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyBankrupt *)instance; } - template <> inline ScriptEventCompanyBankrupt &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyBankrupt *)instance; } - template <> inline const ScriptEventCompanyBankrupt *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyBankrupt *)instance; } - template <> inline const ScriptEventCompanyBankrupt &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyBankrupt *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventCompanyBankrupt *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventCompanyBankrupt", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventVehicleLost to be used as Squirrel parameter */ - template <> inline ScriptEventVehicleLost *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleLost *)instance; } - template <> inline ScriptEventVehicleLost &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleLost *)instance; } - template <> inline const ScriptEventVehicleLost *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleLost *)instance; } - template <> inline const ScriptEventVehicleLost &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleLost *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleLost *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventVehicleLost", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventVehicleWaitingInDepot to be used as Squirrel parameter */ - template <> inline ScriptEventVehicleWaitingInDepot *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleWaitingInDepot *)instance; } - template <> inline ScriptEventVehicleWaitingInDepot &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleWaitingInDepot *)instance; } - template <> inline const ScriptEventVehicleWaitingInDepot *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleWaitingInDepot *)instance; } - template <> inline const ScriptEventVehicleWaitingInDepot &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleWaitingInDepot *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleWaitingInDepot *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventVehicleWaitingInDepot", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventVehicleUnprofitable to be used as Squirrel parameter */ - template <> inline ScriptEventVehicleUnprofitable *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleUnprofitable *)instance; } - template <> inline ScriptEventVehicleUnprofitable &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleUnprofitable *)instance; } - template <> inline const ScriptEventVehicleUnprofitable *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleUnprofitable *)instance; } - template <> inline const ScriptEventVehicleUnprofitable &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleUnprofitable *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleUnprofitable *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventVehicleUnprofitable", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventIndustryOpen to be used as Squirrel parameter */ - template <> inline ScriptEventIndustryOpen *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventIndustryOpen *)instance; } - template <> inline ScriptEventIndustryOpen &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventIndustryOpen *)instance; } - template <> inline const ScriptEventIndustryOpen *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventIndustryOpen *)instance; } - template <> inline const ScriptEventIndustryOpen &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventIndustryOpen *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventIndustryOpen *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventIndustryOpen", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventIndustryClose to be used as Squirrel parameter */ - template <> inline ScriptEventIndustryClose *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventIndustryClose *)instance; } - template <> inline ScriptEventIndustryClose &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventIndustryClose *)instance; } - template <> inline const ScriptEventIndustryClose *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventIndustryClose *)instance; } - template <> inline const ScriptEventIndustryClose &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventIndustryClose *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventIndustryClose *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventIndustryClose", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventEngineAvailable to be used as Squirrel parameter */ - template <> inline ScriptEventEngineAvailable *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventEngineAvailable *)instance; } - template <> inline ScriptEventEngineAvailable &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventEngineAvailable *)instance; } - template <> inline const ScriptEventEngineAvailable *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventEngineAvailable *)instance; } - template <> inline const ScriptEventEngineAvailable &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventEngineAvailable *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventEngineAvailable *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventEngineAvailable", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventStationFirstVehicle to be used as Squirrel parameter */ - template <> inline ScriptEventStationFirstVehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStationFirstVehicle *)instance; } - template <> inline ScriptEventStationFirstVehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStationFirstVehicle *)instance; } - template <> inline const ScriptEventStationFirstVehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStationFirstVehicle *)instance; } - template <> inline const ScriptEventStationFirstVehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStationFirstVehicle *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventStationFirstVehicle *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStationFirstVehicle", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventDisasterZeppelinerCrashed to be used as Squirrel parameter */ - template <> inline ScriptEventDisasterZeppelinerCrashed *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventDisasterZeppelinerCrashed *)instance; } - template <> inline ScriptEventDisasterZeppelinerCrashed &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventDisasterZeppelinerCrashed *)instance; } - template <> inline const ScriptEventDisasterZeppelinerCrashed *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventDisasterZeppelinerCrashed *)instance; } - template <> inline const ScriptEventDisasterZeppelinerCrashed &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventDisasterZeppelinerCrashed *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventDisasterZeppelinerCrashed *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventDisasterZeppelinerCrashed", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventDisasterZeppelinerCleared to be used as Squirrel parameter */ - template <> inline ScriptEventDisasterZeppelinerCleared *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventDisasterZeppelinerCleared *)instance; } - template <> inline ScriptEventDisasterZeppelinerCleared &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventDisasterZeppelinerCleared *)instance; } - template <> inline const ScriptEventDisasterZeppelinerCleared *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventDisasterZeppelinerCleared *)instance; } - template <> inline const ScriptEventDisasterZeppelinerCleared &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventDisasterZeppelinerCleared *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventDisasterZeppelinerCleared *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventDisasterZeppelinerCleared", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventTownFounded to be used as Squirrel parameter */ - template <> inline ScriptEventTownFounded *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventTownFounded *)instance; } - template <> inline ScriptEventTownFounded &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventTownFounded *)instance; } - template <> inline const ScriptEventTownFounded *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventTownFounded *)instance; } - template <> inline const ScriptEventTownFounded &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventTownFounded *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventTownFounded *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventTownFounded", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventAircraftDestTooFar to be used as Squirrel parameter */ - template <> inline ScriptEventAircraftDestTooFar *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventAircraftDestTooFar *)instance; } - template <> inline ScriptEventAircraftDestTooFar &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventAircraftDestTooFar *)instance; } - template <> inline const ScriptEventAircraftDestTooFar *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventAircraftDestTooFar *)instance; } - template <> inline const ScriptEventAircraftDestTooFar &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventAircraftDestTooFar *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventAircraftDestTooFar *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventAircraftDestTooFar", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventAdminPort to be used as Squirrel parameter */ - template <> inline ScriptEventAdminPort *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventAdminPort *)instance; } - template <> inline ScriptEventAdminPort &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventAdminPort *)instance; } - template <> inline const ScriptEventAdminPort *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventAdminPort *)instance; } - template <> inline const ScriptEventAdminPort &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventAdminPort *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventAdminPort *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventAdminPort", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventWindowWidgetClick to be used as Squirrel parameter */ - template <> inline ScriptEventWindowWidgetClick *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventWindowWidgetClick *)instance; } - template <> inline ScriptEventWindowWidgetClick &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventWindowWidgetClick *)instance; } - template <> inline const ScriptEventWindowWidgetClick *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventWindowWidgetClick *)instance; } - template <> inline const ScriptEventWindowWidgetClick &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventWindowWidgetClick *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventWindowWidgetClick *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventWindowWidgetClick", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventGoalQuestionAnswer to be used as Squirrel parameter */ - template <> inline ScriptEventGoalQuestionAnswer *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventGoalQuestionAnswer *)instance; } - template <> inline ScriptEventGoalQuestionAnswer &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventGoalQuestionAnswer *)instance; } - template <> inline const ScriptEventGoalQuestionAnswer *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventGoalQuestionAnswer *)instance; } - template <> inline const ScriptEventGoalQuestionAnswer &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventGoalQuestionAnswer *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventGoalQuestionAnswer *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventGoalQuestionAnswer", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventCompanyTown to be used as Squirrel parameter */ - template <> inline ScriptEventCompanyTown *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyTown *)instance; } - template <> inline ScriptEventCompanyTown &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyTown *)instance; } - template <> inline const ScriptEventCompanyTown *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventCompanyTown *)instance; } - template <> inline const ScriptEventCompanyTown &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventCompanyTown *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventCompanyTown *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventCompanyTown", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventExclusiveTransportRights to be used as Squirrel parameter */ - template <> inline ScriptEventExclusiveTransportRights *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventExclusiveTransportRights *)instance; } - template <> inline ScriptEventExclusiveTransportRights &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventExclusiveTransportRights *)instance; } - template <> inline const ScriptEventExclusiveTransportRights *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventExclusiveTransportRights *)instance; } - template <> inline const ScriptEventExclusiveTransportRights &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventExclusiveTransportRights *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventExclusiveTransportRights *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventExclusiveTransportRights", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventRoadReconstruction to be used as Squirrel parameter */ - template <> inline ScriptEventRoadReconstruction *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventRoadReconstruction *)instance; } - template <> inline ScriptEventRoadReconstruction &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventRoadReconstruction *)instance; } - template <> inline const ScriptEventRoadReconstruction *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventRoadReconstruction *)instance; } - template <> inline const ScriptEventRoadReconstruction &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventRoadReconstruction *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventRoadReconstruction *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventRoadReconstruction", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventVehicleAutoReplaced to be used as Squirrel parameter */ - template <> inline ScriptEventVehicleAutoReplaced *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleAutoReplaced *)instance; } - template <> inline ScriptEventVehicleAutoReplaced &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleAutoReplaced *)instance; } - template <> inline const ScriptEventVehicleAutoReplaced *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventVehicleAutoReplaced *)instance; } - template <> inline const ScriptEventVehicleAutoReplaced &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventVehicleAutoReplaced *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventVehicleAutoReplaced *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventVehicleAutoReplaced", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventStoryPageButtonClick to be used as Squirrel parameter */ - template <> inline ScriptEventStoryPageButtonClick *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageButtonClick *)instance; } - template <> inline ScriptEventStoryPageButtonClick &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageButtonClick *)instance; } - template <> inline const ScriptEventStoryPageButtonClick *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageButtonClick *)instance; } - template <> inline const ScriptEventStoryPageButtonClick &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageButtonClick *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventStoryPageButtonClick *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStoryPageButtonClick", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventStoryPageTileSelect to be used as Squirrel parameter */ - template <> inline ScriptEventStoryPageTileSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageTileSelect *)instance; } - template <> inline ScriptEventStoryPageTileSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageTileSelect *)instance; } - template <> inline const ScriptEventStoryPageTileSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageTileSelect *)instance; } - template <> inline const ScriptEventStoryPageTileSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageTileSelect *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventStoryPageTileSelect *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStoryPageTileSelect", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptEventStoryPageVehicleSelect to be used as Squirrel parameter */ - template <> inline ScriptEventStoryPageVehicleSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageVehicleSelect *)instance; } - template <> inline ScriptEventStoryPageVehicleSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageVehicleSelect *)instance; } - template <> inline const ScriptEventStoryPageVehicleSelect *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptEventStoryPageVehicleSelect *)instance; } - template <> inline const ScriptEventStoryPageVehicleSelect &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptEventStoryPageVehicleSelect *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptEventStoryPageVehicleSelect *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "EventStoryPageVehicleSelect", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_execmode.hpp.sq b/src/script/api/template/template_execmode.hpp.sq deleted file mode 100644 index 7b93b2d1cc..0000000000 --- a/src/script/api/template/template_execmode.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_execmode.hpp" - -namespace SQConvert { - /* Allow ScriptExecMode to be used as Squirrel parameter */ - template <> inline ScriptExecMode *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptExecMode *)instance; } - template <> inline ScriptExecMode &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptExecMode *)instance; } - template <> inline const ScriptExecMode *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptExecMode *)instance; } - template <> inline const ScriptExecMode &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptExecMode *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptExecMode *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "ExecMode", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_game.hpp.sq b/src/script/api/template/template_game.hpp.sq deleted file mode 100644 index a7f366f039..0000000000 --- a/src/script/api/template/template_game.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_game.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptGame::LandscapeType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptGame::LandscapeType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGame::LandscapeType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptGame to be used as Squirrel parameter */ - template <> inline ScriptGame *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGame *)instance; } - template <> inline ScriptGame &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGame *)instance; } - template <> inline const ScriptGame *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGame *)instance; } - template <> inline const ScriptGame &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGame *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGame *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Game", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_gamesettings.hpp.sq b/src/script/api/template/template_gamesettings.hpp.sq deleted file mode 100644 index 012d9240d0..0000000000 --- a/src/script/api/template/template_gamesettings.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_gamesettings.hpp" - -namespace SQConvert { - /* Allow ScriptGameSettings to be used as Squirrel parameter */ - template <> inline ScriptGameSettings *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGameSettings *)instance; } - template <> inline ScriptGameSettings &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGameSettings *)instance; } - template <> inline const ScriptGameSettings *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGameSettings *)instance; } - template <> inline const ScriptGameSettings &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGameSettings *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGameSettings *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "GameSettings", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_goal.hpp.sq b/src/script/api/template/template_goal.hpp.sq deleted file mode 100644 index 984fe7fb6c..0000000000 --- a/src/script/api/template/template_goal.hpp.sq +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_goal.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptGoal::GoalID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptGoal::GoalID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGoal::GoalID res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptGoal::GoalType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptGoal::GoalType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGoal::GoalType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptGoal::QuestionType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptGoal::QuestionType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGoal::QuestionType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptGoal::QuestionButton GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptGoal::QuestionButton)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGoal::QuestionButton res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptGoal to be used as Squirrel parameter */ - template <> inline ScriptGoal *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGoal *)instance; } - template <> inline ScriptGoal &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGoal *)instance; } - template <> inline const ScriptGoal *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGoal *)instance; } - template <> inline const ScriptGoal &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGoal *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGoal *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Goal", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_group.hpp.sq b/src/script/api/template/template_group.hpp.sq deleted file mode 100644 index e598d550c0..0000000000 --- a/src/script/api/template/template_group.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_group.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptGroup::GroupID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptGroup::GroupID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGroup::GroupID res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptGroup to be used as Squirrel parameter */ - template <> inline ScriptGroup *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGroup *)instance; } - template <> inline ScriptGroup &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGroup *)instance; } - template <> inline const ScriptGroup *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGroup *)instance; } - template <> inline const ScriptGroup &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGroup *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGroup *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Group", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_grouplist.hpp.sq b/src/script/api/template/template_grouplist.hpp.sq deleted file mode 100644 index 5431adb83e..0000000000 --- a/src/script/api/template/template_grouplist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_grouplist.hpp" - -namespace SQConvert { - /* Allow ScriptGroupList to be used as Squirrel parameter */ - template <> inline ScriptGroupList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGroupList *)instance; } - template <> inline ScriptGroupList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGroupList *)instance; } - template <> inline const ScriptGroupList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptGroupList *)instance; } - template <> inline const ScriptGroupList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptGroupList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptGroupList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "GroupList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_industry.hpp.sq b/src/script/api/template/template_industry.hpp.sq deleted file mode 100644 index 711c3ab52d..0000000000 --- a/src/script/api/template/template_industry.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industry.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptIndustry::CargoAcceptState GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptIndustry::CargoAcceptState)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustry::CargoAcceptState res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptIndustry to be used as Squirrel parameter */ - template <> inline ScriptIndustry *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustry *)instance; } - template <> inline ScriptIndustry &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustry *)instance; } - template <> inline const ScriptIndustry *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustry *)instance; } - template <> inline const ScriptIndustry &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustry *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustry *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Industry", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_industrylist.hpp.sq b/src/script/api/template/template_industrylist.hpp.sq deleted file mode 100644 index 9c44a3e4cd..0000000000 --- a/src/script/api/template/template_industrylist.hpp.sq +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrylist.hpp" - -namespace SQConvert { - /* Allow ScriptIndustryList to be used as Squirrel parameter */ - template <> inline ScriptIndustryList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryList *)instance; } - template <> inline ScriptIndustryList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryList *)instance; } - template <> inline const ScriptIndustryList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryList *)instance; } - template <> inline const ScriptIndustryList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustryList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "IndustryList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptIndustryList_CargoAccepting to be used as Squirrel parameter */ - template <> inline ScriptIndustryList_CargoAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryList_CargoAccepting *)instance; } - template <> inline ScriptIndustryList_CargoAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryList_CargoAccepting *)instance; } - template <> inline const ScriptIndustryList_CargoAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryList_CargoAccepting *)instance; } - template <> inline const ScriptIndustryList_CargoAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryList_CargoAccepting *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustryList_CargoAccepting *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "IndustryList_CargoAccepting", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptIndustryList_CargoProducing to be used as Squirrel parameter */ - template <> inline ScriptIndustryList_CargoProducing *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryList_CargoProducing *)instance; } - template <> inline ScriptIndustryList_CargoProducing &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryList_CargoProducing *)instance; } - template <> inline const ScriptIndustryList_CargoProducing *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryList_CargoProducing *)instance; } - template <> inline const ScriptIndustryList_CargoProducing &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryList_CargoProducing *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustryList_CargoProducing *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "IndustryList_CargoProducing", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_industrytype.hpp.sq b/src/script/api/template/template_industrytype.hpp.sq deleted file mode 100644 index 06c7c18bbe..0000000000 --- a/src/script/api/template/template_industrytype.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrytype.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptIndustryType::SpecialIndustryType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptIndustryType::SpecialIndustryType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustryType::SpecialIndustryType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptIndustryType to be used as Squirrel parameter */ - template <> inline ScriptIndustryType *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryType *)instance; } - template <> inline ScriptIndustryType &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryType *)instance; } - template <> inline const ScriptIndustryType *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryType *)instance; } - template <> inline const ScriptIndustryType &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryType *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustryType *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "IndustryType", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_industrytypelist.hpp.sq b/src/script/api/template/template_industrytypelist.hpp.sq deleted file mode 100644 index 71272b23ed..0000000000 --- a/src/script/api/template/template_industrytypelist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_industrytypelist.hpp" - -namespace SQConvert { - /* Allow ScriptIndustryTypeList to be used as Squirrel parameter */ - template <> inline ScriptIndustryTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryTypeList *)instance; } - template <> inline ScriptIndustryTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryTypeList *)instance; } - template <> inline const ScriptIndustryTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptIndustryTypeList *)instance; } - template <> inline const ScriptIndustryTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptIndustryTypeList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptIndustryTypeList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "IndustryTypeList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_infrastructure.hpp.sq b/src/script/api/template/template_infrastructure.hpp.sq deleted file mode 100644 index 11b839ae25..0000000000 --- a/src/script/api/template/template_infrastructure.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_infrastructure.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptInfrastructure::Infrastructure GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptInfrastructure::Infrastructure)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptInfrastructure::Infrastructure res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptInfrastructure to be used as Squirrel parameter */ - template <> inline ScriptInfrastructure *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptInfrastructure *)instance; } - template <> inline ScriptInfrastructure &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptInfrastructure *)instance; } - template <> inline const ScriptInfrastructure *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptInfrastructure *)instance; } - template <> inline const ScriptInfrastructure &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptInfrastructure *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptInfrastructure *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Infrastructure", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_list.hpp.sq b/src/script/api/template/template_list.hpp.sq deleted file mode 100644 index 9ca4da9c10..0000000000 --- a/src/script/api/template/template_list.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_list.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptList::SorterType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptList::SorterType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptList::SorterType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptList to be used as Squirrel parameter */ - template <> inline ScriptList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptList *)instance; } - template <> inline ScriptList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptList *)instance; } - template <> inline const ScriptList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptList *)instance; } - template <> inline const ScriptList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "List", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_log.hpp.sq b/src/script/api/template/template_log.hpp.sq deleted file mode 100644 index 2ebe7547de..0000000000 --- a/src/script/api/template/template_log.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_log.hpp" - -namespace SQConvert { - /* Allow ScriptLog to be used as Squirrel parameter */ - template <> inline ScriptLog *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptLog *)instance; } - template <> inline ScriptLog &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptLog *)instance; } - template <> inline const ScriptLog *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptLog *)instance; } - template <> inline const ScriptLog &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptLog *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptLog *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Log", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_map.hpp.sq b/src/script/api/template/template_map.hpp.sq deleted file mode 100644 index 3a15390277..0000000000 --- a/src/script/api/template/template_map.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_map.hpp" - -namespace SQConvert { - /* Allow ScriptMap to be used as Squirrel parameter */ - template <> inline ScriptMap *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptMap *)instance; } - template <> inline ScriptMap &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptMap *)instance; } - template <> inline const ScriptMap *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptMap *)instance; } - template <> inline const ScriptMap &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptMap *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptMap *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Map", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_marine.hpp.sq b/src/script/api/template/template_marine.hpp.sq deleted file mode 100644 index 115e88c263..0000000000 --- a/src/script/api/template/template_marine.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_marine.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptMarine::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptMarine::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptMarine::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptMarine::BuildType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptMarine::BuildType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptMarine::BuildType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptMarine to be used as Squirrel parameter */ - template <> inline ScriptMarine *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptMarine *)instance; } - template <> inline ScriptMarine &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptMarine *)instance; } - template <> inline const ScriptMarine *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptMarine *)instance; } - template <> inline const ScriptMarine &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptMarine *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptMarine *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Marine", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_news.hpp.sq b/src/script/api/template/template_news.hpp.sq deleted file mode 100644 index 443e04c858..0000000000 --- a/src/script/api/template/template_news.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_news.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptNews::NewsType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptNews::NewsType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptNews::NewsType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptNews::NewsReferenceType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptNews::NewsReferenceType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptNews::NewsReferenceType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptNews to be used as Squirrel parameter */ - template <> inline ScriptNews *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptNews *)instance; } - template <> inline ScriptNews &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptNews *)instance; } - template <> inline const ScriptNews *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptNews *)instance; } - template <> inline const ScriptNews &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptNews *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptNews *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "News", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_order.hpp.sq b/src/script/api/template/template_order.hpp.sq deleted file mode 100644 index 155baa3a75..0000000000 --- a/src/script/api/template/template_order.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_order.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptOrder::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptOrder::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptOrder::ScriptOrderFlags GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptOrder::ScriptOrderFlags)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder::ScriptOrderFlags res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptOrder::OrderCondition GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptOrder::OrderCondition)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder::OrderCondition res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptOrder::CompareFunction GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptOrder::CompareFunction)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder::CompareFunction res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptOrder::OrderPosition GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptOrder::OrderPosition)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder::OrderPosition res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptOrder::StopLocation GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptOrder::StopLocation)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder::StopLocation res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptOrder to be used as Squirrel parameter */ - template <> inline ScriptOrder *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptOrder *)instance; } - template <> inline ScriptOrder &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptOrder *)instance; } - template <> inline const ScriptOrder *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptOrder *)instance; } - template <> inline const ScriptOrder &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptOrder *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptOrder *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Order", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_rail.hpp.sq b/src/script/api/template/template_rail.hpp.sq deleted file mode 100644 index f451175403..0000000000 --- a/src/script/api/template/template_rail.hpp.sq +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_rail.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptRail::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRail::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRail::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRail::RailType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRail::RailType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRail::RailType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRail::RailTrack GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRail::RailTrack)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRail::RailTrack res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRail::SignalType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRail::SignalType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRail::SignalType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRail::BuildType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRail::BuildType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRail::BuildType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptRail to be used as Squirrel parameter */ - template <> inline ScriptRail *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRail *)instance; } - template <> inline ScriptRail &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRail *)instance; } - template <> inline const ScriptRail *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRail *)instance; } - template <> inline const ScriptRail &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRail *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRail *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Rail", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_railtypelist.hpp.sq b/src/script/api/template/template_railtypelist.hpp.sq deleted file mode 100644 index 09f63f8e37..0000000000 --- a/src/script/api/template/template_railtypelist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_railtypelist.hpp" - -namespace SQConvert { - /* Allow ScriptRailTypeList to be used as Squirrel parameter */ - template <> inline ScriptRailTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRailTypeList *)instance; } - template <> inline ScriptRailTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRailTypeList *)instance; } - template <> inline const ScriptRailTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRailTypeList *)instance; } - template <> inline const ScriptRailTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRailTypeList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRailTypeList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "RailTypeList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_road.hpp.sq b/src/script/api/template/template_road.hpp.sq deleted file mode 100644 index f2f8c411df..0000000000 --- a/src/script/api/template/template_road.hpp.sq +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_road.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptRoad::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRoad::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoad::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRoad::RoadType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRoad::RoadType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoad::RoadType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRoad::RoadTramTypes GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRoad::RoadTramTypes)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoad::RoadTramTypes res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRoad::RoadVehicleType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRoad::RoadVehicleType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoad::RoadVehicleType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptRoad::BuildType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptRoad::BuildType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoad::BuildType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptRoad to be used as Squirrel parameter */ - template <> inline ScriptRoad *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRoad *)instance; } - template <> inline ScriptRoad &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRoad *)instance; } - template <> inline const ScriptRoad *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRoad *)instance; } - template <> inline const ScriptRoad &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRoad *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoad *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Road", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_roadtypelist.hpp.sq b/src/script/api/template/template_roadtypelist.hpp.sq deleted file mode 100644 index bd2c1931e4..0000000000 --- a/src/script/api/template/template_roadtypelist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_roadtypelist.hpp" - -namespace SQConvert { - /* Allow ScriptRoadTypeList to be used as Squirrel parameter */ - template <> inline ScriptRoadTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRoadTypeList *)instance; } - template <> inline ScriptRoadTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRoadTypeList *)instance; } - template <> inline const ScriptRoadTypeList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptRoadTypeList *)instance; } - template <> inline const ScriptRoadTypeList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptRoadTypeList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptRoadTypeList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "RoadTypeList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_sign.hpp.sq b/src/script/api/template/template_sign.hpp.sq deleted file mode 100644 index 76e7759ebd..0000000000 --- a/src/script/api/template/template_sign.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_sign.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptSign::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptSign::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptSign::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptSign to be used as Squirrel parameter */ - template <> inline ScriptSign *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSign *)instance; } - template <> inline ScriptSign &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSign *)instance; } - template <> inline const ScriptSign *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSign *)instance; } - template <> inline const ScriptSign &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSign *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptSign *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Sign", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_signlist.hpp.sq b/src/script/api/template/template_signlist.hpp.sq deleted file mode 100644 index e762202508..0000000000 --- a/src/script/api/template/template_signlist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_signlist.hpp" - -namespace SQConvert { - /* Allow ScriptSignList to be used as Squirrel parameter */ - template <> inline ScriptSignList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSignList *)instance; } - template <> inline ScriptSignList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSignList *)instance; } - template <> inline const ScriptSignList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSignList *)instance; } - template <> inline const ScriptSignList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSignList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptSignList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "SignList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_station.hpp.sq b/src/script/api/template/template_station.hpp.sq deleted file mode 100644 index ba5af93c14..0000000000 --- a/src/script/api/template/template_station.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_station.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptStation::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStation::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStation::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStation::StationType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStation::StationType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStation::StationType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptStation to be used as Squirrel parameter */ - template <> inline ScriptStation *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStation *)instance; } - template <> inline ScriptStation &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStation *)instance; } - template <> inline const ScriptStation *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStation *)instance; } - template <> inline const ScriptStation &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStation *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStation *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Station", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_stationlist.hpp.sq b/src/script/api/template/template_stationlist.hpp.sq deleted file mode 100644 index e6a1f0bbaf..0000000000 --- a/src/script/api/template/template_stationlist.hpp.sq +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_stationlist.hpp" - -namespace SQConvert { - /* Allow ScriptStationList to be used as Squirrel parameter */ - template <> inline ScriptStationList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList *)instance; } - template <> inline ScriptStationList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList *)instance; } - template <> inline const ScriptStationList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList *)instance; } - template <> inline const ScriptStationList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptStationList_Cargo::CargoSelector GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStationList_Cargo::CargoSelector)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_Cargo::CargoSelector res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStationList_Cargo::CargoMode GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStationList_Cargo::CargoMode)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_Cargo::CargoMode res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptStationList_Cargo to be used as Squirrel parameter */ - template <> inline ScriptStationList_Cargo *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_Cargo *)instance; } - template <> inline ScriptStationList_Cargo &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_Cargo *)instance; } - template <> inline const ScriptStationList_Cargo *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_Cargo *)instance; } - template <> inline const ScriptStationList_Cargo &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_Cargo *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_Cargo *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_Cargo", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoWaiting to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoWaiting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaiting *)instance; } - template <> inline ScriptStationList_CargoWaiting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaiting *)instance; } - template <> inline const ScriptStationList_CargoWaiting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaiting *)instance; } - template <> inline const ScriptStationList_CargoWaiting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaiting *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoWaiting *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoWaiting", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoPlanned to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoPlanned *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlanned *)instance; } - template <> inline ScriptStationList_CargoPlanned &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlanned *)instance; } - template <> inline const ScriptStationList_CargoPlanned *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlanned *)instance; } - template <> inline const ScriptStationList_CargoPlanned &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlanned *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoPlanned *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoPlanned", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoWaitingByFrom to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoWaitingByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingByFrom *)instance; } - template <> inline ScriptStationList_CargoWaitingByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingByFrom *)instance; } - template <> inline const ScriptStationList_CargoWaitingByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingByFrom *)instance; } - template <> inline const ScriptStationList_CargoWaitingByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingByFrom *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoWaitingByFrom *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoWaitingByFrom", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoWaitingViaByFrom to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoWaitingViaByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingViaByFrom *)instance; } - template <> inline ScriptStationList_CargoWaitingViaByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingViaByFrom *)instance; } - template <> inline const ScriptStationList_CargoWaitingViaByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingViaByFrom *)instance; } - template <> inline const ScriptStationList_CargoWaitingViaByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingViaByFrom *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoWaitingViaByFrom *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoWaitingViaByFrom", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoWaitingByVia to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoWaitingByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingByVia *)instance; } - template <> inline ScriptStationList_CargoWaitingByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingByVia *)instance; } - template <> inline const ScriptStationList_CargoWaitingByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingByVia *)instance; } - template <> inline const ScriptStationList_CargoWaitingByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingByVia *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoWaitingByVia *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoWaitingByVia", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoWaitingFromByVia to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoWaitingFromByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingFromByVia *)instance; } - template <> inline ScriptStationList_CargoWaitingFromByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingFromByVia *)instance; } - template <> inline const ScriptStationList_CargoWaitingFromByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoWaitingFromByVia *)instance; } - template <> inline const ScriptStationList_CargoWaitingFromByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoWaitingFromByVia *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoWaitingFromByVia *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoWaitingFromByVia", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoPlannedByFrom to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoPlannedByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedByFrom *)instance; } - template <> inline ScriptStationList_CargoPlannedByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedByFrom *)instance; } - template <> inline const ScriptStationList_CargoPlannedByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedByFrom *)instance; } - template <> inline const ScriptStationList_CargoPlannedByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedByFrom *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoPlannedByFrom *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoPlannedByFrom", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoPlannedViaByFrom to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoPlannedViaByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedViaByFrom *)instance; } - template <> inline ScriptStationList_CargoPlannedViaByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedViaByFrom *)instance; } - template <> inline const ScriptStationList_CargoPlannedViaByFrom *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedViaByFrom *)instance; } - template <> inline const ScriptStationList_CargoPlannedViaByFrom &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedViaByFrom *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoPlannedViaByFrom *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoPlannedViaByFrom", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoPlannedByVia to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoPlannedByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedByVia *)instance; } - template <> inline ScriptStationList_CargoPlannedByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedByVia *)instance; } - template <> inline const ScriptStationList_CargoPlannedByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedByVia *)instance; } - template <> inline const ScriptStationList_CargoPlannedByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedByVia *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoPlannedByVia *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoPlannedByVia", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_CargoPlannedFromByVia to be used as Squirrel parameter */ - template <> inline ScriptStationList_CargoPlannedFromByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedFromByVia *)instance; } - template <> inline ScriptStationList_CargoPlannedFromByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedFromByVia *)instance; } - template <> inline const ScriptStationList_CargoPlannedFromByVia *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_CargoPlannedFromByVia *)instance; } - template <> inline const ScriptStationList_CargoPlannedFromByVia &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_CargoPlannedFromByVia *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_CargoPlannedFromByVia *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_CargoPlannedFromByVia", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptStationList_Vehicle to be used as Squirrel parameter */ - template <> inline ScriptStationList_Vehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_Vehicle *)instance; } - template <> inline ScriptStationList_Vehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_Vehicle *)instance; } - template <> inline const ScriptStationList_Vehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStationList_Vehicle *)instance; } - template <> inline const ScriptStationList_Vehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStationList_Vehicle *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStationList_Vehicle *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StationList_Vehicle", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_story_page.hpp.sq b/src/script/api/template/template_story_page.hpp.sq deleted file mode 100644 index f06d531385..0000000000 --- a/src/script/api/template/template_story_page.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_story_page.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptStoryPage::StoryPageID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageID res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStoryPage::StoryPageElementID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageElementID)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageElementID res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStoryPage::StoryPageElementType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageElementType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageElementType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStoryPage::StoryPageButtonFlags GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageButtonFlags)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageButtonFlags res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStoryPage::StoryPageButtonCursor GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageButtonCursor)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageButtonCursor res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptStoryPage::StoryPageButtonColour GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptStoryPage::StoryPageButtonColour)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage::StoryPageButtonColour res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptStoryPage to be used as Squirrel parameter */ - template <> inline ScriptStoryPage *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPage *)instance; } - template <> inline ScriptStoryPage &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStoryPage *)instance; } - template <> inline const ScriptStoryPage *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPage *)instance; } - template <> inline const ScriptStoryPage &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStoryPage *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPage *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StoryPage", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_storypageelementlist.hpp.sq b/src/script/api/template/template_storypageelementlist.hpp.sq deleted file mode 100644 index 224f38c506..0000000000 --- a/src/script/api/template/template_storypageelementlist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_storypageelementlist.hpp" - -namespace SQConvert { - /* Allow ScriptStoryPageElementList to be used as Squirrel parameter */ - template <> inline ScriptStoryPageElementList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPageElementList *)instance; } - template <> inline ScriptStoryPageElementList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStoryPageElementList *)instance; } - template <> inline const ScriptStoryPageElementList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPageElementList *)instance; } - template <> inline const ScriptStoryPageElementList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStoryPageElementList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPageElementList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StoryPageElementList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_storypagelist.hpp.sq b/src/script/api/template/template_storypagelist.hpp.sq deleted file mode 100644 index 6b799dd18f..0000000000 --- a/src/script/api/template/template_storypagelist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_storypagelist.hpp" - -namespace SQConvert { - /* Allow ScriptStoryPageList to be used as Squirrel parameter */ - template <> inline ScriptStoryPageList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPageList *)instance; } - template <> inline ScriptStoryPageList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStoryPageList *)instance; } - template <> inline const ScriptStoryPageList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptStoryPageList *)instance; } - template <> inline const ScriptStoryPageList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptStoryPageList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptStoryPageList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "StoryPageList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_subsidy.hpp.sq b/src/script/api/template/template_subsidy.hpp.sq deleted file mode 100644 index 78a35e8dea..0000000000 --- a/src/script/api/template/template_subsidy.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_subsidy.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptSubsidy::SubsidyParticipantType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptSubsidy::SubsidyParticipantType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptSubsidy::SubsidyParticipantType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptSubsidy to be used as Squirrel parameter */ - template <> inline ScriptSubsidy *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSubsidy *)instance; } - template <> inline ScriptSubsidy &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSubsidy *)instance; } - template <> inline const ScriptSubsidy *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSubsidy *)instance; } - template <> inline const ScriptSubsidy &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSubsidy *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptSubsidy *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Subsidy", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_subsidylist.hpp.sq b/src/script/api/template/template_subsidylist.hpp.sq deleted file mode 100644 index 98f2e1fd09..0000000000 --- a/src/script/api/template/template_subsidylist.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_subsidylist.hpp" - -namespace SQConvert { - /* Allow ScriptSubsidyList to be used as Squirrel parameter */ - template <> inline ScriptSubsidyList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSubsidyList *)instance; } - template <> inline ScriptSubsidyList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSubsidyList *)instance; } - template <> inline const ScriptSubsidyList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptSubsidyList *)instance; } - template <> inline const ScriptSubsidyList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptSubsidyList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptSubsidyList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "SubsidyList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_testmode.hpp.sq b/src/script/api/template/template_testmode.hpp.sq deleted file mode 100644 index c779df57f5..0000000000 --- a/src/script/api/template/template_testmode.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_testmode.hpp" - -namespace SQConvert { - /* Allow ScriptTestMode to be used as Squirrel parameter */ - template <> inline ScriptTestMode *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTestMode *)instance; } - template <> inline ScriptTestMode &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTestMode *)instance; } - template <> inline const ScriptTestMode *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTestMode *)instance; } - template <> inline const ScriptTestMode &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTestMode *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTestMode *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TestMode", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_text.hpp.sq b/src/script/api/template/template_text.hpp.sq deleted file mode 100644 index b93fad8c5b..0000000000 --- a/src/script/api/template/template_text.hpp.sq +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_text.hpp" - -namespace SQConvert { - /* Allow ScriptText to be used as Squirrel parameter */ - template <> inline ScriptText *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptText *)instance; } - template <> inline ScriptText &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptText *)instance; } - template <> inline const ScriptText *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptText *)instance; } - template <> inline const ScriptText &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptText *)instance; } - - template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { - if (sq_gettype(vm, index) == OT_INSTANCE) { - return GetParam(ForceType(), vm, index, ptr); - } - if (sq_gettype(vm, index) == OT_STRING) { - return new RawText(GetParam(ForceType(), vm, index, ptr)); - } - return nullptr; - } -} // namespace SQConvert diff --git a/src/script/api/template/template_tile.hpp.sq b/src/script/api/template/template_tile.hpp.sq deleted file mode 100644 index ac9365da7a..0000000000 --- a/src/script/api/template/template_tile.hpp.sq +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tile.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptTile::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTile::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTile::Corner GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTile::Corner)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile::Corner res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTile::Slope GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTile::Slope)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile::Slope res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTile::TransportType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTile::TransportType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile::TransportType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTile::BuildType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTile::BuildType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile::BuildType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTile::TerrainType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTile::TerrainType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile::TerrainType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptTile to be used as Squirrel parameter */ - template <> inline ScriptTile *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTile *)instance; } - template <> inline ScriptTile &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTile *)instance; } - template <> inline const ScriptTile *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTile *)instance; } - template <> inline const ScriptTile &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTile *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTile *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Tile", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_tilelist.hpp.sq b/src/script/api/template/template_tilelist.hpp.sq deleted file mode 100644 index 7f1ae696c1..0000000000 --- a/src/script/api/template/template_tilelist.hpp.sq +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tilelist.hpp" - -namespace SQConvert { - /* Allow ScriptTileList to be used as Squirrel parameter */ - template <> inline ScriptTileList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList *)instance; } - template <> inline ScriptTileList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList *)instance; } - template <> inline const ScriptTileList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList *)instance; } - template <> inline const ScriptTileList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTileList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TileList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptTileList_IndustryAccepting to be used as Squirrel parameter */ - template <> inline ScriptTileList_IndustryAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList_IndustryAccepting *)instance; } - template <> inline ScriptTileList_IndustryAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList_IndustryAccepting *)instance; } - template <> inline const ScriptTileList_IndustryAccepting *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList_IndustryAccepting *)instance; } - template <> inline const ScriptTileList_IndustryAccepting &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList_IndustryAccepting *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTileList_IndustryAccepting *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TileList_IndustryAccepting", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptTileList_IndustryProducing to be used as Squirrel parameter */ - template <> inline ScriptTileList_IndustryProducing *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList_IndustryProducing *)instance; } - template <> inline ScriptTileList_IndustryProducing &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList_IndustryProducing *)instance; } - template <> inline const ScriptTileList_IndustryProducing *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList_IndustryProducing *)instance; } - template <> inline const ScriptTileList_IndustryProducing &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList_IndustryProducing *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTileList_IndustryProducing *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TileList_IndustryProducing", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptTileList_StationType to be used as Squirrel parameter */ - template <> inline ScriptTileList_StationType *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList_StationType *)instance; } - template <> inline ScriptTileList_StationType &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList_StationType *)instance; } - template <> inline const ScriptTileList_StationType *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTileList_StationType *)instance; } - template <> inline const ScriptTileList_StationType &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTileList_StationType *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTileList_StationType *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TileList_StationType", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_town.hpp.sq b/src/script/api/template/template_town.hpp.sq deleted file mode 100644 index 6134ecbe93..0000000000 --- a/src/script/api/template/template_town.hpp.sq +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_town.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptTown::TownAction GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTown::TownAction)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTown::TownAction res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTown::TownRating GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTown::TownRating)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTown::TownRating res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTown::RoadLayout GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTown::RoadLayout)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTown::RoadLayout res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTown::TownSize GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTown::TownSize)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTown::TownSize res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptTown::TownGrowth GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTown::TownGrowth)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTown::TownGrowth res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptTown to be used as Squirrel parameter */ - template <> inline ScriptTown *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTown *)instance; } - template <> inline ScriptTown &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTown *)instance; } - template <> inline const ScriptTown *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTown *)instance; } - template <> inline const ScriptTown &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTown *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTown *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Town", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_townlist.hpp.sq b/src/script/api/template/template_townlist.hpp.sq deleted file mode 100644 index ff97ef4471..0000000000 --- a/src/script/api/template/template_townlist.hpp.sq +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_townlist.hpp" - -namespace SQConvert { - /* Allow ScriptTownList to be used as Squirrel parameter */ - template <> inline ScriptTownList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTownList *)instance; } - template <> inline ScriptTownList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTownList *)instance; } - template <> inline const ScriptTownList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTownList *)instance; } - template <> inline const ScriptTownList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTownList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTownList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TownList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptTownEffectList to be used as Squirrel parameter */ - template <> inline ScriptTownEffectList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTownEffectList *)instance; } - template <> inline ScriptTownEffectList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTownEffectList *)instance; } - template <> inline const ScriptTownEffectList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTownEffectList *)instance; } - template <> inline const ScriptTownEffectList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTownEffectList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTownEffectList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "TownEffectList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_tunnel.hpp.sq b/src/script/api/template/template_tunnel.hpp.sq deleted file mode 100644 index 49b25b7ef0..0000000000 --- a/src/script/api/template/template_tunnel.hpp.sq +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_tunnel.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptTunnel::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptTunnel::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTunnel::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptTunnel to be used as Squirrel parameter */ - template <> inline ScriptTunnel *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTunnel *)instance; } - template <> inline ScriptTunnel &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTunnel *)instance; } - template <> inline const ScriptTunnel *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptTunnel *)instance; } - template <> inline const ScriptTunnel &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptTunnel *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptTunnel *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Tunnel", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_vehicle.hpp.sq b/src/script/api/template/template_vehicle.hpp.sq deleted file mode 100644 index 87713b8b40..0000000000 --- a/src/script/api/template/template_vehicle.hpp.sq +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_vehicle.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptVehicle::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptVehicle::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicle::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptVehicle::VehicleType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptVehicle::VehicleType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicle::VehicleType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptVehicle::VehicleState GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptVehicle::VehicleState)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicle::VehicleState res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptVehicle to be used as Squirrel parameter */ - template <> inline ScriptVehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicle *)instance; } - template <> inline ScriptVehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicle *)instance; } - template <> inline const ScriptVehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicle *)instance; } - template <> inline const ScriptVehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicle *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicle *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Vehicle", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_vehiclelist.hpp.sq b/src/script/api/template/template_vehiclelist.hpp.sq deleted file mode 100644 index 701116748d..0000000000 --- a/src/script/api/template/template_vehiclelist.hpp.sq +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_vehiclelist.hpp" - -namespace SQConvert { - /* Allow ScriptVehicleList to be used as Squirrel parameter */ - template <> inline ScriptVehicleList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList *)instance; } - template <> inline ScriptVehicleList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList *)instance; } - template <> inline const ScriptVehicleList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList *)instance; } - template <> inline const ScriptVehicleList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicleList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "VehicleList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptVehicleList_Station to be used as Squirrel parameter */ - template <> inline ScriptVehicleList_Station *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_Station *)instance; } - template <> inline ScriptVehicleList_Station &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_Station *)instance; } - template <> inline const ScriptVehicleList_Station *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_Station *)instance; } - template <> inline const ScriptVehicleList_Station &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_Station *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicleList_Station *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "VehicleList_Station", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptVehicleList_Depot to be used as Squirrel parameter */ - template <> inline ScriptVehicleList_Depot *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_Depot *)instance; } - template <> inline ScriptVehicleList_Depot &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_Depot *)instance; } - template <> inline const ScriptVehicleList_Depot *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_Depot *)instance; } - template <> inline const ScriptVehicleList_Depot &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_Depot *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicleList_Depot *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "VehicleList_Depot", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptVehicleList_SharedOrders to be used as Squirrel parameter */ - template <> inline ScriptVehicleList_SharedOrders *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_SharedOrders *)instance; } - template <> inline ScriptVehicleList_SharedOrders &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_SharedOrders *)instance; } - template <> inline const ScriptVehicleList_SharedOrders *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_SharedOrders *)instance; } - template <> inline const ScriptVehicleList_SharedOrders &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_SharedOrders *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicleList_SharedOrders *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "VehicleList_SharedOrders", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptVehicleList_Group to be used as Squirrel parameter */ - template <> inline ScriptVehicleList_Group *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_Group *)instance; } - template <> inline ScriptVehicleList_Group &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_Group *)instance; } - template <> inline const ScriptVehicleList_Group *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_Group *)instance; } - template <> inline const ScriptVehicleList_Group &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_Group *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicleList_Group *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "VehicleList_Group", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptVehicleList_DefaultGroup to be used as Squirrel parameter */ - template <> inline ScriptVehicleList_DefaultGroup *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_DefaultGroup *)instance; } - template <> inline ScriptVehicleList_DefaultGroup &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_DefaultGroup *)instance; } - template <> inline const ScriptVehicleList_DefaultGroup *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptVehicleList_DefaultGroup *)instance; } - template <> inline const ScriptVehicleList_DefaultGroup &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptVehicleList_DefaultGroup *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptVehicleList_DefaultGroup *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "VehicleList_DefaultGroup", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_viewport.hpp.sq b/src/script/api/template/template_viewport.hpp.sq deleted file mode 100644 index 845c824485..0000000000 --- a/src/script/api/template/template_viewport.hpp.sq +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_viewport.hpp" - -namespace SQConvert { - /* Allow ScriptViewport to be used as Squirrel parameter */ - template <> inline ScriptViewport *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptViewport *)instance; } - template <> inline ScriptViewport &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptViewport *)instance; } - template <> inline const ScriptViewport *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptViewport *)instance; } - template <> inline const ScriptViewport &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptViewport *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptViewport *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Viewport", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_waypoint.hpp.sq b/src/script/api/template/template_waypoint.hpp.sq deleted file mode 100644 index 179e62ae0c..0000000000 --- a/src/script/api/template/template_waypoint.hpp.sq +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_waypoint.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptWaypoint::ErrorMessages GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWaypoint::ErrorMessages)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWaypoint::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWaypoint::WaypointType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWaypoint::WaypointType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWaypoint::WaypointType res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptWaypoint to be used as Squirrel parameter */ - template <> inline ScriptWaypoint *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWaypoint *)instance; } - template <> inline ScriptWaypoint &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWaypoint *)instance; } - template <> inline const ScriptWaypoint *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWaypoint *)instance; } - template <> inline const ScriptWaypoint &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWaypoint *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWaypoint *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Waypoint", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_waypointlist.hpp.sq b/src/script/api/template/template_waypointlist.hpp.sq deleted file mode 100644 index 1de9eb40e9..0000000000 --- a/src/script/api/template/template_waypointlist.hpp.sq +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_waypointlist.hpp" - -namespace SQConvert { - /* Allow ScriptWaypointList to be used as Squirrel parameter */ - template <> inline ScriptWaypointList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWaypointList *)instance; } - template <> inline ScriptWaypointList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWaypointList *)instance; } - template <> inline const ScriptWaypointList *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWaypointList *)instance; } - template <> inline const ScriptWaypointList &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWaypointList *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWaypointList *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "WaypointList", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert - -namespace SQConvert { - /* Allow ScriptWaypointList_Vehicle to be used as Squirrel parameter */ - template <> inline ScriptWaypointList_Vehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWaypointList_Vehicle *)instance; } - template <> inline ScriptWaypointList_Vehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWaypointList_Vehicle *)instance; } - template <> inline const ScriptWaypointList_Vehicle *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWaypointList_Vehicle *)instance; } - template <> inline const ScriptWaypointList_Vehicle &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWaypointList_Vehicle *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWaypointList_Vehicle *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "WaypointList_Vehicle", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert diff --git a/src/script/api/template/template_window.hpp.sq b/src/script/api/template/template_window.hpp.sq deleted file mode 100644 index 723c98a91b..0000000000 --- a/src/script/api/template/template_window.hpp.sq +++ /dev/null @@ -1,263 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_window.hpp" - -namespace SQConvert { - /* Allow enums to be used as Squirrel parameters */ - template <> inline ScriptWindow::WindowNumberEnum GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::WindowNumberEnum)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::WindowNumberEnum res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::WindowClass GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::WindowClass)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::WindowClass res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TextColour GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TextColour)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TextColour res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NumberType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NumberType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NumberType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::WidgetType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::WidgetType)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::WidgetType res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AIListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AIListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AIListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AISettingsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AISettingsWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AISettingsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AIConfigWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AIConfigWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AIConfigWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AIDebugWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AIDebugWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AIDebugWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AirportToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AirportToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AirportToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AirportPickerWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AirportPickerWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AirportPickerWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ReplaceVehicleWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ReplaceVehicleWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ReplaceVehicleWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BootstrapBackgroundWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BootstrapBackgroundWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BootstrapBackgroundWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BootstrapAskForDownloadWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BootstrapAskForDownloadWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BootstrapAskForDownloadWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildBridgeSelectionWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildBridgeSelectionWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildBridgeSelectionWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildVehicleWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildVehicleWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildVehicleWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CheatWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CheatWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CheatWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CompanyWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CompanyWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CompanyWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CompanyFinancesWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CompanyFinancesWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CompanyFinancesWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SelectCompanyLiveryWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SelectCompanyLiveryWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SelectCompanyLiveryWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SelectCompanyManagerFaceWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SelectCompanyManagerFaceWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SelectCompanyManagerFaceWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CompanyInfrastructureWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CompanyInfrastructureWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CompanyInfrastructureWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuyCompanyWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuyCompanyWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuyCompanyWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ConsoleWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ConsoleWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ConsoleWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SetDateWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SetDateWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SetDateWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::DepotWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::DepotWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::DepotWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildDockDepotWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildDockDepotWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildDockDepotWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::DockToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::DockToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::DockToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::DropdownMenuWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::DropdownMenuWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::DropdownMenuWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::EnginePreviewWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::EnginePreviewWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::EnginePreviewWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ErrorMessageWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ErrorMessageWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ErrorMessageWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SaveLoadWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SaveLoadWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SaveLoadWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::FramerateWindowWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::FramerateWindowWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::FramerateWindowWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::FrametimeGraphWindowWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::FrametimeGraphWindowWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::FrametimeGraphWindowWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::GenerateLandscapeWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GenerateLandscapeWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GenerateLandscapeWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CreateScenarioWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CreateScenarioWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CreateScenarioWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::GenerationProgressWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GenerationProgressWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GenerationProgressWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::GoalListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GoalListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GoalListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::GoalQuestionWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GoalQuestionWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GoalQuestionWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::GraphLegendWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GraphLegendWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GraphLegendWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CompanyValueWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CompanyValueWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CompanyValueWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::PerformanceHistoryGraphWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::PerformanceHistoryGraphWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::PerformanceHistoryGraphWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CargoPaymentRatesWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CargoPaymentRatesWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CargoPaymentRatesWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CompanyLeagueWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CompanyLeagueWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CompanyLeagueWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::PerformanceRatingDetailsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::PerformanceRatingDetailsWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::PerformanceRatingDetailsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::GroupListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GroupListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GroupListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::HighscoreWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::HighscoreWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::HighscoreWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::DynamicPlaceIndustriesWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::DynamicPlaceIndustriesWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::DynamicPlaceIndustriesWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::IndustryViewWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::IndustryViewWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::IndustryViewWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::IndustryDirectoryWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::IndustryDirectoryWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::IndustryDirectoryWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::IndustryCargoesWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::IndustryCargoesWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::IndustryCargoesWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SelectGameIntroWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SelectGameIntroWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SelectGameIntroWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::LinkGraphLegendWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::LinkGraphLegendWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::LinkGraphLegendWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::MainWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::MainWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::MainWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::LandInfoWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::LandInfoWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::LandInfoWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ToolTipsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ToolTipsWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ToolTipsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::AboutWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::AboutWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::AboutWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::QueryStringWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::QueryStringWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::QueryStringWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::QueryWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::QueryWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::QueryWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TextfileWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TextfileWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TextfileWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::MusicTrackSelectionWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::MusicTrackSelectionWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::MusicTrackSelectionWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::MusicWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::MusicWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::MusicWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetWorkChatWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetWorkChatWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetWorkChatWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkContentDownloadStatusWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkContentDownloadStatusWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkContentDownloadStatusWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkContentListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkContentListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkContentListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkGameWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkGameWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkGameWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkStartServerWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkStartServerWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkStartServerWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkLobbyWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkLobbyWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkLobbyWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ClientListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ClientListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ClientListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ClientListPopupWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ClientListPopupWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ClientListPopupWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkJoinStatusWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkJoinStatusWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkJoinStatusWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NetworkCompanyPasswordWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NetworkCompanyPasswordWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NetworkCompanyPasswordWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NewGRFInspectWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NewGRFInspectWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NewGRFInspectWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SpriteAlignerWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SpriteAlignerWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SpriteAlignerWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NewGRFParametersWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NewGRFParametersWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NewGRFParametersWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NewGRFStateWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NewGRFStateWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NewGRFStateWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SavePresetWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SavePresetWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SavePresetWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ScanProgressWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ScanProgressWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ScanProgressWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::NewsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::NewsWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::NewsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::MessageHistoryWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::MessageHistoryWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::MessageHistoryWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildObjectWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildObjectWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildObjectWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::OrderWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::OrderWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::OrderWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::OnScreenKeyboardWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::OnScreenKeyboardWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::OnScreenKeyboardWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::RailToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::RailToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::RailToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildRailStationWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildRailStationWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildRailStationWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildSignalWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildSignalWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildSignalWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildRailDepotWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildRailDepotWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildRailDepotWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildRailWaypointWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildRailWaypointWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildRailWaypointWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::RoadToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::RoadToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::RoadToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildRoadDepotWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildRoadDepotWidgets)tmp; } - 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; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GameSettingsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::CustomCurrencyWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::CustomCurrencyWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::CustomCurrencyWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SignListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SignListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SignListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::QueryEditSignWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::QueryEditSignWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::QueryEditSignWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SmallMapWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SmallMapWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SmallMapWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::StationViewWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::StationViewWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::StationViewWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::StationListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::StationListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::StationListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::JoinStationWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::JoinStationWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::JoinStationWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::StatusbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::StatusbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::StatusbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::StoryBookWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::StoryBookWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::StoryBookWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::SubsidyListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::SubsidyListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::SubsidyListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TerraformToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TerraformToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TerraformToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::EditorTerraformToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::EditorTerraformToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::EditorTerraformToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::VehicleTimetableWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::VehicleTimetableWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::VehicleTimetableWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ToolbarNormalWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ToolbarNormalWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ToolbarNormalWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ToolbarEditorWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ToolbarEditorWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ToolbarEditorWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TownDirectoryWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TownDirectoryWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TownDirectoryWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TownAuthorityWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TownAuthorityWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TownAuthorityWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TownViewWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TownViewWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TownViewWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TownFoundingWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TownFoundingWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TownFoundingWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::TransparencyToolbarWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TransparencyToolbarWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::TransparencyToolbarWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::BuildTreesWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildTreesWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildTreesWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::VehicleViewWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::VehicleViewWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::VehicleViewWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::VehicleRefitWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::VehicleRefitWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::VehicleRefitWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::VehicleDetailsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::VehicleDetailsWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::VehicleDetailsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::VehicleListWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::VehicleListWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::VehicleListWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::ExtraViewportWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ExtraViewportWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ExtraViewportWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - template <> inline ScriptWindow::WaypointWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::WaypointWidgets)tmp; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::WaypointWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } - - /* Allow ScriptWindow to be used as Squirrel parameter */ - template <> inline ScriptWindow *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWindow *)instance; } - template <> inline ScriptWindow &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWindow *)instance; } - template <> inline const ScriptWindow *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptWindow *)instance; } - template <> inline const ScriptWindow &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptWindow *)instance; } - template <> inline int Return(HSQUIRRELVM vm, ScriptWindow *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "Window", res, nullptr, DefSQDestructorCallback, true); return 1; } -} // namespace SQConvert From 808fbaa7673a2e733dd2c7fc94aea646b9e84439 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 21 Jul 2020 19:45:40 +0200 Subject: [PATCH 232/601] Update: Translations from eints belarusian: 11 changes by KorneySan --- src/lang/belarusian.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index cd5379e630..5abb40326d 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1494,8 +1494,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Крутась STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Крутасьць сьхiлаў для аўтатранспарту: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Крутасьць ухілаў для аўтатранспарту. Вышэйшыя значэньні ўскладняюць пад'ём на узгорак -STR_CONFIG_SETTING_FORBID_90_DEG :Забараніць цягнікам і караблям 90-ґрадусныя павароты: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-ґрадусныя павароты здараюцца, калі за гарызантальнымі рэйкамі адразу вынікаюць вэртыкальныя на суседняй клетцы. Цягнік вымушаны паварочваць на 90 ґрадусаў пры перасячэньні клетак замест звычайных 45 ґрадусаў пры іншай камбінацыі каляінаў. Гэта таксама датычыць радыюса паваротаў для караблёў. +STR_CONFIG_SETTING_FORBID_90_DEG :Забараніць цягнікам 90-ґрадусныя павароты: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-ґрадусныя павароты здараюцца, калі за гарызантальнымі рэйкамі адразу вынікаюць вэртыкальныя на суседняй клетцы. Цягнік вымушаны паварочваць на 90 ґрадусаў пры перасячэньні клетак замест звычайных 45 ґрадусаў пры іншай камбінацыі каляінаў. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Дазволіць аб'яднаньне станцыяў, не прымыкаючых адна да адной: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дазволіць дадаць частку станцыі, якая непасрэдна не прылягае да існуючых частак. Патрабуе Ctrl+пстрычку пры разьмяшчэньні новых частак. STR_CONFIG_SETTING_INFLATION :Уключыць інфляцыю: {STRING} @@ -1551,8 +1551,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Множнiк STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Усталяваць адносную хуткасьць самалётаў у параўнаньні зь іншымі транспартнымі сродкамі, каб зьменшыць даходы ад авіяперавозак. STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Верагоднасьць авіякатастрофаў: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Усталяваць, зь якой верагоднасьцю можа здарыцца крушэньне паветранага судна. -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :адсутнічае +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Наладка верагоднасьці падзеньня самалёта.{}* У буйных самалётаў заўсёды ёсць рызыка крушэньня пры пасадцы ў маленькіх аэрапортах. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :адсутнічае* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :зьніжаная STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :звычайная STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Дазволіць будаўніцтва прыпынкаў Ro-Ro на дарогах гарадзкой уласнасьці: {STRING} @@ -1608,8 +1608,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Тып ланд STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Толькі для TerraGenesis){}Узгоркаватасць ландшафту STR_CONFIG_SETTING_INDUSTRY_DENSITY :Колькасць прадпрыемстваў: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Выберыце, колькі прадпрыемстваў ствараць напачатку і на якім узроўні падтрымліваць іх колькасць падчас гульні. -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. адлегласьць ад краю мапы да нафтаперапрацоўчых заводаў: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Нафтаперапрацоўчыя заводы будуюцца толькі каля краю мапы, у тым ліку на востраве. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. адлегласьць ад краю мапы да прадпрыемстваў нафтавае індустрыі: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Гэта наладка абмяжоўвае адлегласьць ад краю мапы да нафтавых платформаў і нафтаперапрацоўчых заводаў. Такім чынам, на краях мапы, якія сканчаюцца вадою, яны будуць будавацца ля берага. На мапах памерам больш 256 гэта значэньне будзе адпаведна павялічана. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Вышыня сьнегавой лініі: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Азначце, на якой вышыні ў субарктычным клімаце ўсталёўваецца снегавы полаг. Наяўнасьць снега ўплывае на расстаноўку прадпрыемстваў і на ўмовы росту гарадоў. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Нароўнасьць ляндшафту: {STRING} @@ -2116,6 +2116,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Зьмя STR_CHEAT_SETUP_PROD :{LTBLUE}Дазволіць зьмяненьне прадукцыйнасьці: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Колеры кампаніі «{COMPANY}» STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Паказаць асноўныя каляровыя схэмы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Паказаць каляровыя схэмы цягнікоў @@ -2423,7 +2424,7 @@ STR_NETWORK_CHAT_ALL :[Усім] {STR STR_NETWORK_CHAT_OSKTITLE :{BLACK}Увядзіце тэкст для каманднага чату # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ня знойдзена сеткавых прыстасаваньняў, ці гульня скампіляваная без падтрымкі сеткі +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ня знойдзена сеткавых прыстасаваньняў STR_NETWORK_ERROR_NOSERVER :{WHITE}Сеткавыя гульні ня знойдзеныя STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Сэрвэр не адказвае на запыт STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Немагчыма далучыцца з-за неадпаведнасьці NewGRF @@ -2691,9 +2692,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Камб STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыґнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыґнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Зьмяненьне тыпаў сыґналаў.{}Калі кнопка націснута, пстрыкніце для пераўтварэньня існуючага сыґнала ў сыґнал выбранага тыпу й віду, або пстрыкніце з націснутым Ctrl для перабіраньня існуючых варыянтаў. Shift+пстрычка — ацэнка кошту пераўтварэньня. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Шчыльнасьць аўтаматычнай расстаноўкі сыґналаў пры цягненьні -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Паменшыць шчыльнасьць расстаноўкі сыґналаў -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Павялічыць шчыльнасьць расстаноўкі сыґналаў +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Адлегласьць паміж сыґналамі пры працягваньні. +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Паменшыць адлегласць паміж сыґналамі пры працягваньні +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Павялічыць адлегласць паміж сыґналамі пры працягваньні # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Выберыце чыгуначны мост From 663c301e7c718eb1f95708e6a8b5981cf61b7ec4 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 22 Jul 2020 19:45:40 +0200 Subject: [PATCH 233/601] Update: Translations from eints belarusian: 64 changes by KorneySan russian: 2 changes by KorneySan --- src/lang/belarusian.txt | 64 +++++++++++++++++++++++++++++++++++++++++ src/lang/russian.txt | 4 +-- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 5abb40326d..a64d66b4ab 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -500,6 +500,7 @@ STR_COLOUR_ORANGE :Памаран STR_COLOUR_BROWN :Карычневы STR_COLOUR_GREY :Шэры STR_COLOUR_WHITE :Белы +STR_COLOUR_RANDOM :Выпадковы # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}мiл{P я i яў}/г @@ -546,6 +547,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Выбе STR_BUTTON_SORT_BY :{BLACK}Сартаваньне STR_BUTTON_LOCATION :{BLACK}Агляд STR_BUTTON_RENAME :{BLACK}Перайменаваць +STR_BUTTON_CATCHMENT :{BLACK}Ахоп STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Закрыць вакно STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Загаловак вакна — цягніце яго для перамяшчэньня вакна @@ -574,6 +576,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Калі STR_BUTTON_DEFAULT :{BLACK}Па змоўчаньнi STR_BUTTON_CANCEL :{BLACK}Скасаваць STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Увага: адміністратары сервера могуць убачыць ваш пароль. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -783,6 +786,7 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Кансоль STR_ABOUT_MENU_AI_DEBUG :Наладка штучнага інтэлекту (ШІ/AI) / скрыптоў STR_ABOUT_MENU_SCREENSHOT :Здымак экрана (Ctrl+S) +STR_ABOUT_MENU_SHOW_FRAMERATE :Паказаць чашчыню кадраў STR_ABOUT_MENU_ABOUT_OPENTTD :Аб гульні OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Выраўноўваньне спрайтаў STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Пераключыць абмежавальныя рамкі @@ -1119,6 +1123,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Дырэктар) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Кампанія «{STRING}» сталася фундатарам новага горада {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Заснаваны новы горад - {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Новае прадпрыемства! {STRING} буду{G 0 е е е ю}цца каля г. {NBSP}{TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Новае прадпрыемства! {STRING} закладзен{G 0 ы а а ыя} каля г. {NBSP}{TOWN}! @@ -1232,6 +1237,9 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Паўднёв STR_GAME_OPTIONS_CURRENCY_CUSTOM :Уласная... STR_GAME_OPTIONS_CURRENCY_GEL :Грузінскі лары (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Іранскі рыал (IRR) +STR_GAME_OPTIONS_CURRENCY_MXN :Мексіканскі песа (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Новы тайваньскі даляр (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Кітайскі юань (CNY) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Дарожны рух @@ -1294,6 +1302,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Звычайн STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Падвоены STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Пачацвяроны +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Памер шрыфта STR_GAME_OPTIONS_BASE_GRF :{BLACK}Набор базавай ґрафікі @@ -1597,6 +1606,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Паказва STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Паказваць у надпісах на мапе колькасьць жыхароў населеных пунктаў адразу пасьля іх назвы. STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Таўшчыня лiнiяў у ґрафiках: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Таўшчыня лініяў ґрафікаў. Тонкая лінія дакладней, тоўстую лягчэй убачыць і адрозьніць колер. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Паказваць назву модуля NewGRF, што змяшчае абраную мадэль транспартнага сродку, у акне куплі транспарта. STR_CONFIG_SETTING_LANDSCAPE :Тып карты: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Выбар тыпу мапы вызначае аснову гульнёвага працэсу, напрыклад, даступныя тыпы транспарта і грузаў, розныя ўмовы росту гарадоў. Усё гэта таксама можа быць зменена з дапамогай модуляў NewGRF і гульнёвых скрыптоў. @@ -1773,6 +1783,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Дазволі STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Дазволіць кампутарным гульцам (штучнаму інтэлекту) браць удзел у сеткавых гульнях. STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Колькасьць апэрацыяў перад спыненьнем скрыптоў: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максымальная колькасьць вылічэньняў, якія скрыпт можа выканаць за раз. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} МіБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Інтэрвал абслугоўваньня ў адсотках (%): {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Выбраць, ці залежыць абслугоўваньне транспарту ад даты апошняга абслугоўваньня або ад падзеньня надзейнасьці на пэўны адсотак ад максымальнай. @@ -1835,6 +1846,8 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Уключыц STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Калі ўключана, вытворчасьць прадпрыемстваў зьмяняецца часьцей ды малымі крокамі. Гэтая наладка звычайна не дае эфэкту, калі тыпы прадпрыемстваў вызначае набор новай ґрафікі (NewGRF). STR_CONFIG_SETTING_ALLOW_SHARES :Дазволіць купляць акцыі іншых кампаніяў: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Калі ўключана, дазваляецца купляць і прадаваць долі ў кампаніях. Акцыі даступны для кампаніяў, якія дасягнулі пэўнага ўзросту. +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мін. узрост кампаніі для выпуску акцыяў: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Мінімальны ўзрост, якога павінна дасягнуць кампанія для пачатку выпуску акцыяў, якімі змогуць гандляваць іншыя гульцы. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Адсотак даходу, якi налiчваецца пры частковай перавозцы: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Адсотак даходу, які налічваецца на прамежкавых адцінках у вялікіх сетках, даючы большы кантроль над даходамі. STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Пры цягненьнi з Ctrl расстаўляць сыґналы кожныя: {STRING} @@ -1875,6 +1888,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Уключэн STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :забаронена STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :дазволена STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :дазволена з выбарам дарожнай сеткі +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :квадратычная залежнасьць (арыґінальная) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Расстаноўка дрэваў у гульні: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Кантроль адвольнага з'яўленьня дрэваў падчас гульні. Гэта можа закрануць прадпрыемствы, якія залежаць ад росту дрэваў, напрыклад, пільні. @@ -2376,6 +2390,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Адлу STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрвэр абаронены. Увядзіце пароль STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Сьпіс кліентаў # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кліентаў @@ -2733,6 +2748,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Буда STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Будаўніцтва/выдаленьне аўтамабільных дарогаў STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Будаўніцтва/выдаленьне трамвайных каляінаў +STR_ROAD_NAME_ROAD :Аўтамабільная дарога # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Кірунак гаража @@ -3022,9 +3038,35 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–{STRING} Каманда распрацоўнікаў OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Хуткасць гульні +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Хуткасць разліку гульні: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Колькасць адлюстроўваных кадраў у секунду. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Бягучая хуткасьць гульні: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактычная хуткасьць гульні (у параўнаньні з чаканаю хуткасьцю пры звычайнай хуткасьці сімуляцыі). +STR_FRAMERATE_DATA_POINTS :{BLACK}Дадзеныя па {COMMA} вымярэнь{P ню ям ям} +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} мс +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадр{P "" а аў}/с +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадр{P "" а аў}/с +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Разлік гульнявога цыклу: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Рух паветраных судоў: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Затрымка ґрафа размеркаваньня: +STR_FRAMERATE_AI :{BLACK} ШІ {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Рух аўтамабіляў +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Рух паветраных судоў +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Разлік зменаў на мапе +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Затрымка ґрафа размеркаваньня +STR_FRAMETIME_CAPTION_VIDEO :Вывад на экран +STR_FRAMETIME_CAPTION_SOUND :Апрацоўка гуку +STR_FRAMETIME_CAPTION_AI :ШІ {NUM} {STRING} ############ End of leave-in-this-order @@ -3050,6 +3092,8 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Зьве STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Няма зьвесткаў. STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Перазапіс файла +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Перазапісаць файл? STR_SAVELOAD_OSKTITLE :{BLACK}Увядзіце назву для захаваньня гульні @@ -3167,6 +3211,8 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Вэрс STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Патрэбна вэрсiя гульнi не ніжэй за {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Сума MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Палітра: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Састарэлая (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Састарэлая (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Парамэтры: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Няма даступнай інфармацыі @@ -3345,6 +3391,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Перайме # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Адміністрацыя г. {NBSP}{TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Мяжа STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Рэйтынґ транспартных кампаніяў STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Даступныя дзеяньні: @@ -3611,7 +3658,10 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Прамысловасьць STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Няма - 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_LIST_CAPTION :{BLACK}Сьпіс прадпрыемстваў: пстрычка па назьве паказвае прадпрыемства ў асноўным вакне. Ctrl+клік - у дадатковым вакне. +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Любы # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3621,6 +3671,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пака STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Прадукцыйнасьць: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Прадпрыемства хутка закрываецца! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Патрабуе: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Патрабуецца: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3679,6 +3731,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ґруп STR_GROUP_CREATE_TOOLTIP :{BLACK}Стварыць групу STR_GROUP_DELETE_TOOLTIP :{BLACK}Выдаліць выбраную групу STR_GROUP_RENAME_TOOLTIP :{BLACK}Перайменаваць выбраную групу +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Змяніць колер абранае групы STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Абарона транспарту ў групе ад глабальнай аўтазамены STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Выдаліць ґрупу @@ -3701,6 +3754,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Новы мон STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Новы маґнітарэйкавы цягнік STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Новы аўтамабiль +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Новыя трамваі ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Новы цягнiк @@ -3721,6 +3775,7 @@ STR_PURCHASE_INFO_RELIABILITY :{BLACK}Макс STR_PURCHASE_INFO_COST :{BLACK}Кошт: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Вага: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Кошт: {GOLD}{CURRENCY_LONG}{BLACK} Хуткасьць: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Кошт: {GOLD}{CURRENCY_LONG}{BLACK} (Вартасць пераабсталявання: {GOLD}{CURRENCY_LONG}{BLACK}) Хуткасць: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ёмістасьць: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Маторныя ваґоны: {GOLD}+{POWER}{BLACK} Вага: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Пераабст. для: {GOLD}{STRING} @@ -3746,6 +3801,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Набы STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны карабель. Shift+пстрычка — ацэнка кошту набыцьця. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны авіятранспарт. Shift+пстрычка — ацэнка кошту набыцьця. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абраны лякаматыў/ваґон. Shift+пстрычка пакажа арыентыровачны кошт куплі. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абраны аўтамабіль. Shift+пстрычка пакажа арыентыровачны кошт куплі. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць вылучанае судна. Shift+пстрычка пакажа арыентыровачны кошт куплі. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Набыць і пераабсталяваць абранае паветранае судна. Shift+пстрычка пакажа арыентыровачны кошт куплі. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Перайменаваць STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Перайменаваць @@ -3930,6 +3989,8 @@ STR_REPLACE_ELRAIL_VEHICLES :Чыгунач STR_REPLACE_MONORAIL_VEHICLES :Монарэйкавыя ТС STR_REPLACE_MAGLEV_VEHICLES :Маґнітныя ТС +STR_REPLACE_ROAD_VEHICLES :Аўтатранспарт +STR_REPLACE_TRAM_VEHICLES :Трамваі STR_REPLACE_REMOVE_WAGON :{BLACK}Выдаленьне ваґонаў: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Дазволіць пры аўтазамене захоўваць даўжыню цягнікоў шляхам выдаленьня ваґонаў (пачынаючы з галавы цягніка), калі пры аўтазамене лякаматыва павялічыцца даўжыня цягніка. @@ -4150,6 +4211,7 @@ STR_ORDER_CONDITIONAL_AGE :Узрост ( STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Патрабуецца абслугоўваньне STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Заўсёды STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Рэшткавы тэрмiн службы (гадоў) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Максімальная надзейнасць STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Умова пераходу STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :роўна @@ -4672,6 +4734,8 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Не а STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Не атрымалася выдаліць трамвайныя каляiны... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...тут няма дарогi STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...тут няма трамвайных каляiнаў +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Тут немагчыма змяніць тып дарожнага палатна... +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... несумяшчальны тып трамвайных каляінаў # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Тут немагчыма пабудаваць канал... diff --git a/src/lang/russian.txt b/src/lang/russian.txt index a2d3a8516a..f4e20a8578 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1642,7 +1642,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Количес STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максимальное количество операций, которое скрипт может выполнить за один цикл STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Макс. объём памяти для скрипта: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Объём памяти, который может использовать скрипт. При превышении этого объёма скрипт будет принудительно завершён. Для больших карт это значение, возможно, потребуется увеличить. -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} Мбайт +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} МиБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Интервал обслуживания в процентах: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Выберите, должно ли техническое обслуживание транспорта выполняться через определённые промежутки времени, либо при снижении надёжности транспортного средства на определённый процент от максимума @@ -2927,7 +2927,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол- STR_FRAMERATE_RATE_BLITTER :{BLACK}Вывод на экран: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущая скорость игры: {DECIMAL}x -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактическая скорость игры +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактическая скорость игры (по сравнению с ожидаемой скоростью при нормальной скорости симуляции). STR_FRAMERATE_CURRENT :{WHITE}Сейчас STR_FRAMERATE_AVERAGE :{WHITE}В среднем STR_FRAMERATE_MEMORYUSE :{WHITE}Объём памяти From 82672342b7dd3ba430f1ff0e3f0b6ac6c975e661 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 24 Jul 2020 19:45:41 +0200 Subject: [PATCH 234/601] Update: Translations from eints belarusian: 35 changes by KorneySan --- src/lang/belarusian.txt | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index a64d66b4ab..cbe977cb8b 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -670,6 +670,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Ґенэ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Ґенэрацыя гарадоў STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Ґенэрацыя прамысловасьці STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Будаўніцтва аўтамабільных дарог +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Будаўніцтва трамвайных шляхоў STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Пасадзіць дрэвы. Пры націснутым Shift — ацэнка кошту высадкі. STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Паставіць метку STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Разьмясьціць аб'ект. Пры націснутым Shift — ацэнка кошту будаўніцтва. @@ -778,6 +779,7 @@ STR_TOOLBAR_SOUND_MUSIC :Гукі/муз ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Апошняе паведамленьне STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Гісторыя паведамленьняў +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Выдаліць усе паведамленьні ############ range ends here ############ range for about menu starts @@ -1172,6 +1174,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_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} @@ -1240,6 +1243,8 @@ STR_GAME_OPTIONS_CURRENCY_IRR :Іранскі STR_GAME_OPTIONS_CURRENCY_MXN :Мексіканскі песа (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :Новы тайваньскі даляр (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Кітайскі юань (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Ганконскі даляр (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Індыйская рупія (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Дарожны рух @@ -1303,7 +1308,9 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Падвоен STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Пачацвяроны STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Памер шрыфта +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Абярыце памер шрыфта, выкарыстоўванага ў гульні +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Звычайны STR_GAME_OPTIONS_BASE_GRF :{BLACK}Набор базавай ґрафікі STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Выбар базавага набору ґрафічных аб'ектаў @@ -1487,6 +1494,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Дазволі STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Дазволіць зьмену ляндшафту пад будынкамі й рэйкамi, не выдаляючы іx STR_CONFIG_SETTING_CATCHMENT :Зона пакрыцьця залежыць ад тыпу станцыі: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Мець розныя памеры тэрыторыі, на якіх розныя тыпы станцыяў ды аэрапортаў зьбіраюць пасажыраў і грузы. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Пры ўключэнні - прадпрыемствы, якія маюць уласныя станцыі пагрузкі (напрыклад, нафтавыя платформы), змогуць абслугоўвацца таксама і станцыямі гульцоў, пабудаванымі паблізу.{}Пры адключэнні - прадпрыемствы будуць рабіць пагрузку толькі праз свае ўнутраныя станцыі, і гэтыя станцыі будуць абслугоўваць толькі сваё прадпрыемства. STR_CONFIG_SETTING_EXTRADYNAMITE :Дазволіць знос амаль усіх гарадзкіх аб'ектаў: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Спрасьціць знос гарадзкіх будынкаў ды інфраструктуры STR_CONFIG_SETTING_TRAIN_LENGTH :Максымальная даўжыня цягнiкоў: {STRING} @@ -1572,6 +1580,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Зьме STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Утрыманьне iнфраструктуры: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Калі ўключана, інфраструктура патрабуе выдаткаў на ўтрыманьне. Кошт расьце прапарцыянальна памерам сеткі, таму гэта больш датычыць вялікіх кампаніяў, ніж малых. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Фірмовы колер кампаніі: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Малыя аэрапорты ніколі не састарэюць: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Уключэньне гэтай наладкі робіць усе віды аэрапортаў даступнымі назаўжды. @@ -1783,6 +1792,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Дазволі STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Дазволіць кампутарным гульцам (штучнаму інтэлекту) браць удзел у сеткавых гульнях. STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Колькасьць апэрацыяў перад спыненьнем скрыптоў: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максымальная колькасьць вылічэньняў, якія скрыпт можа выканаць за раз. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Макс. аб'ём памяці для скрыпту: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} МіБ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Інтэрвал абслугоўваньня ў адсотках (%): {STRING} @@ -1842,6 +1852,8 @@ 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_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} @@ -1888,7 +1900,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Уключэн STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :забаронена STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :дазволена STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :дазволена з выбарам дарожнай сеткі +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Колькасць грузаў і пасажыраў у гарадах: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Залежнасць колькасці грузаў і пасажыраў ад памеру горада.{}Лінейная: у горадзе двухразовага памеру з'яўляецца ў 2 разу больш пасажыраў.{}Квадратычная: у горадзе двухразовага памеру з'яўляецца ў 4 разу больш пасажыраў. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :квадратычная залежнасьць (арыґінальная) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінейная залежнасць STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Расстаноўка дрэваў у гульні: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Кантроль адвольнага з'яўленьня дрэваў падчас гульні. Гэта можа закрануць прадпрыемствы, якія залежаць ад росту дрэваў, напрыклад, пільні. @@ -2455,6 +2470,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Няпр STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сэрвэр перапоўнены STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Доступ на гэты сэрвэр вам забаронены STR_NETWORK_ERROR_KICKED :{WHITE}Вас выкінулі з гульні +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Прычына: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Махлярства не дазволена на гэтым сэрвэры STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Вы дасылалi да сэрвэра занадта шмат камандаў STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Вы задоўга ня можаце ўвесьцi пароль @@ -2937,6 +2953,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Прымае: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Тып чыгуначнага палатна: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Тып дарожнага палатна: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Макс. хуткасьць чыгункi: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Макс. хуткасьць аўтамабіляў: {LTBLUE}{VELOCITY} @@ -3057,15 +3074,22 @@ STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COM STR_FRAMERATE_GAMELOOP :{BLACK}Разлік гульнявога цыклу: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Рух паветраных судоў: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Затрымка ґрафа размеркаваньня: +STR_FRAMERATE_ALLSCRIPTS :{BLACK}Усяго скрыптоў/ШІ: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Гульнявы скрыпт: STR_FRAMERATE_AI :{BLACK} ШІ {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Разлік гульнявога цыклу STR_FRAMETIME_CAPTION_GL_ROADVEHS :Рух аўтамабіляў +STR_FRAMETIME_CAPTION_GL_SHIPS :Рух караблёў STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Рух паветраных судоў STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Разлік зменаў на мапе STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Затрымка ґрафа размеркаваньня +STR_FRAMETIME_CAPTION_DRAWING :Адмалёўка адлюстравання STR_FRAMETIME_CAPTION_VIDEO :Вывад на экран STR_FRAMETIME_CAPTION_SOUND :Апрацоўка гуку +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Агульны час выканання скрыптоў +STR_FRAMETIME_CAPTION_GAMESCRIPT :Час выканання гульнявога скрыпту STR_FRAMETIME_CAPTION_AI :ШІ {NUM} {STRING} ############ End of leave-in-this-order @@ -3214,6 +3238,7 @@ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Палі STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Састарэлая (W) STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Састарэлая (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Парамэтры: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Няма STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Няма даступнай інфармацыі STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл ня знойдзены @@ -3294,6 +3319,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Чытаньн STR_NEWGRF_ERROR_GRM_FAILED :Запытаныя рэсурсы GRF недаступныя (спрайт {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} быў адключаны з-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недапушчальны/невядомы фармат размяшчэньня спрайтаў (спрайт {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Занадта шмат элементаў у спісе значэнняў (спрайт {3:NUM}, уласцівасць {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Няверная апрацоўка прадукцыі прадпрыемства (спрайт {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Асьцярожна! @@ -3420,6 +3447,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Дац # Goal window STR_GOALS_CAPTION :{WHITE}Задачы кампаніі «{COMPANY}» STR_GOALS_SPECTATOR_CAPTION :{WHITE}Глабальныя задачы +STR_GOALS_SPECTATOR :Агульныя задачы STR_GOALS_GLOBAL_TITLE :{BLACK}Агульныя задачы: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Няма - @@ -3660,8 +3688,10 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ня 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_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} і яшчэ {NUM}... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Сьпіс прадпрыемстваў: пстрычка па назьве паказвае прадпрыемства ў асноўным вакне. Ctrl+клік - у дадатковым вакне. STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Любы +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Адсутнічае # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3758,6 +3788,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Новыя тр ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Новы цягнiк +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Новы дарожны транспарт STR_BUY_VEHICLE_SHIP_CAPTION :Новы карабель STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Новы авiятранспарт ############ range for vehicle availability ends @@ -3773,6 +3804,7 @@ STR_PURCHASE_INFO_REFITTABLE :(пераабс STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Распрацаваны ў {GOLD}{NUM} г.{BLACK} Тэрмін службы: {GOLD}{COMMA} г{P од ады адоў} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Макс. надзейнасьць: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Кошт: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Кошт: {GOLD}{CURRENCY_LONG}{BLACK} (Кошт пераабсталявання: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Вага: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Кошт: {GOLD}{CURRENCY_LONG}{BLACK} Хуткасьць: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Кошт: {GOLD}{CURRENCY_LONG}{BLACK} (Вартасць пераабсталявання: {GOLD}{CURRENCY_LONG}{BLACK}) Хуткасць: {GOLD}{VELOCITY} @@ -3795,6 +3827,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купі STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купіць STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купіць +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купіць і пераабсталяваць STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны лякаматыў/ваґон. Shift+пстрычка — ацэнка кошту набыцьця. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны аўтамабіль. Shift+пстрычка — ацэнка кошту набыцьця. @@ -4442,6 +4475,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Выбр STR_AI_LIST_CANCEL :{BLACK}Скасаваць STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не змяняць скрыпт +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Бачная вобласць у максімальным набліжэнні # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Параметры {STRING} @@ -4735,6 +4769,7 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Не а STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...тут няма дарогi STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...тут няма трамвайных каляiнаў STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Тут немагчыма змяніць тып дарожнага палатна... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Няма прыдатнага дарожнага палатна STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... несумяшчальны тып трамвайных каляінаў # Waterway construction errors From a56bf35409919212da9907fcdd9bc33929b4ac86 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 25 Jul 2020 19:45:38 +0200 Subject: [PATCH 235/601] Update: Translations from eints french: 1 change by glx --- src/lang/french.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index 5ba67d4afb..eb786dc266 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -936,6 +936,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso méxicain STR_GAME_OPTIONS_CURRENCY_NTD :Nouveau Dollar de Taïwan (TWD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Chinois (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Dollar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Roupie indienne (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Véhicules routiers From c0bf7cc840744c6b980639641561610cc1435eba Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Fri, 24 Jul 2020 08:51:27 +1200 Subject: [PATCH 236/601] Fix: GCC warns about possibly uninitialized data in signal.cpp When compiling with '-Og', GCC warns about variables that are initialized by reference in the condition of a 'while' loop. This commit silences the warning by explicitly initializing the variables in question to their respective 'invalid value' markers, which will most likely be optimized out when the compiler realizes the values are never used. --- src/signal.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/signal.cpp b/src/signal.cpp index 068ca6193b..9b17e51dcb 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -268,10 +268,10 @@ static SigFlags ExploreSegment(Owner owner) { SigFlags flags = SF_NONE; - TileIndex tile; - DiagDirection enterdir; + TileIndex tile = INVALID_TILE; // Stop GCC from complaining about a possibly uninitialized variable (issue #8280). + DiagDirection enterdir = INVALID_DIAGDIR; - while (_tbdset.Get(&tile, &enterdir)) { + while (_tbdset.Get(&tile, &enterdir)) { // tile and enterdir are initialized here, unless I'm mistaken. TileIndex oldtile = tile; // tile we are leaving DiagDirection exitdir = enterdir == INVALID_DIAGDIR ? INVALID_DIAGDIR : ReverseDiagDir(enterdir); // expected new exit direction (for straight line) @@ -407,8 +407,8 @@ static SigFlags ExploreSegment(Owner owner) */ static void UpdateSignalsAroundSegment(SigFlags flags) { - TileIndex tile; - Trackdir trackdir; + TileIndex tile = INVALID_TILE; // Stop GCC from complaining about a possibly uninitialized variable (issue #8280). + Trackdir trackdir = INVALID_TRACKDIR; while (_tbuset.Get(&tile, &trackdir)) { assert(HasSignalOnTrackdir(tile, trackdir)); @@ -474,8 +474,8 @@ static SigSegState UpdateSignalsInBuffer(Owner owner) bool first = true; // first block? SigSegState state = SIGSEG_FREE; // value to return - TileIndex tile; - DiagDirection dir; + TileIndex tile = INVALID_TILE; // Stop GCC from complaining about a possibly uninitialized variable (issue #8280). + DiagDirection dir = INVALID_DIAGDIR; while (_globset.Get(&tile, &dir)) { assert(_tbuset.IsEmpty()); From 7d66540af55fe9c28790cfe9d839bfbf8afb91dc Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Tue, 21 Jul 2020 23:47:29 +0200 Subject: [PATCH 237/601] Fix: [CMake] Don't strip final newline from regression output. The expected regression output files all end with a newline. As such, we have to make sure we capture the output from OpenTTD with the last newline intact. --- cmake/scripts/Regression.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/scripts/Regression.cmake b/cmake/scripts/Regression.cmake index 0b4e522d3e..9984396ea1 100644 --- a/cmake/scripts/Regression.cmake +++ b/cmake/scripts/Regression.cmake @@ -38,7 +38,6 @@ execute_process(COMMAND ${OPENTTD_EXECUTABLE} OUTPUT_VARIABLE REGRESSION_OUTPUT ERROR_VARIABLE REGRESSION_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE ) if (REGRESSION_OUTPUT) From a10013dd00ee0e78bba7804feddc81d84ba57d69 Mon Sep 17 00:00:00 2001 From: TechGeekNZ Date: Mon, 29 Jun 2020 13:38:29 +1200 Subject: [PATCH 238/601] Codechange: Spell 'Viewport' consistently Some places in the codebase misspell 'Viewport' as 'ViewPort' or 'view_port'. This patch makes everything consistent. --- src/company_gui.cpp | 2 +- src/depot_gui.cpp | 2 +- src/error_gui.cpp | 2 +- src/goal_gui.cpp | 2 +- src/gui.h | 4 +-- src/industry_gui.cpp | 4 +-- src/lang/afrikaans.txt | 4 +-- src/lang/arabic_egypt.txt | 4 +-- src/lang/basque.txt | 4 +-- src/lang/belarusian.txt | 4 +-- src/lang/brazilian_portuguese.txt | 4 +-- src/lang/bulgarian.txt | 4 +-- src/lang/catalan.txt | 4 +-- src/lang/croatian.txt | 4 +-- src/lang/czech.txt | 4 +-- src/lang/danish.txt | 4 +-- src/lang/dutch.txt | 4 +-- src/lang/english.txt | 4 +-- src/lang/english_AU.txt | 4 +-- src/lang/english_US.txt | 4 +-- src/lang/esperanto.txt | 4 +-- src/lang/estonian.txt | 4 +-- src/lang/faroese.txt | 4 +-- src/lang/finnish.txt | 4 +-- src/lang/french.txt | 4 +-- src/lang/gaelic.txt | 4 +-- src/lang/galician.txt | 4 +-- src/lang/german.txt | 4 +-- src/lang/greek.txt | 4 +-- src/lang/hebrew.txt | 4 +-- src/lang/hungarian.txt | 4 +-- src/lang/icelandic.txt | 4 +-- src/lang/indonesian.txt | 4 +-- src/lang/irish.txt | 4 +-- src/lang/italian.txt | 4 +-- src/lang/japanese.txt | 4 +-- src/lang/korean.txt | 4 +-- src/lang/latin.txt | 4 +-- src/lang/latvian.txt | 4 +-- src/lang/lithuanian.txt | 4 +-- src/lang/luxembourgish.txt | 4 +-- src/lang/malay.txt | 4 +-- src/lang/norwegian_bokmal.txt | 4 +-- src/lang/norwegian_nynorsk.txt | 4 +-- src/lang/polish.txt | 4 +-- src/lang/portuguese.txt | 4 +-- src/lang/romanian.txt | 4 +-- src/lang/russian.txt | 4 +-- src/lang/serbian.txt | 4 +-- src/lang/simplified_chinese.txt | 4 +-- src/lang/slovak.txt | 4 +-- src/lang/slovenian.txt | 4 +-- src/lang/spanish.txt | 4 +-- src/lang/spanish_MX.txt | 4 +-- src/lang/swedish.txt | 4 +-- src/lang/tamil.txt | 4 +-- src/lang/thai.txt | 4 +-- src/lang/traditional_chinese.txt | 4 +-- src/lang/turkish.txt | 4 +-- src/lang/ukrainian.txt | 4 +-- src/lang/unfinished/frisian.txt | 4 +-- src/lang/unfinished/macedonian.txt | 2 +- src/lang/unfinished/persian.txt | 4 +-- src/lang/unfinished/urdu.txt | 4 +-- src/lang/vietnamese.txt | 4 +-- src/lang/welsh.txt | 4 +-- src/main_gui.cpp | 6 ++-- src/news_gui.cpp | 4 +-- src/saveload/misc_sl.cpp | 2 +- src/screenshot.cpp | 10 +++---- src/screenshot.h | 2 +- src/smallmap_gui.cpp | 4 +-- src/sound.cpp | 2 +- src/station_gui.cpp | 4 +-- src/story_gui.cpp | 2 +- src/subsidy_gui.cpp | 4 +-- src/toolbar_gui.cpp | 20 +++++++------- src/town_gui.cpp | 4 +-- src/vehicle.cpp | 2 +- src/vehicle_gui.h | 2 +- src/viewport.cpp | 44 +++++++++++++++--------------- src/viewport_func.h | 12 ++++---- src/viewport_gui.cpp | 22 +++++++-------- src/viewport_type.h | 2 +- src/waypoint_gui.cpp | 2 +- src/widget.cpp | 2 +- src/window.cpp | 4 +-- src/window_gui.h | 2 +- src/window_type.h | 2 +- 89 files changed, 207 insertions(+), 207 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index dd8a17ce05..14567b1de7 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2558,7 +2558,7 @@ struct CompanyWindow : Window case WID_C_VIEW_HQ: { TileIndex tile = Company::Get((CompanyID)this->window_number)->location_of_HQ; if (_ctrl_pressed) { - ShowExtraViewPortWindow(tile); + ShowExtraViewportWindow(tile); } else { ScrollMainWindowToTile(tile); } diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index f525e714c5..e4663c6023 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -787,7 +787,7 @@ struct DepotWindow : Window { case WID_D_LOCATION: if (_ctrl_pressed) { - ShowExtraViewPortWindow(this->window_number); + ShowExtraViewportWindow(this->window_number); } else { ScrollMainWindowToTile(this->window_number); } diff --git a/src/error_gui.cpp b/src/error_gui.cpp index de24be3dda..7cbe1d95e3 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -225,7 +225,7 @@ public: int scr_bot = GetMainViewBottom() - 20; Point pt = RemapCoords(this->position.x, this->position.y, GetSlopePixelZOutsideMap(this->position.x, this->position.y)); - const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; + const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; if (this->face == INVALID_COMPANY) { /* move x pos to opposite corner */ pt.x = UnScaleByZoom(pt.x - vp->virtual_left, vp->zoom) + vp->left; diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index faab18c8e2..b7e44624fe 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -148,7 +148,7 @@ struct GoalListWindow : public Window { } if (_ctrl_pressed) { - ShowExtraViewPortWindow(xy); + ShowExtraViewportWindow(xy); } else { ScrollMainWindowToTile(xy); } diff --git a/src/gui.h b/src/gui.h index 181472f555..943f6a14a4 100644 --- a/src/gui.h +++ b/src/gui.h @@ -55,8 +55,8 @@ void ShowStoryBook(CompanyID company, uint16 page_id = INVALID_STORY_PAGE); void ShowEstimatedCostOrIncome(Money cost, int x, int y); -void ShowExtraViewPortWindow(TileIndex tile = INVALID_TILE); -void ShowExtraViewPortWindowForTileUnderCursor(); +void ShowExtraViewportWindow(TileIndex tile = INVALID_TILE); +void ShowExtraViewportWindowForTileUnderCursor(); /* bridge_gui.cpp */ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 88cbc91d10..87fa97d3b5 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1016,7 +1016,7 @@ public: case WID_IV_GOTO: { Industry *i = Industry::Get(this->window_number); if (_ctrl_pressed) { - ShowExtraViewPortWindow(i->location.GetCenterTile()); + ShowExtraViewportWindow(i->location.GetCenterTile()); } else { ScrollMainWindowToTile(i->location.GetCenterTile()); } @@ -1627,7 +1627,7 @@ public: uint p = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_ID_INDUSTRY_LIST, WD_FRAMERECT_TOP); if (p < this->industries.size()) { if (_ctrl_pressed) { - ShowExtraViewPortWindow(this->industries[p]->location.tile); + ShowExtraViewportWindow(this->industries[p]->location.tile); } else { ScrollMainWindowToTile(this->industries[p]->location.tile); } diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 76648bbcec..c478322ea0 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Verlaat # map menu STR_MAP_MENU_MAP_OF_WORLD :Kaart van wêreld -STR_MAP_MENU_EXTRA_VIEW_PORT :Ekstra toonvenster +STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra toonvenster STR_MAP_MENU_LINGRAPH_LEGEND :Vragverspreidingsleutel STR_MAP_MENU_SIGN_LIST :Teken lys @@ -885,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK} die dorpsraad van {TOWN} het 'n kontrak met {STRING} aan gegaan vir een jaaar se eksklusiewe vervoer regte # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Toonvenster {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Toonvenster {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Verander toonvenster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Dupliseer die ligging van die hooftoonvenster na die toonvenster STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Verander hoofaansig diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 819b3488ac..64d0491380 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -374,7 +374,7 @@ STR_FILE_MENU_EXIT :خروج # map menu STR_MAP_MENU_MAP_OF_WORLD :خريطة العالم -STR_MAP_MENU_EXTRA_VIEW_PORT :شاشة عرض اضافية +STR_MAP_MENU_EXTRA_VIEWPORT :شاشة عرض اضافية STR_MAP_MENU_SIGN_LIST :قائمة العلامات ############ range for town menu starts @@ -836,7 +836,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK} فوضى طرق عارمة في مدينة {TOWN}!{}{}اعادة ترميم الطرق مولت من قبل شركة {STRING}{} تجلي ستة أشهر من الشقاء لعربات الطريق. # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}شاشة العرض {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}شاشة العرض {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}انسخ لشاشة العرض STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}انسخ موقع الشاشة الرئيسية لشاشة العرض هذه STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}لصق من شاشة العرض diff --git a/src/lang/basque.txt b/src/lang/basque.txt index ec593bd55b..4850567875 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -392,7 +392,7 @@ STR_FILE_MENU_EXIT :Irten # map menu STR_MAP_MENU_MAP_OF_WORLD :Munduko mapa -STR_MAP_MENU_EXTRA_VIEW_PORT :lehio extra +STR_MAP_MENU_EXTRA_VIEWPORT :lehio extra STR_MAP_MENU_SIGN_LIST :Seinale zerrenda ############ range for town menu starts @@ -861,7 +861,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN}ko udaletxeak {STRING}rekin urte beterako erabateko garraio-eskubideen kontratua sinatu du! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Leihoa {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Leihoa {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Leihora kopiatu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK} Leiho nagusian ikusten dena leiho honetara kopiatu STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Aldatu ikuspen nagusia diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index cbe977cb8b..19f88d555e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -712,7 +712,7 @@ STR_FILE_MENU_EXIT :Выхад # map menu STR_MAP_MENU_MAP_OF_WORLD :Мапа сусьвету -STR_MAP_MENU_EXTRA_VIEW_PORT :Дадатковае вакно прагляду +STR_MAP_MENU_EXTRA_VIEWPORT :Дадатковае вакно прагляду STR_MAP_MENU_LINGRAPH_LEGEND :Леґенда грузаперавозак STR_MAP_MENU_SIGN_LIST :Сьпіс таблічак @@ -1194,7 +1194,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Мясцовыя ўлады г. {TOWN} падпісалі кантракт з {STRING} на адзін год эксклюзыўных транспартных правоў! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Вакно прагляду {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Вакно прагляду {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Капіяваць у вакно прагляду STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Скапіяваць бягучую пазыцыю ў вакно прагляду STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}У асноўнае акно diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index adbf2a4cdf..fc27d76282 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -396,7 +396,7 @@ STR_FILE_MENU_EXIT :Sair # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo -STR_MAP_MENU_EXTRA_VIEW_PORT :Janela extra +STR_MAP_MENU_EXTRA_VIEWPORT :Janela extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda do Fluxo de Carga STR_MAP_MENU_SIGN_LIST :Lista de sinais @@ -876,7 +876,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Prefeitura de {TOWN} assina contrato de exclusividade com {STRING} por um ano! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Janela {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Janela {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Alterar visualização STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar o local da tela principal para esta janela STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar da visualização principal diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 8c8c24f9c0..5196ae47ef 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -396,7 +396,7 @@ STR_FILE_MENU_EXIT :Изход # map menu STR_MAP_MENU_MAP_OF_WORLD :Карта на света -STR_MAP_MENU_EXTRA_VIEW_PORT :Допълнителна камера +STR_MAP_MENU_EXTRA_VIEWPORT :Допълнителна камера STR_MAP_MENU_SIGN_LIST :Списък с табели ############ range for town menu starts @@ -867,7 +867,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Местните власти на {TOWN} подписаха договор с {STRING} за едногодишни ексклузивни транспортни права # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Камера {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Камера {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Преместване на камерата STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Преместване на тази камера до глобалната STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Преместване глобалната камера diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 78a431ee39..f4012ca12e 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -400,7 +400,7 @@ STR_FILE_MENU_EXIT :Surt # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa del món -STR_MAP_MENU_EXTRA_VIEW_PORT :Vista extra +STR_MAP_MENU_EXTRA_VIEWPORT :Vista extra STR_MAP_MENU_LINGRAPH_LEGEND :Llegenda del flux de càrrega STR_MAP_MENU_SIGN_LIST :Llista de senyals @@ -881,7 +881,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}L'autoritat local de {TOWN} signa un contracte amb {STRING} per l'explotació en exclusiva dels drets de transport durant un any # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vista {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Canvia la vista extra STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Mou aquesta vista on està la vista principal STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Canvia vista principal diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3592916ad6..1a81252d4a 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -498,7 +498,7 @@ STR_FILE_MENU_EXIT :Izlaz # map menu STR_MAP_MENU_MAP_OF_WORLD :Karta svijeta -STR_MAP_MENU_EXTRA_VIEW_PORT :Dodatni pogled +STR_MAP_MENU_EXTRA_VIEWPORT :Dodatni pogled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda protoka tereta STR_MAP_MENU_SIGN_LIST :Popis znakova @@ -980,7 +980,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokalna vlast {TOWN} potpisuje ugovor sa {STRING} za jednogodišnja ekskluzivna prava transporta! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Mini pogled {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Mini pogled {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Promijeni pogled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiraj lokaciju globalnog pogleda u ovaj mini pogled STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Promijeni glavni pogled diff --git a/src/lang/czech.txt b/src/lang/czech.txt index e885a93f66..2dfe6c4aef 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -477,7 +477,7 @@ STR_FILE_MENU_EXIT :Ukončit progra # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa světa -STR_MAP_MENU_EXTRA_VIEW_PORT :Další pohled +STR_MAP_MENU_EXTRA_VIEWPORT :Další pohled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda toku nákladu STR_MAP_MENU_SIGN_LIST :Seznam popisků @@ -970,7 +970,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Místní správa města {TOWN} podepsala dohodu s {STRING} na jeden rok exkluzivní dopravy! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pohled {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pohled {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Nastavit jako pohled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nastavit současné zorné pole jako pohled STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Změnit hlavní pohled diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 895e6620a3..b284d0f60f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Afslut # map menu STR_MAP_MENU_MAP_OF_WORLD :Kort over verden -STR_MAP_MENU_EXTRA_VIEW_PORT :Nyt lokalitetsvindue +STR_MAP_MENU_EXTRA_VIEWPORT :Nyt lokalitetsvindue STR_MAP_MENU_LINGRAPH_LEGEND :Laststrømforklaring STR_MAP_MENU_SIGN_LIST :Liste over skilte @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Myndighederne i {TOWN} skriver kontrakt med {STRING} på et års eksklusive transportrettigheder! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Lokalitetsvindue {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Lokalitetsvindue {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Hent hovedvisning STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Bevæg denne visning til samme sted som hovedvisningen STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hovedvisning diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index c2ddba6fd3..3d4a0f7d12 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Afsluiten # map menu STR_MAP_MENU_MAP_OF_WORLD :Wereldkaart -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra kijkvenster +STR_MAP_MENU_EXTRA_VIEWPORT :Extra kijkvenster STR_MAP_MENU_LINGRAPH_LEGEND :Vrachtstroomlegende STR_MAP_MENU_SIGN_LIST :Bordjeslijst @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Gemeentebestuur van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Kijkvenster {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Verander kijkvenster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopieer de locatie van het algemene scherm naar dit kijkvenster STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Verander algemeen scherm diff --git a/src/lang/english.txt b/src/lang/english.txt index a0b146c9bf..c055f54a05 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Exit # map menu STR_MAP_MENU_MAP_OF_WORLD :Map of world -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra viewport +STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Sign list @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Local authority of {TOWN} signs contract with {RAW_STRING} for one year of exclusive transport rights! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Change viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the main view to this viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Change main view diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index ac8b4605a5..17a9659fbe 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -386,7 +386,7 @@ STR_FILE_MENU_EXIT :Exit # map menu STR_MAP_MENU_MAP_OF_WORLD :Map of world -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra viewport +STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Sign list @@ -860,7 +860,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Local authority of {TOWN} signs contract with {STRING} for one year of exclusive transport rights! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copy to viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the main view to this viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Paste from viewport diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index e770b4bf3b..4eeb8b8fb9 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Quit # map menu STR_MAP_MENU_MAP_OF_WORLD :Map of world -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra viewport +STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Sign list @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Local authority of {TOWN} signs contract with {STRING} for one year of exclusive transport rights! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Change viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the main view to this viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Change main view diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index ba7a07f802..a515912d3f 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -389,7 +389,7 @@ STR_FILE_MENU_EXIT :Fermu # map menu STR_MAP_MENU_MAP_OF_WORLD :Mondomapo -STR_MAP_MENU_EXTRA_VIEW_PORT :Plia vidujo +STR_MAP_MENU_EXTRA_VIEWPORT :Plia vidujo STR_MAP_MENU_LINGRAPH_LEGEND :Legendo de ŝarĝfluo STR_MAP_MENU_SIGN_LIST :Afiŝa listo @@ -856,7 +856,7 @@ STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transporta monopolo! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vidujo {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vidujo {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopiu al vidujo STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiu la lokon de la ĉefvido al ĉi tiu vidujo STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Gluu de vidujo diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 5f9b3e4455..c74293382a 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -454,7 +454,7 @@ STR_FILE_MENU_EXIT :Välju # map menu STR_MAP_MENU_MAP_OF_WORLD :Maailmakaart -STR_MAP_MENU_EXTRA_VIEW_PORT :Lisa vaateaken +STR_MAP_MENU_EXTRA_VIEWPORT :Lisa vaateaken STR_MAP_MENU_LINGRAPH_LEGEND :Kaubavoo legend STR_MAP_MENU_SIGN_LIST :Siltide register @@ -929,7 +929,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Kohalik linnavõim{TOWN} allkirjastab lepingu {STRING} transpordi ainuõiguseks üheks aastaks! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vaateaken {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vaateaken {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopeeri vaateaknasse STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopeeri praegune vaade vaateaknasse STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Muuda peamist vaadet diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index b6bf7ab2d5..6ee2502fba 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -374,7 +374,7 @@ STR_FILE_MENU_EXIT :Gevst # map menu STR_MAP_MENU_MAP_OF_WORLD :Heimskort -STR_MAP_MENU_EXTRA_VIEW_PORT :Eyka synisgluggi +STR_MAP_MENU_EXTRA_VIEWPORT :Eyka synisgluggi STR_MAP_MENU_SIGN_LIST :Listi yvur tekin ############ range for town menu starts @@ -841,7 +841,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Mynduleikanir í {TOWN} skriva undir sáttmála við {STRING} fyri einkarrætt av flutningi í eitt ár! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Sýnisgluggi {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Sýnisgluggi {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Rita til sýnisglugga STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Avrita staðið í høvuðsglugganum inn hendan sýnisgluggan STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Set inn frá sýnisglugga diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 4780b8c9aa..1828c9026e 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Sulje # map menu STR_MAP_MENU_MAP_OF_WORLD :Maailmankartta -STR_MAP_MENU_EXTRA_VIEW_PORT :Lisänäkymä +STR_MAP_MENU_EXTRA_VIEWPORT :Lisänäkymä STR_MAP_MENU_LINGRAPH_LEGEND :Rahtivirran selitys STR_MAP_MENU_SIGN_LIST :Kylttilista @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} ja {STRING} allekirjoittavat sopimuksen vuoden pituisesta kuljetusyksinoikeudesta! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Näkymä {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Näkymä {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Päänäkymästä tähän STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopioi päänäkymän sijainti tähän näkymään STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Vaihda päänäkymää diff --git a/src/lang/french.txt b/src/lang/french.txt index eb786dc266..226e28b9e1 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Quitter le jeu # map menu STR_MAP_MENU_MAP_OF_WORLD :Carte du monde -STR_MAP_MENU_EXTRA_VIEW_PORT :Vue supplémentaire +STR_MAP_MENU_EXTRA_VIEWPORT :Vue supplémentaire STR_MAP_MENU_LINGRAPH_LEGEND :Légende du flux de marchandises STR_MAP_MENU_SIGN_LIST :Liste des panneaux @@ -885,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Les autorités locales de {TOWN} signent avec {STRING} un contrat d'exclusivité des transports valable un an{NBSP}! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vue {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vue {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Modifier cette vue STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copier l'emplacement de la vue principale vers cette vue STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Modifier la vue principale diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 8e9b6be1e6..0c47be5d26 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -583,7 +583,7 @@ STR_FILE_MENU_EXIT :Fàg an-seo # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa an t-saoghail -STR_MAP_MENU_EXTRA_VIEW_PORT :Port-seallaidh a bharrachd +STR_MAP_MENU_EXTRA_VIEWPORT :Port-seallaidh a bharrachd STR_MAP_MENU_LINGRAPH_LEGEND :Clàr-mìneachaidh an t-srutha carago STR_MAP_MENU_SIGN_LIST :Liosta nan sanas @@ -1074,7 +1074,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Chuir an t-ùghdarras ionadail aig {TOWN} a làimh ri cùmhnant le {STRING} air còraichean giùlain às-dùnach fad bliadhna! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Port-seallaidh {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Port-seallaidh {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Atharraich am port-seallaidh STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Cuir lethbhreac dhen ionad air a' phrìomh shealladh sa phort-seallaidh seo STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Atharraich am prìomh phort-seallaidh diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 9185638ee4..f4b6779ed9 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Saír # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo -STR_MAP_MENU_EXTRA_VIEW_PORT :Xanela extra +STR_MAP_MENU_EXTRA_VIEWPORT :Xanela extra STR_MAP_MENU_LINGRAPH_LEGEND :Lenda de tomar carga STR_MAP_MENU_SIGN_LIST :Lista de rótulos @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}As autoridades locáis de {TOWN} asinan un contrato con {STRING} por un ano de dereitos de transporte exclusivos! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vista {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambiar xanela STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia-la sitaución da vista principal a esta vista STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambia a vista principal diff --git a/src/lang/german.txt b/src/lang/german.txt index 6e8debe354..26062c4fb1 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -398,7 +398,7 @@ STR_FILE_MENU_EXIT :OpenTTD beenden # map menu STR_MAP_MENU_MAP_OF_WORLD :Weltkarte -STR_MAP_MENU_EXTRA_VIEW_PORT :Zusatzansicht +STR_MAP_MENU_EXTRA_VIEWPORT :Zusatzansicht STR_MAP_MENU_LINGRAPH_LEGEND :Frachtverbindungen STR_MAP_MENU_SIGN_LIST :Schilderliste @@ -878,7 +878,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Stadtverwaltung von {TOWN} unterzeichnet Vertrag mit {STRING} über ein Jahr währende exklusive Transportrechte! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ansicht {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Ansicht {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Zusatzansicht ändern STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Aktuelle Position der Hauptansicht in diese Zusatzansicht kopieren STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Hauptansicht ändern diff --git a/src/lang/greek.txt b/src/lang/greek.txt index a2971e0f8f..ba8956b94d 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -458,7 +458,7 @@ STR_FILE_MENU_EXIT :Έξοδος # map menu STR_MAP_MENU_MAP_OF_WORLD :Χάρτης του κόσμου -STR_MAP_MENU_EXTRA_VIEW_PORT :Πρόσθετη εμφάνιση +STR_MAP_MENU_EXTRA_VIEWPORT :Πρόσθετη εμφάνιση STR_MAP_MENU_LINGRAPH_LEGEND :Υπόμνημα Ροής Φορτίου STR_MAP_MENU_SIGN_LIST :Λίστα πινακίδων @@ -985,7 +985,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Οι τοπικές αρχές της πόλης {TOWN} υπογράφουν συμβόλαιο με την εταιρεία {STRING} για αποκλειστικά δικαιώματα μεταφορών ενός έτους! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Εμφάνιση {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Εμφάνιση {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Αντιγραφή στο παράθυρο εμφάνισης STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Αντιγραφή της τοποθεσίας της κύριας προβολής σε αυτό το παράθυρο εμφάνισης STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Επικόλληση από παράθυρο εμφάνισης diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index a944e7d5e6..2f47bf3d67 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -409,7 +409,7 @@ STR_FILE_MENU_EXIT :יציאה # map menu STR_MAP_MENU_MAP_OF_WORLD :מפת העולם -STR_MAP_MENU_EXTRA_VIEW_PORT :השקפה נוספת +STR_MAP_MENU_EXTRA_VIEWPORT :השקפה נוספת STR_MAP_MENU_LINGRAPH_LEGEND :מקרא זרימת מטענים STR_MAP_MENU_SIGN_LIST :רשימת שלטים @@ -887,7 +887,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}הרשות המקומית של {TOWN} חותמת חוזה עם {STRING} המעניק זכויות תעבורה בלעדיות למשך שנה! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}השקפה {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}השקפה {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}העתק להשקפה STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}העתק את מיקום חלון התצוגה הראשי לחלון תצוגה זה STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}עבור למיקום שנמצא בחלון התצוגה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8a98f311e3..ff9819d203 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -465,7 +465,7 @@ STR_FILE_MENU_EXIT :Kilépés # map menu STR_MAP_MENU_MAP_OF_WORLD :Világtérkép -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra látkép +STR_MAP_MENU_EXTRA_VIEWPORT :Extra látkép STR_MAP_MENU_LINGRAPH_LEGEND :Rakományáramlási jelmagyarázat STR_MAP_MENU_SIGN_LIST :Feliratok listája @@ -948,7 +948,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} önkormányzata és {STRING} szerződést kötött egy éves kizárólagos szállítási jogokra! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}{COMMA}. látkép +STR_EXTRA_VIEWPORT_TITLE :{WHITE}{COMMA}. látkép STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Látkép átállítása STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}A látképre a fő nézet pozícióját másolja STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Fő nézet ideállítása diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 7415e01f1e..02ce073089 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -374,7 +374,7 @@ STR_FILE_MENU_EXIT :Hætta # map menu STR_MAP_MENU_MAP_OF_WORLD :Heimskort -STR_MAP_MENU_EXTRA_VIEW_PORT :Auka sjónarhorn +STR_MAP_MENU_EXTRA_VIEWPORT :Auka sjónarhorn STR_MAP_MENU_SIGN_LIST :Skiltalisti ############ range for town menu starts @@ -840,7 +840,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Bæjarstjórn {TOWN} skrifar undir eins árs sérleyfis samning við {STRING} til flutningar á öllum varningi. # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Sjónarhorn {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Sjónarhorn {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Afrita í sjónarhorn STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Afrita aðalsjónarhornið í þetta sjónarhorn STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Afrita frá sjónarhorni diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index d8acc468e6..9ee4f619aa 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -396,7 +396,7 @@ STR_FILE_MENU_EXIT :Keluar # map menu STR_MAP_MENU_MAP_OF_WORLD :Peta Dunia -STR_MAP_MENU_EXTRA_VIEW_PORT :Viewport ekstra +STR_MAP_MENU_EXTRA_VIEWPORT :Viewport ekstra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda aliran kargo STR_MAP_MENU_SIGN_LIST :Daftar Tanda @@ -876,7 +876,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Pemkot Kota {TOWN} menandatangani kontrak dengan {STRING} untuk hak transportasi eksklusif selama 1 tahun! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Simpan ke viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Simpan lokasi peta sekarang ke viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Tampilan dari viewport diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d5371f8b83..1729a3fcb8 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :Scoir # map menu STR_MAP_MENU_MAP_OF_WORLD :Léarscáil den domhan -STR_MAP_MENU_EXTRA_VIEW_PORT :Fuinneog amhairc bhreise +STR_MAP_MENU_EXTRA_VIEWPORT :Fuinneog amhairc bhreise STR_MAP_MENU_LINGRAPH_LEGEND :Eochair an tSreafa Lastais STR_MAP_MENU_SIGN_LIST :Liosta na gcomharthaí @@ -869,7 +869,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Síníonn údarás áitiúil {TOWN} conradh le {STRING} le haghaidh cearta eisiacha iompair ar feadh bliana! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Amharc {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Amharc {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cóipeáil chuig amharc STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Cóipeáil suíomh an phríomh-amhairc chuig an amharc seo STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Greamaigh ón amharc diff --git a/src/lang/italian.txt b/src/lang/italian.txt index ff593ff229..7e9d8e3056 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -404,7 +404,7 @@ STR_FILE_MENU_EXIT :Esci # map menu STR_MAP_MENU_MAP_OF_WORLD :Mappa del mondo -STR_MAP_MENU_EXTRA_VIEW_PORT :Mini visuale extra +STR_MAP_MENU_EXTRA_VIEWPORT :Mini visuale extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda rotte commerciali STR_MAP_MENU_SIGN_LIST :Elenco cartelli @@ -886,7 +886,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}L'autorità locale di {TOWN} firma un accordo con la {STRING} per un anno di diritti di trasporto esclusivi! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Mini visuale {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Mini visuale {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambia mini visuale STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia la posizione della visuale principale in questa mini visuale STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambia vis. principale diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index c27cf4cf02..b2e28bc669 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :OpenTTDを終 # map menu STR_MAP_MENU_MAP_OF_WORLD :地図 -STR_MAP_MENU_EXTRA_VIEW_PORT :ビューポートを開く +STR_MAP_MENU_EXTRA_VIEWPORT :ビューポートを開く STR_MAP_MENU_LINGRAPH_LEGEND :貨物輸送履歴 STR_MAP_MENU_SIGN_LIST :標識リスト @@ -869,7 +869,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK} {TOWN}が{STRING}と1年間の排他輸送契約を締結! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}ビューア {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}ビューア {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}ビューアへコピー STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}メイン画面の場所をビューアにコピーする STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}ビューアからペースト diff --git a/src/lang/korean.txt b/src/lang/korean.txt index fbfc4e7ddf..78becf4066 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :종료 # map menu STR_MAP_MENU_MAP_OF_WORLD :전체 지도 보기 -STR_MAP_MENU_EXTRA_VIEW_PORT :외부 화면 +STR_MAP_MENU_EXTRA_VIEWPORT :외부 화면 STR_MAP_MENU_LINGRAPH_LEGEND :화물 흐름 범례 STR_MAP_MENU_SIGN_LIST :팻말 목록 @@ -885,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{0:TOWN} 지역 당국이 {1:STRING}과 1년 간의 수송 독점권 계약을 체결하였습니다! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}외부 화면 {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}외부 화면 {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}외부 화면으로 복사 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}현재 장소를 외부 화면에 복사합니다. STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}이 장소로 이동 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 629e3d90df..e1b73679cf 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -585,7 +585,7 @@ STR_FILE_MENU_EXIT :Exire # map menu STR_MAP_MENU_MAP_OF_WORLD :Orbis tabula -STR_MAP_MENU_EXTRA_VIEW_PORT :Fenestra conspectus additicia +STR_MAP_MENU_EXTRA_VIEWPORT :Fenestra conspectus additicia STR_MAP_MENU_LINGRAPH_LEGEND :Formula graphica onerum cursus STR_MAP_MENU_SIGN_LIST :Index signorum @@ -1065,7 +1065,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN}: Auctoritas vicinalis nuntiat {STRING} esse societatem unicam cui uno anno licet transportare intra oppidum! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Fenestra conspectus {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Fenestra conspectus {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mutare conspectum STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Transcribere locum primarium ad hanc fenestram conspectus STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mutare conspectum primum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 66f2b1f547..bb7ee967d0 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -404,7 +404,7 @@ STR_FILE_MENU_EXIT :Iziet # map menu STR_MAP_MENU_MAP_OF_WORLD :Pasaules karte -STR_MAP_MENU_EXTRA_VIEW_PORT :Papildu skatvieta +STR_MAP_MENU_EXTRA_VIEWPORT :Papildu skatvieta STR_MAP_MENU_LINGRAPH_LEGEND :Kravu plūsmas apzīmējumi STR_MAP_MENU_SIGN_LIST :Zīmju saraksts @@ -886,7 +886,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} vietējā pašvaldība panāk vienošanos ar {STRING} par pārvadājumu izņēmuma tiesībām uz vienu gadu! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Skatvieta {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Skatvieta {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mainīt skatvietu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopēt galvenā skata atrašanās vietu uz šo skatvietu STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mainīt galveno skatu diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 2d2f9f148d..9300880716 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -590,7 +590,7 @@ STR_FILE_MENU_EXIT :Išeiti # map menu STR_MAP_MENU_MAP_OF_WORLD :Žemėlapis -STR_MAP_MENU_EXTRA_VIEW_PORT :Papildomas peržiūros langas +STR_MAP_MENU_EXTRA_VIEWPORT :Papildomas peržiūros langas STR_MAP_MENU_LINGRAPH_LEGEND :Krovinių srautų legenda STR_MAP_MENU_SIGN_LIST :Ženklų sąrašas @@ -1074,7 +1074,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Vietinė valdža {TOWN} pasirašo kontraktą {STRING} vieneriems metams išskirtines pervežimų teises! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Peržiūros langas {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Peržiūros langas {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopijuoti į peržiūros langą STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopijuoti pagrindinio lango padėtį į šį peržiūros langą STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Įkelti iš peržiūros lango diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 81878c248f..b465025b57 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Eraus # map menu STR_MAP_MENU_MAP_OF_WORLD :Weltkaart -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra Usiicht +STR_MAP_MENU_EXTRA_VIEWPORT :Extra Usiicht STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Schëlderlëscht @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}D'Gemeng {TOWN} ënnerschreiwt Kontrakt mat {STRING} fir ee Joer laang exklusiv Transportrechter! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Usiicht {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Usiicht {COMMA} 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}Haptusiicht änneren diff --git a/src/lang/malay.txt b/src/lang/malay.txt index d6707443f0..8c8cf0746d 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -378,7 +378,7 @@ STR_FILE_MENU_EXIT :Keluar # map menu STR_MAP_MENU_MAP_OF_WORLD :Peta Dunia -STR_MAP_MENU_EXTRA_VIEW_PORT :Tetingkap pemandangan tambahan +STR_MAP_MENU_EXTRA_VIEWPORT :Tetingkap pemandangan tambahan STR_MAP_MENU_SIGN_LIST :Senarai papan tanda ############ range for town menu starts @@ -845,7 +845,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT} {BLACK} Pihak Berkuasa Tempatan {TOWN} menanda tangani kontrak dengan {STRING} untuk satu tahun hak pengangkutan eksklusif! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Tetingkap Pemandangan {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Tetingkap Pemandangan {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Ubah tetingkap paparan STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Salin lokasi pemandangan global kepada tetingkap pemandangan ini STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Ubah paparan utama diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8eac74055c..d282e1e541 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -404,7 +404,7 @@ STR_FILE_MENU_EXIT :Avslutt OpenTTD # map menu STR_MAP_MENU_MAP_OF_WORLD :Verdenskart -STR_MAP_MENU_EXTRA_VIEW_PORT :Ekstra tilleggsvindu +STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra tilleggsvindu STR_MAP_MENU_LINGRAPH_LEGEND :Symbolforklaring for vareflyt STR_MAP_MENU_SIGN_LIST :Skiltliste @@ -885,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokal myndighet i {TOWN} signerer kontrakt med {STRING} for ett år med eksklusift transport rettigheter! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Tilleggsvindu {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Tilleggsvindu {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopier til tilleggsvindu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopier hovedvisningen til dette tilleggsvinduet STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Endre hovedsynsfelt diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 59e6381676..5eb0d5b8a7 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -397,7 +397,7 @@ STR_FILE_MENU_EXIT :Avslutt OpenTTD # map menu STR_MAP_MENU_MAP_OF_WORLD :Verdskart -STR_MAP_MENU_EXTRA_VIEW_PORT :Ekstra tilleggsvindauge +STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra tilleggsvindauge STR_MAP_MENU_LINGRAPH_LEGEND :Symbolforklaring for vareflyt STR_MAP_MENU_SIGN_LIST :Skiltliste @@ -871,7 +871,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Bystyret i {TOWN} signerer kontrakt med {STRING} om eitt års eksklusive transportrettar!! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Tilleggsvindauge {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Tilleggsvindauge {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopier til tilleggsvindauge STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopier stad i hovedvisinga til dette tilleggsvindauga STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Kopier frå tilleggsvindauge diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 5c58ac7a7d..bcbfd24967 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -781,7 +781,7 @@ STR_FILE_MENU_EXIT :Wyjście # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa świata -STR_MAP_MENU_EXTRA_VIEW_PORT :Dodatkowy podgląd +STR_MAP_MENU_EXTRA_VIEWPORT :Dodatkowy podgląd STR_MAP_MENU_LINGRAPH_LEGEND :Legenda przepływu towarów STR_MAP_MENU_SIGN_LIST :Lista napisów @@ -1264,7 +1264,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokalne władze miasta {TOWN} podpisują umowę z {STRING} na wyłączność usług transportowych! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Podgląd {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Podgląd {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Zmień podgląd STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiuj pozycję widoku głównego do podglądu STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Zmień widok główny diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ace5bb4c60..d39767aa49 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -401,7 +401,7 @@ STR_FILE_MENU_EXIT :Sair # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo -STR_MAP_MENU_EXTRA_VIEW_PORT :Visualizador extra +STR_MAP_MENU_EXTRA_VIEWPORT :Visualizador extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda de fluxo de carga STR_MAP_MENU_SIGN_LIST :Lista de sinais @@ -882,7 +882,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Autoridade local de {TOWN} assina contrato com {STRING} por um ano de direitos exclusivos de transporte! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Visualizador {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Visualizador {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Alterar janela de exibição STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar a localização do visualizador global para este visualizador STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Alterar vista principal diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index b3c04eaaf0..2842dd4fec 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :Ieşire din joc # map menu STR_MAP_MENU_MAP_OF_WORLD :Harta lumii -STR_MAP_MENU_EXTRA_VIEW_PORT :Ecran suplimentar +STR_MAP_MENU_EXTRA_VIEWPORT :Ecran suplimentar STR_MAP_MENU_LINGRAPH_LEGEND :Legenda flux încărcătură STR_MAP_MENU_SIGN_LIST :Lista de semne @@ -871,7 +871,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Autoritatea locală a oraşului {TOWN} semnează un contract cu {STRING} pentru un an de drepturi exclusive de transport! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ecran {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Ecran {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiază în ecran STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiază locaţia ecranului principal în acest ecran STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Importă din ecran diff --git a/src/lang/russian.txt b/src/lang/russian.txt index f4e20a8578..266fdad22f 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -528,7 +528,7 @@ STR_FILE_MENU_EXIT :Выход # map menu STR_MAP_MENU_MAP_OF_WORLD :Карта мира -STR_MAP_MENU_EXTRA_VIEW_PORT :Доп. окно просмотра +STR_MAP_MENU_EXTRA_VIEWPORT :Доп. окно просмотра STR_MAP_MENU_LINGRAPH_LEGEND :Легенда грузоперевозок STR_MAP_MENU_SIGN_LIST :Список табличек @@ -1029,7 +1029,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Администрация г.{NBSP}{TOWN} заключила контракт с компанией «{STRING}», предоставляющий ей эксклюзивные права на транспортные услуги в городе сроком на 1{NBSP}год! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Окно просмотра {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Окно просмотра {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Из основного окна STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Показать то, что отображается в основном окне STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}В основное окно diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 7567da7370..839269d696 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -583,7 +583,7 @@ STR_FILE_MENU_EXIT :Izađi # map menu STR_MAP_MENU_MAP_OF_WORLD :Karta sveta -STR_MAP_MENU_EXTRA_VIEW_PORT :Dodatno gledište +STR_MAP_MENU_EXTRA_VIEWPORT :Dodatno gledište STR_MAP_MENU_LINGRAPH_LEGEND :Legenda protoka tereta STR_MAP_MENU_SIGN_LIST :Lista Znakova @@ -1068,7 +1068,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Vlasti grada {TOWN} su potpisale ugovor sa preduzećem {STRING} o ekskluzivnom pravu prevoza na godinu dana! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pogled{COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pogled{COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK} Kopiraj u prozor za pogled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Premešta pogled na trenutnu poziciju glavnog pogleda STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Promenite glavni prikaz diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index b2ef0d07f3..d3aa2d98b9 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :退出 # map menu STR_MAP_MENU_MAP_OF_WORLD :缩略地图 -STR_MAP_MENU_EXTRA_VIEW_PORT :额外视点 +STR_MAP_MENU_EXTRA_VIEWPORT :额外视点 STR_MAP_MENU_LINGRAPH_LEGEND :客货流图标 STR_MAP_MENU_SIGN_LIST :标志列表 @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN}一年期的运输专营权已经被{STRING}购买! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}视点 {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}视点 {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}将主视角复制到视点 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}将额外视点移动到屏幕中心的位置 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}移动主视角到该视点 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 519849a808..20ab973b84 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -459,7 +459,7 @@ STR_FILE_MENU_EXIT :Koniec # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa sveta -STR_MAP_MENU_EXTRA_VIEW_PORT :Ďalší pohľad +STR_MAP_MENU_EXTRA_VIEWPORT :Ďalší pohľad STR_MAP_MENU_LINGRAPH_LEGEND :Legenka k smerovaniu nákladu STR_MAP_MENU_SIGN_LIST :Zoznam popisov @@ -937,7 +937,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Miestna samospráva mesta {TOWN} podpísala exkluzívnu zmluvu na prepravu so spoločnosťou {STRING} na 1 rok !!! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pohľad {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pohľad {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Pohľad podľa mapy STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nastaviť pohľad podľa hlavného pohľadu STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mapa podľa pohľadu diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 508455dd8d..f07f071ff8 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -548,7 +548,7 @@ STR_FILE_MENU_EXIT :Izhod # map menu STR_MAP_MENU_MAP_OF_WORLD :Zemljevid sveta -STR_MAP_MENU_EXTRA_VIEW_PORT :Dodaten pogled +STR_MAP_MENU_EXTRA_VIEWPORT :Dodaten pogled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda pretoka tovora STR_MAP_MENU_SIGN_LIST :Seznam napisov @@ -1023,7 +1023,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokalna oblast kraja {TOWN} je podpisala pogodbo s/z {STRING} o eno letni izključni pravici za transport. # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pogled {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pogled {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopiraj na pogled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiraj lokacijo splošnega pogleda v ta pogled STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Prilepi iz pogleda diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index d0e1a68755..3ea15362cb 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Salir # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa del mundo -STR_MAP_MENU_EXTRA_VIEW_PORT :Punto de vista extra +STR_MAP_MENU_EXTRA_VIEWPORT :Punto de vista extra STR_MAP_MENU_LINGRAPH_LEGEND :Leyenda de Movimientos de Carga STR_MAP_MENU_SIGN_LIST :Lista de carteles @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}¡La autoridad local de {TOWN} firma un contrato de exclusividad con {STRING} por un año! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vista {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambiar punto de vista STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia la localización de la vista principal a este punto de vista STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambiar vista principal diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 8ccb46eea0..5571c32f5f 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Salir # map menu STR_MAP_MENU_MAP_OF_WORLD :Minimapa completo -STR_MAP_MENU_EXTRA_VIEW_PORT :Ventana de vista adicional +STR_MAP_MENU_EXTRA_VIEWPORT :Ventana de vista adicional STR_MAP_MENU_LINGRAPH_LEGEND :Leyenda de flujo de cargamento STR_MAP_MENU_SIGN_LIST :Lista de carteles @@ -885,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}¡Ayuntamiento de {TOWN} firma contrato de exclusividad con {STRING} por un año! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vista {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambiar ventana de vista STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar la vista principal a esta ventana de vista STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambiar vista principal diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 19da5154f7..909ce0e4ab 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Avsluta # map menu STR_MAP_MENU_MAP_OF_WORLD :Världskarta -STR_MAP_MENU_EXTRA_VIEW_PORT :Nytt vyfönster +STR_MAP_MENU_EXTRA_VIEWPORT :Nytt vyfönster STR_MAP_MENU_LINGRAPH_LEGEND :Legend för Godsflöden STR_MAP_MENU_SIGN_LIST :Skyltlista @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}De lokala myndigheterna i {TOWN} skriver kontrakt med {STRING} för ett års exklusiva transporträttigheter! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vyfönster {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vyfönster {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Byt vy STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiera huvudvyns position till detta vyfönster STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Byt huvudvy diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 9b27d0cfd1..0727649df8 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -393,7 +393,7 @@ STR_FILE_MENU_EXIT :வெளிய # map menu STR_MAP_MENU_MAP_OF_WORLD :உலகப் படம் -STR_MAP_MENU_EXTRA_VIEW_PORT :கூடுதல் பார்வைபடம் +STR_MAP_MENU_EXTRA_VIEWPORT :கூடுதல் பார்வைபடம் STR_MAP_MENU_LINGRAPH_LEGEND :சரக்கு செல்லும் வழிப் படம் STR_MAP_MENU_SIGN_LIST :குறிகளின் பட்டியல் @@ -848,7 +848,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} நகராட்சியின் முழு போக்குவரத்து உரிமைகளையும் ஒரு வருடத்திற்கு {STRING} வாங்கியுள்ளது! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}பார்வைப் படம் {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}பார்வைப் படம் {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}பார்படத்திற்கு மாற்றவும் STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}பிரதான பார்வையை மாற்றவும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 46ecfa5675..258be30a15 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -387,7 +387,7 @@ STR_FILE_MENU_EXIT :ออกจา # map menu STR_MAP_MENU_MAP_OF_WORLD :แผนที่โลก -STR_MAP_MENU_EXTRA_VIEW_PORT :มุมมองเพิ่มเติม +STR_MAP_MENU_EXTRA_VIEWPORT :มุมมองเพิ่มเติม STR_MAP_MENU_LINGRAPH_LEGEND :เส้นทางการกระจายสินค้า STR_MAP_MENU_SIGN_LIST :รายการป้าย @@ -860,7 +860,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}ฝ่ายบริหารของเมือง {TOWN} ลงนามสัญญากับ {STRING} เป็นะระยเวลา 1 ปีสำหรับสัมปทานขนส่งพิเศษ # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}มุมมอง {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}มุมมอง {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}คัดลอกไปยังมุมมอง STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}คัดลอกตำแหน่งของมุมมองหลังมายังมุมมองนี้ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}วางจากมุมมอง diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 17463264e4..d530adbad3 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :離開 # map menu STR_MAP_MENU_MAP_OF_WORLD :世界地圖 -STR_MAP_MENU_EXTRA_VIEW_PORT :打開新視野 +STR_MAP_MENU_EXTRA_VIEWPORT :打開新視野 STR_MAP_MENU_LINGRAPH_LEGEND :貨物流程索引 STR_MAP_MENU_SIGN_LIST :標誌清單 @@ -871,7 +871,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} 的地方政府與 {STRING} 簽訂了一年的專屬運輸權合約! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}視野 {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}視野 {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}複製至本視野 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}將主視野的位置複製到此視窗 STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}貼上至主視野 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 8b9d0da971..8193f2970e 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -398,7 +398,7 @@ STR_FILE_MENU_EXIT :Çıkış # map menu STR_MAP_MENU_MAP_OF_WORLD :Dünya haritası -STR_MAP_MENU_EXTRA_VIEW_PORT :Ek görünüm +STR_MAP_MENU_EXTRA_VIEWPORT :Ek görünüm STR_MAP_MENU_LINGRAPH_LEGEND :Kargo Akış Göstergesi STR_MAP_MENU_SIGN_LIST :Tabela listesi @@ -879,7 +879,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} şehri yetkilileri {STRING} ile bir yıllığına şehrin tüm taşımacılık haklarını vermek üzere anlaştı! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Görünüm {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Görünüm {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Görüş alanını değiştir STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Ana görünümü bu pencereye kopyala STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Ana görünümü değiştir diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e104c2c69d..caab8a0169 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -527,7 +527,7 @@ STR_FILE_MENU_EXIT :Вихід # map menu STR_MAP_MENU_MAP_OF_WORLD :Карта світу -STR_MAP_MENU_EXTRA_VIEW_PORT :Додаткове вікно +STR_MAP_MENU_EXTRA_VIEWPORT :Додаткове вікно STR_MAP_MENU_LINGRAPH_LEGEND :Легенда вантажопотоку STR_MAP_MENU_SIGN_LIST :Список позначок @@ -1011,7 +1011,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Адміністрація м. {TOWN} підписала угоду з "{STRING}" щодо ексклюзивних транспортних прав строком на один рік! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Вікно {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Вікно {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Змінити вікно STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Копіювати місцеположення з основного екрану до цього вікна STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Вставити в головне вікно diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index c0f836cd6e..8f41c2ff22 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :Ofslute # map menu STR_MAP_MENU_MAP_OF_WORLD :Wrâldkaart -STR_MAP_MENU_EXTRA_VIEW_PORT :Ekstra finster +STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra finster STR_MAP_MENU_LINGRAPH_LEGEND :Frachtstreamleginda STR_MAP_MENU_SIGN_LIST :Buordsjeslist @@ -869,7 +869,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Gemeente fan {TOWN} tekent in kontrakt mei {STRING} foar in jier lang eksklusive ferfiersrjochen! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Loaitsfinster {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Loaitsfinster {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopiearje nei loaitsfinster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiearje de lokaasje fan it haadfinster nei dit loaitsfinster STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Plak fanút loaitsfinster diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 50decfc5dc..5f182a1007 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -372,7 +372,7 @@ STR_FILE_MENU_EXIT :Излез # map menu STR_MAP_MENU_MAP_OF_WORLD :Мапа на светот -STR_MAP_MENU_EXTRA_VIEW_PORT :екстра прозорец +STR_MAP_MENU_EXTRA_VIEWPORT :екстра прозорец STR_MAP_MENU_SIGN_LIST :Си листа ############ range for town menu starts diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index b27230b3b2..2865d4e461 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -384,7 +384,7 @@ STR_FILE_MENU_EXIT :خروج # map menu STR_MAP_MENU_MAP_OF_WORLD :نقشه ی دنیا -STR_MAP_MENU_EXTRA_VIEW_PORT :نمای اضافه +STR_MAP_MENU_EXTRA_VIEWPORT :نمای اضافه STR_MAP_MENU_LINGRAPH_LEGEND :میزان حمل بار STR_MAP_MENU_SIGN_LIST :لیست نشانه @@ -858,7 +858,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}مقامات محلی {TOWN} قرارداد حمل و نقل انحصاری را با {STRING} به مدت یکسال امضاء کردند! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}نمای اضافه {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}نمای اضافه {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK} به نمای اضافه منتقل کن STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}موقعیت نمای اصلی را به این نمای اضافه منتقل کن STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}موقعیت نمای اضافه را به نمای اصلی منتقل کن diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 618b643ebf..9d5e65753c 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -380,7 +380,7 @@ STR_FILE_MENU_EXIT :باہر نکل # map menu STR_MAP_MENU_MAP_OF_WORLD :دنیا کا نقشھ -STR_MAP_MENU_EXTRA_VIEW_PORT :اضافی منظر +STR_MAP_MENU_EXTRA_VIEWPORT :اضافی منظر STR_MAP_MENU_SIGN_LIST :اشاروں کی فھرست ############ range for town menu starts @@ -838,7 +838,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN} میں ٹریفک کا بُرا حال!{}{}سڑکیں دوبارہ بنوانے کے پیسے {STRING} نے دئیے۔ اس کی وجہ سے اگلے 6 ماہ مشکل رہے گی # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}دہکھنے والی کھڑکی {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}دہکھنے والی کھڑکی {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}دہکھنے والی کھڑکی کی نقل STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}بنیادی منظر میں نظر آنے والی جگہ کو دیکھنے والی کھڑکی میں نقل کریں STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}دہکھنے والی کھڑکی سے نقل کریں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 9e488ed866..1ce6b766f5 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Thoát # map menu STR_MAP_MENU_MAP_OF_WORLD :Bản đồ thế giới -STR_MAP_MENU_EXTRA_VIEW_PORT :Cửa sổ bổ sung +STR_MAP_MENU_EXTRA_VIEWPORT :Cửa sổ bổ sung STR_MAP_MENU_LINGRAPH_LEGEND :Ghi chú luồng hàng hóa STR_MAP_MENU_SIGN_LIST :Danh sách biển hiệu @@ -883,7 +883,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Chính quyền địa phương {TOWN} ký hợp đồng với {STRING} cho phép độc quyền vận tải trong vòng 1 năm! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Cửa sổ {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Cửa sổ {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Đổi khung nhìn STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nhìn vị trí này ở cửa sổ lớn chính STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Chuyển về cửa sổ chính diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index fcf9dbac47..cd5a116d35 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :Gadael # map menu STR_MAP_MENU_MAP_OF_WORLD :Map o'r Byd -STR_MAP_MENU_EXTRA_VIEW_PORT :Ffenestr Olygfa Newydd +STR_MAP_MENU_EXTRA_VIEWPORT :Ffenestr Olygfa Newydd STR_MAP_MENU_LINGRAPH_LEGEND :Allwedd Llif Cargo STR_MAP_MENU_SIGN_LIST :Rhestr Arwyddion @@ -870,7 +870,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Awdurdog lleol {TOWN} yn arwyddo cytundeb cyfyngol gyda {STRING} am flwyddyn o hawliau cludiant! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ffenestr Olygfa{COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Ffenestr Olygfa{COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copïo i Ffenestr Olygfa STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copïo lleoliad y golwg byd-eang i'r ffenestr olygfa STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Gludo o'r Ffenestr Olygfa diff --git a/src/main_gui.cpp b/src/main_gui.cpp index e7e3ff8e27..5343e2ed11 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -135,7 +135,7 @@ void ShowNetworkGiveMoneyWindow(CompanyID company) */ bool DoZoomInOutWindow(ZoomStateChange how, Window *w) { - ViewPort *vp; + Viewport *vp; assert(w != nullptr); vp = w->viewport; @@ -185,7 +185,7 @@ void ZoomInOrOutToCursorWindow(bool in, Window *w) assert(w != nullptr); if (_game_mode != GM_MENU) { - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; if ((in && vp->zoom <= _settings_client.gui.zoom_min) || (!in && vp->zoom >= _settings_client.gui.zoom_max)) return; Point pt = GetTileZoomCenterWindow(in, w); @@ -201,7 +201,7 @@ void FixTitleGameZoom() { if (_game_mode != GM_MENU) return; - ViewPort *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport; + Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport; vp->zoom = _gui_zoom; vp->virtual_width = ScaleByZoom(vp->width, vp->zoom); vp->virtual_height = ScaleByZoom(vp->height, vp->zoom); diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 0b4c41a2a9..da613c55e1 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -507,8 +507,8 @@ struct NewsWindow : Window { TileIndex tile1 = GetReferenceTile(this->ni->reftype1, this->ni->ref1); TileIndex tile2 = GetReferenceTile(this->ni->reftype2, this->ni->ref2); if (_ctrl_pressed) { - if (tile1 != INVALID_TILE) ShowExtraViewPortWindow(tile1); - if (tile2 != INVALID_TILE) ShowExtraViewPortWindow(tile2); + if (tile1 != INVALID_TILE) ShowExtraViewportWindow(tile1); + if (tile2 != INVALID_TILE) ShowExtraViewportWindow(tile2); } else { if ((tile1 == INVALID_TILE || !ScrollMainWindowToTile(tile1)) && tile2 != INVALID_TILE) { ScrollMainWindowToTile(tile2); diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index 7ef4e3018e..f17883eb44 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -50,7 +50,7 @@ void ResetViewportAfterLoadGame() w->viewport->dest_scrollpos_x = _saved_scrollpos_x; w->viewport->dest_scrollpos_y = _saved_scrollpos_y; - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; vp->zoom = (ZoomLevel)min(_saved_scrollpos_zoom, ZOOM_LVL_MAX); vp->virtual_width = ScaleByZoom(vp->width, vp->zoom); vp->virtual_height = ScaleByZoom(vp->height, vp->zoom); diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 8cf83ae5bc..b7abab8fc7 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -612,7 +612,7 @@ static void CurrentScreenCallback(void *userdata, void *buf, uint y, uint pitch, */ static void LargeWorldCallback(void *userdata, void *buf, uint y, uint pitch, uint n) { - ViewPort *vp = (ViewPort *)userdata; + Viewport *vp = (Viewport *)userdata; DrawPixelInfo dpi, *old_dpi; int wx, left; @@ -707,11 +707,11 @@ static bool MakeSmallScreenshot(bool crashlog) } /** - * Configure a ViewPort for rendering (a part of) the map into a screenshot. + * Configure a Viewport for rendering (a part of) the map into a screenshot. * @param t Screenshot type * @param[out] vp Result viewport */ -void SetupScreenshotViewport(ScreenshotType t, ViewPort *vp) +void SetupScreenshotViewport(ScreenshotType t, Viewport *vp) { switch(t) { case SC_VIEWPORT: @@ -782,7 +782,7 @@ void SetupScreenshotViewport(ScreenshotType t, ViewPort *vp) */ static bool MakeLargeWorldScreenshot(ScreenshotType t) { - ViewPort vp; + Viewport vp; SetupScreenshotViewport(t, &vp); const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; @@ -852,7 +852,7 @@ static void ScreenshotConfirmationCallback(Window *w, bool confirmed) */ void MakeScreenshotWithConfirm(ScreenshotType t) { - ViewPort vp; + Viewport vp; SetupScreenshotViewport(t, &vp); bool heightmap_or_minimap = t == SC_HEIGHTMAP || t == SC_MINIMAP; diff --git a/src/screenshot.h b/src/screenshot.h index b872593638..400f8164e5 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -25,7 +25,7 @@ enum ScreenshotType { SC_MINIMAP, ///< Minimap screenshot. }; -void SetupScreenshotViewport(ScreenshotType t, struct ViewPort *vp); +void SetupScreenshotViewport(ScreenshotType t, struct Viewport *vp); bool MakeHeightmapScreenshot(const char *filename); void MakeScreenshotWithConfirm(ScreenshotType t); bool MakeScreenshot(ScreenshotType t, const char *name); diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index c4b650fc22..61b8bfd6aa 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -931,7 +931,7 @@ void SmallMapWindow::DrawTowns(const DrawPixelInfo *dpi) const void SmallMapWindow::DrawMapIndicators() const { /* Find main viewport. */ - const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; + const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top); Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1); @@ -1646,7 +1646,7 @@ void SmallMapWindow::SetNewScroll(int sx, int sy, int sub) */ void SmallMapWindow::SmallMapCenterOnCurrentPos() { - const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; + const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2); int sub; diff --git a/src/sound.cpp b/src/sound.cpp index d96adfe29f..0d15473095 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -240,7 +240,7 @@ static void SndPlayScreenCoordFx(SoundID sound, int left, int right, int top, in const Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { - const ViewPort *vp = w->viewport; + const Viewport *vp = w->viewport; if (vp != nullptr && left < vp->virtual_left + vp->virtual_width && right > vp->virtual_left && diff --git a/src/station_gui.cpp b/src/station_gui.cpp index ef2873f228..66a4605ea8 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -537,7 +537,7 @@ public: assert(st->owner == (Owner)this->window_number || st->owner == OWNER_NONE); if (_ctrl_pressed) { - ShowExtraViewPortWindow(st->xy); + ShowExtraViewportWindow(st->xy); } else { ScrollMainWindowToTile(st->xy); } @@ -1919,7 +1919,7 @@ struct StationViewWindow : public Window { case WID_SV_LOCATION: if (_ctrl_pressed) { - ShowExtraViewPortWindow(Station::Get(this->window_number)->xy); + ShowExtraViewportWindow(Station::Get(this->window_number)->xy); } else { ScrollMainWindowToTile(Station::Get(this->window_number)->xy); } diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 2de96a1a52..21429994c4 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -550,7 +550,7 @@ protected: case SPET_LOCATION: if (_ctrl_pressed) { - ShowExtraViewPortWindow((TileIndex)pe.referenced_id); + ShowExtraViewportWindow((TileIndex)pe.referenced_id); } else { ScrollMainWindowToTile((TileIndex)pe.referenced_id); } diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index f9a17f7b72..fe3c55c111 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -83,7 +83,7 @@ struct SubsidyListWindow : Window { } if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) { - if (_ctrl_pressed) ShowExtraViewPortWindow(xy); + if (_ctrl_pressed) ShowExtraViewportWindow(xy); /* otherwise determine dst coordinate for subsidy and scroll to it */ switch (s->dst_type) { @@ -93,7 +93,7 @@ struct SubsidyListWindow : Window { } if (_ctrl_pressed) { - ShowExtraViewPortWindow(xy); + ShowExtraViewportWindow(xy); } else { ScrollMainWindowToTile(xy); } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index f471ac1158..632025ddb4 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -464,7 +464,7 @@ static CallBackFunction ToolbarMapClick(Window *w) { DropDownList list; list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false)); - list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEW_PORT, MME_SHOW_EXTRAVIEWPORTS, false)); + list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false)); list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false)); list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false)); PopupMainToolbMenu(w, WID_TN_SMALL_MAP, std::move(list), 0); @@ -475,7 +475,7 @@ static CallBackFunction ToolbarScenMapTownDir(Window *w) { DropDownList list; list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false)); - list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEW_PORT, MME_SHOW_EXTRAVIEWPORTS, false)); + list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEWPORT, MME_SHOW_EXTRAVIEWPORTS, false)); list.emplace_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false)); list.emplace_back(new DropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false)); list.emplace_back(new DropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false)); @@ -492,12 +492,12 @@ static CallBackFunction ToolbarScenMapTownDir(Window *w) static CallBackFunction MenuClickMap(int index) { switch (index) { - case MME_SHOW_SMALLMAP: ShowSmallMap(); break; - case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewPortWindow(); break; - case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break; - case MME_SHOW_SIGNLISTS: ShowSignList(); break; - case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break; - case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break; + case MME_SHOW_SMALLMAP: ShowSmallMap(); break; + case MME_SHOW_EXTRAVIEWPORTS: ShowExtraViewportWindow(); break; + case MME_SHOW_LINKGRAPH: ShowLinkGraphLegend(); break; + case MME_SHOW_SIGNLISTS: ShowSignList(); break; + case MME_SHOW_TOWNDIRECTORY: ShowTownDirectory(); break; + case MME_SHOW_INDUSTRYDIRECTORY: ShowIndustryDirectory(); break; } return CBF_NONE; } @@ -2092,7 +2092,7 @@ struct MainToolbarWindow : Window { case MTHK_GIANT_SCREENSHOT: MakeScreenshotWithConfirm(SC_WORLD); break; case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break; case MTHK_TERRAFORM: ShowTerraformToolbar(); break; - case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; + case MTHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break; case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break; case MTHK_SIGN_LIST: ShowSignList(); break; case MTHK_LANDINFO: cbf = PlaceLandBlockInfo(); break; @@ -2469,7 +2469,7 @@ struct ScenarioEditorToolbarWindow : Window { case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break; case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break; case MTEHK_SMALLMAP: ShowSmallMap(); break; - case MTEHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; + case MTEHK_EXTRA_VIEWPORT: ShowExtraViewportWindowForTileUnderCursor(); break; default: return ES_NOT_HANDLED; } if (cbf != CBF_NONE) _last_started_action = cbf; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 38314f3fb4..f199d8a978 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -445,7 +445,7 @@ public: switch (widget) { case WID_TV_CENTER_VIEW: // scroll to location if (_ctrl_pressed) { - ShowExtraViewPortWindow(this->town->xy); + ShowExtraViewportWindow(this->town->xy); } else { ScrollMainWindowToTile(this->town->xy); } @@ -913,7 +913,7 @@ public: const Town *t = this->towns[id_v]; assert(t != nullptr); if (_ctrl_pressed) { - ShowExtraViewPortWindow(t->xy); + ShowExtraViewportWindow(t->xy); } else { ScrollMainWindowToTile(t->xy); } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 30ac096b4a..a458b1c650 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1162,7 +1162,7 @@ void ViewportAddVehicles(DrawPixelInfo *dpi) * @param y Y coordinate in the viewport. * @return Closest vehicle, or \c nullptr if none found. */ -Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y) +Vehicle *CheckClickOnVehicle(const Viewport *vp, int x, int y) { Vehicle *found = nullptr; uint dist, best_dist = UINT_MAX; diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 50cbdc4bc8..f4c044393a 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -104,7 +104,7 @@ void ShowVehicleViewWindow(const Vehicle *v); bool VehicleClicked(const Vehicle *v); void StartStopVehicle(const Vehicle *v, bool texteffect); -Vehicle *CheckClickOnVehicle(const struct ViewPort *vp, int x, int y); +Vehicle *CheckClickOnVehicle(const struct Viewport *vp, int x, int y); void DrawVehicleImage(const Vehicle *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip); void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type); diff --git a/src/viewport.cpp b/src/viewport.cpp index 28345db607..e28a2e606e 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -177,7 +177,7 @@ struct ViewportDrawer { Point foundation_offset[FOUNDATION_PART_END]; ///< Pixel offset for ground sprites on the foundations. }; -static void MarkViewportDirty(const ViewPort *vp, int left, int top, int right, int bottom); +static void MarkViewportDirty(const Viewport *vp, int left, int top, int right, int bottom); static ViewportDrawer _vd; @@ -188,7 +188,7 @@ bool _draw_dirty_blocks = false; uint _dirty_block_colour = 0; static VpSpriteSorter _vp_sprite_sorter = nullptr; -static Point MapXYZToViewport(const ViewPort *vp, int x, int y, int z) +static Point MapXYZToViewport(const Viewport *vp, int x, int y, int z) { Point p = RemapCoords(x, y, z); p.x -= vp->virtual_width / 2; @@ -331,7 +331,7 @@ static void DoSetViewportPosition(const Window *w, int left, int top, int width, static void SetViewportPosition(Window *w, int x, int y) { - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; int old_left = vp->virtual_left; int old_top = vp->virtual_top; int i; @@ -390,9 +390,9 @@ static void SetViewportPosition(Window *w, int x, int y) * @return Pointer to the viewport if the xy position is in the viewport of the window, * otherwise \c nullptr is returned. */ -ViewPort *IsPtInWindowViewport(const Window *w, int x, int y) +Viewport *IsPtInWindowViewport(const Window *w, int x, int y) { - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; if (vp != nullptr && IsInsideMM(x, vp->left, vp->left + vp->width) && @@ -414,7 +414,7 @@ ViewPort *IsPtInWindowViewport(const Window *w, int x, int y) * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map * @return Tile coordinate or (-1, -1) if given x or y is not within viewport frame */ -Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y, bool clamp_to_map) +Point TranslateXYToTileCoord(const Viewport *vp, int x, int y, bool clamp_to_map) { if (!IsInsideBS(x, vp->left, vp->width) || !IsInsideBS(y, vp->top, vp->height)) { Point pt = { -1, -1 }; @@ -432,7 +432,7 @@ Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y, bool clamp_to_map static Point GetTileFromScreenXY(int x, int y, int zoom_x, int zoom_y) { Window *w; - ViewPort *vp; + Viewport *vp; Point pt; if ( (w = FindWindowFromPt(x, y)) != nullptr && @@ -452,7 +452,7 @@ Point GetTileBelowCursor() Point GetTileZoomCenterWindow(bool in, Window * w) { int x, y; - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; if (in) { x = ((_cursor.pos.x - vp->left) >> 1) + (vp->width >> 2); @@ -473,7 +473,7 @@ Point GetTileZoomCenterWindow(bool in, Window * w) * @param widget_zoom_in widget index for window with zoom-in button * @param widget_zoom_out widget index for window with zoom-out button */ -void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out) +void HandleZoomMessage(Window *w, const Viewport *vp, byte widget_zoom_in, byte widget_zoom_out) { w->SetWidgetDisabledState(widget_zoom_in, vp->zoom <= _settings_client.gui.zoom_min); w->SetWidgetDirty(widget_zoom_in); @@ -1480,7 +1480,7 @@ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; if (vp != nullptr && vp->zoom <= maxzoom) { assert(vp->width != 0); Rect &zl = zoomlevels[vp->zoom]; @@ -1651,7 +1651,7 @@ static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector * } } -void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom) +void ViewportDoDraw(const Viewport *vp, int left, int top, int right, int bottom) { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &_vd.dpi; @@ -1726,7 +1726,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom * Make sure we don't draw a too big area at a time. * If we do, the sprite memory will overflow. */ -static void ViewportDrawChk(const ViewPort *vp, int left, int top, int right, int bottom) +static void ViewportDrawChk(const Viewport *vp, int left, int top, int right, int bottom) { if ((int64)ScaleByZoom(bottom - top, vp->zoom) * (int64)ScaleByZoom(right - left, vp->zoom) > (int64)(180000 * ZOOM_LVL_BASE * ZOOM_LVL_BASE)) { if ((bottom - top) > (right - left)) { @@ -1748,7 +1748,7 @@ static void ViewportDrawChk(const ViewPort *vp, int left, int top, int right, in } } -static inline void ViewportDraw(const ViewPort *vp, int left, int top, int right, int bottom) +static inline void ViewportDraw(const Viewport *vp, int left, int top, int right, int bottom) { if (right <= vp->left || bottom <= vp->top) return; @@ -1793,7 +1793,7 @@ void Window::DrawViewport() const * @param[in,out] scroll_x Viewport X scroll. * @param[in,out] scroll_y Viewport Y scroll. */ -static inline void ClampViewportToMap(const ViewPort *vp, int *scroll_x, int *scroll_y) +static inline void ClampViewportToMap(const Viewport *vp, int *scroll_x, int *scroll_y) { /* Centre of the viewport is hot spot. */ Point pt = { @@ -1819,7 +1819,7 @@ static inline void ClampViewportToMap(const ViewPort *vp, int *scroll_x, int *sc */ void UpdateViewportPosition(Window *w) { - const ViewPort *vp = w->viewport; + const Viewport *vp = w->viewport; if (w->viewport->follow_vehicle != INVALID_VEHICLE) { const Vehicle *veh = Vehicle::Get(w->viewport->follow_vehicle); @@ -1866,7 +1866,7 @@ void UpdateViewportPosition(Window *w) * @param bottom Bottom edge of area to repaint * @ingroup dirty */ -static void MarkViewportDirty(const ViewPort *vp, int left, int top, int right, int bottom) +static void MarkViewportDirty(const Viewport *vp, int left, int top, int right, int bottom) { /* Rounding wrt. zoom-out level */ right += (1 << vp->zoom) - 1; @@ -1906,7 +1906,7 @@ void MarkAllViewportsDirty(int left, int top, int right, int bottom) { Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; if (vp != nullptr) { assert(vp->width != 0); MarkViewportDirty(vp, left, top, right, bottom); @@ -2077,7 +2077,7 @@ void SetSelectionRed(bool b) * @param sign the sign to check * @return true if the sign was hit */ -static bool CheckClickOnViewportSign(const ViewPort *vp, int x, int y, const ViewportSign *sign) +static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y, const ViewportSign *sign) { bool small = (vp->zoom >= ZOOM_LVL_OUT_16X); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp->zoom); @@ -2095,7 +2095,7 @@ static bool CheckClickOnViewportSign(const ViewPort *vp, int x, int y, const Vie * @param y Y position of click * @return true if the sign was hit */ -static bool CheckClickOnViewportSign(const ViewPort *vp, int x, int y) +static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y) { if (_game_mode == GM_MENU) return false; @@ -2267,7 +2267,7 @@ void RebuildViewportKdtree() } -static bool CheckClickOnLandscape(const ViewPort *vp, int x, int y) +static bool CheckClickOnLandscape(const Viewport *vp, int x, int y) { Point pt = TranslateXYToTileCoord(vp, x, y); @@ -2296,7 +2296,7 @@ static void PlaceObject() } -bool HandleViewportClicked(const ViewPort *vp, int x, int y) +bool HandleViewportClicked(const Viewport *vp, int x, int y) { const Vehicle *v = CheckClickOnVehicle(vp, x, y); @@ -3355,7 +3355,7 @@ void ResetObjectToPlace() SetObjectToPlace(SPR_CURSOR_MOUSE, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); } -Point GetViewportStationMiddle(const ViewPort *vp, const Station *st) +Point GetViewportStationMiddle(const Viewport *vp, const Station *st) { int x = TileX(st->xy) * TILE_SIZE; int y = TileY(st->xy) * TILE_SIZE; diff --git a/src/viewport_func.h b/src/viewport_func.h index c47185323d..466a24a3b3 100644 --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -22,8 +22,8 @@ void SetSelectionRed(bool); void DeleteWindowViewport(Window *w); void InitializeWindowViewport(Window *w, int x, int y, int width, int height, uint32 follow_flags, ZoomLevel zoom); -ViewPort *IsPtInWindowViewport(const Window *w, int x, int y); -Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y, bool clamp_to_map = true); +Viewport *IsPtInWindowViewport(const Window *w, int x, int y); +Point TranslateXYToTileCoord(const Viewport *vp, int x, int y, bool clamp_to_map = true); Point GetTileBelowCursor(); void UpdateViewportPosition(Window *w); @@ -33,7 +33,7 @@ bool DoZoomInOutWindow(ZoomStateChange how, Window *w); void ZoomInOrOutToCursorWindow(bool in, Window * w); Point GetTileZoomCenterWindow(bool in, Window * w); void FixTitleGameZoom(); -void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out); +void HandleZoomMessage(Window *w, const Viewport *vp, byte widget_zoom_in, byte widget_zoom_out); /** * Zoom a viewport as far as possible in the given direction. @@ -58,12 +58,12 @@ void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const Vie void StartSpriteCombine(); void EndSpriteCombine(); -bool HandleViewportClicked(const ViewPort *vp, int x, int y); +bool HandleViewportClicked(const Viewport *vp, int x, int y); void SetRedErrorSquare(TileIndex tile); void SetTileSelectSize(int w, int h); void SetTileSelectBigSize(int ox, int oy, int sx, int sy); -void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom); +void ViewportDoDraw(const Viewport *vp, int left, int top, int right, int bottom); bool ScrollWindowToTile(TileIndex tile, Window *w, bool instant = false); bool ScrollWindowTo(int x, int y, int z, Window *w, bool instant = false); @@ -91,7 +91,7 @@ static inline void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = MarkTileDirtyByTile(tile, bridge_level_offset, TileHeight(tile)); } -Point GetViewportStationMiddle(const ViewPort *vp, const Station *st); +Point GetViewportStationMiddle(const Viewport *vp, const Station *st); struct Station; struct Town; diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index bce6e68c12..5047f04f3f 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -22,11 +22,11 @@ #include "safeguards.h" -/* Extra ViewPort Window Stuff */ -static const NWidgetPart _nested_extra_view_port_widgets[] = { +/* Extra Viewport Window Stuff */ +static const NWidgetPart _nested_extra_viewport_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_EV_CAPTION), SetDataTip(STR_EXTRA_VIEW_PORT_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_EV_CAPTION), SetDataTip(STR_EXTRA_VIEWPORT_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -154,25 +154,25 @@ public: } }; -static WindowDesc _extra_view_port_desc( +static WindowDesc _extra_viewport_desc( WDP_AUTO, "extra_viewport", 300, 268, - WC_EXTRA_VIEW_PORT, WC_NONE, + WC_EXTRA_VIEWPORT, WC_NONE, 0, - _nested_extra_view_port_widgets, lengthof(_nested_extra_view_port_widgets) + _nested_extra_viewport_widgets, lengthof(_nested_extra_viewport_widgets) ); /** * Show a new Extra Viewport window. * @param tile Tile to center the view on. INVALID_TILE means to use the center of main viewport. */ -void ShowExtraViewPortWindow(TileIndex tile) +void ShowExtraViewportWindow(TileIndex tile) { int i = 0; /* find next free window number for extra viewport */ - while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != nullptr) i++; + while (FindWindowById(WC_EXTRA_VIEWPORT, i) != nullptr) i++; - new ExtraViewportWindow(&_extra_view_port_desc, i, tile); + new ExtraViewportWindow(&_extra_viewport_desc, i, tile); } /** @@ -180,10 +180,10 @@ void ShowExtraViewPortWindow(TileIndex tile) * Center it on the tile under the cursor, if the cursor is inside a viewport. * If that fails, center it on main viewport center. */ -void ShowExtraViewPortWindowForTileUnderCursor() +void ShowExtraViewportWindowForTileUnderCursor() { /* Use tile under mouse as center for new viewport. * Do this before creating the window, it might appear just below the mouse. */ Point pt = GetTileBelowCursor(); - ShowExtraViewPortWindow(pt.x != -1 ? TileVirtXY(pt.x, pt.y) : INVALID_TILE); + ShowExtraViewportWindow(pt.x != -1 ? TileVirtXY(pt.x, pt.y) : INVALID_TILE); } diff --git a/src/viewport_type.h b/src/viewport_type.h index f6a9ce4ae4..6665af19e7 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -19,7 +19,7 @@ class LinkGraphOverlay; /** * Data structure for viewport, display of a part of the world */ -struct ViewPort { +struct Viewport { int left; ///< Screen coordinate left edge of the viewport int top; ///< Screen coordinate top edge of the viewport int width; ///< Screen width of the viewport diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index 64ef0eb251..34f7785f14 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -89,7 +89,7 @@ public: switch (widget) { case WID_W_CENTER_VIEW: // scroll to location if (_ctrl_pressed) { - ShowExtraViewPortWindow(this->GetCenterTile()); + ShowExtraViewportWindow(this->GetCenterTile()); } else { ScrollMainWindowToTile(this->GetCenterTile()); } diff --git a/src/widget.cpp b/src/widget.cpp index 579b7efb64..c0844abd0b 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -1933,7 +1933,7 @@ void NWidgetViewport::InitializeViewport(Window *w, uint32 follow_flags, ZoomLev */ void NWidgetViewport::UpdateViewportCoordinates(Window *w) { - ViewPort *vp = w->viewport; + Viewport *vp = w->viewport; if (vp != nullptr) { vp->left = w->left + this->pos_x; vp->top = w->top + this->pos_y; diff --git a/src/window.cpp b/src/window.cpp index 9fea6d1026..3281e9f56e 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2789,7 +2789,7 @@ static void HandleAutoscroll() if (w == nullptr || w->flags & WF_DISABLE_VP_SCROLL) return; if (_settings_client.gui.auto_scrolling != VA_EVERY_VIEWPORT && w->window_class != WC_MAIN_WINDOW) return; - ViewPort *vp = IsPtInWindowViewport(w, x, y); + Viewport *vp = IsPtInWindowViewport(w, x, y); if (vp == nullptr) return; x -= vp->left; @@ -2899,7 +2899,7 @@ static void MouseLoop(MouseClick click, int mousewheel) if (w == nullptr) return; if (click != MC_HOVER && !MaybeBringWindowToFront(w)) return; - ViewPort *vp = IsPtInWindowViewport(w, x, y); + Viewport *vp = IsPtInWindowViewport(w, x, y); /* Don't allow any action in a viewport if either in menu or when having a modal progress window */ if (vp != nullptr && (_game_mode == GM_MENU || HasModalProgress())) return; diff --git a/src/window_gui.h b/src/window_gui.h index 228a150d2c..b389db5a6e 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -253,7 +253,7 @@ static const int WHITE_BORDER_DURATION = 3; ///< The initial timeout value for W * The actual location being shown is #scrollpos_x, #scrollpos_y. * @see InitializeViewport(), UpdateViewportPosition(), UpdateViewportCoordinates(). */ -struct ViewportData : ViewPort { +struct ViewportData : Viewport { VehicleID follow_vehicle; ///< VehicleID to follow if following a vehicle, #INVALID_VEHICLE otherwise. int32 scrollpos_x; ///< Currently shown x coordinate (virtual screen coordinate of topleft corner of the viewport). int32 scrollpos_y; ///< Currently shown y coordinate (virtual screen coordinate of topleft corner of the viewport). diff --git a/src/window_type.h b/src/window_type.h index f99b5cb6d7..86dcc6fb33 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -621,7 +621,7 @@ enum WindowClass { * Extra viewport; %Window numbers: * - Ascending value = #ExtraViewportWidgets */ - WC_EXTRA_VIEW_PORT, + WC_EXTRA_VIEWPORT, /** From 452e1e332848cd0aa297a1d1eee0f23167313554 Mon Sep 17 00:00:00 2001 From: dP Date: Thu, 2 Jul 2020 15:24:59 +0300 Subject: [PATCH 239/601] Codechange #8258: Remove unused town cargo caches from the savegame --- src/saveload/saveload.h | 1 + src/saveload/town_sl.cpp | 29 ++++++++++------------------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 26462cdaa4..abd58ea04e 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -302,6 +302,7 @@ enum SaveLoadVersion : uint16 { 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 v1.10 Configurable ending year. + SLV_REMOVE_TOWN_CARGO_CACHE, ///< 219 PR#8258 Remove town cargo acceptance and production caches. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 78765dbdaf..4e9e0afebb 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -20,7 +20,6 @@ #include "../safeguards.h" -/* TODO: Remove acceptance matrix from the savegame completely. */ typedef TileMatrix AcceptanceMatrix; /** @@ -193,10 +192,8 @@ static const SaveLoad _town_desc[] = { SLE_CONDLST(Town, psa_list, REF_STORAGE, SLV_161, SL_MAX_VERSION), SLE_CONDNULL(4, SLV_166, SLV_EXTEND_CARGOTYPES), ///< cargo_produced, no longer in use - SLE_CONDNULL(8, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), ///< cargo_produced, no longer in use - - /* reserve extra space in savegame here. (currently 30 bytes) */ - SLE_CONDNULL(30, SLV_2, SL_MAX_VERSION), + SLE_CONDNULL(8, SLV_EXTEND_CARGOTYPES, SLV_REMOVE_TOWN_CARGO_CACHE), ///< cargo_produced, no longer in use + SLE_CONDNULL(30, SLV_2, SLV_REMOVE_TOWN_CARGO_CACHE), ///< old reserved space SLE_END() }; @@ -252,12 +249,6 @@ static void RealSave_Town(Town *t) for (int i = TE_BEGIN; i < NUM_TE; i++) { SlObject(&t->received[i], _town_received_desc); } - - if (IsSavegameVersionBefore(SLV_166)) return; - - /* Write an empty matrix to avoid bumping savegame version. */ - AcceptanceMatrix dummy; - SlObject(&dummy, GetTileMatrixDesc()); } static void Save_TOWN() @@ -288,14 +279,14 @@ static void Load_TOWN() SlErrorCorrupt("Invalid town name generator"); } - if (IsSavegameVersionBefore(SLV_166)) continue; - - /* Discard acceptance matrix to avoid bumping savegame version. */ - AcceptanceMatrix dummy; - SlObject(&dummy, GetTileMatrixDesc()); - if (dummy.area.w != 0) { - uint arr_len = dummy.area.w / AcceptanceMatrix::GRID * dummy.area.h / AcceptanceMatrix::GRID; - for (arr_len *= 4; arr_len != 0; arr_len--) SlReadByte(); + if (!IsSavegameVersionBefore(SLV_166) && IsSavegameVersionBefore(SLV_REMOVE_TOWN_CARGO_CACHE)) { + /* Discard now unused acceptance matrix. */ + AcceptanceMatrix dummy; + SlObject(&dummy, GetTileMatrixDesc()); + if (dummy.area.w != 0) { + uint arr_len = dummy.area.w / AcceptanceMatrix::GRID * dummy.area.h / AcceptanceMatrix::GRID; + SlSkipBytes(4 * arr_len); + } } } } From 3effad0beabe4a7ce4ddf5b55bab787e2d93fea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Hryniuk?= Date: Mon, 27 Jul 2020 18:37:47 +0200 Subject: [PATCH 240/601] Fix: Properly invalidate mouse-over station coverage highlight (#8263) --- src/airport_gui.cpp | 1 + src/dock_gui.cpp | 1 + src/rail_gui.cpp | 1 + src/road_gui.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 0e44357bfb..464be03db1 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -485,6 +485,7 @@ public: this->SetDirty(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); this->UpdateSelectSize(); + SetViewportCatchmentStation(nullptr, true); break; case WID_AP_LAYOUT_DECREASE: diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index a5193a437a..07c072d35a 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -448,6 +448,7 @@ public: this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); this->SetDirty(); + SetViewportCatchmentStation(nullptr, true); break; } } diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index c0a3f44574..788189dccf 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1319,6 +1319,7 @@ public: this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_ON, _settings_client.gui.station_show_coverage); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); this->SetDirty(); + SetViewportCatchmentStation(nullptr, true); break; case WID_BRAS_NEWST_LIST: { diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 4c6e9df869..1e1f3e807f 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1147,6 +1147,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { this->LowerWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); this->SetDirty(); + SetViewportCatchmentStation(nullptr, true); break; default: From 84efde8ee3ad0ce3bf816df98bb486dfc7e94989 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 28 Jul 2020 18:22:11 +0200 Subject: [PATCH 241/601] Change: Log when rejecting a TAR archive for extraction Based on report in --- src/fileio.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 7340fa1722..d40ca2136c 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -929,7 +929,10 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir) const char *dirname = (*it).second.dirname; /* The file doesn't have a sub directory! */ - if (dirname == nullptr) return false; + if (dirname == nullptr) { + DEBUG(misc, 1, "Extracting %s failed; archive rejected, the contents must be in a sub directory", tar_filename); + return false; + } char filename[MAX_PATH]; strecpy(filename, tar_filename, lastof(filename)); From 2693a901f9882589d95330a4546e781c2e71becb Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 4 Aug 2020 19:45:41 +0200 Subject: [PATCH 242/601] Update: Translations from eints swedish: 1 change by Joel_A --- src/lang/swedish.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 909ce0e4ab..23f557ec07 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2318,7 +2318,7 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Växla g STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Gör object osynliga istället för genomskinliga # Linkgraph legend window -STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legend för Godsflöden +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legend för godsflöden STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alla STR_LINKGRAPH_LEGEND_NONE :{BLACK}Inga STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Välj företag att visa From 3db7cf54fdd85b51981887f948a867bc214ec895 Mon Sep 17 00:00:00 2001 From: dP Date: Sun, 2 Aug 2020 17:26:53 +0300 Subject: [PATCH 243/601] Fix: sprite preview in sprite aligner is too small with scaled UI --- src/newgrf_debug_gui.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 19757646d7..511436b27e 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -856,13 +856,17 @@ struct SpriteAlignerWindow : Window { void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { - if (widget != WID_SA_LIST) return; - - resize->height = max(11, FONT_HEIGHT_NORMAL + 1); - resize->width = 1; - - /* Resize to about 200 pixels (for the preview) */ - size->height = (1 + 200 / resize->height) * resize->height; + switch (widget) { + case WID_SA_SPRITE: + size->height = ScaleGUITrad(200); + break; + case WID_SA_LIST: + resize->height = max(11, FONT_HEIGHT_NORMAL + 1); + resize->width = 1; + break; + default: + break; + } } void DrawWidget(const Rect &r, int widget) const override From 9340fe9c7ceca3349df171770480683097f0e436 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 21 Aug 2020 19:45:38 +0200 Subject: [PATCH 244/601] Update: Translations from eints ukrainian: 18 changes by Strategy --- src/lang/ukrainian.txt | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index caab8a0169..25e090d718 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -992,6 +992,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Відкрити вікно групи з центром на групах транспорту STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} більше не приймає {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} більше не приймає {STRING} або {STRING} @@ -1062,6 +1063,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Мексика STR_GAME_OPTIONS_CURRENCY_NTD :Новий тайваньський долар (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Китайські ренміні (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Гонконгський долар (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Індійська рупія (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Сторона руху транспорту @@ -1673,6 +1675,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} @@ -2289,6 +2295,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Паро STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сервер переповнений STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Вас відключено від цього серверу STR_NETWORK_ERROR_KICKED :{WHITE}Вас відключено від гри +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Причина: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}На цьому сервері грати нечесно не можна STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Ви посилали забагато команд серверу STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Ви занадто довго вводили пароль @@ -2348,6 +2355,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} д STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Ви дали {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Сервер закрив сеанс STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Перезавантаження сервера...{}Зачекайте... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} відключено. Причина: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Завантаження вмісту @@ -2555,7 +2563,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Буду STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Будувати трамвайну колію. Ctrl переключає побудову/знесення для будівництва трамвайної колії. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Будувати дорогу в режимі Автобудування. Ctrl переключає побудову/знесення для будівництва доріг. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Будувати трамвайну лінію в режимі Автобудування. Ctrl переключає побудову/знесення для будівництва трамвайної колії. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати автомобільне депо (для бідівництва та обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати автомобільне депо (для будівництва і обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Будувати трамвайне депо (для будівництва та обслуговування трамваїв). Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будувати автобусну зупинку. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Будувати пасажирську трамвайну станцію. Ctrl дозволяє об'єднувати станції. Утримуйте Shift для показу витрат на будівництво @@ -2625,7 +2633,7 @@ STR_AIRPORT_METRO :Столичн STR_AIRPORT_INTERNATIONAL :Міжнародний STR_AIRPORT_COMMUTER :Приміський STR_AIRPORT_INTERCONTINENTAL :Міжконтинентальний -STR_AIRPORT_HELIPORT :Гелікопорт +STR_AIRPORT_HELIPORT :Геліпорт STR_AIRPORT_HELIDEPOT :Депо STR_AIRPORT_HELISTATION :Гелікоптерна станція @@ -3525,6 +3533,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} і {NUM} ще... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Назви підприємств - клацніть мишою на назву, щоб показати підприємство у центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на підприємство +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Приймається вантаж: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Виробництво: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Усі вантажі +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Нема # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4300,6 +4312,10 @@ STR_AI_LIST_CANCEL :{BLACK}Відм STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не міняти скрипт STR_SCREENSHOT_CAPTION :{WHITE}Зробити знімок екрану +STR_SCREENSHOT_SCREENSHOT :{BLACK}Звичайний зняток +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Зняток усієї мапи +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Зняток мапи висот +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Зняток мінімапи # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри From dacec76c1b4fe8708c4c7c7521d759eb5e599536 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 30 Aug 2020 19:45:38 +0200 Subject: [PATCH 245/601] Update: Translations from eints catalan: 57 changes by juanjo --- src/lang/catalan.txt | 60 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index f4012ca12e..d068164d7d 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -236,6 +236,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filtra p STR_BUTTON_SORT_BY :{BLACK}Ordena per: STR_BUTTON_LOCATION :{G=Masculin}{BLACK}Lloc STR_BUTTON_RENAME :{BLACK}Canvia el nom +STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Mostra/Amaga l'àrea de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Tanca la finestra @@ -339,6 +340,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Apropar- STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Allunyar-se STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construeix vies STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construeix carreteres +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construeix vies de tramvia STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construeix ports STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construeix aeroports STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Obre la barra d'eines del terreny per elevar/rebaixar el terreny, plantar arbres, etc. @@ -359,6 +361,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generaci STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generació de poblacions STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generació d'indústries STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcció de carreteres +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcció de vies de tramvia STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planta arbres. Shift per sols mostrar el cost estimat. STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situa un senyal STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Situa objecte. Shift per sols mostrar el cost estimat. @@ -862,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}No{G u va} {STRING} disponible! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Obre la finestra del grup amb el focus en el vehicle. 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} @@ -929,7 +933,10 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgià ( STR_GAME_OPTIONS_CURRENCY_IRR :Rial iranià (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rus modern (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicà (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Nou dòlar taiwanès (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi xinès (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dòlar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rúpia índia (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera @@ -1182,6 +1189,7 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permet modelar STR_CONFIG_SETTING_CATCHMENT :Estableix una mida més real de l'àrea d'influència: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Permet tenir diferents mides de zones de captació de càrrega per diferents tipus d'estacions (aeroports, estacions de tren, etc.). STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Les estacions de la companyia poden donar servei a industries amb estacions neutrals: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quan s'activa, les indústries amb estacions pròpies, com ara les plataformes petrolíferes, es poden servir amb estacions properes de les companyies. Quan es desactiva, aquestes indústries només es poden servir amb les estacions de la indústria: qualsevol estació propera que no sigui la de l'estació no la podrà servir, ni l'estació de la indústria podrà servir res que no provingui d'aquesta indústria. STR_CONFIG_SETTING_EXTRADYNAMITE :Permet l'esborrat de carreteres, ponts i túnels propietat de les poblacions: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Aquesta opció permet fer més fàcil l'esborrat d'infraestructures i construccions propietat de la població STR_CONFIG_SETTING_TRAIN_LENGTH :Longitud màxima dels trens: {STRING} @@ -1316,8 +1324,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Tipus de terren STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Només TerraGenesis) Escollir el tipus de terreny: des de molt pla fins a escarpat STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitat d'indústries: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Fixa el nombre d'indústries que s'haurien de generar i mantenir durant la partida -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distància màxima des de la vora a les refineries de petroli: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Les refineries de petroli només es construeixen a prop de les vores del mapa, això és a la costa en els mapes d'illes +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distància màxima des de la vora a les indústries de petroli: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita a quina distància del mapa es poden construir refineries de petroli i plataformes petrolíferes. En mapes amb illes, serveix per assegurar que estan prop de la costa. En mapes de més de 256 caselles, aquest valor s'escala automàticament. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Alçada dels estatges amb neu: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a quina alçada la neu comença en el paisatge subàrtic. La neu també afecta la generació d'indústries i els requisits per al creixement de les poblacions STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Geografia del terreny: {STRING} @@ -1482,6 +1490,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permet a les IA STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes abans de suspendre els scripts: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Màxim nombre de passos de càlcul que un script pot fer en un torn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Ús de memòria màxim per script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantitat de memòria que pot usar un sol script abans que es forci la seva parada. Per a mapes grans, pot ser necessari incrementar aquest valor. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA}{NBSP}MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Els intervals de revisions es mostren en percentatges: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Escull si les revisions dels vehicles depenen del temps passat des de la darrera revisió o de la caiguda d'un cert percentatge de la fiabilitat màxima @@ -1540,12 +1550,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Complet STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Les notícies en color apareixen el: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Any en què els diaris comencen a fer anuncis en color. Abans d'aquest any, imprimiran en blanc i negre. STR_CONFIG_SETTING_STARTING_YEAR :Any d'inici: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Any de puntuació final: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Estableix l'any en què finalitza la partida i es puntua les companyies. Al final d'aquest any, la puntuació de la companyia es guarda i es mostra a la llista de classificació, però els jugadors poden continuar jugant.{}Si l'any de finalització és anterior a l'any d'inici, no es guardaran les puntuacions ni es mostrarà la llista de classificació. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activa economia suau (més canvis però més petits): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quan està activat, els canvis de producció de la indústria són més habituals, i en passos més petits. Aquest paràmetre usualment no té efecte, si el tipus d'indústria estan proveïts per un NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permet comprar participacions d'altres companyies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Permet comprar i vendre accions de les companyies. Les accions només estan disponibles per companyies d'una certa edat. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edat mínima de la companyia per negociar participacions: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Estableix l'edat mínima d'una companyia per tal que els altres competidors puguin comprar-ne o vendre accions. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentatge del benefici total a pagar en transferències: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentatge del benefici donat a branques intermediàries dins els sistemes, donant més control sobre els beneficis STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :En arrossegar, col·locar senyals cada: {STRING} @@ -2140,7 +2154,7 @@ STR_NETWORK_CHAT_ALL :[Tothom] {STRIN STR_NETWORK_CHAT_OSKTITLE :{BLACK}Posa el text pel xat de xarxa # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No s'han trobat dispositius de xarxa o s'ha compilat sense l'opció ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No s'han trobat dispositius de xarxa. STR_NETWORK_ERROR_NOSERVER :{WHITE}No s'ha pogut trobar cap partida en xarxa STR_NETWORK_ERROR_NOCONNECTION :{WHITE}El servidor no ha contestat a la petició STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}No s'ha pogut connectar degut a una diferència de NewGRF @@ -2156,6 +2170,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrase STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor està ple STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Estàs exclòs d'aquest servidor STR_NETWORK_ERROR_KICKED :{WHITE}T'han fet fora de la partida +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Motiu: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}No es permet fer trampes en aquest servidor STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Estaves enviant massa ordres al servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Has tardat massa a introduir la contrasenya @@ -2215,6 +2230,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Has donat {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha tancat la sessió STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment... +STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING} # Content downloading window STR_CONTENT_TITLE :{WHITE}Descàrregues de contingut @@ -2436,6 +2452,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converte STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converteix/Millora el tipus de tramvia. Shift commuta construeix/mostra el cost estimat. STR_ROAD_NAME_ROAD :Carretera +STR_ROAD_NAME_TRAM :Tramvia # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientació de la cotxera @@ -2620,8 +2637,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Càrrega acceptada: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipus de via: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipus de carretera: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipus de tramvia: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límit de velocitat de la via: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Límit de velocitat de la carretera: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Límit de velocitat dels tramvies: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Roques @@ -2731,6 +2751,7 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor d STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quant ràpid va la partida actual, comparant-ho amb l'estimació de la velocitat normal. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Mitjana +STR_FRAMERATE_MEMORYUSE :{WHITE}Memòria STR_FRAMERATE_DATA_POINTS :{BLACK}Dades basades en {COMMA} mesures. STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{NBSP}ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{NBSP}ms @@ -2738,7 +2759,9 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{NBSP}fps STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{NBSP}fps STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{NBSP}fps +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}{NBSP}ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}{NBSP}s ############ Leave those lines in this order!! @@ -3038,6 +3061,7 @@ STR_NEWGRF_BUGGY :{WHITE}El NewGR STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}La informació de càrrega/remodelació per '{1:ENGINE}' no encaixa amb la llista de compres després de la construcció. Això podria causar un mal funcionament de autorenova/-substitueix STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ha provocat un bucle infinit en la crida de producció STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}'Callback' {1:HEX} ha retornat un resultat desconegut/invàlid {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}«{1:STRING}» ha retornat un tipus de càrrega no vàlid a {2:HEX}. # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3105,6 +3129,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Canvia el nom d # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} autoritat local STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostra la zona que pertany a l'autoritat local. STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ratis de la companyia de transports: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Accions disponibles: @@ -3375,8 +3400,15 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústr STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Cap - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} (transportat: {COMMA}{NBSP}%){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} i {STRING}. +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} més... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nom de les indústries - clica al nom per centrar la vista en la indústria. Ctrl+Clic obre una nova vista al lloc de la indústria +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Càrrega acceptada: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Càrrega produïda: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Tots els tipus de càrrega +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Cap # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3442,6 +3474,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicles desagr STR_GROUP_DEFAULT_SHIPS :Vaixells desagrupats STR_GROUP_DEFAULT_AIRCRAFTS :Avions desagrupats +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups - Clica en un grup per llistar tots els vehicles d'aquest grup. Arrossega i solta per a canviar-ne la jerarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup @@ -3470,6 +3503,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Compra de nous STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Compra de nous vehicles Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Compra de nous vehicles de carretera +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nous vehicles de tramvia ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Compra de nous vehicles sobre vies @@ -3479,6 +3513,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Compra de noves ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Pes: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost de la remodelació: {GOLD}{CURRENCY_LONG}{BLACK}) Pes: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocitat: {GOLD}{VELOCITY}{BLACK} Potència: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocitat: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocitat al mar: {GOLD}{VELOCITY} @@ -3492,6 +3527,7 @@ STR_PURCHASE_INFO_COST :{BLACK}Cost: {G STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost del remodelat: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Pes: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Velocitat: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost de la remodelació: {GOLD}{CURRENCY_LONG}{BLACK}) Velocitat: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacitat: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagons Automotrius: {GOLD}+{POWER}{BLACK} Pes: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Remodelable a: {GOLD}{STRING} @@ -3513,12 +3549,19 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Compra e STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Compra l'aeronau STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela vehicles +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela el vehicle +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela el vaixell +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela aeronaus STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el tren/vagó seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehicle marcat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vaixell seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'aeronau marcada. Amb Maj+Clic, mostra el cost estimat sense comprar-la. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela el vehicle de tren seleccionat. Amb Maj + Clic es mostra el cost estimat sense comprar-lo. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela el vehicle de carretera seleccionat. Amb Maj + Clic es mostra el cost estimat sense comprar-lo. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela el vaixell seleccionat. Amb Maj + Clic es mostra el cost estimat sense comprar-lo. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela l'aeronau seleccionada. Amb Maj + Clic es mostra el cost estimat sense comprar-la. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Canvia el nom STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Canvia el nom @@ -3630,6 +3673,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Missatge STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Acabem de dissenyar {G un una} {G nou nova} {STRING}. Esteu interessats en fer ús exclusiu d'aquest vehicle durant un any, per veure com va, abans del seu llançament mundial? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=Femenin}locomotora de tren +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotora de ferrocarril electrificat STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=Femenin}locomotora de monorail STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=Femenin}locomotora de maglev @@ -3676,8 +3720,10 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Canvia e STR_REPLACE_ENGINES :Motors STR_REPLACE_WAGONS :Vagons STR_REPLACE_ALL_RAILTYPE :Tots els vehicles ferroviaris +STR_REPLACE_ALL_ROADTYPE :Tots els vehicles de carretera STR_REPLACE_HELP_RAILTYPE :{BLACK}Tria el tipus de via dels models de vehicle que vols substituir +STR_REPLACE_HELP_ROADTYPE :{BLACK}Escolliu el tipus de carretera per a la qual voleu canviar els vehicles. STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostra quin model dels seleccionats a l'esquerra es substitueix, si n'hi ha STR_REPLACE_RAIL_VEHICLES :Trens de Vapor i Dièsel STR_REPLACE_ELRAIL_VEHICLES :Trens Elèctrics @@ -4137,8 +4183,11 @@ 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. +STR_SCREENSHOT_CAPTION :{WHITE}Pren una captura de pantalla STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de pantalla normal +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Captura de pantalla amb el nivell d'apropament màxim STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zoom de la captura de pantalla per defecte +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de pantalla del mapa sencer STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de pantalla del mapa d'alçades STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa @@ -4434,6 +4483,10 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Aquí no STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No puc treure la via de tramvia d'aquí... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... no hi ha carretera STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... no hi ha via de tramvia +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Aquí no es pot convertir el tipus de carretera... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Aquí no es pot convertir el tipus de tramvia... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}No hi ha una carretera adequada. +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}No hi ha vies de tramvia adequades. STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... El tipus de tramvia és incompatible. # Waterway construction errors @@ -4487,6 +4540,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}No es po STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}No puc eliminar aquest grup... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}No puc canviar el nom del grup... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}No es pot establir la jerarquia de grups... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... no es permeten bucles en la jerarquia de grups. STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}No puc eliminar tots els vehicles d'aquest grup... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}No puc afegir el vehicle a aquest grup... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}No puc afegir vehicles compartits al grup... From ab420d8cc01a81ad872a14afb8cb3e56afbc8dec Mon Sep 17 00:00:00 2001 From: dP Date: Mon, 10 Aug 2020 09:56:01 +0300 Subject: [PATCH 246/601] Change: Use key names instead of characters in hotkey.cfg --- src/hotkeys.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 0bf350f8f0..6db3a406b3 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -67,17 +67,25 @@ static const KeycodeNames _keycode_to_name[] = { {"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}, + {"SLASH", WKC_SLASH}, + {"/", WKC_SLASH}, /* deprecated, use SLASH */ + {"SEMICOLON", WKC_SEMICOLON}, + {";", WKC_SEMICOLON}, /* deprecated, use SEMICOLON */ + {"EQUALS", WKC_EQUALS}, + {"=", WKC_EQUALS}, /* deprecated, use EQUALS */ + {"L_BRACKET", WKC_L_BRACKET}, + {"[", WKC_L_BRACKET}, /* deprecated, use L_BRACKET */ + {"BACKSLASH", WKC_BACKSLASH}, + {"\\", WKC_BACKSLASH}, /* deprecated, use BACKSLASH */ + {"R_BRACKET", WKC_R_BRACKET}, + {"]", WKC_R_BRACKET}, /* deprecated, use R_BRACKET */ + {"SINGLEQUOTE", WKC_SINGLEQUOTE}, + {"'", WKC_SINGLEQUOTE}, /* deprecated, use SINGLEQUOTE */ + {"COMMA", WKC_COMMA}, + {"PERIOD", WKC_PERIOD}, + {".", WKC_PERIOD}, /* deprecated, use PERIOD */ + {"MINUS", WKC_MINUS}, + {"-", WKC_MINUS}, /* deprecated, use MINUS */ }; /** From 6358ae47ded95c19d5e3868144cfe189aafe16b0 Mon Sep 17 00:00:00 2001 From: laikh Date: Wed, 5 Aug 2020 11:15:20 +0800 Subject: [PATCH 247/601] Fix: Remove /MP flag and improve FindEditbin.cmake for Windows clang-cl build --- cmake/CompileFlags.cmake | 6 ++++-- cmake/FindEditbin.cmake | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index 4adc4a31a1..49ae1d767d 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -23,8 +23,10 @@ macro(compile_flags) # C++11 standard". We need C++11 for the way we use threads. add_compile_options(/Zc:rvalueCast) - # Enable multi-threaded compilation. - add_compile_options(/MP) + if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # Enable multi-threaded compilation. + add_compile_options(/MP) + endif(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # Add DPI manifest to project; other WIN32 targets get this via ottdres.rc list(APPEND GENERATED_SOURCE_FILES "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest") diff --git a/cmake/FindEditbin.cmake b/cmake/FindEditbin.cmake index 363bc00539..8ed30599f5 100644 --- a/cmake/FindEditbin.cmake +++ b/cmake/FindEditbin.cmake @@ -1,11 +1,28 @@ # Autodetect editbin. Only useful for MSVC. -get_filename_component(MSVC_COMPILE_DIRECTORY ${CMAKE_CXX_COMPILER} DIRECTORY) +if (NOT EDITBIN_DIRECTORY) + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + get_filename_component(MSVC_COMPILE_DIRECTORY ${CMAKE_CXX_COMPILER} DIRECTORY) + set(EDITBIN_DIRECTORY ${MSVC_COMPILE_DIRECTORY}) + else (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # For clang-cl build + # find editbin.exe from environmental variable VCToolsInstallDir + set(EDITBIN_DIRECTORY "$ENV{VCToolsInstallDir}/bin/Hostx64/x64") + endif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +endif (NOT EDITBIN_DIRECTORY) + +message(CHECK_START "Finding editbin.exe") find_program( EDITBIN_EXECUTABLE editbin.exe - HINTS ${MSVC_COMPILE_DIRECTORY} + HINTS ${EDITBIN_DIRECTORY} ) +if (EDITBIN_EXECUTABLE) + message(CHECK_PASS "found") +else (EDITBIN_EXECUTABLE) + message(CHECK_FAIL "not found , please manually specify EDITBIN_DIRECTORY") +endif (EDITBIN_EXECUTABLE) + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Editbin FOUND_VAR EDITBIN_FOUND From 53a3d940b15ca2e769b4db19079b3b6913c48647 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 2 Sep 2020 19:45:39 +0200 Subject: [PATCH 248/601] Update: Translations from eints ukrainian: 11 changes by Strategy --- src/lang/ukrainian.txt | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 25e090d718..012a569f9a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -438,7 +438,7 @@ STR_SORT_BY_POWER_VS_RUNNING_COST :за потуж STR_SORT_BY_CARGO_CAPACITY :за місткістю STR_SORT_BY_RANGE :за дальністю STR_SORT_BY_POPULATION :за населенням -STR_SORT_BY_RATING :Рейтинг +STR_SORT_BY_RATING :за рейтингом # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза @@ -1438,6 +1438,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Показув STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Відображати кількість населення міста поряд з його назвою на карті STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Товщина ліній на графіках: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Товщина ліній на графіках. Тонкі лінії дають більш точне відображення, а товстіші - більш розбірливі. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Показувати назву NewGRF у вікні придбання транспорту: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Додати рядок у вікні придбання транспорту, який показуватиме назву NewGRF обраного транспорту. STR_CONFIG_SETTING_LANDSCAPE :Ландшафт: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Пейзажі визначають базові ігрові сценарії з різними вантажами, необхідними для зростання міст. NewGRF'и й ігрові скрипти дозволяють тонший контроль @@ -3096,7 +3098,7 @@ STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Збер STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Змінити параметри NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Закрити STR_NEWGRF_PARAMETERS_RESET :{BLACK}Очистити -STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Встановити всім параметрам їх стандартні значення +STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Встановити всім параметрам стандартні значення STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Параметр {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Кількість параметрів: {ORANGE}{NUM} @@ -3245,7 +3247,7 @@ STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Лімі STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Показати місто у центрі екрану. Ctrl+клац мишою відкриє нове вікно з видом на місто STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Місцева влада STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Інформація про місцеву владу -STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Змінити назву міста +STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Перейменувати місто STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Розширити STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Збільшити розмір міста @@ -3498,7 +3500,7 @@ STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Змін STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Назва компанії STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Зміна назви компанії STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Ім'я керівника -STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Зміна імені керівника +STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Перейменувати керівника STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Купити 25% акцій компанії STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Продати 25% акцій компанії @@ -3724,7 +3726,7 @@ STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Пере # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} -STR_DEPOT_RENAME_TOOLTIP :{BLACK}Змінити назву депо +STR_DEPOT_RENAME_TOOLTIP :{BLACK}Перейменувати депо STR_DEPOT_RENAME_DEPOT_CAPTION :Перейменувати депо STR_DEPOT_NO_ENGINE :{BLACK}- @@ -4313,6 +4315,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_WORLD_SCREENSHOT :{BLACK}Зняток усієї мапи STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Зняток мапи висот STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Зняток мінімапи @@ -4446,8 +4450,8 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}... вж STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Пізніше, міст над цим місцем буде занадто високо. # Company related errors -STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Неможливо змінити назву компанії... -STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Неможливо змінити ім'я керівника... +STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Неможливо перейменувати компанію... +STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Неможливо перейменувати керівника... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... найбільший дозволений розмір позики {CURRENCY_LONG} STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Неможливо взяти ще позику... From beaa7c7894c1a9ebe72eebb64ebbbc3fc2c8de33 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 23 Sep 2020 19:45:38 +0200 Subject: [PATCH 249/601] 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 78becf4066..c2b99a8571 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1431,7 +1431,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :열차 시간 STR_CONFIG_SETTING_QUICKGOTO :빠른 행선지 설정: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :경로 창을 열면 자동으로 '행선지' 버튼을 선택하여 곧바로 행선지를 지정할 수 있도록 합니다. STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :철도 형식 기본값 설정 (게임 시작/불러온 후): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :게임을 새로 시작하거나 불러온 뒤에 사용할 철도의 종류를 선택합니다. '처음 사용 가능한 것'은 가장 오래된 철도 종류를 선택하고, '최신 기술의 철도'는 가장 최신에 나온 철도 종류를 선택하며 '가장 많이 사용한 것'은 플레이어가 가장 많이 사용한 철도 타입을 선택합니다. +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :게임을 새로 시작하거나 불러온 뒤에 사용할 철도의 종류를 선택합니다. '처음 사용 가능한 것'은 가장 오래된 철도 종류를 선택하고, '최신 기술의 철도'는 가장 최신에 나온 철도 종류를 선택하며 '가장 많이 사용한 것'은 현재 가장 많이 사용한 철도 종류를 선택합니다. STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :처음 사용 가능한 것 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :가장 최근에 개발된 철도 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :가장 많이 사용한 것 From 3ad4a6e3dae62395be100ef44ea498f301ae98b1 Mon Sep 17 00:00:00 2001 From: dP Date: Sun, 6 Sep 2020 01:57:42 +0300 Subject: [PATCH 250/601] Fix 380fd8c: Only check houses for cargo when generating subsidies with towns --- src/subsidy.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 0a1af3c666..ff420455d8 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -23,6 +23,7 @@ #include "game/game.hpp" #include "command_func.h" #include "string_func.h" +#include "tile_cmd.h" #include "table/strings.h" @@ -328,7 +329,14 @@ bool FindSubsidyTownCargoRoute() const Town *src_town = Town::GetRandom(); if (src_town->cache.population < SUBSIDY_CARGO_MIN_POPULATION) return false; - CargoArray town_cargo_produced = GetProductionAroundTiles(src_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); + /* Calculate the produced cargo of houses around town center. */ + CargoArray town_cargo_produced; + TileArea ta = TileArea(src_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_HOUSE)) { + AddProducedCargo(tile, town_cargo_produced); + } + } /* Passenger subsidies are not handled here. */ town_cargo_produced[CT_PASSENGERS] = 0; @@ -431,7 +439,15 @@ bool FindSubsidyCargoDestination(CargoID cid, SourceType src_type, SourceID src) case ST_TOWN: { /* Select a random town. */ const Town *dst_town = Town::GetRandom(); - CargoArray town_cargo_accepted = GetAcceptanceAroundTiles(dst_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); + + /* Calculate cargo acceptance of houses around town center. */ + CargoArray town_cargo_accepted; + TileArea ta = TileArea(dst_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_HOUSE)) { + AddAcceptedCargo(tile, town_cargo_accepted, nullptr); + } + } /* Check if the town can accept this cargo. */ if (town_cargo_accepted[cid] < 8) return false; From 8f3d1ec970520d5a7d775e173ca1df2dc6867686 Mon Sep 17 00:00:00 2001 From: Berbe <4251220+Berbe@users.noreply.github.com> Date: Tue, 5 Mar 2019 05:04:39 +0100 Subject: [PATCH 251/601] Feature: Improve restart command When the restart command is issued, a normal map is always spawned. This improvement takes into account the current state of _file_to_saveload to check if a savegame/scenario/heightmap was previously loaded, and loads the same resource again. --- src/openttd.cpp | 20 ++++++++++++++++++-- src/openttd.h | 23 ++++++++++++----------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 94c6f4a98a..337bcda4da 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1032,7 +1032,22 @@ void SwitchToMode(SwitchMode new_mode) MakeNewEditorWorld(); break; - case SM_RESTARTGAME: // Restart --> 'Random game' with current settings + case SM_RESTARTGAME: // Restart --> Current settings preserved + if (_file_to_saveload.abstract_ftype == FT_SAVEGAME || _file_to_saveload.abstract_ftype == FT_SCENARIO) { + /* Restart current savegame/scenario */ + _switch_mode = _game_mode == GM_EDITOR ? SM_LOAD_SCENARIO : SM_LOAD_GAME; + SwitchToMode(_switch_mode); + break; + } else if (_file_to_saveload.abstract_ftype == FT_HEIGHTMAP) { + /* Restart current heightmap */ + _switch_mode = _game_mode == GM_EDITOR ? SM_LOAD_HEIGHTMAP : SM_RESTART_HEIGHTMAP; + SwitchToMode(_switch_mode); + break; + } + /* No break here, to enter the next case: + * Restart --> 'Random game' with current settings */ + FALLTHROUGH; + case SM_NEWGAME: // New Game --> 'Random game' if (_network_server) { seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "Random Map"); @@ -1066,11 +1081,12 @@ void SwitchToMode(SwitchMode new_mode) break; } + case SM_RESTART_HEIGHTMAP: // Load a heightmap and start a new game from it with current settings case SM_START_HEIGHTMAP: // Load a heightmap and start a new game from it if (_network_server) { seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "%s (Heightmap)", _file_to_saveload.title); } - MakeNewGame(true, true); + MakeNewGame(true, new_mode == SM_START_HEIGHTMAP); break; case SM_LOAD_HEIGHTMAP: // Load heightmap from scenario editor diff --git a/src/openttd.h b/src/openttd.h index 6b7401cca1..664963a5da 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -23,17 +23,18 @@ enum GameMode { /** Mode which defines what mode we're switching to. */ enum SwitchMode { SM_NONE, - SM_NEWGAME, ///< New Game --> 'Random game'. - SM_RESTARTGAME, ///< Restart --> 'Random game' with current settings. - SM_EDITOR, ///< Switch to scenario editor. - SM_LOAD_GAME, ///< Load game, Play Scenario. - SM_MENU, ///< Switch to game intro menu. - SM_SAVE_GAME, ///< Save game. - SM_SAVE_HEIGHTMAP, ///< Save heightmap. - SM_GENRANDLAND, ///< Generate random land within scenario editor. - SM_LOAD_SCENARIO, ///< Load scenario from scenario editor. - SM_START_HEIGHTMAP, ///< Load a heightmap and start a new game from it. - SM_LOAD_HEIGHTMAP, ///< Load heightmap from scenario editor. + SM_NEWGAME, ///< New Game --> 'Random game'. + SM_RESTARTGAME, ///< Restart --> 'Random game' with current settings. + SM_EDITOR, ///< Switch to scenario editor. + SM_LOAD_GAME, ///< Load game, Play Scenario. + SM_MENU, ///< Switch to game intro menu. + SM_SAVE_GAME, ///< Save game. + SM_SAVE_HEIGHTMAP, ///< Save heightmap. + SM_GENRANDLAND, ///< Generate random land within scenario editor. + SM_LOAD_SCENARIO, ///< Load scenario from scenario editor. + SM_START_HEIGHTMAP, ///< Load a heightmap and start a new game from it. + SM_LOAD_HEIGHTMAP, ///< Load heightmap from scenario editor. + SM_RESTART_HEIGHTMAP, ///< Load a heightmap and start a new game from it with current settings. }; /** Display Options */ From 0110fa12daabecfaa5e6454ba6f93b8024db552e Mon Sep 17 00:00:00 2001 From: dP Date: Sun, 5 Jul 2020 21:18:35 +0300 Subject: [PATCH 252/601] Feature: Make news and errors close hotkeys configurable --- src/error.h | 2 ++ src/error_gui.cpp | 19 ++++++++++++------- src/main_gui.cpp | 14 ++++++++++++++ src/news_gui.cpp | 22 +++++++++++----------- src/news_gui.h | 1 + 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/error.h b/src/error.h index 78ee9c5918..8aa8ac2258 100644 --- a/src/error.h +++ b/src/error.h @@ -55,6 +55,8 @@ public: void ScheduleErrorMessage(const ErrorMessageData &data); void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr); +bool HideActiveErrorMessage(); + void ClearErrorMessages(); void ShowFirstError(); void UnshowCriticalError(); diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 7cbe1d95e3..381d67a962 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -315,13 +315,6 @@ public: if (_window_system_initialized) ShowFirstError(); } - EventState OnKeyPress(WChar key, uint16 keycode) override - { - if (keycode != WKC_SPACE) return ES_NOT_HANDLED; - delete this; - return ES_HANDLED; - } - /** * Check whether the currently shown error message was critical or not. * @return True iff the message was critical. @@ -424,6 +417,18 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel } } + +/** + * Close active error message window + * @return true if a window was closed. + */ +bool HideActiveErrorMessage() { + ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + if (w == nullptr) return false; + delete w; + return true; +} + /** * Schedule a list of errors. * Note: This does not try to display the error now. This is useful if the window system is not yet running. diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 5343e2ed11..5877fb9387 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -31,6 +31,8 @@ #include "tilehighlight_func.h" #include "hotkeys.h" #include "guitimer_func.h" +#include "error.h" +#include "news_gui.h" #include "saveload/saveload.h" @@ -235,6 +237,8 @@ enum { GHK_CHAT_ALL, GHK_CHAT_COMPANY, GHK_CHAT_SERVER, + GHK_CLOSE_NEWS, + GHK_CLOSE_ERROR, }; struct MainWindow : Window @@ -427,6 +431,14 @@ struct MainWindow : Window } break; + case GHK_CLOSE_NEWS: // close active news window + if (!HideActiveNewsMessage()) return ES_NOT_HANDLED; + break; + + case GHK_CLOSE_ERROR: // close active error window + if (!HideActiveErrorMessage()) return ES_NOT_HANDLED; + break; + default: return ES_NOT_HANDLED; } return ES_HANDLED; @@ -520,6 +532,8 @@ static Hotkey global_hotkeys[] = { Hotkey(_ghk_chat_all_keys, "chat_all", GHK_CHAT_ALL), Hotkey(_ghk_chat_company_keys, "chat_company", GHK_CHAT_COMPANY), Hotkey(_ghk_chat_server_keys, "chat_server", GHK_CHAT_SERVER), + Hotkey(WKC_SPACE, "close_news", GHK_CLOSE_NEWS), + Hotkey(WKC_SPACE, "close_error", GHK_CLOSE_ERROR), HOTKEY_LIST_END }; HotkeyList MainWindow::hotkeys("global", global_hotkeys); diff --git a/src/news_gui.cpp b/src/news_gui.cpp index da613c55e1..a3f73d7296 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -519,16 +519,6 @@ struct NewsWindow : Window { } } - EventState OnKeyPress(WChar key, uint16 keycode) override - { - if (keycode == WKC_SPACE) { - /* Don't continue. */ - delete this; - return ES_HANDLED; - } - return ES_NOT_HANDLED; - } - /** * Some data on this window has become invalid. * @param data Information about the changed data. @@ -603,7 +593,6 @@ private: /* static */ int NewsWindow::duration = 0; // Instance creation. - /** Open up an own newspaper window for the news item */ static void ShowNewspaper(const NewsItem *ni) { @@ -1033,6 +1022,17 @@ static void ShowNewsMessage(const NewsItem *ni) } } +/** + * Close active news message window + * @return true if a window was closed. + */ +bool HideActiveNewsMessage() { + NewsWindow *w = (NewsWindow*)FindWindowById(WC_NEWS_WINDOW, 0); + if (w == nullptr) return false; + delete w; + return true; +} + /** Show previous news item */ void ShowLastNewsMessage() { diff --git a/src/news_gui.h b/src/news_gui.h index e6f4bb38bc..059d51ad32 100644 --- a/src/news_gui.h +++ b/src/news_gui.h @@ -14,6 +14,7 @@ void ShowLastNewsMessage(); void ShowMessageHistory(); +bool HideActiveNewsMessage(); extern NewsItem *_latest_news; From df5362a0083b571d0b8eb2879b618c3edbf9e7fc Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 20 Sep 2020 22:30:04 +0200 Subject: [PATCH 253/601] Fix #8311, b98c7763de4: Industry probability at map generation was scaled differently when set via property or callback. --- src/industry_cmd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index bd1d28ef6c..443702993e 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2079,13 +2079,14 @@ static Industry *CreateNewIndustry(TileIndex tile, IndustryType type, IndustryAv static uint32 GetScaledIndustryGenerationProbability(IndustryType it, bool *force_at_least_one) { const IndustrySpec *ind_spc = GetIndustrySpec(it); - uint32 chance = ind_spc->appear_creation[_settings_game.game_creation.landscape] * 16; // * 16 to increase precision + uint32 chance = ind_spc->appear_creation[_settings_game.game_creation.landscape]; if (!ind_spc->enabled || ind_spc->layouts.empty() || (_game_mode != GM_EDITOR && _settings_game.difficulty.industry_density == ID_FUND_ONLY) || (chance = GetIndustryProbabilityCallback(it, IACT_MAPGENERATION, chance)) == 0) { *force_at_least_one = false; return 0; } else { + chance *= 16; // to increase precision /* We want industries appearing at coast to appear less often on bigger maps, as length of coast increases slower than map area. * For simplicity we scale in both cases, though scaling the probabilities of all industries has no effect. */ chance = (ind_spc->check_proc == CHECK_REFINERY || ind_spc->check_proc == CHECK_OIL_RIG) ? ScaleByMapSize1D(chance) : ScaleByMapSize(chance); From 348c231e12d87c106bd1ab3c9d7a5ecdab6863d8 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Fri, 25 Sep 2020 12:55:25 +0100 Subject: [PATCH 254/601] Codechange: Make codestyle for CMake files consistent for 'control' statements --- CMakeLists.txt | 104 ++--- cmake/AddCustomXXXTimestamp.cmake | 38 +- cmake/CompileFlags.cmake | 46 +-- cmake/CreateGrfCommand.cmake | 2 +- cmake/CreateRegression.cmake | 12 +- cmake/Endian.cmake | 6 +- cmake/FindAllegro.cmake | 4 +- cmake/FindEditbin.cmake | 16 +- cmake/FindFluidsynth.cmake | 4 +- cmake/FindFontconfig.cmake | 4 +- cmake/FindICU.cmake | 6 +- cmake/FindLZO.cmake | 8 +- cmake/FindSSE.cmake | 4 +- cmake/FindXDG_basedir.cmake | 4 +- cmake/InstallAndPackage.cmake | 46 +-- cmake/LinkPackage.cmake | 6 +- cmake/Options.cmake | 42 +- cmake/SourceList.cmake | 14 +- cmake/Static.cmake | 2 +- cmake/scripts/Baseset.cmake | 16 +- cmake/scripts/CreateGRF.cmake | 24 +- cmake/scripts/FindVersion.cmake | 38 +- cmake/scripts/GenerateWidget.cmake | 62 +-- cmake/scripts/Regression.cmake | 38 +- cmake/scripts/SquirrelExport.cmake | 494 ++++++++++++------------ cmake/scripts/SquirrelIncludes.cmake | 36 +- media/baseset/CMakeLists.txt | 8 +- media/baseset/openttd/CMakeLists.txt | 4 +- media/baseset/orig_extra/CMakeLists.txt | 4 +- src/CMakeLists.txt | 4 +- src/blitter/CMakeLists.txt | 4 +- src/lang/CMakeLists.txt | 2 +- src/music/CMakeLists.txt | 4 +- src/script/api/CMakeLists.txt | 16 +- src/sound/CMakeLists.txt | 4 +- src/video/CMakeLists.txt | 4 +- 36 files changed, 565 insertions(+), 565 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf39fba384..9fd8fbc880 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,23 +1,23 @@ cmake_minimum_required(VERSION 3.5) -if (NOT BINARY_NAME) +if(NOT BINARY_NAME) set(BINARY_NAME openttd) -endif (NOT BINARY_NAME) +endif() project(${BINARY_NAME}) -if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory") -endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) +endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) # Use GNUInstallDirs to allow customisation # but set our own default data dir -if (NOT CMAKE_INSTALL_DATADIR) +if(NOT CMAKE_INSTALL_DATADIR) set(CMAKE_INSTALL_DATADIR "share/games") -endif (NOT CMAKE_INSTALL_DATADIR) +endif() include(GNUInstallDirs) include(Options) @@ -37,30 +37,30 @@ find_package(LibLZMA) find_package(LZO) find_package(PNG) -if (NOT WIN32) +if(NOT WIN32) find_package(Allegro) - if (NOT APPLE) + if(NOT APPLE) find_package(SDL2) - if (NOT SDL2_FOUND) + if(NOT SDL2_FOUND) find_package(SDL) - endif( NOT SDL2_FOUND) + endif() find_package(Fluidsynth) find_package(Freetype) find_package(Fontconfig) find_package(ICU OPTIONAL_COMPONENTS i18n lx) find_package(XDG_basedir) - else (NOT APPLE) + else() find_package(Iconv) find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) find_library(AUDIOUNIT_LIBRARY AudioUnit) find_library(COCOA_LIBRARY Cocoa) - endif (NOT APPLE) -endif (NOT WIN32) + endif() +endif() -if (MSVC) +if(MSVC) find_package(Editbin REQUIRED) -endif (MSVC) +endif() find_package(SSE) find_package(Xaudio2) @@ -69,38 +69,38 @@ find_package(Grfcodec) # IPO is only properly supported from CMake 3.9. Despite the fact we are # CMake 3.5, still enable IPO if we detect we are 3.9+. -if (POLICY CMP0069) +if(POLICY CMP0069) cmake_policy(SET CMP0069 NEW) include(CheckIPOSupported) check_ipo_supported(RESULT IPO_FOUND) -endif (POLICY CMP0069) +endif() show_options() -if (UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) - if (NOT SDL_FOUND AND NOT SDL2_FOUND) +if(UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) + if(NOT SDL_FOUND AND NOT SDL2_FOUND) message(FATAL_ERROR "SDL or SDL2 is required for this platform") - endif (NOT SDL_FOUND AND NOT SDL2_FOUND) -endif (UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) -if (APPLE) - if (NOT AUDIOTOOLBOX_LIBRARY) + endif() +endif() +if(APPLE) + if(NOT AUDIOTOOLBOX_LIBRARY) message(FATAL_ERROR "AudioToolbox is required for this platform") - endif (NOT AUDIOTOOLBOX_LIBRARY) - if (NOT AUDIOUNIT_LIBRARY) + endif() + if(NOT AUDIOUNIT_LIBRARY) message(FATAL_ERROR "AudioUnit is required for this platform") - endif (NOT AUDIOUNIT_LIBRARY) - if (NOT COCOA_LIBRARY) + endif() + if(NOT COCOA_LIBRARY) message(FATAL_ERROR "Cocoa is required for this platform") - endif (NOT COCOA_LIBRARY) -endif (APPLE) + endif() +endif() -if (MSVC) +if(MSVC) # C++17 for MSVC set(CMAKE_CXX_STANDARD 17) -else (MSVC) +else() # C++11 for all other targets set(CMAKE_CXX_STANDARD 11) -endif (MSVC) +endif() set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) @@ -108,9 +108,9 @@ set(CMAKE_CXX_EXTENSIONS NO) set(CMAKE_EXPORT_COMPILE_COMMANDS YES) list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp") -if (WIN32) +if(WIN32) list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") -endif (WIN32) +endif() # Generate a target to determine version, which is execute every 'make' run add_custom_target(find_version @@ -155,17 +155,17 @@ target_link_libraries(openttd Threads::Threads ) -if (IPO_FOUND) +if(IPO_FOUND) set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE True) set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL True) set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO True) -endif (IPO_FOUND) +endif() set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin") process_compile_flags() -if (APPLE OR UNIX) +if(APPLE OR UNIX) add_definitions(-DUNIX) -endif (APPLE OR UNIX) +endif() include(LinkPackage) link_package(PNG TARGET PNG::PNG ENCOURAGED) @@ -174,7 +174,7 @@ link_package(LIBLZMA TARGET LibLZMA::LibLZMA ENCOURAGED) link_package(LZO ENCOURAGED) link_package(XDG_basedir) -if (NOT OPTION_DEDICATED) +if(NOT OPTION_DEDICATED) link_package(Fluidsynth) link_package(SDL) link_package(SDL2 TARGET SDL2::SDL2) @@ -183,9 +183,9 @@ if (NOT OPTION_DEDICATED) link_package(Fontconfig TARGET Fontconfig::Fontconfig) link_package(ICU_lx) link_package(ICU_i18n) -endif (NOT OPTION_DEDICATED) +endif() -if (APPLE) +if(APPLE) link_package(Iconv TARGET Iconv::Iconv) target_link_libraries(openttd @@ -198,33 +198,33 @@ if (APPLE) -DWITH_COCOA -DENABLE_COCOA_QUARTZ ) -endif (APPLE) +endif() -if (NOT PERSONAL_DIR STREQUAL "(not set)") +if(NOT PERSONAL_DIR STREQUAL "(not set)") add_definitions( -DWITH_PERSONAL_DIR -DPERSONAL_DIR="${PERSONAL_DIR}" ) -endif (NOT PERSONAL_DIR STREQUAL "(not set)") +endif() -if (NOT SHARED_DIR STREQUAL "(not set)") +if(NOT SHARED_DIR STREQUAL "(not set)") add_definitions( -DWITH_SHARED_DIR -DSHARED_DIR="${SHARED_DIR}" ) -endif (NOT SHARED_DIR STREQUAL "(not set)") +endif() -if (NOT GLOBAL_DIR STREQUAL "(not set)") +if(NOT GLOBAL_DIR STREQUAL "(not set)") add_definitions( -DGLOBAL_DATA_DIR="${GLOBAL_DIR}" ) -endif (NOT GLOBAL_DIR STREQUAL "(not set)") +endif() link_package(SSE) add_definitions_based_on_options() -if (WIN32) +if(WIN32) add_definitions( -DUNICODE -D_UNICODE @@ -236,11 +236,11 @@ if (WIN32) winmm imm32 ) -endif (WIN32) +endif() -if (CMAKE_SIZEOF_VOID_P EQUAL 8) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) add_definitions(-D_SQ64) -endif (CMAKE_SIZEOF_VOID_P EQUAL 8) +endif() include(CreateRegression) create_regression() diff --git a/cmake/AddCustomXXXTimestamp.cmake b/cmake/AddCustomXXXTimestamp.cmake index ca93988731..c8d134e081 100644 --- a/cmake/AddCustomXXXTimestamp.cmake +++ b/cmake/AddCustomXXXTimestamp.cmake @@ -9,7 +9,7 @@ macro(_parse_arguments_with_multi_hack ORIGINAL_COMMAND_LINE) foreach(MULTI IN LISTS MULTIS) string(REPLACE "${MULTI}" "${MULTI};:::" COMMAND_LINE "${COMMAND_LINE}") - endforeach(MULTI) + endforeach() cmake_parse_arguments(PARAM "${OPTIONS}" "${SINGLES}" "${MULTIS}" ${COMMAND_LINE}) endmacro() @@ -19,25 +19,25 @@ macro(_reassemble_command_line) set(NEW_COMMAND_LINE ${PARAM_UNPARSED_ARGUMENTS}) foreach(OPTION IN LISTS OPTIONS) - if (PARAM_${OPTION}) + if(PARAM_${OPTION}) list(APPEND NEW_COMMAND_LINE "${OPTION}") - endif (PARAM_${OPTION}) - endforeach(OPTION) + endif() + endforeach() foreach(SINGLE IN LISTS SINGLES) - if (PARAM_${SINGLE}) + if(PARAM_${SINGLE}) list(APPEND NEW_COMMAND_LINE "${SINGLE}" "${PARAM_${SINGLE}}") - endif (PARAM_${SINGLE}) - endforeach(SINGLE) + endif() + endforeach() foreach(MULTI IN LISTS MULTIS) - if (PARAM_${MULTI}) + if(PARAM_${MULTI}) # Replace our special marker with the name of the MULTI again. This # restores for example multiple COMMANDs again. string(REPLACE ":::" "${MULTI}" PARAM_${MULTI} "${PARAM_${MULTI}}") list(APPEND NEW_COMMAND_LINE "${PARAM_${MULTI}}") - endif (PARAM_${MULTI}) - endforeach(MULTI) + endif() + endforeach() endmacro() # Generated files can be older than their dependencies, causing useless @@ -72,9 +72,9 @@ function(add_custom_command_timestamp) # Reset the OUTPUT and BYPRODUCTS as an empty list (if needed). # Because they are MULTIS, we need to add our special marker here. set(PARAM_OUTPUT ":::") - if (NOT PARAM_BYPRODUCTS) + if(NOT PARAM_BYPRODUCTS) set(PARAM_BYPRODUCTS ":::") - endif () + endif() foreach(OUTPUT IN LISTS OUTPUTS) # For every output, we add a 'cmake -E touch' entry to update the @@ -91,12 +91,12 @@ function(add_custom_command_timestamp) # add_custom_target_timestamp() to know if we should point to the # '.timestamp' variant or not. set_source_files_properties(${OUTPUT} PROPERTIES BYPRODUCT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp) - endforeach(OUTPUT) + endforeach() # Reassemble and call the wrapped command _reassemble_command_line() add_custom_command(${NEW_COMMAND_LINE}) -endfunction(add_custom_command_timestamp) +endfunction() # Generated files can be older than their dependencies, causing useless # regenerations. This function adds a .timestamp file for each file in DEPENDS @@ -130,16 +130,16 @@ function(add_custom_target_timestamp) # Check if the output is produced by add_custom_command_timestamp() get_source_file_property(BYPRODUCT ${DEPEND} BYPRODUCT) - if (BYPRODUCT STREQUAL "NOTFOUND") + if(BYPRODUCT STREQUAL "NOTFOUND") # If it is not, just keep it as DEPEND list(APPEND PARAM_DEPENDS "${DEPEND}") - else (BYPRODUCT STREQUAL "NOTFOUND") + else() # If it is, the BYPRODUCT property points to the timestamp we want to depend on list(APPEND PARAM_DEPENDS "${BYPRODUCT}") - endif (BYPRODUCT STREQUAL "NOTFOUND") - endforeach(DEPEND) + endif() + endforeach() # Reassemble and call the wrapped command _reassemble_command_line() add_custom_target(${NEW_COMMAND_LINE}) -endfunction(add_custom_target_timestamp) +endfunction() diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index 49ae1d767d..f371353ae1 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -3,7 +3,7 @@ # compile_flags() # macro(compile_flags) - if (MSVC) + if(MSVC) # Switch to MT (static) instead of MD (dynamic) binary # For MSVC two generators are available @@ -23,14 +23,14 @@ macro(compile_flags) # C++11 standard". We need C++11 for the way we use threads. add_compile_options(/Zc:rvalueCast) - if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # Enable multi-threaded compilation. add_compile_options(/MP) - endif(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + endif() # Add DPI manifest to project; other WIN32 targets get this via ottdres.rc list(APPEND GENERATED_SOURCE_FILES "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest") - endif (MSVC) + endif() # Add some -D flags for Debug builds. We cannot use add_definitions(), because # it does not appear to support the $<> tags. @@ -38,19 +38,19 @@ macro(compile_flags) "$<$:-D_DEBUG>" "$<$>:-D_FORTIFY_SOURCE=2>" # FORTIFY_SOURCE should only be used in non-debug builds (requires -O1+) ) - if (MINGW) + if(MINGW) add_link_options( "$<$>:-fstack-protector>" # Prevent undefined references when _FORTIFY_SOURCE > 0 ) - endif (MINGW) + endif() # Prepare a generator that checks if we are not a debug, and don't have asserts # on. We need this later on to set some compile options for stable releases. set(IS_STABLE_RELEASE "$>,$>>") - if (MSVC) + if(MSVC) add_compile_options(/W3) - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") add_compile_options( -W -Wall @@ -81,33 +81,33 @@ macro(compile_flags) # When we are a stable release (Release build + USE_ASSERTS not set), # assertations are off, which trigger a lot of warnings. We disable # these warnings for these releases. - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") add_compile_options( "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-parameter>" "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>" ) - else (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + else() add_compile_options( "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" "$<${IS_STABLE_RELEASE}:-Wno-unused-parameter>" ) - endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + endif() # Ninja processes the output so the output from the compiler # isn't directly to a terminal; hence, the default is # non-coloured output. We can override this to get nicely # coloured output, but since that might yield odd results with # IDEs, we extract it to an option. - if (OPTION_FORCE_COLORED_OUTPUT) - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + if(OPTION_FORCE_COLORED_OUTPUT) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") add_compile_options (-fdiagnostics-color=always) - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") add_compile_options (-fcolor-diagnostics) - endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - endif (OPTION_FORCE_COLORED_OUTPUT) + endif() + endif() - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-flifetime-dse=1" LIFETIME_DSE_FOUND) @@ -126,8 +126,8 @@ macro(compile_flags) # well with our custom pool item allocator "$<$:-flifetime-dse=1>" ) - endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + endif() + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") add_compile_options( -Wall # warning #873: function ... ::operator new ... has no corresponding operator delete ... @@ -139,12 +139,12 @@ macro(compile_flags) # warning #2160: anonymous union qualifier is ignored -wd2160 ) - else () + else() message(FATAL_ERROR "No warning flags are set for this compiler yet; please consider creating a Pull Request to add support for this compiler.") - endif () + endif() - if (NOT WIN32) + if(NOT WIN32) # rdynamic is used to get useful stack traces from crash reports. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic") - endif (NOT WIN32) + endif() endmacro() diff --git a/cmake/CreateGrfCommand.cmake b/cmake/CreateGrfCommand.cmake index 25e599f568..4ad9734198 100644 --- a/cmake/CreateGrfCommand.cmake +++ b/cmake/CreateGrfCommand.cmake @@ -26,7 +26,7 @@ function(create_grf_command) ) list(APPEND GRF_PNG_BINARY_FILES ${GRF_PNG_BINARY_FILE}) - endforeach(GRF_PNG_SOURCE_FILE) + endforeach() add_custom_command(OUTPUT ${GRF_BINARY_FILE} COMMAND ${CMAKE_COMMAND} diff --git a/cmake/CreateRegression.cmake b/cmake/CreateRegression.cmake index 443332368a..3da3438b43 100644 --- a/cmake/CreateRegression.cmake +++ b/cmake/CreateRegression.cmake @@ -13,9 +13,9 @@ macro(create_regression) string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/regression/" "${CMAKE_BINARY_DIR}/ai/" REGRESSION_BINARY_FILE "${REGRESSION_SOURCE_FILE}") string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/regression/" "" REGRESSION_SOURCE_FILE_NAME "${REGRESSION_SOURCE_FILE}") - if ("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") + if("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") continue() - endif ("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") + endif() add_custom_command(OUTPUT ${REGRESSION_BINARY_FILE} COMMAND ${CMAKE_COMMAND} -E copy @@ -26,7 +26,7 @@ macro(create_regression) ) list(APPEND REGRESSION_BINARY_FILES ${REGRESSION_BINARY_FILE}) - endforeach(REGRESSION_SOURCE_FILE) + endforeach() # Copy the regression configuration in a special folder, so all autogenerated # folders end up in the same place after running regression. @@ -53,9 +53,9 @@ macro(create_regression) foreach(REGRESSION_TEST IN LISTS REGRESSION_TESTS) get_filename_component(REGRESSION_TEST_NAME "${REGRESSION_TEST}" NAME) - if ("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") + if("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") continue() - endif ("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") + endif() add_custom_target(regression_${REGRESSION_TEST_NAME} COMMAND ${CMAKE_COMMAND} @@ -78,7 +78,7 @@ macro(create_regression) WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) list(APPEND REGRESSION_TARGETS regression_${REGRESSION_TEST_NAME}) - endforeach(REGRESSION_TEST) + endforeach() # Create a new target which runs the regression add_custom_target(regression diff --git a/cmake/Endian.cmake b/cmake/Endian.cmake index 00cb975445..3bfba653ca 100644 --- a/cmake/Endian.cmake +++ b/cmake/Endian.cmake @@ -6,9 +6,9 @@ function(add_endian_definition) include(TestBigEndian) TEST_BIG_ENDIAN(IS_BIG_ENDIAN) - if (IS_BIG_ENDIAN) + if(IS_BIG_ENDIAN) add_definitions(-DTTD_ENDIAN=TTD_BIG_ENDIAN) - else (IS_BIG_ENDIAN) + else() add_definitions(-DTTD_ENDIAN=TTD_LITTLE_ENDIAN) - endif (IS_BIG_ENDIAN) + endif() endfunction() diff --git a/cmake/FindAllegro.cmake b/cmake/FindAllegro.cmake index 85b2ffd392..3c90d2c4e7 100644 --- a/cmake/FindAllegro.cmake +++ b/cmake/FindAllegro.cmake @@ -54,10 +54,10 @@ find_package_handle_standard_args(Allegro VERSION_VAR Allegro_VERSION ) -if (Allegro_FOUND) +if(Allegro_FOUND) set(Allegro_LIBRARIES ${Allegro_LIBRARY}) set(Allegro_INCLUDE_DIRS ${Allegro_INCLUDE_DIR}) -endif () +endif() mark_as_advanced( Allegro_INCLUDE_DIR diff --git a/cmake/FindEditbin.cmake b/cmake/FindEditbin.cmake index 8ed30599f5..f4d55d7cb7 100644 --- a/cmake/FindEditbin.cmake +++ b/cmake/FindEditbin.cmake @@ -1,15 +1,15 @@ # Autodetect editbin. Only useful for MSVC. -if (NOT EDITBIN_DIRECTORY) - if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +if(NOT EDITBIN_DIRECTORY) + if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") get_filename_component(MSVC_COMPILE_DIRECTORY ${CMAKE_CXX_COMPILER} DIRECTORY) set(EDITBIN_DIRECTORY ${MSVC_COMPILE_DIRECTORY}) - else (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + else() # For clang-cl build # find editbin.exe from environmental variable VCToolsInstallDir set(EDITBIN_DIRECTORY "$ENV{VCToolsInstallDir}/bin/Hostx64/x64") - endif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") -endif (NOT EDITBIN_DIRECTORY) + endif() +endif() message(CHECK_START "Finding editbin.exe") find_program( @@ -17,11 +17,11 @@ find_program( HINTS ${EDITBIN_DIRECTORY} ) -if (EDITBIN_EXECUTABLE) +if(EDITBIN_EXECUTABLE) message(CHECK_PASS "found") -else (EDITBIN_EXECUTABLE) +else() message(CHECK_FAIL "not found , please manually specify EDITBIN_DIRECTORY") -endif (EDITBIN_EXECUTABLE) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Editbin diff --git a/cmake/FindFluidsynth.cmake b/cmake/FindFluidsynth.cmake index 063726dbe5..0ac4931d78 100644 --- a/cmake/FindFluidsynth.cmake +++ b/cmake/FindFluidsynth.cmake @@ -54,10 +54,10 @@ find_package_handle_standard_args(Fluidsynth VERSION_VAR Fluidsynth_VERSION ) -if (Fluidsynth_FOUND) +if(Fluidsynth_FOUND) set(Fluidsynth_LIBRARIES ${Fluidsynth_LIBRARY}) set(Fluidsynth_INCLUDE_DIRS ${Fluidsynth_INCLUDE_DIR}) -endif () +endif() mark_as_advanced( Fluidsynth_INCLUDE_DIR diff --git a/cmake/FindFontconfig.cmake b/cmake/FindFontconfig.cmake index a6f0180b37..68c557b826 100644 --- a/cmake/FindFontconfig.cmake +++ b/cmake/FindFontconfig.cmake @@ -55,7 +55,7 @@ find_library( Fontconfig_LIBRARY ${PKG_FONTCONFIG_LIBRARY_DIRS} ) -if (Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION) +if(Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION) file(STRINGS ${Fontconfig_INCLUDE_DIR}/fontconfig/fontconfig.h _contents REGEX "^#define[ \t]+FC_[A-Z]+[ \t]+[0-9]+$") unset(Fontconfig_VERSION) foreach(VPART MAJOR MINOR REVISION) @@ -70,7 +70,7 @@ if (Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION) endif() endforeach() endforeach() -endif () +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Fontconfig diff --git a/cmake/FindICU.cmake b/cmake/FindICU.cmake index 471e43c1d9..b110dbf404 100644 --- a/cmake/FindICU.cmake +++ b/cmake/FindICU.cmake @@ -29,7 +29,7 @@ find_package(PkgConfig QUIET) set(ICU_KNOWN_COMPONENTS "uc" "i18n" "le" "lx" "io") foreach(MOD_NAME IN LISTS ICU_FIND_COMPONENTS) - if (NOT MOD_NAME IN_LIST ICU_KNOWN_COMPONENTS) + if(NOT MOD_NAME IN_LIST ICU_KNOWN_COMPONENTS) message(FATAL_ERROR "Unknown ICU component: ${MOD_NAME}") endif() pkg_check_modules(PC_ICU_${MOD_NAME} QUIET icu-${MOD_NAME}) @@ -39,14 +39,14 @@ foreach(MOD_NAME IN LISTS ICU_FIND_COMPONENTS) foreach(LIBRARY IN LISTS PC_ICU_${MOD_NAME}_LIBRARIES) unset(PC_LIBRARY CACHE) find_library(PC_LIBRARY NAMES ${LIBRARY}) - if (NOT PC_LIBRARY) + if(NOT PC_LIBRARY) unset(PC_ICU_${MOD_NAME}_FOUND) endif() list(APPEND PC_LIBRARIES ${PC_LIBRARY}) endforeach() unset(PC_LIBRARY CACHE) - if (${PC_ICU_${MOD_NAME}_FOUND}) + if(${PC_ICU_${MOD_NAME}_FOUND}) set(ICU_COMPONENT_FOUND TRUE) set(ICU_${MOD_NAME}_FOUND TRUE) set(ICU_${MOD_NAME}_LIBRARIES ${PC_LIBRARIES}) diff --git a/cmake/FindLZO.cmake b/cmake/FindLZO.cmake index 9a409002df..dacd9387d9 100644 --- a/cmake/FindLZO.cmake +++ b/cmake/FindLZO.cmake @@ -55,8 +55,8 @@ find_library(LZO_LIBRARY # name as the optimized file. This is not always the case, but so far # experiences has shown that in those case vcpkg CMake files do the right # thing. -if (VCPKG_TOOLCHAIN AND LZO_LIBRARY) - if (LZO_LIBRARY MATCHES "/debug/") +if(VCPKG_TOOLCHAIN AND LZO_LIBRARY) + if(LZO_LIBRARY MATCHES "/debug/") set(LZO_LIBRARY_DEBUG ${LZO_LIBRARY}) string(REPLACE "/debug/lib/" "/lib/" LZO_LIBRARY_RELEASE ${LZO_LIBRARY}) else() @@ -78,10 +78,10 @@ find_package_handle_standard_args(LZO VERSION_VAR LZO_VERSION ) -if (LZO_FOUND) +if(LZO_FOUND) set(LZO_LIBRARIES ${LZO_LIBRARY}) set(LZO_INCLUDE_DIRS ${LZO_INCLUDE_DIR}) -endif () +endif() mark_as_advanced( LZO_INCLUDE_DIR diff --git a/cmake/FindSSE.cmake b/cmake/FindSSE.cmake index d0a57ccbb2..e8dc243d9b 100644 --- a/cmake/FindSSE.cmake +++ b/cmake/FindSSE.cmake @@ -4,9 +4,9 @@ include(CheckCXXSourceCompiles) set(CMAKE_REQUIRED_FLAGS "") -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set(CMAKE_REQUIRED_FLAGS "-msse4.1") -endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") +endif() check_cxx_source_compiles(" #include diff --git a/cmake/FindXDG_basedir.cmake b/cmake/FindXDG_basedir.cmake index 913b425e20..a33e9760dc 100644 --- a/cmake/FindXDG_basedir.cmake +++ b/cmake/FindXDG_basedir.cmake @@ -54,10 +54,10 @@ find_package_handle_standard_args(XDG_basedir VERSION_VAR XDG_basedir_VERSION ) -if (XDG_basedir_FOUND) +if(XDG_basedir_FOUND) set(XDG_basedir_LIBRARIES ${XDG_basedir_LIBRARY}) set(XDG_basedir_INCLUDE_DIRS ${XDG_basedir_INCLUDE_DIR}) -endif () +endif() mark_as_advanced( XDG_basedir_INCLUDE_DIR diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index c8cd6b44ac..eafcfc21b6 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -1,17 +1,17 @@ include(GNUInstallDirs) # If requested, use FHS layout; otherwise fall back to a flat layout. -if (OPTION_INSTALL_FHS) +if(OPTION_INSTALL_FHS) set(BINARY_DESTINATION_DIR "${CMAKE_INSTALL_BINDIR}") set(DATA_DESTINATION_DIR "${CMAKE_INSTALL_DATADIR}/${BINARY_NAME}") set(DOCS_DESTINATION_DIR "${CMAKE_INSTALL_DOCDIR}") set(MAN_DESTINATION_DIR "${CMAKE_INSTALL_MANDIR}") -else (OPTION_INSTALL_FHS) +else() set(BINARY_DESTINATION_DIR ".") set(DATA_DESTINATION_DIR ".") set(DOCS_DESTINATION_DIR ".") set(MAN_DESTINATION_DIR ".") -endif (OPTION_INSTALL_FHS) +endif() install(TARGETS openttd RUNTIME @@ -39,7 +39,7 @@ install(FILES # A Linux manual only makes sense when using FHS. Otherwise it is a very odd # file with little context to what it is. -if (OPTION_INSTALL_FHS) +if(OPTION_INSTALL_FHS) set(MAN_SOURCE_FILE ${CMAKE_SOURCE_DIR}/docs/openttd.6) set(MAN_BINARY_FILE ${CMAKE_BINARY_DIR}/docs/${BINARY_NAME}.6) install(CODE @@ -52,26 +52,26 @@ if (OPTION_INSTALL_FHS) ${MAN_BINARY_FILE}.gz DESTINATION ${MAN_DESTINATION_DIR}/man6 COMPONENT manual) -endif (OPTION_INSTALL_FHS) +endif() # TODO -- Media files # TODO -- Menu files -if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(ARCHITECTURE "amd64") -else (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +else() string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" ARCHITECTURE) -endif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +endif() # Windows is a bit more annoying to detect; using the size of void pointer # seems to be the most robust. -if (WIN32) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) +if(WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(ARCHITECTURE "win64") - else (CMAKE_SIZEOF_VOID_P EQUAL 8) + else() set(ARCHITECTURE "win32") - endif (CMAKE_SIZEOF_VOID_P EQUAL 8) -endif (WIN32) + endif() +endif() set(CPACK_SYSTEM_NAME "${ARCHITECTURE}") @@ -90,33 +90,33 @@ set(CPACK_PACKAGE_EXECUTABLES "openttd;OpenTTD") set(CPACK_STRIP_FILES YES) set(CPACK_OUTPUT_FILE_PREFIX "bundles") -if (APPLE) +if(APPLE) set(CPACK_GENERATOR "Bundle") include(PackageBundle) set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx") -elseif (WIN32) +elseif(WIN32) set(CPACK_GENERATOR "ZIP") - if (OPTION_USE_NSIS) + if(OPTION_USE_NSIS) list(APPEND CPACK_GENERATOR "NSIS") include(PackageNSIS) - endif (OPTION_USE_NSIS) + endif() set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-windows-${CPACK_SYSTEM_NAME}") -elseif (UNIX) +elseif(UNIX) # With FHS, we can create deb/rpm/... Without it, they would be horribly broken # and not work. The other way around is also true; with FHS they are not # usable, and only flat formats work. - if (OPTION_INSTALL_FHS) + if(OPTION_INSTALL_FHS) set(CPACK_GENERATOR "DEB") include(PackageDeb) - else (OPTION_INSTALL_FHS) + else() set(CPACK_GENERATOR "TXZ") - endif (OPTION_INSTALL_FHS) + endif() set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${CPACK_SYSTEM_NAME}") -else () +else() message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.") -endif () +endif() include(CPack) diff --git a/cmake/LinkPackage.cmake b/cmake/LinkPackage.cmake index f64ccfd51f..9977ecc453 100644 --- a/cmake/LinkPackage.cmake +++ b/cmake/LinkPackage.cmake @@ -1,10 +1,10 @@ function(link_package NAME) cmake_parse_arguments(LP "ENCOURAGED" "TARGET" "" ${ARGN}) - if (${NAME}_FOUND) + if(${NAME}_FOUND) string(TOUPPER "${NAME}" UCNAME) add_definitions(-DWITH_${UCNAME}) - if (LP_TARGET AND TARGET ${LP_TARGET}) + if(LP_TARGET AND TARGET ${LP_TARGET}) target_link_libraries(openttd ${LP_TARGET}) message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${LP_TARGET}") else() @@ -12,7 +12,7 @@ function(link_package NAME) target_link_libraries(openttd ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}) message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR} -- ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}") endif() - elseif (LP_ENCOURAGED) + elseif(LP_ENCOURAGED) message(WARNING "${NAME} not found; compiling OpenTTD without ${NAME} is strongly disencouraged") endif() endfunction() diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 4f2404b2d4..0167ad0a6c 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -5,36 +5,36 @@ include(GNUInstallDirs) # set_directory_options() # function(set_directory_options) - if (APPLE) + if(APPLE) set(DEFAULT_PERSONAL_DIR "Documents/OpenTTD") set(DEFAULT_SHARED_DIR "/Library/Application Support/OpenTTD") set(DEFAULT_GLOBAL_DIR "(not set)") - elseif (WIN32) + elseif(WIN32) set(DEFAULT_PERSONAL_DIR "OpenTTD") set(DEFAULT_SHARED_DIR "(not set)") set(DEFAULT_GLOBAL_DIR "(not set)") - elseif (UNIX) + elseif(UNIX) set(DEFAULT_PERSONAL_DIR ".${BINARY_NAME}") set(DEFAULT_SHARED_DIR "(not set)") set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${BINARY_NAME}") - else () + else() message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.") - endif () + endif() - if (NOT PERSONAL_DIR) + if(NOT PERSONAL_DIR) set(PERSONAL_DIR "${DEFAULT_PERSONAL_DIR}" CACHE STRING "Personal directory") message(STATUS "Detecting Personal Data directory - ${PERSONAL_DIR}") - endif (NOT PERSONAL_DIR) + endif() - if (NOT SHARED_DIR) + if(NOT SHARED_DIR) set(SHARED_DIR "${DEFAULT_SHARED_DIR}" CACHE STRING "Shared directory") message(STATUS "Detecting Shared Data directory - ${SHARED_DIR}") - endif (NOT SHARED_DIR) + endif() - if (NOT GLOBAL_DIR) + if(NOT GLOBAL_DIR) set(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory") message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}") - endif (NOT GLOBAL_DIR) + endif() endfunction() # Set some generic options that influence what is being build. @@ -42,11 +42,11 @@ endfunction() # set_options() # function(set_options) - if (UNIX AND NOT APPLE) + if(UNIX AND NOT APPLE) set(DEFAULT_OPTION_INSTALL_FHS ON) - else (UNIX AND NOT APPLE) + else() set(DEFAULT_OPTION_INSTALL_FHS OFF) - endif (UNIX AND NOT APPLE) + endif() option(OPTION_FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF) @@ -74,17 +74,17 @@ endfunction() # add_definitions_based_on_options() # function(add_definitions_based_on_options) - if (OPTION_DEDICATED) + if(OPTION_DEDICATED) add_definitions(-DDEDICATED) - endif (OPTION_DEDICATED) + endif() - if (NOT OPTION_USE_THREADS) + if(NOT OPTION_USE_THREADS) add_definitions(-DNO_THREADS) - endif (NOT OPTION_USE_THREADS) + endif() - if (OPTION_USE_ASSERTS) + if(OPTION_USE_ASSERTS) add_definitions(-DWITH_ASSERT) - else (OPTION_USE_ASSERTS) + else() add_definitions(-DNDEBUG) - endif (OPTION_USE_ASSERTS) + endif() endfunction() diff --git a/cmake/SourceList.cmake b/cmake/SourceList.cmake index 6300a19a43..6e95be2017 100644 --- a/cmake/SourceList.cmake +++ b/cmake/SourceList.cmake @@ -10,16 +10,16 @@ function(add_files) cmake_parse_arguments(PARAM "" "" "CONDITION" ${ARGN}) set(PARAM_FILES "${PARAM_UNPARSED_ARGUMENTS}") - if (PARAM_CONDITION) - if (NOT (${PARAM_CONDITION})) + if(PARAM_CONDITION) + if(NOT (${PARAM_CONDITION})) return() - endif (NOT (${PARAM_CONDITION})) - endif (PARAM_CONDITION) + endif() + endif() foreach(FILE IN LISTS PARAM_FILES) target_sources(openttd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) endforeach() -endfunction(add_files) +endfunction() # This function works around an 'issue' with CMake, where # set_source_files_properties() only works in the scope of the file. We want @@ -42,7 +42,7 @@ function(set_compile_flags) endforeach() set_property(GLOBAL PROPERTY source_properties "${SOURCE_PROPERTIES}") -endfunction(set_compile_flags) +endfunction() # Call this macro in the same CMakeLists.txt and after add_executable(). # This makes sure all the COMPILE_FLAGS of set_compile_flags() are set @@ -60,4 +60,4 @@ function(process_compile_flags) set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS ${PROPERTIES}) endforeach() -endfunction(process_compile_flags) +endfunction() diff --git a/cmake/Static.cmake b/cmake/Static.cmake index 7648d05e7f..682527aff6 100644 --- a/cmake/Static.cmake +++ b/cmake/Static.cmake @@ -3,7 +3,7 @@ # set_static() # function(set_static_if_needed) - if (MINGW) + if(MINGW) # Let exectutables run outside MinGW environment # Force searching static libs set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE) diff --git a/cmake/scripts/Baseset.cmake b/cmake/scripts/Baseset.cmake index 4329dbdf8c..7cf60629d9 100644 --- a/cmake/scripts/Baseset.cmake +++ b/cmake/scripts/Baseset.cmake @@ -12,13 +12,13 @@ set(ARG_READ NO) while(ARGC LESS CMAKE_ARGC) set(ARG ${CMAKE_ARGV${ARGC}}) - if (ARG_READ) + if(ARG_READ) list(APPEND LANG_SOURCE_FILES "${ARG}") - endif (ARG_READ) + endif() - if (ARG STREQUAL "--") + if(ARG STREQUAL "--") set(ARG_READ YES) - endif (ARG STREQUAL "--") + endif() math(EXPR ARGC "${ARGC} + 1") endwhile() @@ -33,17 +33,17 @@ string(REGEX REPLACE "@(.*)@" "\\1" PLACE_HOLDER "${PLACE_HOLDER}") foreach(LANGFILE IN LISTS LANG_SOURCE_FILES) file(STRINGS "${LANGFILE}" LANGLINES REGEX "^(##isocode|${STR_ID})" ENCODING UTF-8) string(FIND "${LANGLINES}" "${STR_ID}" HAS_STR_ID) - if (HAS_STR_ID LESS 0) + if(HAS_STR_ID LESS 0) continue() - endif (HAS_STR_ID LESS 0) + endif() string(REGEX REPLACE "##isocode ([^;]+).*" "\\1" ISOCODE "${LANGLINES}") - if ("${ISOCODE}" STREQUAL "en_GB") + if("${ISOCODE}" STREQUAL "en_GB") string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY} = \\1" LANGLINES "${LANGLINES}") else() string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}.${ISOCODE} = \\1" LANGLINES "${LANGLINES}") endif() list(APPEND ${PLACE_HOLDER} ${LANGLINES}) -endforeach(LANGFILE) +endforeach() list(SORT ${PLACE_HOLDER}) string(REPLACE ";" "\n" ${PLACE_HOLDER} "${${PLACE_HOLDER}}") diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake index f5811daf9f..8631284f33 100644 --- a/cmake/scripts/CreateGRF.cmake +++ b/cmake/scripts/CreateGRF.cmake @@ -5,18 +5,18 @@ cmake_minimum_required(VERSION 3.5) # files. # -if (NOT NFORENUM_EXECUTABLE) +if(NOT NFORENUM_EXECUTABLE) message(FATAL_ERROR "Script needs NFORENUM_EXECUTABLE defined") -endif (NOT NFORENUM_EXECUTABLE) -if (NOT GRFCODEC_EXECUTABLE) +endif() +if(NOT GRFCODEC_EXECUTABLE) message(FATAL_ERROR "Script needs GRFCODEC_EXECUTABLE defined") -endif (NOT GRFCODEC_EXECUTABLE) -if (NOT GRF_SOURCE_FOLDER) +endif() +if(NOT GRF_SOURCE_FOLDER) message(FATAL_ERROR "Script needs GRF_SOURCE_FOLDER defined") -endif (NOT GRF_SOURCE_FOLDER) -if (NOT GRF_BINARY_FILE) +endif() +if(NOT GRF_BINARY_FILE) message(FATAL_ERROR "Script needs GRF_BINARY_FILE defined") -endif (NOT GRF_BINARY_FILE) +endif() get_filename_component(GRF_SOURCE_FOLDER_NAME "${GRF_SOURCE_FOLDER}" NAME) @@ -30,14 +30,14 @@ foreach(NFO_LINE IN LISTS NFO_LINES) # Recover the ; that was really in the text (and not a newline) string(REPLACE "\\;" ";" NFO_LINE "${NFO_LINE}") - if (NFO_LINE MATCHES "^#include") + if(NFO_LINE MATCHES "^#include") string(REGEX REPLACE "^#include \"(.*)\"$" "\\1" INCLUDE_FILE ${NFO_LINE}) file(READ ${GRF_SOURCE_FOLDER}/${INCLUDE_FILE} INCLUDE_LINES) file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${INCLUDE_LINES}") - else (NFO_LINE MATCHES "^#include") + else() file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${NFO_LINE}\n") - endif (NFO_LINE MATCHES "^#include") -endforeach(NFO_LINE) + endif() +endforeach() execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo) execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index b53f77032f..bb754fc5b3 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.5) find_package(Git QUIET) # ${CMAKE_SOURCE_DIR}/.git may be a directory or a regular file -if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") +if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") # Make sure LC_ALL is set to something desirable set(SAVED_LC_ALL "$ENV{LC_ALL}") set(ENV{LC_ALL} C) @@ -26,7 +26,7 @@ if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) - if (NOT IS_MODIFIED STREQUAL "") + if(NOT IS_MODIFIED STREQUAL "") set(REV_MODIFIED 2) endif() @@ -69,34 +69,34 @@ if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") ) string(REGEX REPLACE "\^0$" "" TAG "${TAG}") - if (REV_MODIFIED EQUAL 0) + if(REV_MODIFIED EQUAL 0) set(HASHPREFIX "-g") - elseif (REV_MODIFIED EQUAL 2) + elseif(REV_MODIFIED EQUAL 2) set(HASHPREFIX "-m") - else () + else() set(HASHPREFIX "-u") endif() # Set the version string - if (NOT TAG STREQUAL "") + if(NOT TAG STREQUAL "") set(REV_VERSION "${TAG}") set(REV_ISTAG 1) string(REGEX REPLACE "^[0-9.]+$" "" STABLETAG "${TAG}") - if (NOT STABLETAG STREQUAL "") + if(NOT STABLETAG STREQUAL "") set(REV_ISSTABLETAG 1) - else () + else() set(REV_ISSTABLETAG 0) - endif () - else () + endif() + else() set(REV_VERSION "${REV_ISODATE}-${BRANCH}${HASHPREFIX}${SHORTHASH}") set(REV_ISTAG 0) set(REV_ISSTABLETAG 0) - endif () + endif() # Restore LC_ALL set(ENV{LC_ALL} "${SAVED_LC_ALL}") -elseif (EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") +elseif(EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") file(READ "${CMAKE_SOURCE_DIR}/.ottdrev" OTTDREV) string(REPLACE "\n" "" OTTDREV "${OTTDREV}") string(REPLACE "\t" ";" OTTDREV "${OTTDREV}") @@ -107,7 +107,7 @@ elseif (EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") list(GET OTTDREV 4 REV_ISTAG) list(GET OTTDREV 5 REV_ISSTABLETAG) list(GET OTTDREV 6 REV_YEAR) -else () +else() message(WARNING "No version detected; this build will NOT be network compatible") set(REV_VERSION "norev0000") set(REV_ISODATE "19700101") @@ -116,25 +116,25 @@ else () set(REV_ISTAG 0) set(REV_ISSTABLETAG 0) set(REV_YEAR "1970") -endif () +endif() message(STATUS "Version string: ${REV_VERSION}") -if (GENERATE_OTTDREV) +if(GENERATE_OTTDREV) message(STATUS "Generating .ottdrev") file(WRITE ${CMAKE_SOURCE_DIR}/.ottdrev "${REV_VERSION}\t${REV_ISODATE}\t${REV_MODIFIED}\t${REV_HASH}\t${REV_ISTAG}\t${REV_ISSTABLETAG}\t${REV_YEAR}\n") -else (GENERATE_OTTDREV) +else() message(STATUS "Generating rev.cpp") configure_file("${CMAKE_SOURCE_DIR}/src/rev.cpp.in" "${FIND_VERSION_BINARY_DIR}/rev.cpp") - if (WIN32) + if(WIN32) message(STATUS "Generating ottdres.rc") configure_file("${CMAKE_SOURCE_DIR}/src/os/windows/ottdres.rc.in" "${FIND_VERSION_BINARY_DIR}/ottdres.rc") - endif (WIN32) + endif() message(STATUS "Generating CPackProperties.cmake") configure_file("${CMAKE_SOURCE_DIR}/CPackProperties.cmake.in" "${CPACK_BINARY_DIR}/CPackProperties.cmake" @ONLY) -endif (GENERATE_OTTDREV) +endif() diff --git a/cmake/scripts/GenerateWidget.cmake b/cmake/scripts/GenerateWidget.cmake index 0bb3490955..f46a67e690 100644 --- a/cmake/scripts/GenerateWidget.cmake +++ b/cmake/scripts/GenerateWidget.cmake @@ -15,12 +15,12 @@ cmake_minimum_required(VERSION 3.5) # # -if (NOT GENERATE_SOURCE_FILE) +if(NOT GENERATE_SOURCE_FILE) message(FATAL_ERROR "Script needs GENERATE_SOURCE_FILE defined") -endif (NOT GENERATE_SOURCE_FILE) -if (NOT GENERATE_BINARY_FILE) +endif() +if(NOT GENERATE_BINARY_FILE) message(FATAL_ERROR "Script needs GENERATE_BINARY_FILE defined") -endif (NOT GENERATE_BINARY_FILE) +endif() file(STRINGS ${GENERATE_SOURCE_FILE} ENUM_LINES REGEX "@enum") @@ -46,38 +46,38 @@ foreach(ENUM IN LISTS ENUM_LINES) string(REPLACE "${RM_INDENT}" "" LINE "${LINE}") # Remember possible doxygen comment before enum declaration - if ((NOT ACTIVE) AND "${LINE}" MATCHES "/\\*\\*") + if((NOT ACTIVE) AND "${LINE}" MATCHES "/\\*\\*") set(COMMENT "${ADD_INDENT}${LINE}") set(ACTIVE_COMMENT 1) - elseif (ACTIVE_COMMENT EQUAL 1) + elseif(ACTIVE_COMMENT EQUAL 1) string(APPEND COMMENT "\n${ADD_INDENT}${LINE}") endif() # Check for enum match - if ("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") + if("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") # REGEX REPLACE does a REGEX MATCHALL and fails if an empty string is matched string(REGEX MATCH "[^ ]*" RESULT "${LINE}") string(REPLACE "${RESULT}" "" RM_INDENT "${LINE}") set(ACTIVE 1) - if (ACTIVE_COMMENT GREATER 0) + if(ACTIVE_COMMENT GREATER 0) string(APPEND ${PLACE_HOLDER} "\n${COMMENT}") - endif (ACTIVE_COMMENT GREATER 0) + endif() unset(ACTIVE_COMMENT) unset(COMMENT) - endif ("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") + endif() # Forget doxygen comment, if no enum follows - if (ACTIVE_COMMENT EQUAL 2 AND NOT "${LINE}" STREQUAL "") + if(ACTIVE_COMMENT EQUAL 2 AND NOT "${LINE}" STREQUAL "") unset(ACTIVE_COMMENT) unset(COMMENT) - endif (ACTIVE_COMMENT EQUAL 2 AND NOT "${LINE}" STREQUAL "") - if (ACTIVE_COMMENT EQUAL 1 AND "${LINE}" MATCHES "\\*/") + endif() + if(ACTIVE_COMMENT EQUAL 1 AND "${LINE}" MATCHES "\\*/") set(ACTIVE_COMMENT 2) - endif (ACTIVE_COMMENT EQUAL 1 AND "${LINE}" MATCHES "\\*/") + endif() - if (ACTIVE) - if ("${LINE}" MATCHES "^ *[A-Za-z0-9_]* *[,=]") + if(ACTIVE) + if("${LINE}" MATCHES "^ *[A-Za-z0-9_]* *[,=]") # Transform enum values # REGEX REPLACE does a REGEX MATCHALL and replaces too much string(REGEX MATCH " *=[^,]*" RESULT "${LINE}") @@ -92,28 +92,28 @@ foreach(ENUM IN LISTS ENUM_LINES) unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) + endforeach() - if (CMAKE_MATCH_3) + if(CMAKE_MATCH_3) string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${CMAKE_MATCH_1}${CMAKE_MATCH_2}${SPACES} = ::${CMAKE_MATCH_2},${SPACES}${CMAKE_MATCH_3}") - else (CMAKE_MATCH_3) + else() string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${CMAKE_MATCH_1}${CMAKE_MATCH_2}${SPACES} = ::${CMAKE_MATCH_2},") - endif (CMAKE_MATCH_3) - elseif ("${LINE}" STREQUAL "") + endif() + elseif("${LINE}" STREQUAL "") string(APPEND ${PLACE_HOLDER} "\n") - else () + else() string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${LINE}") - endif () - endif (ACTIVE) + endif() + endif() - if ("${LINE}" MATCHES "^ *\};") - if (ACTIVE) + if("${LINE}" MATCHES "^ *\};") + if(ACTIVE) string(APPEND ${PLACE_HOLDER} "\n") - endif (ACTIVE) + endif() unset(ACTIVE) - endif ("${LINE}" MATCHES "^ *\};") - endforeach(LINE) - endforeach(FILE) - endforeach(ENUM) + endif() + endforeach() + endforeach() + endforeach() configure_file(${GENERATE_SOURCE_FILE} ${GENERATE_BINARY_FILE}) diff --git a/cmake/scripts/Regression.cmake b/cmake/scripts/Regression.cmake index 9984396ea1..af473ea9f0 100644 --- a/cmake/scripts/Regression.cmake +++ b/cmake/scripts/Regression.cmake @@ -4,26 +4,26 @@ cmake_minimum_required(VERSION 3.5) # Runs a single regressoion test # -if (NOT REGRESSION_TEST) +if(NOT REGRESSION_TEST) message(FATAL_ERROR "Script needs REGRESSION_TEST defined (tip: use -DREGRESSION_TEST=..)") -endif (NOT REGRESSION_TEST) -if (NOT OPENTTD_EXECUTABLE) +endif() +if(NOT OPENTTD_EXECUTABLE) message(FATAL_ERROR "Script needs OPENTTD_EXECUTABLE defined (tip: use -DOPENTTD_EXECUTABLE=..)") -endif (NOT OPENTTD_EXECUTABLE) +endif() -if (NOT EXISTS ai/${REGRESSION_TEST}/test.sav) +if(NOT EXISTS ai/${REGRESSION_TEST}/test.sav) message(FATAL_ERROR "Regression test ${REGRESSION_TEST} does not exist (tip: check regression folder for the correct spelling)") -endif () +endif() # If editbin is given, copy the executable to a new folder, and change the # subsystem to console. The copy is needed as multiple regressions can run # at the same time. -if (EDITBIN_EXECUTABLE) +if(EDITBIN_EXECUTABLE) execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OPENTTD_EXECUTABLE} regression/${REGRESSION_TEST}.exe) set(OPENTTD_EXECUTABLE "regression/${REGRESSION_TEST}.exe") execute_process(COMMAND ${EDITBIN_EXECUTABLE} /nologo /subsystem:console ${OPENTTD_EXECUTABLE}) -endif (EDITBIN_EXECUTABLE) +endif() # Run the regression test execute_process(COMMAND ${OPENTTD_EXECUTABLE} @@ -40,13 +40,13 @@ execute_process(COMMAND ${OPENTTD_EXECUTABLE} OUTPUT_STRIP_TRAILING_WHITESPACE ) -if (REGRESSION_OUTPUT) +if(REGRESSION_OUTPUT) message(FATAL_ERROR "Unexpected output: ${REGRESSION_OUTPUT}") -endif (REGRESSION_OUTPUT) +endif() -if (NOT REGRESSION_RESULT) +if(NOT REGRESSION_RESULT) message(FATAL_ERROR "Regression did not output anything; did the compilation fail?") -endif (NOT REGRESSION_RESULT) +endif() # For some reason pointer can be printed as '0x(nil)', '0x0000000000000000', or '0x0x0' string(REPLACE "0x(nil)" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}") @@ -76,21 +76,21 @@ list(LENGTH REGRESSION_EXPECTED REGRESSION_EXPECTED_LENGTH) foreach(RESULT IN LISTS REGRESSION_RESULT) list(GET REGRESSION_EXPECTED ${ARGC} EXPECTED) - if (NOT RESULT STREQUAL EXPECTED) + if(NOT RESULT STREQUAL EXPECTED) message("${ARGC}: - ${EXPECTED}") message("${ARGC}: + ${RESULT}'") set(ERROR YES) - endif (NOT RESULT STREQUAL EXPECTED) + endif() math(EXPR ARGC "${ARGC} + 1") -endforeach(RESULT) +endforeach() -if (NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC) +if(NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC) math(EXPR MISSING "${REGRESSION_EXPECTED_LENGTH} - ${ARGC}") message("(${MISSING} more lines were expected than found)") set(ERROR YES) -endif (NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC) +endif() -if (ERROR) +if(ERROR) message(FATAL_ERROR "Regression failed") -endif (ERROR) +endif() diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake index 315be36c5e..3b230de00f 100644 --- a/cmake/scripts/SquirrelExport.cmake +++ b/cmake/scripts/SquirrelExport.cmake @@ -1,29 +1,29 @@ cmake_minimum_required(VERSION 3.5) -if (NOT SCRIPT_API_SOURCE_FILE) +if(NOT SCRIPT_API_SOURCE_FILE) message(FATAL_ERROR "Script needs SCRIPT_API_SOURCE_FILE defined") -endif (NOT SCRIPT_API_SOURCE_FILE) -if (NOT SCRIPT_API_BINARY_FILE) +endif() +if(NOT SCRIPT_API_BINARY_FILE) message(FATAL_ERROR "Script needs SCRIPT_API_BINARY_FILE defined") -endif (NOT SCRIPT_API_BINARY_FILE) -if (NOT SCRIPT_API_FILE) +endif() +if(NOT SCRIPT_API_FILE) message(FATAL_ERROR "Script needs SCRIPT_API_FILE defined") -endif (NOT SCRIPT_API_FILE) -if (NOT APIUC) +endif() +if(NOT APIUC) message(FATAL_ERROR "Script needs APIUC defined") -endif (NOT APIUC) -if (NOT APILC) +endif() +if(NOT APILC) message(FATAL_ERROR "Script needs APILC defined") -endif (NOT APILC) +endif() macro(dump_fileheader) get_filename_component(SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE}" NAME) string(APPEND SQUIRREL_EXPORT "\n#include \"../${SCRIPT_API_FILE_NAME}\"") - if (NOT "${APIUC}" STREQUAL "Template") + if(NOT "${APIUC}" STREQUAL "Template") string(REPLACE "script_" "template_" SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE_NAME}") string(APPEND SQUIRREL_EXPORT "\n#include \"../template/${SCRIPT_API_FILE_NAME}.sq\"") - endif (NOT "${APIUC}" STREQUAL "Template") -endmacro(dump_fileheader) + endif() +endmacro() macro(dump_class_templates NAME) string(REGEX REPLACE "^Script" "" REALNAME ${NAME}) @@ -32,9 +32,9 @@ macro(dump_class_templates NAME) string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }") string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }") string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }") - if ("${NAME}" STREQUAL "ScriptEvent") + if("${NAME}" STREQUAL "ScriptEvent") string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }") - elseif ("${NAME}" STREQUAL "ScriptText") + elseif("${NAME}" STREQUAL "ScriptText") string(APPEND SQUIRREL_EXPORT "\n") string(APPEND SQUIRREL_EXPORT "\n template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {") string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_INSTANCE) {") @@ -45,10 +45,10 @@ macro(dump_class_templates NAME) string(APPEND SQUIRREL_EXPORT "\n }") string(APPEND SQUIRREL_EXPORT "\n return nullptr;") string(APPEND SQUIRREL_EXPORT "\n }") - else () + else() string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }") - endif () -endmacro(dump_class_templates) + endif() +endmacro() macro(reset_reader) unset(ENUMS) @@ -63,7 +63,7 @@ macro(reset_reader) unset(START_SQUIRREL_DEFINE_ON_NEXT_LINE) set(CLS_LEVEL 0) unset(CLS_IN_API) -endmacro(reset_reader) +endmacro() reset_reader() @@ -71,80 +71,80 @@ file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES) foreach(LINE IN LISTS SOURCE_LINES) # Ignore special doxygen blocks - if ("${LINE}" MATCHES "^#ifndef DOXYGEN_API") + if("${LINE}" MATCHES "^#ifndef DOXYGEN_API") set(DOXYGEN_SKIP "next") continue() - endif () - if ("${LINE}" MATCHES "^#ifdef DOXYGEN_API") + endif() + if("${LINE}" MATCHES "^#ifdef DOXYGEN_API") set(DOXYGEN_SKIP "true") continue() - endif () - if ("${LINE}" MATCHES "^#endif /\\* DOXYGEN_API \\*/") + endif() + if("${LINE}" MATCHES "^#endif /\\* DOXYGEN_API \\*/") unset(DOXYGEN_SKIP) continue() - endif () - if ("${LINE}" MATCHES "^#else") - if ("${DOXYGEN_SKIP}" STREQUAL "next") + endif() + if("${LINE}" MATCHES "^#else") + if("${DOXYGEN_SKIP}" STREQUAL "next") set(DOXYGEN_SKIP "true") else() unset(DOXYGEN_SKIP) endif() continue() - endif () - if ("${DOXYGEN_SKIP}" STREQUAL "true") + endif() + if("${DOXYGEN_SKIP}" STREQUAL "true") continue() endif() - if ("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") + if("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") set(LINE ${CMAKE_MATCH_2}) # By default, classes are not selected - if (NOT CLS_LEVEL) + if(NOT CLS_LEVEL) set(API_SELECTED FALSE) - endif (NOT CLS_LEVEL) + endif() - if ("${APIUC}" STREQUAL "Template") + if("${APIUC}" STREQUAL "Template") set(API_SELECTED TRUE) - if ("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + if("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") set(API_SELECTED FALSE) - endif ("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + endif() continue() - endif("${APIUC}" STREQUAL "Template") + endif() - if ("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + if("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") set(API_SELECTED FALSE) - elseif ("${LINE}" MATCHES "-${APILC}") + elseif("${LINE}" MATCHES "-${APILC}") set(API_SELECTED FALSE) - elseif ("${LINE}" MATCHES "${APILC}") + elseif("${LINE}" MATCHES "${APILC}") set(API_SELECTED TRUE) - endif () + endif() continue() - endif ("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") + endif() # Remove the old squirrel stuff - if ("${LINE}" MATCHES "#ifdef DEFINE_SQUIRREL_CLASS") + if("${LINE}" MATCHES "#ifdef DEFINE_SQUIRREL_CLASS") set(SQUIRREL_STUFF TRUE) continue() - endif ("${LINE}" MATCHES "#ifdef DEFINE_SQUIRREL_CLASS") - if ("${LINE}" MATCHES "^#endif /\\* DEFINE_SQUIRREL_CLASS \\*/") + endif() + if("${LINE}" MATCHES "^#endif /\\* DEFINE_SQUIRREL_CLASS \\*/") unset(SQUIRREL_STUFF) continue() - endif ("${LINE}" MATCHES "^#endif /\\* DEFINE_SQUIRREL_CLASS \\*/") - if (SQUIRREL_STUFF) + endif() + if(SQUIRREL_STUFF) continue() - endif (SQUIRREL_STUFF) + endif() # Ignore forward declarations of classes - if ("${LINE}" MATCHES "^( *)class(.*);") + if("${LINE}" MATCHES "^( *)class(.*);") continue() - endif ("${LINE}" MATCHES "^( *)class(.*);") + endif() # We only want to have public functions exported for now - if ("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") - if (NOT CLS_LEVEL) - if (NOT DEFINED API_SELECTED) + if("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") + if(NOT CLS_LEVEL) + if(NOT DEFINED API_SELECTED) message(WARNING "Class '${CMAKE_MATCH_2}' has no @api. It won't be published to any API.") set(API_SELECTED FALSE) - endif (NOT DEFINED API_SELECTED) + endif() unset(IS_PUBLIC) unset(CLS_PARAM_0) set(CLS_PARAM_1 1) @@ -153,132 +153,132 @@ foreach(LINE IN LISTS SOURCE_LINES) unset(API_SELECTED) set(CLS "${CMAKE_MATCH_2}") set(SUPER_CLS "${CMAKE_MATCH_4}") - elseif (CLS_LEVEL EQUAL 1) - if (NOT DEFINED API_SELECTED) + elseif(CLS_LEVEL EQUAL 1) + if(NOT DEFINED API_SELECTED) set(API_SELECTED ${CLS_IN_API}) - endif (NOT API_SELECTED) + endif() - if (API_SELECTED) + if(API_SELECTED) list(APPEND STRUCTS "${CLS}::${CMAKE_MATCH_2}") - endif (API_SELECTED) + endif() unset(API_SELECTED) - endif () + endif() math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") continue() - endif ("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") - if ("${LINE}" MATCHES "^( *)public") - if (CLS_LEVEL EQUAL 1) + endif() + if("${LINE}" MATCHES "^( *)public") + if(CLS_LEVEL EQUAL 1) set(IS_PUBLIC TRUE) - endif (CLS_LEVEL EQUAL 1) + endif() continue() - endif ("${LINE}" MATCHES "^( *)public") - if ("${LINE}" MATCHES "^( *)protected") - if (CLS_LEVEL EQUAL 1) + endif() + if("${LINE}" MATCHES "^( *)protected") + if(CLS_LEVEL EQUAL 1) unset(IS_PUBLIC) - endif (CLS_LEVEL EQUAL 1) + endif() continue() - endif ("${LINE}" MATCHES "^( *)protected") - if ("${LINE}" MATCHES "^( *)private") - if (CLS_LEVEL EQUAL 1) + endif() + if("${LINE}" MATCHES "^( *)private") + if(CLS_LEVEL EQUAL 1) unset(IS_PUBLIC) - endif (CLS_LEVEL EQUAL 1) + endif() continue() - endif ("${LINE}" MATCHES "^( *)private") + endif() # Ignore the comments - if ("${LINE}" MATCHES "^#") + if("${LINE}" MATCHES "^#") continue() - endif ("${LINE}" MATCHES "^#") - if ("${LINE}" MATCHES "/\\*.*\\*/") + endif() + if("${LINE}" MATCHES "/\\*.*\\*/") unset(COMMENT) continue() - endif ("${LINE}" MATCHES "/\\*.*\\*/") - if ("${LINE}" MATCHES "/\\*") + endif() + if("${LINE}" MATCHES "/\\*") set(COMMENT TRUE) continue() - endif ("${LINE}" MATCHES "/\\*") - if ("${LINE}" MATCHES "\\*/") + endif() + if("${LINE}" MATCHES "\\*/") unset(COMMENT) continue() - endif ("${LINE}" MATCHES "\\*/") - if (COMMENT) + endif() + if(COMMENT) continue() - endif (COMMENT) + endif() # We need to make specialized conversions for structs - if ("${LINE}" MATCHES "^( *)struct ([^ ]*)") + if("${LINE}" MATCHES "^( *)struct ([^ ]*)") math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") # Check if we want to publish this struct - if (NOT DEFINED API_SELECTED) + if(NOT DEFINED API_SELECTED) set(API_SELECTED ${CLS_IN_API}) - endif (NOT DEFINED API_SELECTED) - if (NOT API_SELECTED) + endif() + if(NOT API_SELECTED) unset(API_SELECTED) continue() - endif (NOT API_SELECTED) + endif() unset(API_SELECTED) - if (NOT IS_PUBLIC OR NOT CLS_LEVEL EQUAL 1) + if(NOT IS_PUBLIC OR NOT CLS_LEVEL EQUAL 1) continue() - endif (NOT IS_PUBLIC OR NOT CLS_LEVEL EQUAL 1) + endif() list(APPEND STRUCTS "${CLS}::${CMAKE_MATCH_2}") continue() - endif ("${LINE}" MATCHES "^( *)struct ([^ ]*)") + endif() # We need to make specialized conversions for enums - if ("${LINE}" MATCHES "^( *)enum ([^ ]*)") + if("${LINE}" MATCHES "^( *)enum ([^ ]*)") math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") # Check if we want to publish this enum - if (NOT DEFINED API_SELECTED) + if(NOT DEFINED API_SELECTED) set(API_SELECTED ${CLS_IN_API}) - endif (NOT DEFINED API_SELECTED) - if (NOT API_SELECTED) + endif() + if(NOT API_SELECTED) unset(API_SELECTED) continue() - endif (NOT API_SELECTED) + endif() unset(API_SELECTED) - if (NOT IS_PUBLIC) + if(NOT IS_PUBLIC) continue() - endif (NOT IS_PUBLIC) + endif() set(IN_ENUM TRUE) list(APPEND ENUMS "${CLS}::${CMAKE_MATCH_2}") continue() - endif ("${LINE}" MATCHES "^( *)enum ([^ ]*)") + endif() # Maybe the end of the class, if so we can start with the Squirrel export pretty soon - if ("${LINE}" MATCHES "};") + if("${LINE}" MATCHES "};") math(EXPR CLS_LEVEL "${CLS_LEVEL} - 1") - if (CLS_LEVEL) + if(CLS_LEVEL) unset(IN_ENUM) continue() - endif (CLS_LEVEL) + endif() - if (CLS) + if(CLS) set(START_SQUIRREL_DEFINE_ON_NEXT_LINE TRUE) - endif (CLS) + endif() continue() - endif ("${LINE}" MATCHES "};") + endif() # Empty/white lines. When we may do the Squirrel export, do that export. - if ("${LINE}" MATCHES "^([ ]*)$") - if (NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) + if("${LINE}" MATCHES "^([ ]*)$") + if(NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) continue() - endif (NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) + endif() - if (NOT CLS_IN_API) + if(NOT CLS_IN_API) reset_reader() continue() - endif (NOT CLS_IN_API) + endif() - if (NOT HAS_FILEHEADER) + if(NOT HAS_FILEHEADER) dump_fileheader() set(HAS_FILEHEADER TRUE) - endif (NOT HAS_FILEHEADER) + endif() unset(IS_PUBLIC) unset(NAMESPACE_OPENED) @@ -288,38 +288,38 @@ foreach(LINE IN LISTS SOURCE_LINES) string(APPEND SQUIRREL_EXPORT "\n") - if ("${APIUC}" STREQUAL "Template") + if("${APIUC}" STREQUAL "Template") # First check whether we have enums to print - if (DEFINED ENUMS) - if (NOT NAMESPACE_OPENED) + if(DEFINED ENUMS) + if(NOT NAMESPACE_OPENED) string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") set(NAMESPACE_OPENED TRUE) - endif (NOT NAMESPACE_OPENED) + endif() string(APPEND SQUIRREL_EXPORT "\n /* Allow enums to be used as Squirrel parameters */") foreach(ENUM IN LISTS ENUMS) string(APPEND SQUIRREL_EXPORT "\n template <> inline ${ENUM} GetParam(ForceType<${ENUM}>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (${ENUM})tmp; }") string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${ENUM}>(HSQUIRRELVM vm, ${ENUM} res) { sq_pushinteger(vm, (int32)res); return 1; }") - endforeach(ENUM) - endif (DEFINED ENUMS) + endforeach() + endif() # Then check whether we have structs/classes to print - if (DEFINED STRUCTS) - if (NOT NAMESPACE_OPENED) + if(DEFINED STRUCTS) + if(NOT NAMESPACE_OPENED) string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") set(NAMESPACE_OPENED TRUE) - endif (NOT NAMESPACE_OPENED) + endif() string(APPEND SQUIRREL_EXPORT "\n /* Allow inner classes/structs to be used as Squirrel parameters */") foreach(STRUCT IN LISTS STRUCTS) dump_class_templates(${STRUCT}) - endforeach(STRUCT) - endif (DEFINED STRUCTS) + endforeach() + endif() - if (NOT NAMESPACE_OPENED) + if(NOT NAMESPACE_OPENED) string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") set(NAMESPACE_OPENED TRUE) - else (NOT NAMESPACE_OPENED) + else() string(APPEND SQUIRREL_EXPORT "\n") - endif (NOT NAMESPACE_OPENED) + endif() string(APPEND SQUIRREL_EXPORT "\n /* Allow ${CLS} to be used as Squirrel parameter */") dump_class_templates(${CLS}) @@ -327,7 +327,7 @@ foreach(LINE IN LISTS SOURCE_LINES) reset_reader() continue() - endif ("${APIUC}" STREQUAL "Template") + endif() string(APPEND SQUIRREL_EXPORT "\n") string(APPEND SQUIRREL_EXPORT "\ntemplate <> const char *GetClassName<${CLS}, ST_${APIUC}>() { return \"${API_CLS}\"; }") @@ -337,61 +337,61 @@ foreach(LINE IN LISTS SOURCE_LINES) string(APPEND SQUIRREL_EXPORT "\nvoid SQ${API_CLS}_Register(Squirrel *engine)") string(APPEND SQUIRREL_EXPORT "\n{") string(APPEND SQUIRREL_EXPORT "\n DefSQClass<${CLS}, ST_${APIUC}> SQ${API_CLS}(\"${API_CLS}\");") - if ("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") + if("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine);") - else ("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") + else() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");") - endif ("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") - if (NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") - if ("${CLS_PARAM_2}" STREQUAL "v") + endif() + if(NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") + if("${CLS_PARAM_2}" STREQUAL "v") string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);") - else ("${CLS_PARAM_2}" STREQUAL "v") + else() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddConstructor(engine, \"${CLS_PARAM_2}\");") - endif ("${CLS_PARAM_2}" STREQUAL "v") - endif (NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") + endif() + endif() string(APPEND SQUIRREL_EXPORT "\n") # Enum values set(MLEN 0) foreach(ENUM_VALUE IN LISTS ENUM_VALUES) string(LENGTH "${ENUM_VALUE}" LEN) - if (MLEN LESS LEN) + if(MLEN LESS LEN) set(MLEN ${LEN}) - endif (MLEN LESS LEN) - endforeach(ENUM_VALUE) + endif() + endforeach() foreach(ENUM_VALUE IN LISTS ENUM_VALUES) string(LENGTH "${ENUM_VALUE}" LEN) math(EXPR LEN "${MLEN} - ${LEN}") unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) + endforeach() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${ENUM_VALUE},${SPACES}\"${ENUM_VALUE}\");") - endforeach(ENUM_VALUE) - if (MLEN) + endforeach() + if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") - endif (MLEN) + endif() # Const values set(MLEN 0) foreach(CONST_VALUE IN LISTS CONST_VALUES) string(LENGTH "${CONST_VALUE}" LEN) - if (MLEN LESS LEN) + if(MLEN LESS LEN) set(MLEN ${LEN}) - endif (MLEN LESS LEN) - endforeach(CONST_VALUE) + endif() + endforeach() foreach(CONST_VALUE IN LISTS CONST_VALUES) string(LENGTH "${CONST_VALUE}" LEN) math(EXPR LEN "${MLEN} - ${LEN}") unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) + endforeach() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${CONST_VALUE},${SPACES}\"${CONST_VALUE}\");") - endforeach(CONST_VALUE) - if (MLEN) + endforeach() + if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") - endif (MLEN) + endif() # Mapping of OTTD strings to errors set(MLEN 0) @@ -399,10 +399,10 @@ foreach(LINE IN LISTS SOURCE_LINES) string(REPLACE ":" ";" ENUM_STRING_TO_ERROR "${ENUM_STRING_TO_ERROR}") list(GET ENUM_STRING_TO_ERROR 0 ENUM_STRING) string(LENGTH "${ENUM_STRING}" LEN) - if (MLEN LESS LEN) + if(MLEN LESS LEN) set(MLEN ${LEN}) - endif (MLEN LESS LEN) - endforeach(ENUM_STRING_TO_ERROR) + endif() + endforeach() foreach(ENUM_STRING_TO_ERROR IN LISTS ENUM_STRING_TO_ERRORS) string(REPLACE ":" ";" ENUM_STRING_TO_ERROR "${ENUM_STRING_TO_ERROR}") list(GET ENUM_STRING_TO_ERROR 0 ENUM_STRING) @@ -412,33 +412,33 @@ foreach(LINE IN LISTS SOURCE_LINES) unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) + endforeach() string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMap(${ENUM_STRING},${SPACES}${CLS}::${ENUM_ERROR});") - endforeach(ENUM_STRING_TO_ERROR) - if (MLEN) + endforeach() + if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") - endif (MLEN) + endif() # Mapping of errors to human 'readable' strings. set(MLEN 0) foreach(ENUM_ERROR_TO_STRING IN LISTS ENUM_ERROR_TO_STRINGS) string(LENGTH "${ENUM_ERROR_TO_STRING}" LEN) - if (MLEN LESS LEN) + if(MLEN LESS LEN) set(MLEN ${LEN}) - endif (MLEN LESS LEN) - endforeach(ENUM_ERROR_TO_STRING) + endif() + endforeach() foreach(ENUM_ERROR_TO_STRING IN LISTS ENUM_ERROR_TO_STRINGS) string(LENGTH "${ENUM_ERROR_TO_STRING}" LEN) math(EXPR LEN "${MLEN} - ${LEN}") unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) + endforeach() string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMapString(${CLS}::${ENUM_ERROR_TO_STRING},${SPACES}\"${ENUM_ERROR_TO_STRING}\");") - endforeach(ENUM_ERROR_TO_STRING) - if (MLEN) + endforeach() + if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") - endif (MLEN) + endif() # Static methods set(MLEN 0) @@ -446,10 +446,10 @@ foreach(LINE IN LISTS SOURCE_LINES) string(REPLACE ":" ";" STATIC_METHOD "${STATIC_METHOD}") list(GET STATIC_METHOD 0 FUNCNAME) string(LENGTH "${FUNCNAME}" LEN) - if (MLEN LESS LEN) + if(MLEN LESS LEN) set(MLEN ${LEN}) - endif (MLEN LESS LEN) - endforeach(STATIC_METHOD) + endif() + endforeach() foreach(STATIC_METHOD IN LISTS STATIC_METHODS) string(REPLACE ":" ";" STATIC_METHOD "${STATIC_METHOD}") list(GET STATIC_METHOD 0 FUNCNAME) @@ -457,26 +457,26 @@ foreach(LINE IN LISTS SOURCE_LINES) list(GET STATIC_METHOD 2 TYPES) string(LENGTH "${FUNCNAME}" LEN) math(EXPR LEN "${MLEN} - ${LEN}") - if ("${TYPES}" STREQUAL "v") - if (LEN GREATER 8) + if("${TYPES}" STREQUAL "v") + if(LEN GREATER 8) math(EXPR LEN "${LEN} - 8") - else (LEN GREATER 8) + else() set(LEN 0) - endif (LEN GREATER 8) - endif ("${TYPES}" STREQUAL "v") + endif() + endif() unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) - if ("${TYPES}" STREQUAL "v") + endforeach() + if("${TYPES}" STREQUAL "v") string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") - else ("${TYPES}" STREQUAL "v") + else() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}${ARGC}, \"${TYPES}\");") - endif ("${TYPES}" STREQUAL "v") - endforeach(STATIC_METHOD) - if (MLEN) + endif() + endforeach() + if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") - endif (MLEN) + endif() # Non-static methods set(MLEN 0) @@ -484,10 +484,10 @@ foreach(LINE IN LISTS SOURCE_LINES) string(REPLACE ":" ";" METHOD "${METHOD}") list(GET METHOD 0 FUNCNAME) string(LENGTH "${FUNCNAME}" LEN) - if (MLEN LESS LEN) + if(MLEN LESS LEN) set(MLEN ${LEN}) - endif (MLEN LESS LEN) - endforeach(METHOD) + endif() + endforeach() foreach(METHOD IN LISTS METHODS) string(REPLACE ":" ";" METHOD "${METHOD}") list(GET METHOD 0 FUNCNAME) @@ -495,26 +495,26 @@ foreach(LINE IN LISTS SOURCE_LINES) list(GET METHOD 2 TYPES) string(LENGTH "${FUNCNAME}" LEN) math(EXPR LEN "${MLEN} - ${LEN}") - if ("${TYPES}" STREQUAL "v") - if (LEN GREATER 8) + if("${TYPES}" STREQUAL "v") + if(LEN GREATER 8) math(EXPR LEN "${LEN} - 8") - else (LEN GREATER 8) + else() set(LEN 0) - endif (LEN GREATER 8) - endif ("${TYPES}" STREQUAL "v") + endif() + endif() unset(SPACES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") - endforeach(i) - if ("${TYPES}" STREQUAL "v") + endforeach() + if("${TYPES}" STREQUAL "v") string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") - else ("${TYPES}" STREQUAL "v") + else() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}${ARGC}, \"${TYPES}\");") - endif ("${TYPES}" STREQUAL "v") - endforeach(METHOD) - if (MLEN) + endif() + endforeach() + if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") - endif (MLEN) + endif() string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PostRegister(engine);") string(APPEND SQUIRREL_EXPORT "\n}") @@ -522,64 +522,64 @@ foreach(LINE IN LISTS SOURCE_LINES) reset_reader() continue() - endif ("${LINE}" MATCHES "^([ ]*)$") + endif() # Skip non-public functions - if (NOT IS_PUBLIC) + if(NOT IS_PUBLIC) continue() - endif (NOT IS_PUBLIC) + endif() # Add enums - if (IN_ENUM) + if(IN_ENUM) string(REGEX MATCH "([^, ]+)" ENUM_VALUE "${LINE}") list(APPEND ENUM_VALUES "${ENUM_VALUE}") # Check if this a special error enum list(GET ENUMS -1 ENUM) - if ("${ENUM}" MATCHES ".*::ErrorMessages") + if("${ENUM}" MATCHES ".*::ErrorMessages") # syntax: # enum ErrorMessages { # ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] # } # Set the mappings - if ("${LINE}" MATCHES "\\[(.*)\\]") + if("${LINE}" MATCHES "\\[(.*)\\]") string(REGEX REPLACE "[ ]" "" MAPPINGS "${CMAKE_MATCH_1}") string(REPLACE "," ";" MAPPINGS "${MAPPINGS}") foreach(MAPPING IN LISTS MAPPINGS) list(APPEND ENUM_STRING_TO_ERRORS "${MAPPING}:${ENUM_VALUE}") - endforeach(MAPPING) + endforeach() list(APPEND ENUM_ERROR_TO_STRINGS "${ENUM_VALUE}") - endif ("${LINE}" MATCHES "\\[(.*)\\]") - endif ("${ENUM}" MATCHES ".*::ErrorMessages") + endif() + endif() continue() - endif (IN_ENUM) + endif() # Add a const (non-enum) value - if ("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + if("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") list(APPEND CONST_VALUES "${CMAKE_MATCH_1}") continue() - endif ("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + endif() # Add a method to the list - if ("${LINE}" MATCHES "^.*\\(.*\\).*$") - if (NOT CLS_LEVEL EQUAL 1) + if("${LINE}" MATCHES "^.*\\(.*\\).*$") + if(NOT CLS_LEVEL EQUAL 1) continue() - endif (NOT CLS_LEVEL EQUAL 1) - if ("${LINE}" MATCHES "~") - if (DEFINED API_SELECTED) + endif() + if("${LINE}" MATCHES "~") + if(DEFINED API_SELECTED) message(WARNING "Destructor for '${CLS}' has @api. Tag ignored.") unset(API_SELECTED) - endif (DEFINED API_SELECTED) + endif() continue() - endif ("${LINE}" MATCHES "~") + endif() unset(IS_STATIC) - if ("${LINE}" MATCHES "static") + if("${LINE}" MATCHES "static") set(IS_STATIC TRUE) - endif ("${LINE}" MATCHES "static") + endif() string(REGEX REPLACE "(virtual|static|const)[ ]+" "" LINE "${LINE}") string(REGEX REPLACE "{.*" "" LINE "${LINE}") @@ -593,75 +593,75 @@ foreach(LINE IN LISTS SOURCE_LINES) string(REGEX MATCH "([^ ]+)( ([^ ]+))?" RESULT "${LINE}") set(FUNCTYPE "${CMAKE_MATCH_1}") set(FUNCNAME "${CMAKE_MATCH_3}") - if ("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) - if (DEFINED API_SELECTED) + if("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) + if(DEFINED API_SELECTED) message(WARNING "Constructor for '${CLS}' has @api. Tag ignored.") unset(API_SELECTED) - endif (DEFINED API_SELECTED) + endif() set(CLS_PARAM_0 "${PARAM_S}") - if (NOT PARAM_S) + if(NOT PARAM_S) continue() - endif (NOT PARAM_S) - elseif (NOT FUNCNAME) + endif() + elseif(NOT FUNCNAME) continue() - endif () + endif() string(REPLACE "," ";" PARAMS "${PARAM_S}") - if (IS_STATIC) + if(IS_STATIC) set(TYPES ".") - else (IS_STATIC) + else() set(TYPES "x") - endif (IS_STATIC) + endif() set(LEN 1) foreach(PARAM IN LISTS PARAMS) math(EXPR LEN "${LEN} + 1") string(STRIP "${PARAM}" PARAM) - if ("${PARAM}" MATCHES "\\*|&") - if ("${PARAM}" MATCHES "^char") + if("${PARAM}" MATCHES "\\*|&") + if("${PARAM}" MATCHES "^char") # Many types can be converted to string, so use '.', not 's'. (handled by our glue code) string(APPEND TYPES ".") - elseif ("${PARAM}" MATCHES "^void") + elseif("${PARAM}" MATCHES "^void") string(APPEND TYPES "p") - elseif ("${PARAM}" MATCHES "^Array") + elseif("${PARAM}" MATCHES "^Array") string(APPEND TYPES "a") - elseif ("${PARAM}" MATCHES "^struct Array") + elseif("${PARAM}" MATCHES "^struct Array") string(APPEND TYPES "a") - elseif ("${PARAM}" MATCHES "^Text") + elseif("${PARAM}" MATCHES "^Text") string(APPEND TYPES ".") - else () + else() string(APPEND TYPES "x") - endif () - elseif ("${PARAM}" MATCHES "^bool") + endif() + elseif("${PARAM}" MATCHES "^bool") string(APPEND TYPES "b") - elseif ("${PARAM}" MATCHES "^HSQUIRRELVM") + elseif("${PARAM}" MATCHES "^HSQUIRRELVM") set(TYPES "v") - else () + else() string(APPEND TYPES "i") - endif () - endforeach(PARAM) + endif() + endforeach() # Check if we want to publish this function - if (NOT DEFINED API_SELECTED) + if(NOT DEFINED API_SELECTED) set(API_SELECTED ${CLS_IN_API}) - endif (NOT DEFINED API_SELECTED) - if (NOT API_SELECTED) + endif() + if(NOT API_SELECTED) unset(API_SELECTED) continue() - endif (NOT API_SELECTED) + endif() unset(API_SELECTED) - if ("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) + if("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) set(CLS_PARAM_1 ${LEN}) set(CLS_PARAM_2 "${TYPES}") - elseif ("${FUNCNAME}" MATCHES "^_" AND NOT "${TYPES}" STREQUAL "v") - elseif (IS_STATIC) + elseif("${FUNCNAME}" MATCHES "^_" AND NOT "${TYPES}" STREQUAL "v") + elseif(IS_STATIC) list(APPEND STATIC_METHODS "${FUNCNAME}:${LEN}:${TYPES}") - else () + else() list(APPEND METHODS "${FUNCNAME}:${LEN}:${TYPES}") - endif () + endif() continue() - endif ("${LINE}" MATCHES "^.*\\(.*\\).*$") -endforeach(LINE) + endif() +endforeach() configure_file(${SCRIPT_API_SOURCE_FILE} ${SCRIPT_API_BINARY_FILE}) diff --git a/cmake/scripts/SquirrelIncludes.cmake b/cmake/scripts/SquirrelIncludes.cmake index d6d8b8ec3e..e64e2d25af 100644 --- a/cmake/scripts/SquirrelIncludes.cmake +++ b/cmake/scripts/SquirrelIncludes.cmake @@ -1,17 +1,17 @@ cmake_minimum_required(VERSION 3.5) -if (NOT INCLUDES_SOURCE_FILE) +if(NOT INCLUDES_SOURCE_FILE) message(FATAL_ERROR "Script needs INCLUDES_SOURCE_FILE defined") -endif (NOT INCLUDES_SOURCE_FILE) -if (NOT INCLUDES_BINARY_FILE) +endif() +if(NOT INCLUDES_BINARY_FILE) message(FATAL_ERROR "Script needs INCLUDES_BINARY_FILE defined") -endif (NOT INCLUDES_BINARY_FILE) -if (NOT APILC) +endif() +if(NOT APILC) message(FATAL_ERROR "Script needs APILC defined") -endif (NOT APILC) -if (NOT APIUC) +endif() +if(NOT APIUC) message(FATAL_ERROR "Script needs APIUC defined") -endif (NOT APIUC) +endif() set(ARGC 1) set(ARG_READ NO) @@ -21,32 +21,32 @@ set(ARG_READ NO) while(ARGC LESS CMAKE_ARGC) set(ARG ${CMAKE_ARGV${ARGC}}) - if (ARG_READ) + if(ARG_READ) list(APPEND SCRIPT_API_BINARY_FILES "${ARG}") - endif (ARG_READ) + endif() - if (ARG STREQUAL "--") + if(ARG STREQUAL "--") set(ARG_READ YES) - endif (ARG STREQUAL "--") + endif() math(EXPR ARGC "${ARGC} + 1") endwhile() foreach(FILE IN LISTS SCRIPT_API_BINARY_FILES) file(STRINGS "${FILE}" LINES REGEX "^void SQ${APIUC}.*_Register\\(Squirrel \\*engine\\)$") - if (LINES) + if(LINES) string(REGEX REPLACE ".*api/${APILC}/(.*)" "#include \"\\1\"" FILE "${FILE}") list(APPEND SQUIRREL_INCLUDES "${FILE}") foreach(LINE IN LISTS LINES) - if ("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register") + if("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register") continue() - endif ("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register") + endif() string(REGEX REPLACE "^.*void " " " LINE "${LINE}") string(REGEX REPLACE "Squirrel \\*" "" LINE "${LINE}") list(APPEND SQUIRREL_REGISTER "${LINE}") - endforeach(LINE) - endif (LINES) -endforeach(FILE) + endforeach() + endif() +endforeach() list(SORT SQUIRREL_INCLUDES) string(REPLACE ";" "\n" SQUIRREL_INCLUDES "${SQUIRREL_INCLUDES}") diff --git a/media/baseset/CMakeLists.txt b/media/baseset/CMakeLists.txt index c3fe34ce4e..48aa443a5b 100644 --- a/media/baseset/CMakeLists.txt +++ b/media/baseset/CMakeLists.txt @@ -20,13 +20,13 @@ set(BASESET_OTHER_SOURCE_FILES ) # Done by the subdirectories, if nforenum / grfcodec is installed -if (GRFCODEC_FOUND) +if(GRFCODEC_FOUND) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/openttd.grf PROPERTIES GENERATED TRUE) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf PROPERTIES GENERATED TRUE) list(APPEND BASESET_BINARY_FILES openttd.grf) list(APPEND BASESET_BINARY_FILES orig_extra.grf) -endif (GRFCODEC_FOUND) +endif() set(BASESET_EXTRAGRF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf) @@ -54,7 +54,7 @@ foreach(BASESET_SOURCE_FILE IN LISTS BASESET_SOURCE_FILES) ) list(APPEND BASESET_BINARY_FILES ${BASESET_BINARY_FILE}) -endforeach(BASESET_SOURCE_FILE) +endforeach() # Walk over all the other baseset files, and generate a command to copy them foreach(BASESET_OTHER_SOURCE_FILE IN LISTS BASESET_OTHER_SOURCE_FILES) @@ -70,7 +70,7 @@ foreach(BASESET_OTHER_SOURCE_FILE IN LISTS BASESET_OTHER_SOURCE_FILES) ) list(APPEND BASESET_BINARY_FILES ${BASESET_OTHER_BINARY_FILE}) -endforeach(BASESET_OTHER_SOURCE_FILE) +endforeach() # Create a new target which generates all baseset metadata files add_custom_target_timestamp(baseset_files diff --git a/media/baseset/openttd/CMakeLists.txt b/media/baseset/openttd/CMakeLists.txt index c4f8d61ade..5a98b73f5c 100644 --- a/media/baseset/openttd/CMakeLists.txt +++ b/media/baseset/openttd/CMakeLists.txt @@ -3,7 +3,7 @@ # This is mainly because not many people have both of these tools installed, # so it is cheaper to cache them in git, and only regenerate when you are # working on it / have the tools installed. -if (GRFCODEC_FOUND) +if(GRFCODEC_FOUND) include(CreateGrfCommand) create_grf_command() -endif (GRFCODEC_FOUND) +endif() diff --git a/media/baseset/orig_extra/CMakeLists.txt b/media/baseset/orig_extra/CMakeLists.txt index 36a25329f5..f71d8d4b49 100644 --- a/media/baseset/orig_extra/CMakeLists.txt +++ b/media/baseset/orig_extra/CMakeLists.txt @@ -3,7 +3,7 @@ # This is mainly because not many people have both of these tools installed, # so it is cheaper to cache them in git, and only regenerate when you are # working on it / have the tools installed. -if (GRFCODEC_FOUND) +if(GRFCODEC_FOUND) include(CreateGrfCommand) create_grf_command( # We share some files with 'openttd' grf @@ -11,4 +11,4 @@ if (GRFCODEC_FOUND) ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/canals.png ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/chars.png ) -endif (GRFCODEC_FOUND) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0ccf650abf..0a0ac406a3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,11 +24,11 @@ add_files( viewport_sprite_sorter_sse4.cpp CONDITION SSE_FOUND ) -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set_compile_flags( viewport_sprite_sorter_sse4.cpp COMPILE_FLAGS -msse4.1) -endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") +endif() add_files( aircraft.h diff --git a/src/blitter/CMakeLists.txt b/src/blitter/CMakeLists.txt index 2abe6aec0e..0aff381413 100644 --- a/src/blitter/CMakeLists.txt +++ b/src/blitter/CMakeLists.txt @@ -32,7 +32,7 @@ add_files( CONDITION NOT OPTION_DEDICATED AND SSE_FOUND ) -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set_compile_flags( 32bpp_anim_sse2.cpp 32bpp_sse2.cpp @@ -44,7 +44,7 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clan 32bpp_anim_sse4.cpp 32bpp_sse4.cpp COMPILE_FLAGS -msse4.1) -endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") +endif() add_files( base.hpp diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt index 00b554126f..d9243b5311 100644 --- a/src/lang/CMakeLists.txt +++ b/src/lang/CMakeLists.txt @@ -78,7 +78,7 @@ foreach(LANG_SOURCE_FILE IN LISTS LANG_SOURCE_FILES) ) list(APPEND LANG_BINARY_FILES ${LANG_BINARY_FILE}) -endforeach(LANG_SOURCE_FILE) +endforeach() # Create a new target which compiles all language files add_custom_target(language_files diff --git a/src/music/CMakeLists.txt b/src/music/CMakeLists.txt index 0ae15fde26..b20f8aaf7c 100644 --- a/src/music/CMakeLists.txt +++ b/src/music/CMakeLists.txt @@ -1,4 +1,4 @@ -if (NOT OPTION_DEDICATED) +if(NOT OPTION_DEDICATED) add_files( allegro_m.cpp allegro_m.h @@ -42,7 +42,7 @@ if (NOT OPTION_DEDICATED) os2_m.h CONDITION OPTION_OS2 ) -endif (NOT OPTION_DEDICATED) +endif() add_files( midi.h diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index c228679282..e294cfd05c 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -8,7 +8,7 @@ foreach(ENUM IN LISTS ENUM_LINES) string(REGEX REPLACE ".* ([^ @]+)@.*" "\\1" FILE_PATTERN "${ENUM}") file(GLOB FILENAMES "${FILE_PATTERN}") list(APPEND DEPENDENCIES ${FILENAMES}) -endforeach(ENUM) +endforeach() list(REMOVE_DUPLICATES DEPENDENCIES) # Add a command to generate script_window.hpp @@ -40,9 +40,9 @@ foreach(API "ai;AI" "game;GS" "template;Template") list(GET API 1 APIUC) foreach(SCRIPT_API_FILE IN LISTS SCRIPT_API_FILES) - if ("${SCRIPT_API_FILE}" MATCHES ".*script_controller.*") + if("${SCRIPT_API_FILE}" MATCHES ".*script_controller.*") continue() - endif ("${SCRIPT_API_FILE}" MATCHES ".*script_controller.*") + endif() get_filename_component(SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE}" NAME) string(REPLACE "script_" "${APILC}_" SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE_NAME}") set(SCRIPT_API_BINARY_FILE "${CMAKE_BINARY_DIR}/generated/script/api/${APILC}/${SCRIPT_API_FILE_NAME}.sq") @@ -62,7 +62,7 @@ foreach(API "ai;AI" "game;GS" "template;Template") COMMENT "Generating ${APILC}/${SCRIPT_API_FILE_NAME}.sq" ) list(APPEND SCRIPT_${APIUC}_BINARY_FILES ${SCRIPT_API_BINARY_FILE}) - endforeach(SCRIPT_API_FILE) + endforeach() add_custom_target_timestamp(script_${APILC} DEPENDS @@ -72,7 +72,7 @@ foreach(API "ai;AI" "game;GS" "template;Template") script_window ) - if (NOT "${APILC}" STREQUAL "template") + if(NOT "${APILC}" STREQUAL "template") list(APPEND SCRIPT_${APIUC}_BINARY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${APILC}/${APILC}_controller.hpp.sq") set(INCLUDES_BINARY_FILE "${CMAKE_BINARY_DIR}/generated/script/api/${APILC}/${APILC}_includes.hpp") add_custom_command_timestamp(OUTPUT ${INCLUDES_BINARY_FILE} @@ -100,11 +100,11 @@ foreach(API "ai;AI" "game;GS" "template;Template") add_dependencies(script_api script_${APILC}_includes ) - else (NOT "${APILC}" STREQUAL "template") + else() add_dependencies(script_api script_${APILC} ) - endif (NOT "${APILC}" STREQUAL "template") + endif() target_include_directories(script_api INTERFACE @@ -112,7 +112,7 @@ foreach(API "ai;AI" "game;GS" "template;Template") ${CMAKE_BINARY_DIR}/generated/script/api/${APILC} ${CMAKE_CURRENT_SOURCE_DIR}/${APILC} ) -endforeach(API) +endforeach() add_library(openttd::script_api ALIAS script_api) diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt index 24a38e409f..bff33deda3 100644 --- a/src/sound/CMakeLists.txt +++ b/src/sound/CMakeLists.txt @@ -1,4 +1,4 @@ -if (NOT OPTION_DEDICATED) +if(NOT OPTION_DEDICATED) add_files( allegro_s.cpp allegro_s.h @@ -34,7 +34,7 @@ if (NOT OPTION_DEDICATED) xaudio2_s.h CONDITION WIN32 AND XAUDIO2_FOUND ) -endif (NOT OPTION_DEDICATED) +endif() add_files( sound_driver.hpp diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt index c6251e9391..a5d862e9b6 100644 --- a/src/video/CMakeLists.txt +++ b/src/video/CMakeLists.txt @@ -1,6 +1,6 @@ add_subdirectory(cocoa) -if (NOT OPTION_DEDICATED) +if(NOT OPTION_DEDICATED) add_files( allegro_v.cpp allegro_v.h @@ -24,7 +24,7 @@ if (NOT OPTION_DEDICATED) win32_v.h CONDITION WIN32 ) -endif (NOT OPTION_DEDICATED) +endif() add_files( dedicated_v.cpp From 49b75d67bd3b13016d06f884bb66c14063d3f722 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Fri, 25 Sep 2020 16:35:48 +0200 Subject: [PATCH 255/601] Fix 70f9c3c6: The *_filter_criteria variables contain an index, not a cargo. (#8320) --- src/industry_gui.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 87fa97d3b5..a795b6a0ed 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1254,14 +1254,14 @@ protected: 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 + byte produced_cargo_filter_criteria; ///< Selected produced cargo filter index + byte accepted_cargo_filter_criteria; ///< Selected accepted cargo filter index /** * Set cargo filter list item index. * @param index The index of the cargo to be set */ - void SetProducedCargoFilterIndex(int index) + void SetProducedCargoFilterIndex(byte index) { if (this->produced_cargo_filter_criteria != index) { this->produced_cargo_filter_criteria = index; @@ -1278,7 +1278,7 @@ protected: * Set cargo filter list item index. * @param index The index of the cargo to be set */ - void SetAcceptedCargoFilterIndex(int index) + void SetAcceptedCargoFilterIndex(byte index) { if (this->accepted_cargo_filter_criteria != index) { this->accepted_cargo_filter_criteria = index; @@ -1296,7 +1296,7 @@ protected: */ void SetCargoFilterArray() { - uint filter_items = 0; + byte filter_items = 0; /* Add item for disabling filtering. */ this->cargo_filter[filter_items] = CF_ANY; From 933d02dce217d13074e189284bb1b3654b9186ac Mon Sep 17 00:00:00 2001 From: Galigator Date: Fri, 25 Sep 2020 09:26:37 +0200 Subject: [PATCH 256/601] Change: Service depot also reset breakdown chance. --- src/vehicle.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index a458b1c650..3ed7cb1b00 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -170,6 +170,7 @@ void VehicleServiceInDepot(Vehicle *v) v->reliability = v->GetEngine()->reliability; /* Prevent vehicles from breaking down directly after exiting the depot. */ v->breakdown_chance /= 4; + if (_settings_game.difficulty.vehicle_breakdowns == 1) v->breakdown_chance = 0; // on reduced breakdown v = v->Next(); } while (v != nullptr && v->HasEngineType()); } From 85ca1c535e0d22a19a9a2157f0269f3a84c14059 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Thu, 24 Sep 2020 17:48:03 +0100 Subject: [PATCH 257/601] Codechange: Set CMAKE_BUILD_TYPE to default to debug if not otherwise set --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fd8fbc880..2c7131df08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,11 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory") endif() +# Debug mode by default. +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug) +endif() + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) From d58531ec8465178d34e7ea872cb056a148590778 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 26 Sep 2020 10:12:43 +0000 Subject: [PATCH 258/601] Update: Translations from eints german: 1 change by frosch123 --- src/lang/german.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/german.txt b/src/lang/german.txt index 26062c4fb1..38b74869e6 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3491,6 +3491,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Fahrzeug STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schiff kaufen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Flugzeug kaufen +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Schiff kaufen und umrüsten STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Angewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag From 4279620aef3008e414bbac856810fc4d7c29794e Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 26 Sep 2020 17:51:50 +0000 Subject: [PATCH 259/601] Update: Translations from eints turkish: 28 changes by nullaf dutch: 1 change by rcpaul --- src/lang/dutch.txt | 2 +- src/lang/turkish.txt | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3d4a0f7d12..c1e3acc5d7 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1304,7 +1304,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het w STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat knopinfo worden weergegeven wanneer je de muis boven een besturingselement houdt. Wanneer de waarde 0 is, wordt knopinfo aan de rechtermuisknop gebonden. -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} seconde{P 0 "" n} +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} milliseconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik STR_CONFIG_SETTING_POPULATION_IN_LABEL :Inwoneraantal bij stad weergeven: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Aantal inwoners van een stad weergeven bij naam op de kaart diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 8193f2970e..d8a3b3528d 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -236,6 +236,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Süzme k STR_BUTTON_SORT_BY :{BLACK}Sırala STR_BUTTON_LOCATION :{BLACK}Göster STR_BUTTON_RENAME :{BLACK}Yeni ad +STR_BUTTON_CATCHMENT :{BLACK}Kapsama alanı +STR_TOOLTIP_CATCHMENT :{BLACK}Kapsama alanını göstermeyi aç/kapa STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Pencereyi kapat STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Pencere başlığı - pencereyi hareket ettirmek için sürükle @@ -357,6 +359,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Peyzaj y STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Şehir yapımı STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Fabrika yapımı STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Yol yapımı +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK} Tramvay yapımı STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Ağaç dik. Shift ile tıklama maliyet tahminini gösterir STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Tabela koy STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Nesneyi yerleştirin. Shift ile tıklama maliyet tahminini gösterir @@ -927,6 +930,8 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Gürcistan Lari STR_GAME_OPTIONS_CURRENCY_IRR :İran Riyali (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Yeni Rus Rublesi (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Meksika Pezosu (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Yeni Tayvan Doları (NTD) +STR_GAME_OPTIONS_CURRENCY_INR :Hindistan Rupisi (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Karayolu taşıtları @@ -993,6 +998,7 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :Arayüz boyutun STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Yazı iki kat büyük +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Dört kat büyük STR_GAME_OPTIONS_BASE_GRF :{BLACK}Temel grafik kümesi STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kullanılacak temel grafik kümesini seçin @@ -1535,6 +1541,7 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Yüzeysel ekono STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Etkinleştirildiğinde, endüstri üretim miktarı daha sık ve daha küçük adımlarla değişir. Eğer endüstriler bir NewGRF dosyası tarafından sağlanıyorsa bu özellik genellikle etkisiz kalır STR_CONFIG_SETTING_ALLOW_SHARES :Diğer şirketlerin hisseleri alınabilsin: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Etkinleştirildiğinde, şirketlerin hisse senetlerinin alınıp satılması mümkün olur. Hisse senetleri sadece belli bir yaşa ulaşan şirketler için geçerlidir +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Bir şirketin hisselerinin satılabileceği ve diğer şirketlerin alabileceği minimum şirket yaşını belirleyin. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Besleme sistemlerinde, bölümlerden elde edilen kardan ödenecek yüzde: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Besleme sistemlerinde, sistemi oluşturan ara bölümlere verilen kar yüzdesi. Böylece kar miktarı üzerinde daha fazla kontrol elde edilmiş olur STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Fare sürüklendiğinde sinyal yerleştirme sıklığı: {STRING} @@ -1575,6 +1582,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Bu seçeneği e STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Yasak STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :İzin verildi STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :İzin verildi, özel kasaba yerleşimi +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Şehrin genel nüfusuna oranla, şehirlerdeki evler tarafından ne kadar kargo üretiliyor.{}Üstel büyüme: İki katı büyüklükteki bir şehir dört katı büyüklükte yolcuya sahip olur.{}Lineer büyüme: İki katı büyüklükteki bir şehir iki katı büyüklükte yolcuya sahip olur. STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Oyunda ağaç dikme: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Oyundaki rastgele ağaçların görünümünü kontrol eder. Bu, ağaçların büyümesine bağımlı olan endüstrileri etkileyebilir, örneğin keresteciler gibi @@ -2417,6 +2425,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Tünel Y STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Tramvay tüneli yap. Shift ile tıklama maliyet tahminini gösterir STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Yol yap/sil arasında geçiş yap STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Tramvay yapımı/yıkımı +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Yol türünü Dönüştür/Geliştir. Shift ile tıklama maliyet tahminini gösterir # Road depot construction window @@ -2602,6 +2611,8 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}İstenen: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Ray türü: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Yol türü: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tramvay tipi: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Ray hız sınırı: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Yol hız sınırı: {LTBLUE}{VELOCITY} @@ -2720,6 +2731,8 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kare/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kare/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kare/s +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! @@ -2750,6 +2763,7 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafik işleme STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Dünya görüş alanı derleme STR_FRAMETIME_CAPTION_VIDEO :Video çıkışı STR_FRAMETIME_CAPTION_SOUND :Ses karıştırma +STR_FRAMETIME_CAPTION_GAMESCRIPT :Oyun betiği ############ End of leave-in-this-order @@ -3080,6 +3094,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :İsim değişti # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} belediyesi +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Bölgeyi yerel yönetim sınırları içinde göster STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Taşıma şirketi değerlendirmeleri: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Yapılabilecekler: @@ -3349,6 +3364,9 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Fabrikal STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Hiçbiri - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Fabrika adları - görüntüyü fabrikada merkezlemek için adına tıklayın. Ctrl ile tıklama fabrikanın konumunu gösteren yeni bir pencere açar +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Üretilmiş kargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Tüm kargo tipleri +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Hiçbiri # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3442,6 +3460,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Yeni Monoray STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Yeni Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Yeni Karayolu Araçları +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Yeni Tramvay Araçları ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Trenler @@ -3450,6 +3469,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Yeni Hava Arac ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Fiyat: {GOLD}{CURRENCY_LONG}{BLACK} Ağırlık: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Maliyet: {GOLD}{CURRENCY_LONG}{BLACK} (Tamir maliyeti: {GOLD}{CURRENCY_LONG}{BLACK}) Ağırlık: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Hız: {GOLD}{VELOCITY}{BLACK} Güç: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Hız: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Okyanus hızı: {GOLD}{VELOCITY} @@ -3462,6 +3482,7 @@ STR_PURCHASE_INFO_RELIABILITY :{BLACK}Aza. Gü STR_PURCHASE_INFO_COST :{BLACK}Fiyat: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Ağırlık: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Fiyat: {GOLD}{CURRENCY_LONG}{BLACK} Hız: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Maliyet: {GOLD}{CURRENCY_LONG}{BLACK} (Tamir maliyeti: {GOLD}{CURRENCY_LONG}{BLACK}) Hız: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasite: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Güç Veren Vagonlar: {GOLD}+{POWER}{BLACK} Ağırlık: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Dönüştürülebildiği kargolar: {GOLD}{STRING} @@ -3488,6 +3509,9 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}İşaret STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili gemiyi satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili uçağı satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Seçili karayolu aracını satın alın. Shift ile tıklama satın almadan tahmini maliyeti gösterir +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Seçili gemiyi satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Seçili uçağı satın al. Shift ile tıklama satın almanın tahmini maliyetini gösterir STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Yeni isim STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}İsim @@ -3644,6 +3668,7 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Lokomoti STR_REPLACE_ENGINES :Lokomotifler STR_REPLACE_WAGONS :Vagon STR_REPLACE_ALL_RAILTYPE :Tüm demiryolu araçları +STR_REPLACE_ALL_ROADTYPE :Tüm karayolu araçları STR_REPLACE_HELP_RAILTYPE :{BLACK}Lokomatiflerini değiştireceğiniz ray türünü seçin STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Soldaki değiştiriliyorsa neyle değiştirildiğini göster @@ -4103,6 +4128,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 +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Tüm haritanın ekran görüntüsünü al # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametreler @@ -4395,6 +4421,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Yol bura STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Tramvay kaldırılamaz... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... karayolu yok STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tramvay yolu yok +STR_ERROR_NO_SUITABLE_ROAD :{WHITE} Uygun yol yok # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Buraya kanal yapılamaz... @@ -4447,6 +4474,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Grup olu STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Bu grup silinemiyor... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Grubun ismi değiştirilemiyor... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Üst grup ayarlanamıyor... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}Grup hiyerarşisinde döngülere izin verilmez STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Bu gruptaki bütün araçlar çıkartılamıyor... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Araç bu gruba eklenemiyor... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Paylaşılan araçlar bu gruba eklenemiyor... From 5584bf6bbb87f022528615fc9dc2bc3f998989e4 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 27 Sep 2020 17:51:48 +0000 Subject: [PATCH 260/601] Update: Translations from eints portuguese (brazilian): 22 changes by Lucas559-noob polish: 6 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 23 ++++++++++++++++++++++- src/lang/polish.txt | 12 ++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index fc27d76282..eaaaae0c8f 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -188,6 +188,7 @@ STR_COLOUR_ORANGE :Laranja STR_COLOUR_BROWN :Marrom STR_COLOUR_GREY :Cinza STR_COLOUR_WHITE :Branco +STR_COLOUR_RANDOM :Aleatório # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -857,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}Nov{G o a} {STRING} já está disponível! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir a janela do grupo focado no grupo do veículo 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} @@ -923,6 +925,8 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado.. STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano (MXN) +STR_GAME_OPTIONS_CURRENCY_HKD :Dollar de Hong Kong (HKD) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automóveis @@ -985,6 +989,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamanho da fonte STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base @@ -1464,6 +1469,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA em STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite jogadores controlados pelo computador participar em jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos de computação que um script pode tomar em um turno +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quanta memória um único script pode consumir antes de ser encerrado à força. Isso pode precisar ser aumentado para mapas grandes. STR_CONFIG_SETTING_SERVINT_ISPERCENT :Os intervalos de serviço são em percentagem: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Define se a manutenção de veículos é ativada pelo tempo passado desde a última manutenção ou quando a confiabilidade alcança um certo valor @@ -1566,6 +1572,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Se ativado, per STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, layout de cidades customizável +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Posicionamento de árvores: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o nascimento aleatório de árvores durante o jogo. Isso pode afetar indústrias que dependem do crescimento de árvores, como serrarias @@ -2240,7 +2247,7 @@ STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de I STR_CONTENT_TYPE_SCENARIO :Cenário STR_CONTENT_TYPE_HEIGHTMAP :Mapa topográfico STR_CONTENT_TYPE_BASE_SOUNDS :Sons padrão -STR_CONTENT_TYPE_BASE_MUSIC :Músicsas padrão +STR_CONTENT_TYPE_BASE_MUSIC :Músicas padrão STR_CONTENT_TYPE_GAME_SCRIPT :Script do jogo STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de GS's @@ -2591,6 +2598,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceita: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de ferrovia: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipo de estrada: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Velocidade limite do trilho: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da rua: {LTBLUE}{VELOCITY} @@ -2759,6 +2767,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem certeza de que deseja substituir o arquivo existente? STR_SAVELOAD_OSKTITLE :{BLACK}Coloque o nome para o jogo salvo @@ -3082,6 +3091,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objetivos STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objetivos globais +STR_GOALS_SPECTATOR :Objetivos Globais STR_GOALS_GLOBAL_TITLE :{G=m}{BLACK}Objetivos globais: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{G=m}{ORANGE}- Nenhum - @@ -3321,6 +3331,7 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústr STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nenhum - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes das indústrias - clique no nome para centralizar a visçao principal na indústria. Ctrl+Clique abre uma nova janela na localização da indústria +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3410,9 +3421,11 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nova Locomotiva STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nova Locomotiva Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Automóveis +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Novo Veículo Elétrico ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Trens +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Novo Veículo Terrestre STR_BUY_VEHICLE_SHIP_CAPTION :Novas Embarcações STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave ############ range for vehicle availability ends @@ -3449,12 +3462,15 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Embarcação STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Repor Navio STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo ferroviário selecionado. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo selecionado. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a embarcação selecionada. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a aeronave selecionada. Shift+Clique mostra o preço estimado sem a compra +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compre e troque o trem destacado. Shift+Click mostra os custos estimados sem comprar +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :Compre e reponha o navio em destaque. Shift+Clique mostra o custo estimado sem comprar STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear @@ -3619,6 +3635,7 @@ STR_REPLACE_ELRAIL_VEHICLES :Locomotivas El STR_REPLACE_MONORAIL_VEHICLES :Monotrilho STR_REPLACE_MAGLEV_VEHICLES :Maglevs +STR_REPLACE_ROAD_VEHICLES :Veículos terrestres STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Faz autosubstituição manter o tamanho do trem removendo vagões (começando pela frente), se ao substituir a locomotiva o trem ficar maior @@ -4069,6 +4086,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selecion STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script +STR_SCREENSHOT_CAPTION :{WHITE}Tirar uma captura de tela +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Zoom máximo na captura de tela +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa todo # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros @@ -4342,6 +4362,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Remova a ferrovia antes STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rua é mão única ou está bloqueada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Cruzamentos de nível não são permitidos para esse tipo de trilho +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não permitidas para este tipo de estrada STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossível construir ferrovia aqui... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Impossível remover a ferrovia daqui... diff --git a/src/lang/polish.txt b/src/lang/polish.txt index bcbfd24967..f84ac2af2d 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -857,7 +857,7 @@ 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_SHOW_FRAMERATE :Pokaż ilość klatek na sekundę +STR_ABOUT_MENU_SHOW_FRAMERATE :Pokaż liczbę klatek na sekundę STR_ABOUT_MENU_ABOUT_OPENTTD :Info o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Wyrównywanie sprite'ów STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Włącz/wyłącz ramki @@ -3120,7 +3120,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} Zespół OpenTTD # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę +STR_FRAMERATE_CAPTION :{WHITE}Liczba klatek na sekundę STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tempo symulacji: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę. @@ -4293,7 +4293,7 @@ STR_ORDERS_END_OF_ORDERS :- - Koniec pole STR_ORDERS_END_OF_SHARED_ORDERS :- - Koniec współdzielonych poleceń - - # Order bottom buttons -STR_ORDER_NON_STOP :{BLACK}Non-stop +STR_ORDER_NON_STOP :{BLACK}Bezpośrednio STR_ORDER_GO_TO :Idź do STR_ORDER_GO_NON_STOP_TO :Idź bezpośrednio do STR_ORDER_GO_VIA :Idź przez @@ -4304,7 +4304,7 @@ STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Pełny z STR_ORDER_DROP_LOAD_IF_POSSIBLE :Załaduj jeśli dostępne STR_ORDER_DROP_FULL_LOAD_ALL :Pełny załadunek wszystkiego STR_ORDER_DROP_FULL_LOAD_ANY :Pełny załadunek któregoś z towarów -STR_ORDER_DROP_NO_LOADING :Nie ładować +STR_ORDER_DROP_NO_LOADING :Nie ładuj STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Zmień sposób załadunku w podświetlonym poleceniu STR_ORDER_TOGGLE_UNLOAD :{BLACK}Rozładuj i załaduj @@ -4375,7 +4375,7 @@ STR_ORDER_GO_TO_WAYPOINT :Idź przez {WAY STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Idź bezpośrednio poprzez {WAYPOINT} STR_ORDER_SERVICE_AT :Serwisuj w -STR_ORDER_SERVICE_NON_STOP_AT :Serwisuj non-stop w +STR_ORDER_SERVICE_NON_STOP_AT :Serwisuj bezpośrednio w STR_ORDER_NEAREST_DEPOT :najbliższego STR_ORDER_NEAREST_HANGAR :najbliższego hangaru @@ -4395,7 +4395,7 @@ STR_ORDER_IMPLICIT :(sugerowany) STR_ORDER_FULL_LOAD :(Pełny załadunek) STR_ORDER_FULL_LOAD_ANY :(Pełny załadunek dowolnego towaru) -STR_ORDER_NO_LOAD :(Nie ładować) +STR_ORDER_NO_LOAD :(Nie ładuj) STR_ORDER_UNLOAD :(Rozładuj i zabierz ładunek) STR_ORDER_UNLOAD_FULL_LOAD :(Rozładuj i czekaj na pełny załadunek) STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Rozładuj i czekaj na pełny załadunek któregoś z towarów) From d9b0e6c550c25b4d02c254f3fb5d85ce39e55aa0 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 28 Sep 2020 17:52:03 +0000 Subject: [PATCH 261/601] Update: Translations from eints romanian: 7 changes by ALEX11BR portuguese (brazilian): 44 changes by Lucas559-noob --- src/lang/brazilian_portuguese.txt | 45 ++++++++++++++++++++++++++++++- src/lang/romanian.txt | 7 +++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index eaaaae0c8f..49a1b301c9 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -235,6 +235,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecion STR_BUTTON_SORT_BY :{BLACK}Classificar por STR_BUTTON_LOCATION :{BLACK}Local STR_BUTTON_RENAME :{BLACK}Renomear +STR_BUTTON_CATCHMENT :{BLACK}Cobertura +STR_TOOLTIP_CATCHMENT :{BLACK}Alternar a visão da área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela @@ -263,6 +265,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ao ativa STR_BUTTON_DEFAULT :{BLACK}Padrão STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Aviso: os administradores do servidor podem ler qualquer texto inserido aqui. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -336,6 +339,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Ampliar STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Reduzir a visão STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir linha ferroviária STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir rodovias +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir bondes STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir docas STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir a barra de paisagismo para elevar ou abaixar terreno, plantar árvores, etc. @@ -464,6 +468,7 @@ STR_TOOLBAR_SOUND_MUSIC :Som/música ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Última mensagem/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Histórico de Mensagens +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as mensagens ############ range ends here ############ range for about menu starts @@ -926,7 +931,10 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano (MXN) -STR_GAME_OPTIONS_CURRENCY_HKD :Dollar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_NTD :Novo dólar de Taiwan (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi chinês (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rúpia Indiana (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automóveis @@ -991,6 +999,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamanho da fonte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Tamanho duplo +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Tamanho quádruplo STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar @@ -1174,6 +1184,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisag STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite paisagismo sob edifícios e vias sem precisar removê-las STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista das áreas de abrangência: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Exibe áreas de abrangência de para diferentes tipos de estações e aeroportos +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando habilitado, os setores com estações conectadas (como plataformas de petróleo) também podem ser atendidos por estações de propriedade da empresa construídas nas proximidades. Quando desativados, esses setores só podem ser atendidos por suas estações anexas. Qualquer estação próxima da empresa não será capaz de atendê-los, nem a estação anexa servirá qualquer outra coisa que não seja a indústria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais rodovias, pontes, etc. das cidades: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover infraestrutura e edifícios de cidades STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de trens: {STRING} @@ -1259,6 +1270,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Impossí STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de Infraestrutura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando ativado, infraestrutura gera custos de manutenção. O custo aumenta proporcionalmente à malha de transportes, afetando companhias maiores mais do que as menores +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolha a cor inicial para a empresa STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca saem de linha: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ativando essa config. mantém todos os tipos de aeroportos disponíveis à construção após sua introdução @@ -1293,6 +1305,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Exibir populaç STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Exibe a população das cidades nos nomes, no mapa STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das linhas nos gráficos: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicione uma linha à janela de construção do veículo, mostrando de qual NewGRF o veículo selecionado vem. STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :O terreno define a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das cidades. NewGRF's e Scripts de Jogo permitem um controle mais fino @@ -1528,6 +1541,8 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completa STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias coloridas aparecem em: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano a partir do qual os jornais são impressos em cor. Antes disso, serão em preto-e-branco STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final deste ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{} Se isso for antes do ano inicial, a tela de pontuação máxima nunca será exibida. +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_SMOOTH_ECONOMY :Ativar economia regular (alterações menores): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quando ativado, a produção de indústrias muda com mais frequência, e mais sutilmente STR_CONFIG_SETTING_ALLOW_SHARES :Permite comprar ações de outras empresas: {STRING} @@ -1572,6 +1587,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Se ativado, per STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, layout de cidades customizável +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas cidades, em relação à população geral da cidade.{} Crescimento quadrático: uma cidade com o dobro do tamanho gera quatro vezes mais passageiros.{} Crescimento linear: uma cidade com o dobro do tamanho gera o dobro da quantidade de passageiros. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Posicionamento de árvores: {STRING} @@ -1814,6 +1830,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mudar an STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquemas de cor gerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibe esquemas de cor de trens @@ -2073,6 +2090,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor está protegido. Digite a senha STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes @@ -2413,7 +2431,10 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel de bonde. Shift altera construção/preço estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Alternar construir/remover para contrução rodoviária STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar construir/remover linhas de bonde e sinais +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/atualizar o tipo de estrada. Shift altera construção/exibição de estimativa de custo +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Melhorar o tipo de bonde. Shift troca construção/amostra custo estimado +STR_ROAD_NAME_TRAM :Bonde # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientação da Garagem @@ -2710,6 +2731,7 @@ STR_FRAMERATE_SPEED_FACTOR :{WHITE}Fator de STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está sendo executado, comparado com a velocidade esperada na simulação normal STR_FRAMERATE_CURRENT :{WHITE}Atual STR_FRAMERATE_AVERAGE :{WHITE}Médio +STR_FRAMERATE_MEMORYUSE :{WHITE}Memória STR_FRAMERATE_DATA_POINTS :{WHITE}Dados baseados em {COMMA} medidas STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms @@ -2726,12 +2748,15 @@ STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tiques STR_FRAMERATE_GL_SHIPS :{WHITE} Tiques de embarcação: STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Tiques de aeronave: STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Tiques do mundo: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Atraso no gráfico de link: STR_FRAMERATE_DRAWING :{WHITE}Renderizações de gráficos: STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Visualizações do mundo: STR_FRAMERATE_VIDEO :{WHITE}Saída de vídeo: STR_FRAMERATE_SOUND :{WHITE}Mixagem de áudio: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script do jogo: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo STR_FRAMETIME_CAPTION_GL_ECONOMY :Manuseio de carga STR_FRAMETIME_CAPTION_GL_TRAINS :Tiques de trem STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tiques de automóveis @@ -2767,6 +2792,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir ficheiro STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem certeza de que deseja substituir o arquivo existente? STR_SAVELOAD_OSKTITLE :{BLACK}Coloque o nome para o jogo salvo @@ -2885,6 +2911,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versão: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versão compatível: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}SomaMD5 (verf. de segurança): {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Sem informação disponível @@ -2997,6 +3024,7 @@ STR_NEWGRF_BUGGY :{WHITE}O NewGRF STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informação de carga/readaptação para '{1:ENGINE}' difere da lista de aquisição após a construção. Isso pode causar a autorenovação/-substituição à falhar a readaptação corretamente. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito no callback da produção STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Retorno {1:HEX} retornou um resultado desconhecido/inválido {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retornou tipo de carga inválido no retorno de chamada de produção em {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3332,6 +3360,8 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nenhu STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes das indústrias - clique no nome para centralizar a visçao principal na indústria. Ctrl+Clique abre uma nova janela na localização da indústria STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos os tipos de carga +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nenhum # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3399,6 +3429,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Remove o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renomeia o grupo selecionado +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a pintura do grupo selecionado STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Remover grupo @@ -3447,6 +3478,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões energizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Adaptável para: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todos as cargas +STR_PURCHASE_INFO_NONE :Nenhum STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Tração máx : {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados @@ -3462,7 +3494,9 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Embarcação STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Trocar Veículos STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Repor Navio +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e reequipar aeronaves STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo ferroviário selecionado. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo selecionado. Shift+Clique mostra preço estimado sem a compra @@ -3471,6 +3505,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compre e troque o trem destacado. Shift+Click mostra os custos estimados sem comprar STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :Compre e reponha o navio em destaque. Shift+Clique mostra o custo estimado sem comprar +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e repor a aeronave destacada. Shift+Clique mostra o custo estimado sem comprar STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear @@ -3582,6 +3617,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Projetamos um novo {STRING} - estaria interessado em um ano de exclusividade do uso deste veículo, de modo a que possamos avaliar a sua performance antes de o disponibilizar para todos ? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :locomotiva ferroviária +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotiva ferroviária eletrificada STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotiva monotrilho STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva maglev @@ -3856,6 +3892,7 @@ STR_ORDER_CONDITIONAL_AGE :Idade (anos) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita de manutenção STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida restante (anos) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Confiabilidade máxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comprarar os dados do veículo com o valor fornecido STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a @@ -4087,8 +4124,10 @@ STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script STR_SCREENSHOT_CAPTION :{WHITE}Tirar uma captura de tela +STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de tela normal STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Zoom máximo na captura de tela STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa todo +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros @@ -4382,6 +4421,10 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Impossí STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Impossível remover bonde daqui... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...não há rodovias STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...não há linha de bonde +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui ... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Sem estrada adequada +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nenhum bonde adequado +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... bonde incompatível # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Impossível construir canais aqui... diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 2842dd4fec..8be8b275ed 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -187,6 +187,7 @@ STR_COLOUR_ORANGE :Portocaliu STR_COLOUR_BROWN :Maro STR_COLOUR_GREY :Gri STR_COLOUR_WHITE :Alb +STR_COLOUR_DEFAULT :Prestabilit # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph @@ -233,6 +234,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Alegeți STR_BUTTON_SORT_BY :{BLACK}Ordonează STR_BUTTON_LOCATION :{BLACK}Locație STR_BUTTON_RENAME :{BLACK}Nume nou +STR_BUTTON_CATCHMENT :Arie de acoperire STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Închide fereastra STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Titlul ferestrei - trage de aici pentru a muta fereastra @@ -1444,6 +1446,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permite Intelig STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite ca jucătorii controlați de AI să participe în jocuri multiplayer STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Număr opcodes înainte de suspendarea scripturilor: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Numărul maxim de instrucțiuni pe care un script le poate executa pe parcursul unei ture +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervaluri de service în procente: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Alege dacă întreținerea vehiculelor este activată de trecerea unei anumite perioade de timp, sau scăzând un anumit procent din gradul de rezistență al vehiculului @@ -1647,6 +1650,7 @@ STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Câmpur STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Construcţie STR_CONFIG_SETTING_ADVISORS :{ORANGE}Știri / Consilieri STR_CONFIG_SETTING_COMPANY :{ORANGE}Companie +STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Contabilitate STR_CONFIG_SETTING_VEHICLES :{ORANGE}Vehicule STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Direcţionare STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Dezastre / Accidente @@ -2554,6 +2558,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Numele d STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Încărcături acceptate: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tip șină: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limită viteză pe calea ferată: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Viteza limită a drumului: {LTBLUE}{VELOCITY} @@ -2664,6 +2669,7 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM STR_FRAMERATE_VIDEO :{BLACK}Ieșire video: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ECONOMY :Manipularea încărcăturilor ############ End of leave-in-this-order @@ -4434,6 +4440,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Setul de sunete STR_BASESOUNDS_NONE_DESCRIPTION :Un set de sunete fără nici un sunet inclus. STR_BASEMUSIC_WIN_DESCRIPTION :Setul de muzică original al Transport Tycoon Deluxe pentru Windows. STR_BASEMUSIC_DOS_DESCRIPTION :Setul de muzică original al Transport Tycoon Deluxe pentru DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Setul de muzică original al Transport (Original/World Editor) pentru DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Un set de muzică fără muzică inclusă. ##id 0x2000 From bdaf596373b62fc6443d70dac8939f2638bff8c9 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 30 Sep 2020 17:52:14 +0000 Subject: [PATCH 262/601] Update: Translations from eints german: 1 change by matthiasradde polish: 17 changes by yazalo --- src/lang/german.txt | 1 + src/lang/polish.txt | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 38b74869e6..80e8ffa7a7 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3450,6 +3450,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Neue Einschiene STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Neue Magnetbahnfahrzeuge STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Neue Fahrzeuge +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Neue Straßenbahnen ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Neue Schienenfahrzeuge diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f84ac2af2d..cd265afca8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1586,11 +1586,11 @@ STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Nachylenie stoków dla pojazdów drogowych: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Pochylenie pola stoku dla pojazdów drogowych. Wyższa wartość utrudnia podjazd pod górę STR_CONFIG_SETTING_FORBID_90_DEG :Zabroń pociągom skręcać o 90 stopni: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-stopniowy zakręt występuje wtedy, gdy bezpośrednio po poziomym odcinku toru występuje odcinek pionowy na sąsiadującym polu zmuszając pociąg do skrętu o 90 stopni pokonując krawędź pola zamiast normalnego, 45-stopniowego skrętu w innych kombinacjach torów. +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-stopniowy zakręt występuje wtedy, gdy bezpośrednio po poziomym odcinku toru występuje odcinek pionowy (lub na odwrót), zmuszając pociąg do ostrzejszego skrętu (zamiast normalnego, 45-stopniowego skrętu w innych kombinacjach torów) STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Pozwól na łączenie stacji nie sąsiadujących bezpośrednio: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Pozwalaj na dodawanie części stacji nie stykających się ze sobą. Naciśnij Ctrl przed postawieniem nowej części STR_CONFIG_SETTING_INFLATION :Inflacja: {STRING} -STR_CONFIG_SETTING_INFLATION_HELPTEXT :Włącz inflację w ekonomii, gdzie koszty rosną nieco szybciej niż zapłaty +STR_CONFIG_SETTING_INFLATION_HELPTEXT :Włącz lub wyłącz inflację (sytuacja ekonomiczna, w związku z którą koszty rosną nieco szybciej niż zapłaty) STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maksymalna długość mostu: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maksymalna długość budowanych mostów STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maksymalna wysokość mostu: {STRING} @@ -1598,7 +1598,7 @@ STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maksymalna wyso STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maksymalna długość tunelu: {STRING} STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maksymalna długość budowanych tuneli STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Budowa przedsiębiorstw wydobywczych: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Metoda finansowania podstawowego przemysłu. 'żadne' oznacza brak możliwości finansowania czegokolwiek, 'obiecujące' oznacza, że finansowanie jest możliwe, ale konstrukcja pojawi się w losowym miejscu na mapie oraz losowo budowa może zakończyć się porażką, 'jak inne gałęzi przemysłu' oznacza, że przemysł wydobywczy może być budowany tak jak fabryki przetwórcze, w dowolnym miejscu +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Metoda finansowania podstawowych przedsiębiorstw. 'Niedostępna' oznacza brak możliwości finansowania czegokolwiek, 'poszukiwania' oznacza, że finansowanie jest możliwe, ale konstrukcja pojawi się w losowym miejscu na mapie (oraz losowo budowa może zakończyć się porażką), 'jak inne przedsiębiorstwa' oznacza, że przemysł wydobywczy może być budowany tak jak fabryki przetwórcze, w dowolnym miejscu STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Niedostępna STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Jak inne przedsiębiorstwa STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Poszukiwania @@ -1614,7 +1614,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Po prawej STR_CONFIG_SETTING_SHOWFINANCES :Pokazuj okno finansów na koniec roku: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Jeśli włączone, to okienko finansowe pokazuje się na zakończenie każdego roku, by ułatwić śledzenie sytuacji finansowej firmy STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nowe polecenia są domyślnie 'bez zatrzymywania się': {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalnie pojazd zatrzyma się na każdej stacji, przez którą przejeżdża. Włączając tę opcję, pojazd przejedzie do swojego celu bez zatrzymywania się. Zwróć uwagę na to, że to ustawienie ma wpływ tylko na nowe rozkazy. Indywidualne rozkazy mogą być ustalane bez względu na wartość tej opcji +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalnie pojazd zatrzyma się na każdej stacji, przez którą przejeżdża. Po włączeniu tej opcji, pojazd przejedzie do swojego celu bez zatrzymywania się. Zwróć uwagę na to, że to ustawienie ma wpływ tylko na nowe polecenia. Pojedyncze polecenia mogą być ustalane bez względu na wartość tej opcji STR_CONFIG_SETTING_STOP_LOCATION :Rozkazy nowego pociągu kończą się domyślnie na {STRING} peronu STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Miejsce, w którym pociąg domyślnie zatrzyma się na peronie. 'Bliższy koniec' oznacza blisko kierunku przyjazdu, 'środek' oznacza środkową część peronu, a 'daleki koniec' oznacza daleko od kierunku przyjazdu. Zapamiętaj, że to ustawienie określa tylko domyślną wartość dla nowych rozkazów. Wszystkie rozkazy mogą być zmienione, bez względu na wartość ustawienia STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :początku @@ -1647,9 +1647,9 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Brak* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Zredukowana STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalna STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Pozwól na budowę przystanków przelotowych na drogach miejskich: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Pozwalaj budować przystanki przelotowe na drogach własnościowych miast -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Pozwól na przejazd przez przystanki należące do przeciwników: {STRING} -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Pozwalaj budować przystanki przelotowe na drogach własnościowych innych graczy +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Pozwalaj budować przystanki przelotowe na drogach będących własnością miast +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Pozwól na budowę przystanków przelotowych na drogach innych firm: {STRING} +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Pozwalaj budować przystanki przelotowe na drogach będących własnością innych graczy STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmiana tego ustawienia nie jest możliwa, gdy znajdują się tutaj pojazdy STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Utrzymywanie infrastruktury: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kiedy włączone, utrzymanie infrastruktury jest naliczane w kosztach. Koszty wzrastają nadproporcjonalnie do rozmiarów sieci połączeń, a więc dotykają bardziej duże niż małe firmy @@ -1690,8 +1690,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Pokaż populacj STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Wyświetlaj populację miast w ich etykietach na mapie STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grubość linii na wykresie: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grubość linii na wykresach. Cienka linia jest dokładniejsza, grubsza linia jest bardziej widoczna a kolory łatwiejsze do odróżnienia -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Pokaż nazwę tego NewGRF'a w oknie pojazdu budowlanego: {STRING} -STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj linię do okna pojazdów budowlanych, pokazujących z którego NewGRF wybrany pojazd pochodzi. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Pokaż nazwę NewGRF'a w oknie budowy pojazdu: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj linię do okna budowy pojazdów, pokazujących z którego NewGRF'a wybrany pojazd pochodzi. STR_CONFIG_SETTING_LANDSCAPE :Krajobraz: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajobrazy określają podstawowe scenariusze gry, które różnią się przedsiębiorstwami, towarami i wymogami dla rozwoju miast. Pliki NewGRF i skrypty umożliwiają dokładniejszą kontrolę warunków rozgrywki @@ -1752,8 +1752,8 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Wygładź przes STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Zdecyduj, jak główny widok przesuwa się do konkretnej lokacji, gdy klikasz na mini-mapie lub gdy używasz komendy do przesunięcia do danego obiektu na mapie. Kiedy włączone, widok przesuwa się płynnie, kiedy wyłączone, następuje skok bezpośrednio do wybranego miejsca STR_CONFIG_SETTING_MEASURE_TOOLTIP :Pokaż dymek z pomiarem podczas używania różnych narzędzi: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Wyświetlaj długość budowanych odcinków i różnicę wysokości przy przeciąganiu w trakcie operacji budowlanych -STR_CONFIG_SETTING_LIVERIES :Pokaż barwy firm wg typu pojazdu: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Kontrolka stosowania schematu kolorów pojazdów specyficznych dla typów pojazdów (w przeciwieństwie do specyfiki firmy) +STR_CONFIG_SETTING_LIVERIES :Pokaż barwy pojazdów wg grup: {STRING} +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Wyłączenie tego ustawienia powoduje, że jeśli gracz ustawił, oprócz koloru firmy, różne kolory dla różnych grup pojazdów, kolory te nie są widoczne (pokazywany jest w ich miejscu domyślny kolor firmy) STR_CONFIG_SETTING_LIVERIES_NONE :brak STR_CONFIG_SETTING_LIVERIES_OWN :własnej firmy STR_CONFIG_SETTING_LIVERIES_ALL :wszystkich firm @@ -1794,7 +1794,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31 STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Automatycznie włącz pauzę przy rozpoczęciu nowej gry: {STRING} STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Kiedy włączone, gra zostanie automatycznie zatrzymana na samym początku, pozwalając na lepsze rozpoznanie mapy STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Zezwól w czasie wstrzymania gry na: {STRING} -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Wybierz, jakich akcji można dokonywac, gdy gra jest wstrzymana +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Wybierz, jakich akcji można dokonywać, gdy gra jest wstrzymana (włączona jest pauza) STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Brak działań STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Wszystkie niezwiązane z konstrukcją STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Wszystkie oprócz modyfikowania terenu @@ -1953,12 +1953,12 @@ STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Wyświetlaj okn STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Domyślny typ sygnalizatorów: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Domyślny typ semaforów STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :sygnalizatory blokowe -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :sygnalizatory jazdy -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :sygnalizatory jazdy - jednokierunkowe +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :sygnalizatory trasy +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :sygnalizatory trasy - jednokierunkowe STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Przełączaj typy sygnalizatorów: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Wybierz, między jakimi typami semaforów przełączać, po naciśnięciu Ctrl+klik przy budowaniu semaforów STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :tylko sygnalizatory blokowe -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :tylko sygnalizatory jazdy +STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :tylko sygnalizatory trasy STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :wszystkie STR_CONFIG_SETTING_TOWN_LAYOUT :Układ dróg dla nowych miast: {STRING} @@ -2038,7 +2038,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symetryczna" o STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Tryb dystrybucji dla poczty: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symetryczna" oznacza, że mniej więcej tyle samo poczty będzie wysłane ze stacji A do stacji B, co z B do A. "Asymetryczna" znaczy, że narzucone ilości poczty mogą być wysłane w obu kierunkach. "Ręczna" oznacza, że nie będzie automatycznej dystrybucji dla poczty. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Typ dystrybucji dla CHRONIONEJ klasy towarów: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :CHRONIONA klasa towarów zawiera kosztowności w umiarkowanym, diamenty w tropikalnym lub złoto w arktycznym klimacie. NewGRF-y mogą to zmieniać. "Symetryczna" oznacza, że mniej więcej tyle samo towaru będzie wysłane ze stacji A do stacji B, co z B do A. "Asymetryczna" znaczy, że narzucone ilości towarów mogą być wysłane w obu kierunkach. "Ręczna" oznacza, że nie będzie automatycznej dystrybucji dla tych towarów. Rekomendowane ustawienie to asymetryczne lub ręczne dla klimatu arktycznego, ponieważ banki nie będą wysyłać złota spowrotem do kopalni złota. Dla umiarkowanego i tropikalnego klimatu możesz także wybrać symetryczne, ponieważ banki będą wysyłać kosztowności spowrotem do banku, z którego pochodzi część kosztowności. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :CHRONIONA klasa towarów zawiera kosztowności w umiarkowanym, diamenty w tropikalnym lub złoto w arktycznym klimacie. NewGRF-y mogą to zmieniać. "Symetryczna" oznacza, że mniej więcej tyle samo towaru będzie wysłane ze stacji A do stacji B, co z B do A. "Asymetryczna" znaczy, że narzucone ilości towarów mogą być wysłane w obu kierunkach. "Manualna" oznacza, że nie będzie automatycznej dystrybucji dla tych towarów. Rekomendowane ustawienie to asymetryczne lub ręczne dla klimatu arktycznego, ponieważ banki nie będą wysyłać złota spowrotem do kopalni złota. Dla umiarkowanego i tropikalnego klimatu możesz także wybrać symetryczne, ponieważ banki będą wysyłać kosztowności spowrotem do banku, z którego pochodzi część kosztowności. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Tryb dystrybucji dla innych typów ładunku: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymetrycznie" oznacza, że określone ilości ładunków mogą być wysłane w obu kierunkach. "manualnie" oznacza, że dystrybucja nie będzie odbywać się automatycznie. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Dokładność dystrybucji: {STRING} @@ -2046,7 +2046,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Im wyżej ustaw STR_CONFIG_SETTING_DEMAND_DISTANCE :Wpływ odległości na dystrybucję: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Jeśli ładunki z jednej stacji trafiają na kilka różnych stacji, na ich dystrybucję wpływ ma odległość. Im wyższą wartość ustawisz, tym bliższe stacje będą preferowane. Zerowa wartość ustawienia sprawi, że odległość nie będzie wpływała na podział dystrybucji. STR_CONFIG_SETTING_DEMAND_SIZE :Ilość powracającego ładunku dla trybu symetrycznego: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ustawiając to na mniej niż 100% powoduje, że symetryczna dystrybucja zachowuje się podobnie do asymetrycznej. Mniej towaru będzie zwróconego jeśli pewna ilość zostanie wysłana do stacji. Jeśli ustawisz to na 0%, to symetryczna dystrybucja zachowuje się jak asymetryczna. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ustawienie tego na mniej niż 100% powoduje, że symetryczna dystrybucja zachowuje się podobnie do asymetrycznej. Mniej towaru będzie zwróconego jeśli pewna ilość zostanie wysłana do stacji. Jeśli ustawisz to na 0%, to symetryczna dystrybucja zachowuje się jak asymetryczna. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Zapełnienie krótkich tras przed wybraniem tras o dużej przepustowości: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Często są różne trasy pomiędzy dwoma stacjami. Cargodist zapełni najpierw najkrótsza trasę, później wykorzystuje kolejną z najkrótszych tras aż ta jest pełna itd. Zapełnienie jest określone przez obliczenie pojemności wraz z planowanym użyciem. Kiedy już wszystkie trasy są zapełnione, a istnieje wciąż zapotrzebowanie, przepełni wszystkie trasy, preferując jednak te z dużą pojemnością.Jednak w większości algorytm oblicza pojemności niedokładnie. Te ustawienia pozwolą Ci sprecyzować, jaki ma być procent zapełnienia krótszych tras zanim zostaną wybrane dłuższe. Ustaw na mniej niż 100% w celu uniknięcia przepełnienia stacji w razie zawyżenia pojemności. From 53f36f4afae2210b508699c043992c17d54b8140 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 1 Oct 2020 17:52:06 +0000 Subject: [PATCH 263/601] Update: Translations from eints czech: 1 change by LubosKolouch german: 18 changes by matthiasradde --- src/lang/czech.txt | 1 + src/lang/german.txt | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 2dfe6c4aef..c00ccfbac6 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -951,6 +951,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otevřít okno skupin s předvybranou skupinou daného vozidla 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} diff --git a/src/lang/german.txt b/src/lang/german.txt index 80e8ffa7a7..1599e2b171 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -236,6 +236,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filterkr STR_BUTTON_SORT_BY :{BLACK}Sortieren nach STR_BUTTON_LOCATION :{BLACK}Standort STR_BUTTON_RENAME :{BLACK}Umbenennen +STR_BUTTON_CATCHMENT :{BLACK}Einzugsgebiet +STR_TOOLTIP_CATCHMENT :{BLACK}Anzeige des Einzugsgebietes umschalten STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fenster schließen STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Titelleiste klicken und ziehen, um das Fenster zu verschieben @@ -926,6 +928,10 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Georgischer Lar STR_GAME_OPTIONS_CURRENCY_IRR :Iranischer Rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Russische Rubel (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Mexikanischer Peso (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Neuer Taiwan-Dollar (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Chinesischer Yuan (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Hongkong-Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indische Rupie (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Fahrzeuge @@ -1473,6 +1479,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Rechenoperation 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_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB 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 @@ -2718,6 +2725,7 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuelle STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wie schnell das Spiel aktuell läuft, verglichen mit der erwarteten Geschwindigkeit bei normaler Simulationsrate. STR_FRAMERATE_CURRENT :{WHITE}Momentan STR_FRAMERATE_AVERAGE :{WHITE}Durchschnitt +STR_FRAMERATE_MEMORYUSE :{WHITE}Arbeitsspeicher STR_FRAMERATE_DATA_POINTS :{BLACK}Daten basierend auf {COMMA} Messungen STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms @@ -2725,6 +2733,8 @@ 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_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 @@ -3164,6 +3174,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klick au # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Chronik für {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Allgemeine Chronik +STR_STORY_BOOK_SPECTATOR :Allgemeine Chronik STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Seite {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Springt zur gewünschten Seite, wenn diese im Auswahlmenü angeklickt wird @@ -3656,6 +3667,7 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Umschalt STR_REPLACE_ENGINES :Schienenfahrzeuge STR_REPLACE_WAGONS :Waggons STR_REPLACE_ALL_RAILTYPE :Alle Schienenfahrzeuge +STR_REPLACE_ALL_ROADTYPE :Alle Straßenfahrzeuge STR_REPLACE_HELP_RAILTYPE :{BLACK}Gleistyp auswählen, für den Loks ersetzt werden sollen STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Hier wird angezeigt, gegen welches Fahrzeug das auf der linken Seite gewählte ersetzt wird @@ -4116,6 +4128,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Ausgewä STR_AI_LIST_CANCEL :{BLACK}Abbrechen STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript nicht wechseln +STR_SCREENSHOT_CAPTION :{WHITE}Sreenshot erzeugen +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normaler Screenshot +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screenshot des ganzen Spielfeldes # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4389,6 +4404,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keine ge STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Gleise müssen erst abgerissen werden STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Einbahnstraße oder blockierter Weg STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Bahnübergänge sind für diesen Schienentyp nicht erlaubt +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Bahnübergänge sind für diesen Straßentyp nicht erlaubt STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Signal kann hier nicht aufgestellt werden... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Gleise können hier nicht verlegt werden... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Gleise können nicht abgerissen werden... @@ -4408,7 +4424,9 @@ 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_ROAD :{WHITE}Straßentyp kann hier nicht geändert werden... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden... +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Keine geeigneten Straßenbahnschienen # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden... From a0307652f37474cb0bba1143a644e8692b3b23f0 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Fri, 25 Sep 2020 22:41:34 +0100 Subject: [PATCH 264/601] Fix: Work around cmake bug by stripping link target strings --- cmake/LinkPackage.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/LinkPackage.cmake b/cmake/LinkPackage.cmake index 9977ecc453..0f62d3296c 100644 --- a/cmake/LinkPackage.cmake +++ b/cmake/LinkPackage.cmake @@ -4,10 +4,15 @@ function(link_package NAME) if(${NAME}_FOUND) string(TOUPPER "${NAME}" UCNAME) add_definitions(-DWITH_${UCNAME}) + # Some libraries' cmake packages (looking at you, SDL2) leave trailing whitespace in the link commands, + # which (later) cmake considers to be an error. Work around this with by stripping the incoming string. if(LP_TARGET AND TARGET ${LP_TARGET}) + string(STRIP "${LP_TARGET}" LP_TARGET) target_link_libraries(openttd ${LP_TARGET}) message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${LP_TARGET}") else() + string(STRIP "${${NAME}_LIBRARY}" ${NAME}_LIBRARY) + string(STRIP "${${NAME}_LIBRARIES}" ${NAME}_LIBRARIES) include_directories(${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR}) target_link_libraries(openttd ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}) message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR} -- ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}") From 5af98c69e6206379df80f895fb90ff98839e22d1 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 5 Oct 2019 22:25:07 +0200 Subject: [PATCH 265/601] Add: [Actions] CI build workflow --- .github/workflows/ci-build.yml | 138 +++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 .github/workflows/ci-build.yml diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml new file mode 100644 index 0000000000..8ab2783e9e --- /dev/null +++ b/.github/workflows/ci-build.yml @@ -0,0 +1,138 @@ +name: CI + +on: + pull_request: + push: + branches: + - master + +jobs: + linux: + name: Linux + + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + compiler: [clang, gcc] + include: + - compiler: clang + cxxcompiler: clang++ + - compiler: gcc + cxxcompiler: g++ + env: + CTEST_OUTPUT_ON_FAILURE: 1 + CC: ${{ matrix.compiler }} + CXX: ${{ matrix.cxxcompiler }} + + steps: + - name: Install dependencies + run: | + sudo apt-get install -y --no-install-recommends \ + libfontconfig-dev \ + libicu-dev \ + liblzma-dev \ + liblzo2-dev \ + libsdl1.2-dev \ + libsdl2-dev \ + libxdg-basedir-dev \ + zlib1g-dev \ + # EOF + + - name: Checkout + uses: actions/checkout@v2 + + - name: Get OpenGFX + run: | + mkdir -p ~/.local/share/openttd/baseset + cd ~/.local/share/openttd/baseset + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + unzip opengfx-all.zip + rm -f opengfx-all.zip + + - name: CMake + run: mkdir build && cd build && cmake .. + + - name: Build + run: cd build && make -j2 + + - name: Test + run: cd build && make -j2 test + + windows: + name: Windows + + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + arch: [x86, x64] + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v4 + with: + vcpkgDirectory: 'c:/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'liblzma libpng lzo zlib' + vcpkgTriplet: '${{ matrix.arch }}-windows-static' + + - name: 'Build' + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtBasic + useVcpkgToolchainFile: true + buildDirectory: '${{ runner.workspace }}/build' + + - name: Install OpenGFX + run: | + mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" + cd "C:/Users/Public/Documents/OpenTTD/baseset" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + unzip opengfx-all.zip + rm -f opengfx-all.zip + shell: bash + + - name: Test + run: | + cd ${{ runner.workspace }}/build + ctest -C Debug + + macos: + name: Mac OS + + runs-on: macos-latest + strategy: + fail-fast: false + env: + CTEST_OUTPUT_ON_FAILURE: 1 + MACOSX_DEPLOYMENT_TARGET: 10.9 + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install dependencies + run: brew install pkg-config lzo xz libpng freetype + env: + HOMEBREW_NO_AUTO_UPDATE: 1 + + - name: Install OpenGFX + run: | + mkdir -p ~/Documents/OpenTTD/baseset + cd ~/Documents//OpenTTD/baseset + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + unzip opengfx-all.zip + rm -f opengfx-all.zip + + - name: CMake + run: mkdir build && cd build && cmake .. + + - name: Build + run: cd build && make -j2 + + - name: Test + run: cd build && make -j2 test From bef9e3fcfae897f28601844aad1ea45a6b900233 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 29 Sep 2020 18:40:41 +0100 Subject: [PATCH 266/601] Remove: Old Azure Pipelines CI --- azure-pipelines-ci.yml | 93 --------------------- azure-pipelines/templates/ci-git-rebase.yml | 10 --- azure-pipelines/templates/ci-opengfx.yml | 13 --- 3 files changed, 116 deletions(-) delete mode 100644 azure-pipelines-ci.yml delete mode 100644 azure-pipelines/templates/ci-git-rebase.yml delete mode 100644 azure-pipelines/templates/ci-opengfx.yml diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml deleted file mode 100644 index 463d09b8b4..0000000000 --- a/azure-pipelines-ci.yml +++ /dev/null @@ -1,93 +0,0 @@ -trigger: -- master -- release/* -pr: -- master -- release/* - -jobs: -- job: windows - displayName: 'Windows' - pool: - vmImage: 'VS2017-Win2016' - - strategy: - matrix: - Win32: - BuildArch: 'Win32' - VcpkgTargetTriplet: 'x86-windows-static' - Win64: - BuildArch: 'x64' - VcpkgTargetTriplet: 'x64-windows-static' - - steps: - - template: azure-pipelines/templates/ci-git-rebase.yml - - template: azure-pipelines/templates/windows-dependencies.yml - - template: azure-pipelines/templates/ci-opengfx.yml - parameters: - SharedFolder: C:/Users/Public/Documents/OpenTTD - - template: azure-pipelines/templates/windows-build.yml - parameters: - BuildArch: $(BuildArch) - VcpkgTargetTriplet: $(VcpkgTargetTriplet) - BuildConfiguration: 'Debug' - - task: VSBuild@1 - displayName: 'Prepare regression files' - inputs: - solution: build/regression_files.vcxproj - configuration: 'Debug' - - task: VSBuild@1 - displayName: 'Test' - inputs: - solution: build/RUN_TESTS.vcxproj - configuration: 'Debug' - - -- job: linux - displayName: 'Linux' - pool: - vmImage: 'ubuntu-16.04' - - strategy: - matrix: - linux-amd64-clang-3.9: - Tag: 'linux-amd64-clang-3.9' - linux-amd64-gcc-6: - Tag: 'linux-amd64-gcc-6' - linux-i386-gcc-6: - Tag: 'linux-i386-gcc-6' - - steps: - - template: azure-pipelines/templates/ci-git-rebase.yml - # The dockers already have the dependencies installed - - template: azure-pipelines/templates/ci-opengfx.yml - parameters: - SharedFolder: /usr/local/share/games/openttd - PrefixCommand: sudo - - template: azure-pipelines/templates/linux-build.yml - parameters: - Image: compile-farm-ci - Tag: $(Tag) - -- job: macos - displayName: 'MacOS' - pool: - vmImage: 'macOS-10.14' - - variables: - MACOSX_DEPLOYMENT_TARGET: 10.9 - - steps: - - template: azure-pipelines/templates/ci-git-rebase.yml - - template: azure-pipelines/templates/osx-dependencies.yml - - template: azure-pipelines/templates/ci-opengfx.yml - parameters: - SharedFolder: /Library/Application Support/OpenTTD - PrefixCommand: sudo - - template: azure-pipelines/templates/osx-build.yml - - script: | - set -ex - - cd build - CTEST_OUTPUT_ON_FAILURE=1 make test - displayName: 'Test' diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml deleted file mode 100644 index 96a23a5401..0000000000 --- a/azure-pipelines/templates/ci-git-rebase.yml +++ /dev/null @@ -1,10 +0,0 @@ -steps: -# Rebase to target branch for every PR. This means users don't have to -# rebase every time target branch changes. As long as the PR applies cleanly, we -# will validate it. -- bash: | - git config user.email 'info@openttd.org' - git config user.name 'OpenTTD CI' - git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH} - displayName: 'Rebase to target branch' - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) diff --git a/azure-pipelines/templates/ci-opengfx.yml b/azure-pipelines/templates/ci-opengfx.yml deleted file mode 100644 index 60231e3869..0000000000 --- a/azure-pipelines/templates/ci-opengfx.yml +++ /dev/null @@ -1,13 +0,0 @@ -parameters: - SharedFolder: '/usr/local/share/games/openttd' - PrefixCommand: '' - -steps: -- bash: | - set -ex - ${{ parameters.PrefixCommand }} mkdir -p "${{ parameters.SharedFolder }}/baseset" - cd "${{ parameters.SharedFolder }}/baseset" - ${{ parameters.PrefixCommand }} curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip - ${{ parameters.PrefixCommand }} unzip opengfx-all.zip - ${{ parameters.PrefixCommand }} rm -f opengfx-all.zip - displayName: 'Install OpenGFX' From 80f7937e4208cc449247d14000f85e45feb2fa13 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 3 Oct 2020 17:51:47 +0000 Subject: [PATCH 267/601] Update: Translations from eints korean: 8 changes by telk5093 --- src/lang/korean.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index c2b99a8571..61cac93d64 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1652,22 +1652,22 @@ STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :다음 연결 STR_CONFIG_SETTING_LINKGRAPH_TIME :화물 분배 연결 상태를 {STRING}일마다 다시 계산 STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :각 연결 상태 요소의 재계산을 위해 필요한 시간입니다. 재계산이 시작될 때, 이 날짜만큼 작동하는 스레드가 생성됩니다. 이 값이 작으면 작을수록, 스레드가 끝나야할 때에 스레드가 끝나지 않게 됩니다. 그러면 게임이 랙에 걸려 멈추게 됩니다. 값을 크게 설정할수록 경로가 바뀔 때 분배 상태가 업데이트 되는 시간이 오래 걸리게 됩니다. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :수동 -STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :불균형 -STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :균형 +STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :비대칭 +STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :대칭 STR_CONFIG_SETTING_DISTRIBUTION_PAX :승객에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"균형"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "불균형"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "비대칭"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :우편에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"균형"은 A역에서 B역으로 가려는 우편물의 수가 B에서 A로 가려는 우편물의 수와 비슷하다는 뜻입니다. "불균형"은 우편물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 우편물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 우편물의 수가 B에서 A로 가려는 우편물의 수와 비슷하다는 뜻입니다. "비대칭"은 우편물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 우편물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :장갑 화물에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :장갑 화물은 온대 기후의 귀금속, 아열대 기후의 다이아몬드 또는 아한대 기후의 금을 말합니다. NewGRF을 사용하면 달라질 수 있습니다. "균형"은 A역에서 B역으로 가려는 화물의 수가 B에서 A로 가려는 화물의 수와 비슷하다는 뜻입니다. "불균형"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 아한대 기후에서는 균형으로 설정하면 은행이 금광으로 금을 보내지 않으려 하기 때문에 불균형이나 수동으로 설정하는 것을 추천합니다. 온대 기후나 아열대 기후에서는 은행이 일부 적재한 귀금속을 원래 은행으로 보내려고 하기 때문에 균형을 선택해도 됩니다. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :장갑 화물은 온대 기후의 귀금속, 아열대 기후의 다이아몬드 또는 아한대 기후의 금을 말합니다. NewGRF을 사용하면 달라질 수 있습니다. "대칭"은 A역에서 B역으로 가려는 화물의 수가 B에서 A로 가려는 화물의 수와 비슷하다는 뜻입니다. "비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 아한대 기후에서는 대칭으로 설정하면 은행이 금광으로 금을 보내지 않으려 하기 때문에 비대칭이나 수동으로 설정하는 것을 추천합니다. 온대 기후나 아열대 기후에서는 은행이 일부 적재한 귀금속을 원래 은행으로 보내려고 하기 때문에 대칭을 선택해도 됩니다. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :다른 화물에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"불균형"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "불균형"이나 "수동"으로 설정하십시오. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "비대칭"이나 "수동"으로 설정하십시오. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :분배 정확도: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :값이 높으면 높을수록 CPU가 연결 상태를 계산하는 시간이 더 오래 걸립니다. 만약 이 시간이 너무 오래 걸리면 게임이 버벅일 것입니다. 하지만, 낮은 값으로 설정하면 분배가 부정확하게 일어나서, 화물이 원하는 곳으로 분배되지 않을 수 있습니다. STR_CONFIG_SETTING_DEMAND_DISTANCE :거리에 따른 수요 효과: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :이 값을 0보다 크게 설정하면, 어떤 화물이 있는 A역과 목적지가 될 수 있는 역 B 사이의 거리는 A에서 B로 가는 화물의 양에 영향을 미치게 됩니다. A역에서 B역이 더 멀리 떨어질 수록 이동하는 화물의 양은 적어질 것입니다. 값이 크면 클 수록 화물은 멀리 이동하지 않고 가까운 역으로 가게 됩니다. -STR_CONFIG_SETTING_DEMAND_SIZE :균형 모드에서 되돌아오는 화물의 양: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :이 값을 100%보다 작게 설정할 수록 균형 분배는 불균형 분배와 비슷해집니다. 특정 양의 화물을 역으로 보내면 그보다 더 적은 화물이 강제로 되돌아오게 됩니다. 이 값을 0%로 설정하면 균형 분배는 불균형 분배와 똑같습니다. +STR_CONFIG_SETTING_DEMAND_SIZE :대칭 모드에서 되돌아오는 화물의 양: {STRING} +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :이 값을 100%보다 작게 설정할 수록 대칭 분배는 비대칭 분배와 비슷해집니다. 특정 양의 화물을 역으로 보내면 그보다 더 적은 화물이 강제로 되돌아오게 됩니다. 이 값을 0%로 설정하면 대칭 분배는 비대칭 분배와 똑같습니다. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :다음으로 짧은 경로를 사용하기 위한 경로의 포화도: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :종종 두 역 사이에는 여러 가지 경로가 존재할 수 있습니다. 이 경우, 화물 분배 기능은 먼저 가장 짧은 경로로 화물을 보내고, 그 경로가 포화 상태에 이르면 그 다음으로 짧은 경로를 사용하는 식으로 화물을 분배합니다. 포화도는 경로의 수송 능력과 예정 사용량을 추정하여 계산됩니다. 일단 모든 경로가 포화 상태가 되었는데 아직 수요가 남아있다면, 수송 능력이 높은 경로를 사용하면서 모든 경로를 과부하 상태로 만들게 됩니다. 하지만, 이 알고리즘은 수송량을 대부분 정확히 추정하지는 않습니다. 이 설정을 이용해서, 화물 분배 기능이 짧은 경로의 포화 상태가 몇 퍼센트가 되어야 다음으로 짧은 경로에 화물을 분배할 것인지를 지정할 수 있습니다. 과대평가된 수송량의 경우 너무 붐비는 역이 생기지 않도록 하기 위해서는 이 값을 100%보다 작게 설정하십시오. From 3723207d649fa9f37b8e17ea8e23fec1c6de8d30 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 4 Oct 2020 17:51:56 +0000 Subject: [PATCH 268/601] Update: Translations from eints slovak: 23 changes by FuryPapaya turkish: 66 changes by ozcanakdora --- src/lang/slovak.txt | 44 +++++++++++++++-------------- src/lang/turkish.txt | 66 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 21 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 20ab973b84..b000f8ae3e 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -27,13 +27,13 @@ STR_JUST_NOTHING :Nič # Cargo related strings # Plural cargo name STR_CARGO_PLURAL_NOTHING : -STR_CARGO_PLURAL_PASSENGERS :Cestujúcich -STR_CARGO_PLURAL_PASSENGERS.g :cestujucich +STR_CARGO_PLURAL_PASSENGERS :Cestujúci +STR_CARGO_PLURAL_PASSENGERS.g :cestujúcich STR_CARGO_PLURAL_COAL :Uhlie STR_CARGO_PLURAL_COAL.g :uhlia -STR_CARGO_PLURAL_MAIL :Poštu +STR_CARGO_PLURAL_MAIL :Pošta STR_CARGO_PLURAL_MAIL.g :pošty -STR_CARGO_PLURAL_OIL :Ropu +STR_CARGO_PLURAL_OIL :Ropa STR_CARGO_PLURAL_OIL.g :ropy STR_CARGO_PLURAL_LIVESTOCK :Dobytok STR_CARGO_PLURAL_LIVESTOCK.g :dobytka @@ -51,7 +51,7 @@ STR_CARGO_PLURAL_VALUABLES :Cennosti STR_CARGO_PLURAL_VALUABLES.g :cennosti STR_CARGO_PLURAL_COPPER_ORE :Medená ruda STR_CARGO_PLURAL_COPPER_ORE.g :medenej rudy -STR_CARGO_PLURAL_MAIZE :Kukuricu +STR_CARGO_PLURAL_MAIZE :Kukurica STR_CARGO_PLURAL_MAIZE.g :kukurice STR_CARGO_PLURAL_FRUIT :Ovocie STR_CARGO_PLURAL_FRUIT.g :ovocia @@ -63,9 +63,9 @@ STR_CARGO_PLURAL_PAPER :Papier STR_CARGO_PLURAL_PAPER.g :papiera STR_CARGO_PLURAL_GOLD :Zlato STR_CARGO_PLURAL_GOLD.g :zlata -STR_CARGO_PLURAL_WATER :Vodu +STR_CARGO_PLURAL_WATER :Voda STR_CARGO_PLURAL_WATER.g :vody -STR_CARGO_PLURAL_WHEAT :Pšenicu +STR_CARGO_PLURAL_WHEAT :Pšenica STR_CARGO_PLURAL_WHEAT.g :pšenice STR_CARGO_PLURAL_RUBBER :Kaučuk STR_CARGO_PLURAL_RUBBER.g :kaučuku @@ -75,9 +75,9 @@ STR_CARGO_PLURAL_TOYS :Hračky STR_CARGO_PLURAL_TOYS.g :hračiek STR_CARGO_PLURAL_CANDY :Cukríky STR_CARGO_PLURAL_CANDY.g :cukríkov -STR_CARGO_PLURAL_COLA :Kofolu +STR_CARGO_PLURAL_COLA :Kofola STR_CARGO_PLURAL_COLA.g :kofoly -STR_CARGO_PLURAL_COTTON_CANDY :Cukrovú vatu +STR_CARGO_PLURAL_COTTON_CANDY :Cukrová vata STR_CARGO_PLURAL_COTTON_CANDY.g :cukrovej vaty STR_CARGO_PLURAL_BUBBLES :Bublinky STR_CARGO_PLURAL_BUBBLES.g :bubliniek @@ -87,13 +87,13 @@ STR_CARGO_PLURAL_BATTERIES :Baterky STR_CARGO_PLURAL_BATTERIES.g :bateriek STR_CARGO_PLURAL_PLASTIC :Umelina STR_CARGO_PLURAL_PLASTIC.g :umeliny -STR_CARGO_PLURAL_FIZZY_DRINKS :Malinovky -STR_CARGO_PLURAL_FIZZY_DRINKS.g :Malinoviek +STR_CARGO_PLURAL_FIZZY_DRINKS :Malinovka +STR_CARGO_PLURAL_FIZZY_DRINKS.g :malinoviek # Singular cargo name STR_CARGO_SINGULAR_NOTHING : STR_CARGO_SINGULAR_PASSENGER :Cestujúci -STR_CARGO_SINGULAR_PASSENGER.g :cestujucich +STR_CARGO_SINGULAR_PASSENGER.g :cestujúceho STR_CARGO_SINGULAR_COAL :Uhlie STR_CARGO_SINGULAR_COAL.g :uhlia STR_CARGO_SINGULAR_MAIL :Pošta @@ -112,7 +112,7 @@ STR_CARGO_SINGULAR_IRON_ORE :Železná ruda STR_CARGO_SINGULAR_IRON_ORE.g :zeleznej rudy STR_CARGO_SINGULAR_STEEL :Oceľ STR_CARGO_SINGULAR_STEEL.g :ocele -STR_CARGO_SINGULAR_VALUABLES :Cennosti +STR_CARGO_SINGULAR_VALUABLES :Cennosť STR_CARGO_SINGULAR_VALUABLES.g :cennosti STR_CARGO_SINGULAR_COPPER_ORE :Medená ruda STR_CARGO_SINGULAR_COPPER_ORE.g :medenej rudy @@ -121,7 +121,7 @@ STR_CARGO_SINGULAR_MAIZE.g :kukurice STR_CARGO_SINGULAR_FRUIT :Ovocie STR_CARGO_SINGULAR_FRUIT.g :ovocia STR_CARGO_SINGULAR_DIAMOND :Diamant -STR_CARGO_SINGULAR_DIAMOND.g :diamantov +STR_CARGO_SINGULAR_DIAMOND.g :diamantu STR_CARGO_SINGULAR_FOOD :Jedlo STR_CARGO_SINGULAR_FOOD.g :jedla STR_CARGO_SINGULAR_PAPER :Papier @@ -133,13 +133,13 @@ STR_CARGO_SINGULAR_WATER.g :vody STR_CARGO_SINGULAR_WHEAT :Pšenica STR_CARGO_SINGULAR_WHEAT.g :psenice STR_CARGO_SINGULAR_RUBBER :Kaučuk -STR_CARGO_SINGULAR_RUBBER.g :kaucuku +STR_CARGO_SINGULAR_RUBBER.g :kaučuku STR_CARGO_SINGULAR_SUGAR :Cukor STR_CARGO_SINGULAR_SUGAR.g :cukru STR_CARGO_SINGULAR_TOY :Hračka -STR_CARGO_SINGULAR_TOY.g :hraciek +STR_CARGO_SINGULAR_TOY.g :hračky STR_CARGO_SINGULAR_CANDY :Cukrík -STR_CARGO_SINGULAR_CANDY.g :cukrikov +STR_CARGO_SINGULAR_CANDY.g :cukríka STR_CARGO_SINGULAR_COLA :Kofola STR_CARGO_SINGULAR_COLA.g :kofoly STR_CARGO_SINGULAR_COTTON_CANDY :Cukrová vata @@ -157,9 +157,9 @@ STR_CARGO_SINGULAR_FIZZY_DRINK.g :malinovky # Quantity of cargo STR_QUANTITY_NOTHING : -STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}cestujuci{P "" "" ch} +STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}cestujúci{P "" "" ch} STR_QUANTITY_COAL :{WEIGHT_LONG} uhlia -STR_QUANTITY_MAIL :{COMMA} balik{P "" y ov} pošty +STR_QUANTITY_MAIL :{COMMA} balík{P "" y ov} pošty STR_QUANTITY_OIL :{VOLUME_LONG} ropy STR_QUANTITY_LIVESTOCK :{COMMA} kus{P "" y ov} dobytka STR_QUANTITY_GOODS :{COMMA} deb{P na ny ien} tovaru @@ -180,7 +180,7 @@ STR_QUANTITY_WHEAT :{WEIGHT_LONG} p STR_QUANTITY_RUBBER :{VOLUME_LONG} kaučuku STR_QUANTITY_SUGAR :{WEIGHT_LONG} cukru STR_QUANTITY_TOYS :{COMMA} hrač{P ka ky iek} -STR_QUANTITY_SWEETS :{COMMA} deb{P na ny ien} cukrikov +STR_QUANTITY_SWEETS :{COMMA} deb{P na ny ien} cukríkov STR_QUANTITY_COLA :{VOLUME_LONG} kofoly STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} cukrovej vaty STR_QUANTITY_BUBBLES :{COMMA} bublin{P ka ky iek} @@ -245,12 +245,14 @@ STR_COLOUR_GREEN :Zelená STR_COLOUR_DARK_GREEN :Tmavozelená STR_COLOUR_BLUE :Modrá STR_COLOUR_CREAM :Krémová -STR_COLOUR_MAUVE :Ružová +STR_COLOUR_MAUVE :Svetlofialová STR_COLOUR_PURPLE :Fialová STR_COLOUR_ORANGE :Oranžová STR_COLOUR_BROWN :Hnedá STR_COLOUR_GREY :Šedá STR_COLOUR_WHITE :Biela +STR_COLOUR_RANDOM :Náhodná +STR_COLOUR_DEFAULT :Predvolená # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index d8a3b3528d..9d5129571a 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -266,6 +266,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Bu düğ STR_BUTTON_DEFAULT :{BLACK}Varsayılan STR_BUTTON_CANCEL :{BLACK}İptal STR_BUTTON_OK :{BLACK}Tamam +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Uyarı: Sunucu yöneticileri buraya yazılan yazıları okuyabilir. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :"1234567890*-\qwertyuıopğüasdfghjklşi,' zxcvbnmöç. . @@ -339,6 +340,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Yakınla STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Uzaklaş STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Demiryolu yapımı STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Karayolu yapımı +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Tramvay inşa et STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Rıhtım yapımı STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Havalimanı yapımı STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Arazi düzenleme araç çubuğunu aç (ağaç dikme, alçaltma/yükseltme vb. için). @@ -863,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}Yeni {STRING} artık kullanılabilir! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Aracın grubuna odaklanmış grup penceresini açın 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 @@ -931,6 +934,8 @@ STR_GAME_OPTIONS_CURRENCY_IRR :İran Riyali (I STR_GAME_OPTIONS_CURRENCY_RUB :Yeni Rus Rublesi (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Meksika Pezosu (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :Yeni Tayvan Doları (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Çin Yuanı (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Doları (HKD) STR_GAME_OPTIONS_CURRENCY_INR :Hindistan Rupisi (INR) ############ end of currency region @@ -994,6 +999,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :İki kat büyük STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Dört kat büyük +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Yazı boyutu STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :Arayüz boyutunu seç STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal @@ -1182,6 +1188,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Binaların, yol STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Binaları ve yolları kaldırmaksızın altlarında yeryüzü şekillendirmesi yapılmasına izin ver STR_CONFIG_SETTING_CATCHMENT :İstasyon kapsama alanlarının daha gerçeğe yakın ölçülerde olmasına izin ver: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Farklı istasyon ve hava limanları için farklı büyüklükte alanlar gerekir +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Şirket istasyonları, bağlı nötr istasyonları olan endüstrilere hizmet edebilir: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Etkinleştirildiğinde, bağlı istasyonları olan endüstrilere (Petrol Kuleleri gibi) yakınlarda kurulan şirkete ait istasyonlar da hizmet verebilir. Devre dışı bırakıldığında, bu sektörlere yalnızca bağlı istasyonları tarafından hizmet verilebilir. Yakındaki herhangi bir şirket istasyonu onlara hizmet veremeyecek ve ekli istasyon sektör dışında başka bir şeye hizmet etmeyecek STR_CONFIG_SETTING_EXTRADYNAMITE :Şehirlere ait köprülerin, yolların ve tünellerin yıkılmasına izin vermeleri için, şehir yetkililerinin toleransını arttır: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Belediyelerin sahip olduğu altyapı ve binaların yıkımını kolaylaştır STR_CONFIG_SETTING_TRAIN_LENGTH :En yüksek tren uzunluğu: {STRING} @@ -1303,6 +1311,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Şehir nüfusun STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Haritadaki şehir etiketlerinde nüfus bilgisini görüntüle STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grafiklerdeki çizgi kalınlığı: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grafiklerdeki çizginin genişliği. İnce çizgiler daha hassas şekilde okunabilir, koyu çizgileri ise görmek ve renklerini ayırt etmek daha kolay olur. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :NewGRF'nin adını araç inşa penceresinde göster: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Araç inşa penceresine, seçilen aracın hangi NewGRF'den geldiğini gösteren bir satır ekleyin. STR_CONFIG_SETTING_LANDSCAPE :İklim: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :İklimler farklı kargo ve şehir gelişme gereksinimlerini belirleyen temel oynanış senaryolarını tanımlar. NewGRF ve Oyun Betikleri daha ince ayarlar yapmanızı sağlar @@ -1479,6 +1489,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Çok oyunculuda STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :YZ (yapay zeka) bilgisayar oyuncularının çok oyunculu oyunlara katılmasına izin ver STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Betikler duraklatılıncaya kadar çalıştırılacak opkod sayısı: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Bir betiğin bir elde kullanabileceği azami hesaplama adımı sayısı +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Script başına kullanılabilecek maksimum bellek: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Tek bir betiğin zorla durdurulmadan önce ne kadar bellek kullanabileceğini gösterir. Bu değerin büyük haritalarda arttırılması gerekebilir. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Servis gecikmeleri yüzde ile: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Araçlara bakım yapılmasına bir önceki bakımın üzerinden geçen zamana göre mi, yoksa aracın güvenilirlik değerinin azami güvenilirliğe kıyasla belli bir yüzde oranında düşmesine bağlı olarak mı karar verileceğini seçin @@ -1537,10 +1550,15 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Tam STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Renkli gazete şu senede çıksın: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gazete haberlerinin renkli olarak basılmaya başlandığı yıl. Bu tarihe kadar gazete siyah/beyaz olarak basılır STR_CONFIG_SETTING_STARTING_YEAR :Başlangıç tarihi: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Yıl sonu puanı: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Oyunun puan sonucuna göre bittiği yıl. Bu yılın sonunda, şirketin puanı kaydedilir ve yüksek puan ekranında gösterilir ama oyuncular oynamaya devam edebilir.{}Eğer bu başlama yılından önce ise, yüksek puan ekranı gösterilmez. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Asla STR_CONFIG_SETTING_SMOOTH_ECONOMY :Yüzeysel ekonomi (daha çok ve küçük çapta değişiklikler): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Etkinleştirildiğinde, endüstri üretim miktarı daha sık ve daha küçük adımlarla değişir. Eğer endüstriler bir NewGRF dosyası tarafından sağlanıyorsa bu özellik genellikle etkisiz kalır STR_CONFIG_SETTING_ALLOW_SHARES :Diğer şirketlerin hisseleri alınabilsin: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Etkinleştirildiğinde, şirketlerin hisse senetlerinin alınıp satılması mümkün olur. Hisse senetleri sadece belli bir yaşa ulaşan şirketler için geçerlidir +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Hisse satmak için gerekli minimum şirket yaşı: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Bir şirketin hisselerinin satılabileceği ve diğer şirketlerin alabileceği minimum şirket yaşını belirleyin. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Besleme sistemlerinde, bölümlerden elde edilen kardan ödenecek yüzde: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Besleme sistemlerinde, sistemi oluşturan ara bölümlere verilen kar yüzdesi. Böylece kar miktarı üzerinde daha fazla kontrol elde edilmiş olur @@ -1582,7 +1600,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Bu seçeneği e STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Yasak STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :İzin verildi STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :İzin verildi, özel kasaba yerleşimi +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Şehrin kargo üretimi: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Şehrin genel nüfusuna oranla, şehirlerdeki evler tarafından ne kadar kargo üretiliyor.{}Üstel büyüme: İki katı büyüklükteki bir şehir dört katı büyüklükte yolcuya sahip olur.{}Lineer büyüme: İki katı büyüklükteki bir şehir iki katı büyüklükte yolcuya sahip olur. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :İkinci dereceden (orjinall) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Doğrusal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Oyunda ağaç dikme: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Oyundaki rastgele ağaçların görünümünü kontrol eder. Bu, ağaçların büyümesine bağımlı olan endüstrileri etkileyebilir, örneğin keresteciler gibi @@ -2149,6 +2170,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Yanlış STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Sunucu dolu STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sunucuya girmeniz yasaklandı STR_NETWORK_ERROR_KICKED :{WHITE}Oyundan atıldınız +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Sebep: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Bu sunucuda hileler kapalı STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Sunucuya çok fazla komut gönderiyordunuz STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Şifre girmeniz çok uzun sürdü @@ -2208,6 +2230,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ş STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {1:STRING} oyuncusuna {2:CURRENCY_LONG} verdiniz STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Sunucu kapandı STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Sunucu baştan başlatılıyor...{}Lütfen bekleyin... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} atıldı. Sebep: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}İçerik indirme @@ -2426,7 +2449,10 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Tramvay STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Yol yap/sil arasında geçiş yap STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Tramvay yapımı/yıkımı STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Yol türünü Dönüştür/Geliştir. Shift ile tıklama maliyet tahminini gösterir +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Tramvay türünü dönüştür / yükselt. Shift'e basma maliyet tahmini gösterir. +STR_ROAD_NAME_ROAD :Yol +STR_ROAD_NAME_TRAM :Tramvay # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Garaj Yönü @@ -2615,6 +2641,7 @@ STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Yol tür STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tramvay tipi: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Ray hız sınırı: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Yol hız sınırı: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tramvay hız limiti: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Kayalar @@ -2724,6 +2751,7 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Şu anki STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beklenen normal simülasyon hızı yerine, şu anda oyunun ne kadar hızlı çalıştığı. STR_FRAMERATE_CURRENT :{WHITE}Geçerli STR_FRAMERATE_AVERAGE :{WHITE}Ortalama +STR_FRAMERATE_MEMORYUSE :{WHITE}Bellek STR_FRAMERATE_DATA_POINTS :{BLACK}Veriler {COMMA} ölçümlerine dayanır STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms @@ -2733,6 +2761,7 @@ STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMA STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kare/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!! @@ -2748,7 +2777,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik i STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Dünya görüş alanları: STR_FRAMERATE_VIDEO :{BLACK}Video çıkışı: STR_FRAMERATE_SOUND :{BLACK}Ses karıştırma: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Oyun Betiği/Yapay Zeka toplam: STR_FRAMERATE_GAMESCRIPT :Oyun scripti +STR_FRAMERATE_AI :{BLACK} YZ {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Oyun döngüsü @@ -2763,7 +2794,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafik işleme STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Dünya görüş alanı derleme STR_FRAMETIME_CAPTION_VIDEO :Video çıkışı STR_FRAMETIME_CAPTION_SOUND :Ses karıştırma +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Oyun Betiği/Yapay Zeka betikleri toplam STR_FRAMETIME_CAPTION_GAMESCRIPT :Oyun betiği +STR_FRAMETIME_CAPTION_AI :YZ {NUM} {STRING} ############ End of leave-in-this-order @@ -3028,6 +3061,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}'{1:ENGINE}' için kargo tür değişim bilgisi yapımdan sonraki alım listesinden farklı. Bu otomatik yenileme-değiştirmenin kargo türünü doğru şekilde değiştirmesine engel olabilir STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' üretim yordamında sonsuz döngüye neden oldu STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}{1:HEX} adlı callback hata ya da geçersiz sonuç döndü {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' üretim geri çağırımında, geçerli olmayan kargo türü geri döndü {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3094,6 +3128,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :İsim değişti # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} belediyesi +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Bölge STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Bölgeyi yerel yönetim sınırları içinde göster STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Taşıma şirketi değerlendirmeleri: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} @@ -3352,6 +3387,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Demiryolu parçaları: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinyaller STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Karayolu parçaları: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Tramvay parçaları: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Su kareleri: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanallar STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}İstasyonlar: @@ -3362,8 +3398,14 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Fabrikalar STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Hiçbiri - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% taşındı){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} ve {NUM} daha... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Fabrika adları - görüntüyü fabrikada merkezlemek için adına tıklayın. Ctrl ile tıklama fabrikanın konumunu gösteren yeni bir pencere açar +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Kabul edilen kargo: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Üretilmiş kargo: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Tüm kargo tipleri STR_INDUSTRY_DIRECTORY_FILTER_NONE :Hiçbiri @@ -3432,6 +3474,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Gruplanmamış STR_GROUP_DEFAULT_SHIPS :Gruplanmamış gemiler STR_GROUP_DEFAULT_AIRCRAFTS :Gruplanmamış uçaklar +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruplar - gruba ait araçları listelemek için grubun üzerine tıklayın. Hiyerarşiyi düzenlemek için grupları sürükleyip bırakın. STR_GROUP_CREATE_TOOLTIP :{BLACK}Grup oluşturmak için tıklayın @@ -3464,6 +3507,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Yeni Tramvay Ar ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Trenler +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Yeni yol araçları STR_BUY_VEHICLE_SHIP_CAPTION :Yeni gemi STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Yeni Hava Aracı ############ range for vehicle availability ends @@ -3480,6 +3524,7 @@ STR_PURCHASE_INFO_REFITTABLE :(modifiyeli) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Yapım yılı: {GOLD}{NUM}{BLACK} Ömür: {GOLD}{COMMA} sene STR_PURCHASE_INFO_RELIABILITY :{BLACK}Aza. Güvenilirlik: {GOLD}%{COMMA} STR_PURCHASE_INFO_COST :{BLACK}Fiyat: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Maliyet: {GOLD}{CURRENCY_LONG}{BLACK} (Tamirat Maliyeti: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Ağırlık: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Fiyat: {GOLD}{CURRENCY_LONG}{BLACK} Hız: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Maliyet: {GOLD}{CURRENCY_LONG}{BLACK} (Tamir maliyeti: {GOLD}{CURRENCY_LONG}{BLACK}) Hız: {GOLD}{VELOCITY} @@ -3503,12 +3548,17 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Araç Sa STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Gemi Satın Al STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Uçak Satın Al +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Araç satın alın ve yenileyin. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Aracı satın alın ve yenileyin. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Gemi satın al ve yenile +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Uçağı satın al veya sahip olduğunla değiştir. STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili treni satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}İşaretli aracı al. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili gemiyi satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili uçağı satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gösterilen treni satın al. Shift+Click satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Seçili karayolu aracını satın alın. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Seçili gemiyi satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Seçili uçağı satın al. Shift ile tıklama satın almanın tahmini maliyetini gösterir @@ -3623,10 +3673,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Araç ü STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Yeni bir {STRING} tasarladık - bizim için bunu bir yıl denemeyi kabul ediyor musunuz? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :lokomotif +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Elektrikli demiryolu lokomotifi STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monoray lokomotifi STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :maglev lokomotifi STR_ENGINE_PREVIEW_ROAD_VEHICLE :karayolu aracı +STR_ENGINE_PREVIEW_TRAM_VEHICLE :Tramvay aracı STR_ENGINE_PREVIEW_AIRCRAFT :uçak STR_ENGINE_PREVIEW_SHIP :gemi @@ -3671,12 +3723,15 @@ STR_REPLACE_ALL_RAILTYPE :Tüm demiryolu STR_REPLACE_ALL_ROADTYPE :Tüm karayolu araçları STR_REPLACE_HELP_RAILTYPE :{BLACK}Lokomatiflerini değiştireceğiniz ray türünü seçin +STR_REPLACE_HELP_ROADTYPE :{BLACK}Motorlarını değiştirmek istediğin yol tipini seç STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Soldaki değiştiriliyorsa neyle değiştirildiğini göster STR_REPLACE_RAIL_VEHICLES :Demiryolu Araçları STR_REPLACE_ELRAIL_VEHICLES :Elektrikli Trenler STR_REPLACE_MONORAIL_VEHICLES :Monoray Araçları STR_REPLACE_MAGLEV_VEHICLES :Maglev Araçları +STR_REPLACE_ROAD_VEHICLES :Yol Araçları +STR_REPLACE_TRAM_VEHICLES :Tramvay Araçları STR_REPLACE_REMOVE_WAGON :{BLACK}Vagon kaldırma: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Otomatik yenilemede tren boyutunun artması gerekiyorsa vagonları kaldır (en önden başlayarak yeterli sayıda vagon silinir) @@ -4128,7 +4183,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vurgulan STR_AI_LIST_CANCEL :{BLACK}İptal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Betiği değiştirme +STR_SCREENSHOT_CAPTION :{WHITE}Ekran görüntüsü al +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normal ekran görüntüsü +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Ekran görüntüsünü tamamen yakınlaştırdı +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Varsayılan yakınlıkta ekran görüntüsü STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Tüm haritanın ekran görüntüsünü al +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Yükseklik haritası ekran görüntüsü +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Küçük harita ekran görüntüsü # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametreler @@ -4402,6 +4463,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Uygun ra STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Önce ray kaldırılmalı STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Yol tek yönlü veya kapalı STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Bu ray türü için hemzemin geçit yapılamaz +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Hemzemin geçite bu yol tipinde izin verilmemektedir. STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Buraya sinyal yapılamıyor... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Buraya ray yapılamıyor... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Buradan ray kaldırılamıyor... @@ -4421,7 +4483,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Yol bura STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Tramvay kaldırılamaz... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... karayolu yok STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tramvay yolu yok +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Buradaki yol tipi değiştirilemiyor... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Tramvay türünü burada değiştiremezsiniz STR_ERROR_NO_SUITABLE_ROAD :{WHITE} Uygun yol yok +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Uygun olmayan tramvay +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... uyumsuz tramvay # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Buraya kanal yapılamaz... From e01143edf825ba9be45806523404f50930924955 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 5 Oct 2020 17:51:44 +0000 Subject: [PATCH 269/601] Update: Translations from eints italian: 1 change by AlphaJack romanian: 13 changes by ALEX11BR finnish: 6 changes by VeeraKoo slovak: 202 changes by FuryPapaya spanish: 240 changes by MontyMontana --- src/lang/finnish.txt | 9 +- src/lang/italian.txt | 1 + src/lang/romanian.txt | 14 +- src/lang/slovak.txt | 328 ++++++++++++++++++------------ src/lang/spanish.txt | 451 ++++++++++++++++++++++-------------------- 5 files changed, 462 insertions(+), 341 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 1828c9026e..ebf5765400 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -935,6 +935,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikon peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Uusi Taiwanin dollari (TWD) STR_GAME_OPTIONS_CURRENCY_CNY :Kiinan renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongin dollari (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Intian rupia (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot @@ -2168,6 +2169,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Palvelin on täynnä STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sinut on kielletty palvelimelta STR_NETWORK_ERROR_KICKED :{WHITE}Sinut potkittiin pihalle palvelimelta +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Syy: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Huijaaminen ei ole sallittua tällä palvelimella STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Lähetit liian monta komentoa palvelimelle STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Käytit liian paljon aikaa salasanan syöttämiseen @@ -2227,6 +2229,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} an STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Annoit yhtiölle {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Palvelin sulki istunnon STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Palvelin käynnistyy uudelleen...{}Odota, ole hyvä... +STR_NETWORK_MESSAGE_KICKED :{STRING} potkaistiin ulos. Syy: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Sisällön lataus @@ -3668,10 +3671,10 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet my STR_ENGINE_PREVIEW_CAPTION :{WHITE}Viesti kulkuneuvovalmistajalta STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Olemme juuri suunnitelleet uuden {STRING} – oletteko kiinnostunut vuoden yksinoikeutetusta kokeilusta, jotta näemme miten tuote suoriutuu ennen kuin julkistamme sen yleiseen käyttöön? -STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :veturin +STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :veturi STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :sähköradan veturi -STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :yksiraiteisen veturin -STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :maglev-veturin +STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :yksiraiteisen veturi +STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :Maglev-veturi STR_ENGINE_PREVIEW_ROAD_VEHICLE :ajoneuvon STR_ENGINE_PREVIEW_TRAM_VEHICLE :raitiovaunun diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 7e9d8e3056..9855a0150a 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -937,6 +937,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso messicano STR_GAME_OPTIONS_CURRENCY_NTD :Nuovo dollaro taiwanese (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi cinese (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Dollaro di Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rupia indiana (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 8be8b275ed..cbb2f5a285 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -838,6 +838,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} nu are nici un ordin STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} are ordine duplicate STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} are o staţie invalidă în ordine +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} are în ordinele sale un aeroport a cărui pistă este prea scurtă STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} este vechi STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} este foarte vechi @@ -2664,11 +2665,13 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr d STR_FRAMERATE_AVERAGE :{WHITE}Medie STR_FRAMERATE_DATA_POINTS :{BLACK}Date bazate pe măsurători {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} cadre/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! STR_FRAMERATE_VIDEO :{BLACK}Ieșire video: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Buclă de joc STR_FRAMETIME_CAPTION_GL_ECONOMY :Manipularea încărcăturilor ############ End of leave-in-this-order @@ -3326,6 +3329,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Elimină toate STR_GROUP_RENAME_CAPTION :{BLACK}Redenumeşte un grup +STR_GROUP_PROFIT_THIS_YEAR :Profitul pe anul acesta: STR_GROUP_OCCUPANCY :Utilizare curentă: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3374,6 +3378,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Cumpăr STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Cumpără navă STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Cumpără aeronavă +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Cumpără și schimbă marfa transportată de aeronavă STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără vehiculul feroviar selectat. Shift+Click arată costul estimat fără să cumpere vehiculul STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără autovehiculul selectat. Shift+Click arată costul estimat fără să cumpere autovehiculul @@ -3986,6 +3991,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Alege sc STR_AI_LIST_CANCEL :{BLACK}Anulează STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nu schimba scriptul +STR_SCREENSHOT_CAPTION :{WHITE}Capturează ecranul +STR_SCREENSHOT_SCREENSHOT :{BLACK}Captură de ecran obișnuită +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Captură de hartă la mărime maximă +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Captură de hartă la mărime normală +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captură de hartă întreagă +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captură de hartă topografică +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captură de hartă a lumii # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrii @@ -4070,7 +4082,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Doar un # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Imagine de dimensiune foarte mare -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Imaginea capturata va avea o dimensiune de {COMMA} x {COMMA} pixeli. Realizarea unei capturi va dura puțin timp. Dorești să continui? +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Imaginea capturată va avea o dimensiune de {COMMA} x {COMMA} pixeli. Realizarea unei capturi va dura ceva timp. Dorești să continui? STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Imagine salvată cu succes pe disc în fişierul '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Imaginea nu a putut fi capturată! diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index b000f8ae3e..0d1be6d7f5 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -299,6 +299,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Vybrať STR_BUTTON_SORT_BY :{BLACK}Usporiadať STR_BUTTON_LOCATION :{BLACK}Poloha STR_BUTTON_RENAME :{BLACK}Premenovať +STR_BUTTON_CATCHMENT :Pokrytie +STR_TOOLTIP_CATCHMENT :Prepnúť zobrazenie oblasti pokrytia STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Zavrieť okno STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Nadpis okna - potiahni pre posun okna @@ -324,9 +326,10 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Zapnutí STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Zapnutím tohoto tlačítka sa budú zobrazovať aj skyté lietadlá # Query window -STR_BUTTON_DEFAULT :{BLACK}Štandardné +STR_BUTTON_DEFAULT :{BLACK}Predvolené STR_BUTTON_CANCEL :{BLACK}Zrušiť STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Upozornenie: Administrátori serveru môžu prečítať tento text. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :;+ľščťžýáíé='qwertzuiopúäasdfghjklô§ň\ yxcvbnm,.- @@ -346,19 +349,19 @@ STR_SORT_BY_CAPTION_DATE :{BLACK}Dátum STR_SORT_BY_NAME :Meno STR_SORT_BY_PRODUCTION :Produkcia STR_SORT_BY_TYPE :Typ -STR_SORT_BY_TRANSPORTED :Prepravované +STR_SORT_BY_TRANSPORTED :Prepravené STR_SORT_BY_NUMBER :Číslo -STR_SORT_BY_PROFIT_LAST_YEAR :Zisk v poslednom roku -STR_SORT_BY_PROFIT_THIS_YEAR :Zisk v tomto roku +STR_SORT_BY_PROFIT_LAST_YEAR :Profit v minulom roku +STR_SORT_BY_PROFIT_THIS_YEAR :Profit v tomto roku STR_SORT_BY_AGE :Vek STR_SORT_BY_RELIABILITY :Spoľahlivosť -STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Úplná kapacita podľa typu nákladu +STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Kapacita podľa typu nákladu STR_SORT_BY_MAX_SPEED :Maximálna rýchlosť STR_SORT_BY_MODEL :Model STR_SORT_BY_VALUE :Hodnota STR_SORT_BY_LENGTH :Dlžka STR_SORT_BY_LIFE_TIME :Zostávajúca životnost -STR_SORT_BY_TIMETABLE_DELAY :Oneskorenie cestovného poriadku +STR_SORT_BY_TIMETABLE_DELAY :Oneskorenie cest. poriadku STR_SORT_BY_FACILITY :Typ stanice STR_SORT_BY_WAITING_TOTAL :Celkový čakajúci náklad STR_SORT_BY_WAITING_AVAILABLE :Dustupný čakajúci náklad @@ -384,7 +387,7 @@ STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Zobraziť mapu STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Zobraziť zoznam miest STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Zobraziť dotácie -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Zoznam staníc spoločností +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Zoznam staníc spoločnosti STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Finančné informácie o spoločnosti STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Informácie o spoločnosti STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Zobraziť knihu príbehov @@ -392,10 +395,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Zobrazi STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Hodnotenie spoločností STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financovať výstavbu nového priemyslu -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Zoznam vlakov spoločnosti. CTRL+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Zoznam automobilov spoločnosti. CTRL+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Zoznam lodí spoločnosti. CTRL+klik prepína zoznam skupín/lodí -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Zoznam lietadiel spoločnosti. CTRL+klik prepína zoznam skupín/vozidiel +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Zoznam vlakov spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Zoznam automobilov spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Zoznam lodí spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Zoznam lietadiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priblížiť STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Oddialiť STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Výstavba železnice @@ -528,6 +531,7 @@ STR_TOOLBAR_SOUND_MUSIC :Zvuk/Hudba ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Zobraziť poslednú správu/novinku STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Archív správ +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vymazať všetky správy ############ range ends here ############ range for about menu starts @@ -535,7 +539,8 @@ STR_ABOUT_MENU_LAND_BLOCK_INFO :Informácie o p 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_SCREENSHOT :Snímka obrazovky +STR_ABOUT_MENU_SHOW_FRAMERATE :Zobraziť snímkovú frekvenciu 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 @@ -638,7 +643,7 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Hodnota STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ceny prepravy STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Počet dní na ceste -STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Platba za prepravu 10 jednotiek (alebo 10 000 litrov) nákladu cez 20 štvorcov +STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Platba za prepravu 10 jednotiek (alebo 10 000 litrov) nákladu cez 20 políčok STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Povoliť všetky STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Zakázať všetky STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Zobraziť všetky tovary v grafickom prehľade cien @@ -708,6 +713,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Hudba nieje dostupná STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Stopa STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Title @@ -872,6 +878,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Prezident) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponzoroval výstavbu nového mesta {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Nové mesto {TOWN} bolo postavené! STR_NEWS_INDUSTRY_CONSTRUCTION :{G=s}{BIG_FONT}{BLACK}Nov{G "ý" "á" "é"} {STRING} sa začína stavať neďaleko mesta {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{G=s}{BIG_FONT}{BLACK}Nov{G "ý" "á" "é"} {STRING} bude postaven{G "ý" "á" "é"} neďaleko mesta {TOWN}! @@ -920,6 +927,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otvoriť okno skupiny zamerané na skupinu vozidla 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} @@ -951,76 +959,82 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mena STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výber menovej jednotky ############ start of currency region -STR_GAME_OPTIONS_CURRENCY_GBP :Libra Šterlingov (GBP) -STR_GAME_OPTIONS_CURRENCY_USD :Americký Dolár (USD) +STR_GAME_OPTIONS_CURRENCY_GBP :Libra šterlingov (GBP) +STR_GAME_OPTIONS_CURRENCY_USD :Americký dolár (USD) STR_GAME_OPTIONS_CURRENCY_EUR :Euro (EUR) -STR_GAME_OPTIONS_CURRENCY_JPY :Japonský Jen (JPY) -STR_GAME_OPTIONS_CURRENCY_ATS :Rakuske Silingy (ATS) -STR_GAME_OPTIONS_CURRENCY_BEF :Belgicke Franky (BEF) -STR_GAME_OPTIONS_CURRENCY_CHF :Svajciarske Franky (CHF) -STR_GAME_OPTIONS_CURRENCY_CZK :Ceske Koruny (CZK) -STR_GAME_OPTIONS_CURRENCY_DEM :Nemecke marky(DEM) -STR_GAME_OPTIONS_CURRENCY_DKK :Danske Koruny (DKK) -STR_GAME_OPTIONS_CURRENCY_ESP :Špan. Peseta (ESP) -STR_GAME_OPTIONS_CURRENCY_FIM :Finske Marky (FIM) -STR_GAME_OPTIONS_CURRENCY_FRF :Francuz. Frank (FRF) -STR_GAME_OPTIONS_CURRENCY_GRD :Grecke Drachny (GRD) -STR_GAME_OPTIONS_CURRENCY_HUF :Madarske Forinty (HUF) -STR_GAME_OPTIONS_CURRENCY_ISK :Islandske Koruny (ISK) -STR_GAME_OPTIONS_CURRENCY_ITL :Talianske Liry (ITL) -STR_GAME_OPTIONS_CURRENCY_NLG :Danske Guldeny (NLG) -STR_GAME_OPTIONS_CURRENCY_NOK :Norske Koruny (NOK) -STR_GAME_OPTIONS_CURRENCY_PLN :Poľský Zlotý (PLN) -STR_GAME_OPTIONS_CURRENCY_RON :Rumunske Lei (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Ruske Ruble (RUR) -STR_GAME_OPTIONS_CURRENCY_SIT :Slovinske Toliare (SIT) -STR_GAME_OPTIONS_CURRENCY_SEK :Svedske Koruny (SEK) -STR_GAME_OPTIONS_CURRENCY_TRY :Turecke Liry (TRY) -STR_GAME_OPTIONS_CURRENCY_SKK :Slovenske Koruny (SKK) -STR_GAME_OPTIONS_CURRENCY_BRL :Brazílske Realy (BRL) -STR_GAME_OPTIONS_CURRENCY_EEK :Estónsky (EEK) -STR_GAME_OPTIONS_CURRENCY_LTL :Litovsky (LTL) -STR_GAME_OPTIONS_CURRENCY_KRW :Juzná Korea - WON (KRW) -STR_GAME_OPTIONS_CURRENCY_ZAR :Južná Afrika - RAND (ZAR) +STR_GAME_OPTIONS_CURRENCY_JPY :Japonský jen (JPY) +STR_GAME_OPTIONS_CURRENCY_ATS :Rakúsky šiling (ATS) +STR_GAME_OPTIONS_CURRENCY_BEF :Belgický frank (BEF) +STR_GAME_OPTIONS_CURRENCY_CHF :Švajčiarský frank (CHF) +STR_GAME_OPTIONS_CURRENCY_CZK :Česká koruna (CZK) +STR_GAME_OPTIONS_CURRENCY_DEM :Nemecký mark (DEM) +STR_GAME_OPTIONS_CURRENCY_DKK :Dánska koruna (DKK) +STR_GAME_OPTIONS_CURRENCY_ESP :Španielské peso (ESP) +STR_GAME_OPTIONS_CURRENCY_FIM :Fínsky mark (FIM) +STR_GAME_OPTIONS_CURRENCY_FRF :Francúzsky frank (FRF) +STR_GAME_OPTIONS_CURRENCY_GRD :Grécka drachma (GRD) +STR_GAME_OPTIONS_CURRENCY_HUF :Maďarský forint (HUF) +STR_GAME_OPTIONS_CURRENCY_ISK :Islandská koruna (ISK) +STR_GAME_OPTIONS_CURRENCY_ITL :Talianská líra (ITL) +STR_GAME_OPTIONS_CURRENCY_NLG :Holandský gulden (NLG) +STR_GAME_OPTIONS_CURRENCY_NOK :Nórska koruna (NOK) +STR_GAME_OPTIONS_CURRENCY_PLN :Poľský zlotý (PLN) +STR_GAME_OPTIONS_CURRENCY_RON :Rumunský lev (RON) +STR_GAME_OPTIONS_CURRENCY_RUR :Ruský rubeľ (RUR) +STR_GAME_OPTIONS_CURRENCY_SIT :Slovinský toliar (SIT) +STR_GAME_OPTIONS_CURRENCY_SEK :Švédska koruna (SEK) +STR_GAME_OPTIONS_CURRENCY_TRY :Turecká líra (TRY) +STR_GAME_OPTIONS_CURRENCY_SKK :Slovenská koruna (SKK) +STR_GAME_OPTIONS_CURRENCY_BRL :Brazílsky real (BRL) +STR_GAME_OPTIONS_CURRENCY_EEK :Estónska koruna (EEK) +STR_GAME_OPTIONS_CURRENCY_LTL :Litovský litas (LTL) +STR_GAME_OPTIONS_CURRENCY_KRW :Juhokórejský won (KRW) +STR_GAME_OPTIONS_CURRENCY_ZAR :Juhoafrický rand (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :Vlastná ... -STR_GAME_OPTIONS_CURRENCY_GEL :Gruzínske Lari (GEL) +STR_GAME_OPTIONS_CURRENCY_GEL :Gruzínske lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iránsky rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ruský rubeľ (nový) (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexické peso (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Taiwanský dolár (nový) (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Čínsky jüan (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongský dolár (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indická rupia (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Cestné vozidlá -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Strana po ktorej jazdia cestne vozidla -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Jazdia nalavo +STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Výber strany, po ktorej jazdia cestné vozidlá +STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Jazdia naľavo STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Jazdia napravo STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Názvy miest -STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Vyber štýl názvov miest +STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Výber štýlu názvov miest ############ start of townname region -STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Anglicke -STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Francuzke -STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Nemecke -STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Anglicke (Dalsie) -STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Latinsko-Americke -STR_GAME_OPTIONS_TOWN_NAME_SILLY :Hlupe (anglicky) -STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Svedske -STR_GAME_OPTIONS_TOWN_NAME_DUTCH :Holandske -STR_GAME_OPTIONS_TOWN_NAME_FINNISH :Finske -STR_GAME_OPTIONS_TOWN_NAME_POLISH :Polske -STR_GAME_OPTIONS_TOWN_NAME_SLOVAK :Slovenske -STR_GAME_OPTIONS_TOWN_NAME_NORWEGIAN :Norske -STR_GAME_OPTIONS_TOWN_NAME_HUNGARIAN :Madarske -STR_GAME_OPTIONS_TOWN_NAME_AUSTRIAN :Rakuske -STR_GAME_OPTIONS_TOWN_NAME_ROMANIAN :Rumunske -STR_GAME_OPTIONS_TOWN_NAME_CZECH :Ceske -STR_GAME_OPTIONS_TOWN_NAME_SWISS :Svajciarske -STR_GAME_OPTIONS_TOWN_NAME_DANISH :Danske +STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Anglické (pôvodné) +STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Francúzske +STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Nemecké +STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Anglické (ďalšie) +STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Latinsko-Americké +STR_GAME_OPTIONS_TOWN_NAME_SILLY :Anglické (hlúpe) +STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Švédske +STR_GAME_OPTIONS_TOWN_NAME_DUTCH :Holandské +STR_GAME_OPTIONS_TOWN_NAME_FINNISH :Fínske +STR_GAME_OPTIONS_TOWN_NAME_POLISH :Poľské +STR_GAME_OPTIONS_TOWN_NAME_SLOVAK :Slovenské +STR_GAME_OPTIONS_TOWN_NAME_NORWEGIAN :Nórske +STR_GAME_OPTIONS_TOWN_NAME_HUNGARIAN :Maďarské +STR_GAME_OPTIONS_TOWN_NAME_AUSTRIAN :Rakúske +STR_GAME_OPTIONS_TOWN_NAME_ROMANIAN :Rumunské +STR_GAME_OPTIONS_TOWN_NAME_CZECH :České +STR_GAME_OPTIONS_TOWN_NAME_SWISS :Švajčiarské +STR_GAME_OPTIONS_TOWN_NAME_DANISH :Dánske STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Turecké -STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Talianske -STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Katalanske +STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Talianské +STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Katalánske ############ end of townname region STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatické ukladanie -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Vyber interval automatickeho ukladania +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Výber intervalu automatického ukladania ############ start of autosave dropdown STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Vypnuté @@ -1034,32 +1048,37 @@ STR_GAME_OPTIONS_LANGUAGE :{BLACK}Jazyk STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Výber jazyka rozhrania STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Celá obrazovka -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Zaskrtnite, ak chcete hrat OpenTTD na celej obrazovke +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Zaškrtnite, ak chcete hrať OpenTTD na celej obrazovke STR_GAME_OPTIONS_RESOLUTION :{BLACK}Rozlíšenie obrazovky -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Voľba rozlíšenia obrazovky +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Výber rozlíšenia obrazovky STR_GAME_OPTIONS_RESOLUTION_OTHER :iné STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Veľkosť rozhrania -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vyberte si veľkosť prvkov rozhrania +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Výber veľkosti prvkov rozhrania -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normálne +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normálna STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná veľkosť STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Štvornásobná veľkosť +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Veľkosť písma +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Výber veľkosti písma v rozhraní +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normálna +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná veľkosť +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Štvornásobná veľkosť STR_GAME_OPTIONS_BASE_GRF :{BLACK}Základná sada grafiky -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zvoľte sadu grafiky, ktorá má byť použitá +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Výber sady grafiky, ktorá má byť použitá STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} chýbajúci/poškodený súbor{P "" "y" "ov"} -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Dodatočné informácie o základnom grafickom sete +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Dodatočné informácie o základnej sade grafiky STR_GAME_OPTIONS_BASE_SFX :{BLACK}Základná sada zvukov -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Vyberte základné zvuky +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Výber sady zvukov, ktorá má byť použitá STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Dodatočné informácie o základnej sade zvukov STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Základná sada hudby -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Zvoľte sadu základnej hudby +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Výber sady hudby, ktorá má byť použitá STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} poškoden{P ý é ých} súbor{P "" y ov} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Dodatočné informácie o základnej sade hudby @@ -1074,7 +1093,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Znížen STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Zvýšenie hodnoty vašej meny oproti jednej libre (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Nastaviť kurz pre vašu menu oproti libre (£) -STR_CURRENCY_SEPARATOR :{LTBLUE}Oddelovac: {ORANGE}{STRING} +STR_CURRENCY_SEPARATOR :{LTBLUE}Oddeľovač: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Nastaviť oddeľovač meny STR_CURRENCY_PREFIX :{LTBLUE}Predpona: {ORANGE}{STRING} @@ -1084,11 +1103,11 @@ STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Nastavi STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Prechod na Euro: {ORANGE}{NUM} STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Prechod na Euro: {ORANGE}nikdy -STR_CURRENCY_SET_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Nastaviť rok, kedy zmeniť menu na Euro -STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Zmeniť skôr na Euro +STR_CURRENCY_SET_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Nastaviť rok, v ktorom sa mena zmení na Euro +STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Zmeniť na Euro skôr STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Zmeniť na Euro neskôr -STR_CURRENCY_PREVIEW :{LTBLUE}Nahlad: {ORANGE}{CURRENCY_LONG} +STR_CURRENCY_PREVIEW :{LTBLUE}Náhľad: {ORANGE}{CURRENCY_LONG} STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 libier (£) vo vašej mene STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Zmeniť parametre vlastnej meny @@ -1096,13 +1115,13 @@ STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS :{LTBLUE}Maximá STR_NONE :Žiadny STR_FUNDING_ONLY :Iba financovanie -STR_MINIMAL :Minimálne +STR_MINIMAL :Minimálny STR_NUM_VERY_LOW :Veľmi nízky STR_NUM_LOW :Nízky STR_NUM_NORMAL :Normálny STR_NUM_HIGH :Vysoký -STR_NUM_CUSTOM :Vlastné -STR_NUM_CUSTOM_NUMBER :Vlastné ({NUM}) +STR_NUM_CUSTOM :Vlastný +STR_NUM_CUSTOM_NUMBER :Vlastný ({NUM}) STR_VARIETY_NONE :Žiadna STR_VARIETY_VERY_LOW :Veľmi nízka @@ -1231,6 +1250,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Povoliť úprav STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Umožňuje úpravy terénu pod budovami a traťami bez potreby ich odstránenia STR_CONFIG_SETTING_CATCHMENT :Povoliť realistickejšiu veľkosť oblasti pokrytia: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Má úchytné plochy rôznych veľkostí pre rôzne typy staníc a letísk +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stanice spoločnosti môžu obsluhovať priemysel s pripojenými neutrálnymi stanicami: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ak je povolené, priemysel s pripojenými stanicami (napríklad Ropné plošiny) môžu obsluhovať aj stanice vlastnené spoločnosťou postavené v blízkosti. Ak je zakázané, tento priemysel môžu obsluhovať iba jeho pripojené stanice. Žiadne blízke stanice vlastnené spoločnosťou ich nebudú môcť obsluhovať a pripojená stanica nebude slúžiť ničomu inému ako priemyslu STR_CONFIG_SETTING_EXTRADYNAMITE :Odstrániť viaceré mestské cesty, mosty a tunely: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Uľahči odstraňovanie mestom vlastnených budov a infraštruktúry STR_CONFIG_SETTING_TRAIN_LENGTH :Maximálna dĺžka vlakov: {STRING} @@ -1316,6 +1337,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmena na STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Správa infraštruktúry: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Ak je zapnuté, infraštruktúra generuje výdavky na údržbu. Poplatky rastú proporcionálne s veľkosťou spoločnosti, čo ovplyvňuje viac veľké spoločnosti ako malé. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Predvolená farba novej spoločnosti: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Zvoľte začiatočnú farbu pre spoločnosť STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Letiská nikdy neexiprujú: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Povoluje zachovať vsetky typy letísk navzdy. @@ -1350,6 +1373,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Zobraziť poče STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Zobrazí populáciu mesta v jeho názve. STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Hrúbka čiar v grafe: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Hrúbka čiar v grafe. Tenké čiary sú presnejšie, hrubšie zase lepšie viditeľné. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobraziť názov NewGRF v okne vozidiel: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Pridá riadok do zoznamu vozidiel, ktorý ukazuje z akého NewGRF vozidlo pochádza. STR_CONFIG_SETTING_LANDSCAPE :Krajina: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajiny definuje základný herný scenár s rôznymi tovarmi a veľkosťami miest. NewGRF a Herný Skript umožňujú ich lepšiu kontrolu @@ -1363,7 +1388,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Hustota priemys STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Nastavte, koľko má byť vygenerovaného priemyslu a aká úroveň by mala byť zachovaná v priebehu hry STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximálna vzdialenosť od okrajov mapy pre rafinérie: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinérie ropy sú vybudované len na okrajoch mapy, tzn na pobreží pri ostrovných mapách -STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Úroveň čiary snehu: {STRING} +STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Úroveň hranice snehu: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Určuje v akej výške začína sneh v subarktickej krajine. Sneh tiež ovplyvňuje generáciu priemyslu a požiadaviek rastu mesta STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Členitosť terénu : {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Len TerraGenesis) Vyberte hustotu kopcov: Rovinaté krajiny majú menej, viac pozdĺžných kopcov. Hornaté krajiny majú veľa kopcov, ktoré sa môžu opakovať @@ -1400,6 +1425,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farby terénu n STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Zelená STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tmavozelená STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fialová +STR_CONFIG_SETTING_SCROLLMODE :Správanie pohľadu pri posúvaní myšou: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Reakcia na posúvanie (scrollovanie) na mape +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pohyb pohľadu s pravým tlačidlom myši, poloha myši uzamknutá +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pohyb mapy s pravým tlačidlom myši, poloha myši uzamknutá +STR_CONFIG_SETTING_SCROLLMODE_RMB :Pohyb mapy s pravým tlačidlom myši +STR_CONFIG_SETTING_SCROLLMODE_LMB :Pohyb mapy s ľavým tlačidlom myši STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plynulé posúvanie pohľadu: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Nastaví ako bude reagovať posúvanie na špecifickú pozíciu po kliknutí na minimapu, alebo po zadaní príkazu na presun na zadaný objekt. Ak je zapnuté, pohľad sa presúva plynulo. Ak je vypnuté, pohľad skočí priamo na zadané miesto/objekt. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Zobraziť údaje o rozmeroch pri výstavbe: {STRING} @@ -1431,6 +1462,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Príkaz + klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :CTRL + klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Žiadna +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Zatvoriť okno kliknutím pravým tlačidlom: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Zatvorí okno kliknutím pravým tlačidlom do vnútra. Prestane ukazovať nápovedu pri kliknutí pravým tlačidlom! STR_CONFIG_SETTING_AUTOSAVE :Automatické ukladanie: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vyberte interval pre automatické ukladanie hry @@ -1518,6 +1551,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Povoliť AI-ov STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Povoliť AI počítačovým hráčom hrať "Hru viacerých hráčov". STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#op kódov pred uspaním skriptu: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximálne počet krokov skriptu počas 1 ťahu. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximálne využitie pamäte na skript: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Koľko pamäte môže jeden skript spotrebovať pred násilným ukončením. Pri veľkých mapách bude možno potrebné túto hodnotu zvýšiť. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Servisné intervaly v percentách: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Zvoľte či servisovanie vozidiel bude podliehať času od posledného servisu, alebo poklesom percenta návratnosti z celkovej maximálnej návratnosti. @@ -1576,10 +1612,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Plné STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Zobraziť správy farebne od roku: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Rok od ktorého začnú vychádzať farebné noviny. Pred týmto rokom budú noviny čierno/biele. STR_CONFIG_SETTING_STARTING_YEAR :Začiatok hry v roku: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Rok ukončenia skórovania: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok v ktorom končí hra pre zaznamenanie skóre. Na konci tohto roku sa nahrá skóre spoločnosti a zobrazí sa tabuľka s najvyšším skóre, avšak hráči môžu v hre naďalej pokračovať.{}Ak je tento rok pred začiatkom hry, tabuľka sa nikdy nezobrazí. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy STR_CONFIG_SETTING_SMOOTH_ECONOMY :Povoliť zmeny ekonomiky (viac menších zmien): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ak je zapnuté, zmeny v produkcii sa budú diať častejšie v malých krokoch. STR_CONFIG_SETTING_ALLOW_SHARES :Povoliť kupovanie podielov v ostatných spoločnostiach: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ak je zapnuté, povolí sa nákup a predaj podielov spoločností. Podiely budú prístupné len pre spoločnosti od urcitého veku. +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimálny vek spoločnosti na obchodovanie s podielmi: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Určuje minimálny vek spoločnosti na to, aby od nej mohli ostatné spoločnosti kupovať a predavať podiely. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentáž profitu na zaplatenie podávacieho systému: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percento príjmov dať na strednú ´nohu´ vo feeder systémoch, získate väčšiu kontrolu nad príjmamy STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Pri ťahaní, umiestni semafóry každý: {STRING} diel @@ -1620,6 +1662,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Povolením nast STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :zakázané STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :povolené STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :povolené, vlastné rozloženie mesta +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generovanie nákladu v mestách: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Množstvo nákladu produkovaného domami v mestách, podmienené celkovou populáciou mesta.{}Kvadratický rast: Mesto s dvojnásobnou veľkosťou produkuje štvornásobné množstvo cestujúcich.{}Lineárny rast: Mesto s dvojnásobnou veľkosťou produkuje dvojnásobné množstvo cestujúcich. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratické +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineárne STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Umiestnenie stromov počas hry: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Riadi náhodný výskyt stromov počas hry. Toto môže ovplyvniť priemysel úzko spojený s rastom stromov ako napríklad Píla. @@ -1819,7 +1865,8 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Skontrol STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Zobraz umelú inteligenciu a nastavenia skriptu STR_INTRO_TOOLTIP_QUIT :{BLACK}Ukončiť 'OpenTTD' -STR_INTRO_TRANSLATION :{BLACK}V preklade chýba {NUM} v{P eta ety iet}. Prosím pomôžte urobiť OpenTTD lepším a prihláste sa ako prekladateľ. Viac detailov v readme.txt +STR_INTRO_BASESET :{BLACK}Vo vybranej základnej sade grafiky chýba {NUM} prv{P ok ky kov}. Prosím skontrolujte aktualizácie sady grafiky. +STR_INTRO_TRANSLATION :{BLACK}V preklade chýba {NUM} reťaz{P ec ce cov}. Prosím pomôžte urobiť OpenTTD lepším a prihláste sa ako prekladateľ. Viac detailov v readme.txt # Quit window STR_QUIT_CAPTION :{WHITE}Koniec @@ -1860,6 +1907,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmeniť STR_CHEAT_SETUP_PROD :{LTBLUE}Povoliť zmenu objemu výroby: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Farebná schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobraziť všeobecné farebné schémy STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobraziť farebné schémy pre vlaky @@ -2057,7 +2105,7 @@ STR_NETWORK_LANG_POLISH :Polsky STR_NETWORK_LANG_PORTUGUESE :Portugalsky STR_NETWORK_LANG_ROMANIAN :Rumunsky STR_NETWORK_LANG_RUSSIAN :Rusky -STR_NETWORK_LANG_SLOVAK :Slovensky +STR_NETWORK_LANG_SLOVAK :Slovenský STR_NETWORK_LANG_SLOVENIAN :Slovinsky STR_NETWORK_LANG_SPANISH :Spanielsky STR_NETWORK_LANG_SWEDISH :Svédsky @@ -2142,15 +2190,15 @@ STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Vložte # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukladať zadané heslo STR_COMPANY_PASSWORD_OK :{BLACK}Nastaviť spoločnosti nové heslo -STR_COMPANY_PASSWORD_CAPTION :{WHITE}Heslo spolocnosti -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Štandardné heslo spoločnosti -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Použit toto heslo ako štandardné heslo spoločnosti +STR_COMPANY_PASSWORD_CAPTION :{WHITE}Heslo spoločnosti +STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Predvolené heslo spoločnosti +STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Použit toto heslo ako predvolené pre nové spoločnosti # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Pridať sa STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Pridať sa a hrať za túto spoločnosť STR_COMPANY_VIEW_PASSWORD :{BLACK}Heslo -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Ochráň heslom svoju spoločnosť, aby zabránilo pripojeniu neoprávnených užívateľov +STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Ochrániť svoju spoločnosť heslom, aby sa zabránilo pripojeniu neoprávnených užívateľov STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Nastavte heslo spoločnosti # Network chat @@ -2743,6 +2791,8 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} team OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :Snímková frekvencia +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -2777,17 +2827,17 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Zadajte # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Vytvorenie krajiny STR_MAPGEN_MAPSIZE :{BLACK}Veľkosť mapy: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Vybranie veľkosti mapy v štvorcoch. Počet dostupných štvorcov bude o trochu nižší. +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Výber veľkosti mapy v políčkach. Počet dostupných políčok bude o trochu nižší STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Počet miest: STR_MAPGEN_DATE :{BLACK}Rok: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Počet priemyslu: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximálna výška mapy -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Zvýš maximálnu výšku hôr na mape o jedno -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Zníž maximálnu výšku hôr na mape o jedno -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Výška línie snehu: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Zvýšiť výšku snehovej čiary -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Znížiť výšku snehovej čiary +STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximálna výška mapy: +STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Zvýšiť maximálnu výšku hôr na mape o jedno +STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Znížiť maximálnu výšku hôr na mape o jedno +STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Výška hranice snehu: +STR_MAPGEN_SNOW_LINE_UP :{BLACK}Zvýšiť výšku hranice snehu o jedno +STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Znížiť výšku hranice snehu o jedno STR_MAPGEN_LAND_GENERATOR :{BLACK}Generátor krajiny: STR_MAPGEN_TREE_PLACER :{BLACK}Generátor stromov: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Typ terénu: @@ -2815,7 +2865,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Velkost: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Zmeniť maximálnu výšku mapy -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Zmeniť výšku línie snehu +STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Zmeniť výšku hranice snehu STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Zmenit rok zaciatku hry # SE Map generation @@ -3033,6 +3083,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Zadajte STR_TOWN_DIRECTORY_CAPTION :{WHITE}Mestá STR_TOWN_DIRECTORY_NONE :{ORANGE}- Žiadne - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (City){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Názvy miest - kliknite na názov pre pohľad na mesto. Ctrl+klik otvorí nové okno s pohľadom na mesto STR_TOWN_POPULATION :{BLACK}Svetová populácia: {COMMA} @@ -3040,6 +3091,7 @@ STR_TOWN_POPULATION :{BLACK}Svetová STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Mesto) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Obyvateľstvo: {ORANGE}{COMMA}{BLACK} Domov: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} minulý mesiac: {ORANGE}{COMMA}{BLACK} najviac: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Tovar potrebný k rozrastu mesta: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} potrebný STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} potrebné v zime @@ -3064,6 +3116,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Premenovať mes # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Miestna správa {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Oblasť +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zobraziť oblasť miestnej správy mesta STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Hodnotenie dopravných spoločností: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Dostupné činnosti: @@ -3092,6 +3146,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podplat # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Ciele STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globálne ciele +STR_GOALS_SPECTATOR :Globálne ciele STR_GOALS_GLOBAL_TITLE :{BLACK}Globálne ciele: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nič - @@ -3273,8 +3328,8 @@ STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Farebná STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Stroje: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} vlak{P "" y ov} STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} automobil{P "" y ov} -STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} lietad{P lo la iel} -STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} lod{P "" e i} +STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} lietad{P lo lá iel} +STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} lo{P ď de dí} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Žiadne STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Hodnota spolocnosti: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% vlastní {COMPANY}) @@ -3340,7 +3395,13 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentro STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Priemysel oznámil blížiace sa uzatvorenie! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čak{P á ajú á}{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmeniť produkciu (násobky 8, až do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmeniť úroveň produkcie (percentuálne, až do 800%) @@ -3348,25 +3409,25 @@ STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmeniť # Vehicle lists STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Vlak{P "" y ov} STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Automobil{P "" y ov} -STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Lod{P "" e i} -STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Lietad{P lo la iel} +STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Lo{P ď de dí} +STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Lietad{P lo lá iel} -STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - kliknut na vlak pre informacie -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Automobily - kliknutím na vozidlo sa zobrazia detaily -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Lode - kliknut pre informacie -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lietadlo - kliknut pre informacie +STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - kliknúť pre zobrazenie detailov +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Automobily - kliknúť pre zobrazenie detailov +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Lode - kliknúť pre zobrazenie detailov +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lietadlá - kliknúť pre zobrazenie detailov -STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Zisk tento rok: {CURRENCY_LONG} (posledný rok: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit tento rok: {CURRENCY_LONG} (minulý rok: {CURRENCY_LONG}) STR_VEHICLE_LIST_AVAILABLE_TRAINS :Dostupné vlaky -STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Dostupné vozidlá +STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Dostupné automobily STR_VEHICLE_LIST_AVAILABLE_SHIPS :Dostupné lode STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Dostupné lietadlá -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Zobraziť zoznam dostupných dizajnov rušňov pre tento typ. +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Zobraziť zoznam dostupných dizajnov pre tento typ vozidla STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Možnosti -STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Zadat príkazy všetkým vozidlám v zozname -STR_VEHICLE_LIST_REPLACE_VEHICLES :Vymena vozidiel +STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Zadať príkazy všetkým vozidlám v zozname +STR_VEHICLE_LIST_REPLACE_VEHICLES :Vymeniť vozidlá STR_VEHICLE_LIST_SEND_FOR_SERVICING :Vykonať servis STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Poslať do depa @@ -3374,37 +3435,43 @@ STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslat do gará STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Poslat do lodenice STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Poslať do hangáru -STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Klikni pre zastavenie všetkých vozidiel v zozname -STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Klikni pre spustenie všetkých vozidiel v zozname +STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Zastaviť všetky vozidlá v zozname +STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Spustiť všetky vozidlá v zozname -STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Zdielané príkazy {COMMA} vozid{P la iel iel} +STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Zdieľané príkazy {COMMA} vozid{P la iel iel} # Group window STR_GROUP_ALL_TRAINS :Všetky vlaky -STR_GROUP_ALL_ROAD_VEHICLES :Všetky cestné vozidlá +STR_GROUP_ALL_ROAD_VEHICLES :Všetky automobily STR_GROUP_ALL_SHIPS :Všetky lode STR_GROUP_ALL_AIRCRAFTS :Všetky lietadlá STR_GROUP_DEFAULT_TRAINS :Nezaradené vlaky -STR_GROUP_DEFAULT_ROAD_VEHICLES :Nezaradené vozidlá +STR_GROUP_DEFAULT_ROAD_VEHICLES :Nezaradené automobily STR_GROUP_DEFAULT_SHIPS :Nezaradené lode STR_GROUP_DEFAULT_AIRCRAFTS :Nezaradené lietadlá +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Skupiny - klikni na skupinu pre zobrazenie všetkých vozidiel skupiny. Ťahaj a Pusti pre usporiadanie hierarchiu v skupine -STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni pre vytvorenie skupiny +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Skupiny - klikni na skupinu pre zobrazenie všetkých vozidiel skupiny. Ťahaj a pusti pre usporiadanie hierarchie v skupine +STR_GROUP_CREATE_TOOLTIP :{BLACK}Vytvoriť skupinu STR_GROUP_DELETE_TOOLTIP :{BLACK}Zrušiť vybranú skupinu STR_GROUP_RENAME_TOOLTIP :{BLACK}Premenovať vybranú skupinu -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikni pre znemožnenie automatického nahradzovania v skupine +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Zmeniť farebnú schému vybranej skupiny +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Znemožniť automatické nahradzovanie v skupine STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Vymazať skupinu STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Ste si istý, že chcete vymazať túto skupinu a jej podskupiny? -STR_GROUP_ADD_SHARED_VEHICLE :Pridat zdielané vozidlá +STR_GROUP_ADD_SHARED_VEHICLE :Pridať zdieľané vozidlá STR_GROUP_REMOVE_ALL_VEHICLES :Odstrániť všetky vozidlá STR_GROUP_RENAME_CAPTION :{BLACK}Premenovať skupinu +STR_GROUP_PROFIT_THIS_YEAR :Profit v tomto roku: +STR_GROUP_PROFIT_LAST_YEAR :Profit v minulom roku: +STR_GROUP_OCCUPANCY :Súčasné využitie: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nove vlaky @@ -3930,7 +3997,7 @@ STR_ORDER_CONDITIONAL_UNCONDITIONAL :Skok na príkaz STR_ORDER_CONDITIONAL_NUM :Skok na príkaz {COMMA} ak {STRING} {STRING} {COMMA} STR_ORDER_CONDITIONAL_TRUE_FALSE :Skok na príkaz {COMMA} ak {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Neplatny prikaz) +STR_INVALID_ORDER :{RED} (Neplatný príkaz) # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Cestovný poriadok) @@ -4064,6 +4131,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vybrať STR_AI_LIST_CANCEL :{BLACK}Zrušiť STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemeniť skript +STR_SCREENSHOT_CAPTION :Vytvoriť snímku obrazovky +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normálna snímka +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Plne priblížená snímka +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Predvolene priblížená snímka +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Snímka celej mapy +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Snímka výškovej mapy +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Snímka minimapy # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre @@ -4148,7 +4222,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Bola ná # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Obrovská snímka -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Screenshot bude mať rozlíšenie {COMMA} x {COMMA} pixelov. Jeho vytvorenie ale môže chvíľu trvať. Naozaj chcete pokračovať +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Snímka bude mať rozlíšenie {COMMA} x {COMMA} pixelov. Jej vytvorenie ale môže chvíľu trvať. Naozaj chcete pokračovať? STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Snímka bola uložená na disk ako '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Uloženie snímky zlyhalo! @@ -4238,9 +4312,9 @@ STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... mô STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... môže byť postavené len v blízkosti centra mesta STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... môže byť postavené len v nízkych oblastiach STR_ERROR_CAN_ONLY_BE_POSITIONED :{G=s}{WHITE}... môže byť umiestnené len v blízkosti okrajov mapy -STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... les sa môže sadiť len nad čiarou snehu -STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... môže byť postavené len nad čiarou snehu -STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... môže byť postavené len pod čiarou snehu +STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... les sa môže sadiť len nad hranicou snehu +STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... môže byť postavené len nad hranicou snehu +STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... môže byť postavené len pod hranicou snehu STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Nenašli sa žiadne vhodné miesta pre '{STRING}' STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Pre získanie lepšej mapy zmeňte parametre jej generovania @@ -4516,8 +4590,10 @@ STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Pôvodná grafi STR_BASEGRAPHICS_WIN_DESCRIPTION :Pôvodná grafika Transport Tycoon Deluxe (Windows). STR_BASESOUNDS_DOS_DESCRIPTION :Pôvodné zvuky Transport Tycoon Deluxe (DOS). STR_BASESOUNDS_WIN_DESCRIPTION :Pôvodné zvuky Transport Tycoon Deluxe (Windows). -STR_BASESOUNDS_NONE_DESCRIPTION :Zvuková sada neobsahujúca zvuky. +STR_BASESOUNDS_NONE_DESCRIPTION :Sada zvukov neobsahujúca zvuky. STR_BASEMUSIC_WIN_DESCRIPTION :Pôvodná hudba z Transport Tycoon Deluxe (Windows). +STR_BASEMUSIC_DOS_DESCRIPTION :Pôvodná hudba z Transport Tycoon Deluxe (DOS). +STR_BASEMUSIC_TTO_DESCRIPTION :Pôvodná hudba z Transport Tycoon (DOS). STR_BASEMUSIC_NONE_DESCRIPTION :Sada hudby neobsahujúca hudbu. ##id 0x2000 diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 3ea15362cb..168412a2b9 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -243,13 +243,13 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Cerrar v STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título de la ventana - arrastre para moverla STR_TOOLTIP_SHADE :{BLACK}Ocultar ventana - mostrar solo título de la ventana STR_TOOLTIP_DEBUG :{BLACK}Mostrar información de depuración NewGRF -STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar ventana al tamaño por defecto. Ctrl+Click permite almacenar el tamaño actual como tamaño por defecto -STR_TOOLTIP_STICKY :{BLACK}Esta ventana no se cerrará tras usar el comando 'Cerrar Todas las Ventanas'. Ctrl+Click permite guardar el estado como estado por defecto +STR_TOOLTIP_DEFSIZE :{BLACK}Redimensionar ventana al tamaño por defecto. Ctrl+Clic permite almacenar el tamaño actual como tamaño por defecto +STR_TOOLTIP_STICKY :{BLACK}Esta ventana no se cerrará tras usar el comando 'Cerrar Todas las Ventanas'. Ctrl+Clic permite guardar el estado como estado por defecto STR_TOOLTIP_RESIZE :{BLACK}Pulse y arrastre para redimensionar la ventana STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Cambiar entre tamaño de ventana grande/pequeño STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de desplazamiento - mueve la lista arriba/abajo STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de desplazamiento - mueve la lista izquierda/derecha -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demoler edificios, etc. en un área de terreno. Ctrl permite seleccionar un área diagonalmente. Shift permite mostrar una estimación del precio +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demoler edificios, etc. en un área de terreno. Ctrl permite seleccionar un área diagonalmente. Mayús permite mostrar una estimación del precio # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Mostrar ocultos @@ -332,10 +332,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Mostrar STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Mostrar gráficos STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Mostrar tabla de clasificación de empresas STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Aportar fondos para construir una nueva industria -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Mostrar lista de trenes de la empresa. Ctrl+Click hace que no aparezca la lista de grupos -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Mostrar lista de vehículos de carretera de la empresa. Ctrl+Click hace que no aparezca la lista de grupos -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Mostrar lista de barcos de la empresa. Ctrl+Click hace que no aparezca la lista de grupos -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Mostrar lista de aeronaves de la empresa. Ctrl+Click hace que no aparezca la lista de grupos +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Mostrar lista de trenes de la empresa. Ctrl+Clic hace que no aparezca la lista de grupos +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Mostrar lista de vehículos de carretera de la empresa. Ctrl+Clic hace que no aparezca la lista de grupos +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Mostrar lista de barcos de la empresa. Ctrl+Clic hace que no aparezca la lista de grupos +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Mostrar lista de aeronaves de la empresa. Ctrl+Clic hace que no aparezca la lista de grupos STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Acercar vista STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Alejar vista STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir ferrocarril @@ -355,16 +355,16 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor de escenarios STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Retrocede la fecha de inicio en un año STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Avanza la fecha de inicio en un año -STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Click para fijar el año inicial +STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clic para fijar el año inicial STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Mostrar mapa, guía de municipios STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generación de terreno STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Creación de municipios STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generación de industria STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcción de carreteras STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcción de tranvía -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árboles. Shift permite mostrar una estimación del precio +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árboles. Mayús permite mostrar una estimación del precio STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar cartel -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Shift permite mostrar una estimación del precio +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Mayús permite mostrar una estimación del precio ############ range for SE file menu starts STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Guardar escenario @@ -594,7 +594,7 @@ STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Leyenda de los gráficos -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Click aquí para intercambiar la entrada de la empresa +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Clic aquí para intercambiar la entrada de la empresa # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Tabla de Clasificación de Empresas @@ -717,9 +717,9 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rutas de transporte en el mapa STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetación en el mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar propietarios de terrenos en el mapa -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Click en un tipo de industria para mostrarlo/ocultarlo. Ctrl+Click oculta todos los tipos excepto el seleccionado. Ctrl+Click de nuevo en el mismo tipo muestra todos los tipos de industrias -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Click en una empresa para mostrar/ocultar sus propiedades. Ctrl+Click oculta todas las empresas excepto la seleccionada. Ctrl+Click de nuevo en la misma empresa muestra todas las empresas -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Click en una carga permite activar o desactivar su visualización. Ctrl+Click deshabilita todas las cargas excepto la seleccionada. Un segundo Ctrl+Click habilita la visualización de todos los tipos de carga +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clic en un tipo de industria para mostrarlo/ocultarlo. Ctrl+Clic oculta todos los tipos excepto el seleccionado. Ctrl+Clic de nuevo en el mismo tipo muestra todos los tipos de industrias +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clic en una empresa para mostrar/ocultar sus propiedades. Ctrl+Clic oculta todas las empresas excepto la seleccionada. Ctrl+Clic de nuevo en la misma empresa muestra todas las empresas +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clic en una carga permite activar o desactivar su visualización. Ctrl+Clic deshabilita todas las cargas excepto la seleccionada. Un segundo Ctrl+Clic habilita la visualización de todos los tipos de carga STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Carreteras STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrocarriles @@ -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}¡Nuev{G o a} {STRING} ahora disponible! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abre la lista de vehículos centrada en el grupo del 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} @@ -896,45 +897,46 @@ STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidad d STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selección de unidad de moneda ############ start of currency region -STR_GAME_OPTIONS_CURRENCY_GBP :Libra Británica (GBP) -STR_GAME_OPTIONS_CURRENCY_USD :Dólar Americano (USD) +STR_GAME_OPTIONS_CURRENCY_GBP :Libra británica (GBP) +STR_GAME_OPTIONS_CURRENCY_USD :Dólar estadounidense (USD) STR_GAME_OPTIONS_CURRENCY_EUR :Euro (EUR) -STR_GAME_OPTIONS_CURRENCY_JPY :Yen Japonés (¥) -STR_GAME_OPTIONS_CURRENCY_ATS :Chelín Austriaco (ATS) -STR_GAME_OPTIONS_CURRENCY_BEF :Franco Belga (BEF) -STR_GAME_OPTIONS_CURRENCY_CHF :Franco Suizo (CHF) -STR_GAME_OPTIONS_CURRENCY_CZK :Corona Checa (CZK) -STR_GAME_OPTIONS_CURRENCY_DEM :Marco Alemán (DEM) -STR_GAME_OPTIONS_CURRENCY_DKK :Corona Danesa (DKK) -STR_GAME_OPTIONS_CURRENCY_ESP :Peseta Española (ESP) -STR_GAME_OPTIONS_CURRENCY_FIM :Markka Finlandés (FIM) -STR_GAME_OPTIONS_CURRENCY_FRF :Franco Francés (FRF) -STR_GAME_OPTIONS_CURRENCY_GRD :Dracma Griego (GRD) -STR_GAME_OPTIONS_CURRENCY_HUF :Florín Húngaro (HUF) -STR_GAME_OPTIONS_CURRENCY_ISK :Corona Islandesa (ISK) -STR_GAME_OPTIONS_CURRENCY_ITL :Lira Italiana (ITL) -STR_GAME_OPTIONS_CURRENCY_NLG :Florín Holandés (NLG) -STR_GAME_OPTIONS_CURRENCY_NOK :Corona Noruega(NOK) -STR_GAME_OPTIONS_CURRENCY_PLN :Zloty Polaco (PLN) -STR_GAME_OPTIONS_CURRENCY_RON :Leu Rumano (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Rublo Ruso (RUR) -STR_GAME_OPTIONS_CURRENCY_SIT :Tólar Esloveno (SIT) -STR_GAME_OPTIONS_CURRENCY_SEK :Corona Sueca (SEK) -STR_GAME_OPTIONS_CURRENCY_TRY :Lira Turca (TRY) -STR_GAME_OPTIONS_CURRENCY_SKK :Corona Eslovaca -STR_GAME_OPTIONS_CURRENCY_BRL :Real Brasileño (BRL) -STR_GAME_OPTIONS_CURRENCY_EEK :Krooni Estonio (EEK) -STR_GAME_OPTIONS_CURRENCY_LTL :Litas Lituana (LTL) -STR_GAME_OPTIONS_CURRENCY_KRW :Won Surcoreano (KRW) +STR_GAME_OPTIONS_CURRENCY_JPY :Yen japonés (¥) +STR_GAME_OPTIONS_CURRENCY_ATS :Chelín austriaco (ATS) +STR_GAME_OPTIONS_CURRENCY_BEF :Franco belga (BEF) +STR_GAME_OPTIONS_CURRENCY_CHF :Franco suizo (CHF) +STR_GAME_OPTIONS_CURRENCY_CZK :Corona checa (CZK) +STR_GAME_OPTIONS_CURRENCY_DEM :Marco alemán (DEM) +STR_GAME_OPTIONS_CURRENCY_DKK :Corona danesa (DKK) +STR_GAME_OPTIONS_CURRENCY_ESP :Peseta española (ESP) +STR_GAME_OPTIONS_CURRENCY_FIM :Markka finlandés (FIM) +STR_GAME_OPTIONS_CURRENCY_FRF :Franco francés (FRF) +STR_GAME_OPTIONS_CURRENCY_GRD :Dracma griego (GRD) +STR_GAME_OPTIONS_CURRENCY_HUF :Florín húngaro (HUF) +STR_GAME_OPTIONS_CURRENCY_ISK :Corona islandesa (ISK) +STR_GAME_OPTIONS_CURRENCY_ITL :Lira italiana (ITL) +STR_GAME_OPTIONS_CURRENCY_NLG :Florín holandés (NLG) +STR_GAME_OPTIONS_CURRENCY_NOK :Corona noruega(NOK) +STR_GAME_OPTIONS_CURRENCY_PLN :Zloty polaco (PLN) +STR_GAME_OPTIONS_CURRENCY_RON :Leu rumano (RON) +STR_GAME_OPTIONS_CURRENCY_RUR :Rublo ruso (RUR) +STR_GAME_OPTIONS_CURRENCY_SIT :Tólar esloveno (SIT) +STR_GAME_OPTIONS_CURRENCY_SEK :Corona sueca (SEK) +STR_GAME_OPTIONS_CURRENCY_TRY :Lira turca (TRY) +STR_GAME_OPTIONS_CURRENCY_SKK :Corona eslovaca +STR_GAME_OPTIONS_CURRENCY_BRL :Real brasileño (BRL) +STR_GAME_OPTIONS_CURRENCY_EEK :Krooni estonio (EEK) +STR_GAME_OPTIONS_CURRENCY_LTL :Litas lituana (LTL) +STR_GAME_OPTIONS_CURRENCY_KRW :Won surcoreano (KRW) STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sudafricano (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada... -STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL) -STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraní (IRR) -STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo Rublo Ruso (RUB) +STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL) +STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraní (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo rublo ruso (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano (MXN) -STR_GAME_OPTIONS_CURRENCY_NTD :Nuevo Dólar de Taiwan (NTD) -STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Chino (CNY) -STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_NTD :Nuevo dólar taiwanés (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi chino (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dólar hongkonés (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rupia india (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera @@ -1207,7 +1209,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Pendiente de la STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir a trenes realizar giros de 90°: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90 grados ocurren cuando una vía en sentido horizontal está seguida por una vía en sentido vertical, haciendo que el tren gire 90 grados al pasar de una a otra en lugar de los 45 grados habituales en otras combinaciones. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir unir estaciones no adyacentes: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite añadir partes a una estación sin tener que estar en contacto directamente con las partes existentes. Necesita pulsar Ctrl+Click al añadir las nuevas partes +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite añadir partes a una estación sin tener que estar en contacto directamente con las partes existentes. Necesita pulsar Ctrl+Clic al añadir las nuevas partes STR_CONFIG_SETTING_INFLATION :Inflación: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Activa la inflación económica, lo cual hace que los costes aumenten ligeramente más rápido que los beneficios STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Longitud máxima de puentes: {STRING} @@ -1304,11 +1306,13 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo STR_CONFIG_SETTING_HOVER_DELAY :Mostrar mensajes de ayuda: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo necesario con el ratón sobre un elemento de la interfaz para que esta muestre su mensaje de ayuda. De forma alternativa, se puede escoger mostrar estos mensajes al pulsar el botón derecho cuando el valor de esta opción ha sido establecido a 0. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Mantener ratón durante {COMMA} milisegundo{P 0 "" s} -STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Click derecho +STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Clic derecho STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostrar la población de un municipio en su etiqueta: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Muestra la población de los municipios en su etiqueta sobre el mapa STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosor de las líneas en los gráficos: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grosor de las líneas en los gráficos. Una línea fina es más precisa, una línea más gruesa es más fácil de distinguir +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar el nombre del NewGRF en la ventana de compra de vehículos: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Añade una línea a la ventana de compra de vehículos, mostrando a qué NewGRF pertenece el vehículo seleccionado. STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Los terrenos definen escenarios con diferentes tipos de carga y requisitos de crecimiento de municipios. Es posible modificarlos empleando NewGRF y scripts de juego @@ -1366,7 +1370,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Recorrer mapa c STR_CONFIG_SETTING_SCROLLMODE_RMB :Mueve el mapa con el botón derecho del ratón STR_CONFIG_SETTING_SCROLLMODE_LMB :Mueve el mapa con el botón izquierdo del ratón STR_CONFIG_SETTING_SMOOTH_SCROLLING :Desplazamiento de vista suavizado: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla la forma en la que la vista principal se mueve a una posición específica como resultado de hacer click en el mapa o al enviar la orden de moverse a un objeto determinado del mapa. Si se activa, la vista se mueve de forma suave. Si se desactiva, la vista se mueve directamente al destino +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla la forma en la que la vista principal se mueve a una posición específica como resultado de hacer clic en el mapa o al enviar la orden de moverse a un objeto determinado del mapa. Si se activa, la vista se mueve de forma suave. Si se desactiva, la vista se mueve directamente al destino STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas usando las herramientas de construcción: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Muestra distancias en número de casillas y las diferencias de altura al arrastrar durante operaciones de construcción STR_CONFIG_SETTING_LIVERIES :Ver tipos específicos para cada vehículo: {STRING} @@ -1386,18 +1390,18 @@ STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controla la sen STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado en pantalla: {STRING} STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Permite seleccionar el método para abrir el teclado en pantalla para escribir texto empleando solamente el puntero. Esta opción está pensada para dispositivos pequeños sin teclado físico STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Deshabilitado -STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doble click -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un solo click (con foco) -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un solo click (inmediatamente) +STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doble clic +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un solo clic (si está enfocado) +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un solo clic (inmediatamente) STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulación del botón derecho: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecciona el método para emular los clicks con el botón derecho del ratón -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Click -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Click +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecciona el método para emular los clics con el botón derecho del ratón +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Comando+Clic +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Clic STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Desactivado -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Cerrar ventana con click derecho: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Cierra una ventana al hacer click derecho dentro. ¡Quita la información al hacer click derecho! +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Cerrar ventana con clic derecho: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Cierra una ventana al hacer clic derecho dentro. ¡Desactiva la descripción emergente al hacer clic derecho! STR_CONFIG_SETTING_AUTOSAVE :Autoguardado: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Selecciona el intervalo entre guardados automáticos del juego @@ -1446,7 +1450,7 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Final del año: STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Reproducir sonido al mostrar el resumen anual del rendimiento de la compañía al terminar el año STR_CONFIG_SETTING_SOUND_CONFIRM :Construcción: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Reproducir sonido al construir con éxito o realizar otras acciones -STR_CONFIG_SETTING_SOUND_CLICK :Click de botones: {STRING} +STR_CONFIG_SETTING_SOUND_CLICK :Clic de botones: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Pitido al pulsar botones STR_CONFIG_SETTING_SOUND_DISASTER :Desastres/accidentes: {STRING} STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Reproducir efectos de sonido de accidentes y desastres @@ -1546,10 +1550,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias en color aparecen en: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Año en el cual los periódicos empezarán a imprimirse en color. Antes de ese año solamente usarán una escala de grises STR_CONFIG_SETTING_STARTING_YEAR :Fecha de inicio: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Año de clasificación final: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Año en el que finaliza el juego para establecer la clasificación. Al final de este año se guarda la puntuación de las empresas y se muestra la pantalla de las puntuaciones más altas, aunque se puede continuar jugando la partida.{}Si este año es posterior al año de comienzo, la pantalla de puntuaciones más altas no se mostrará nunca. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activar economía suave (cambios más pequeños): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Si se activa, se producirán cambios de producción en las industrias más frecuentemente y en pasos menores. Si se usa un NewGRF para proveer industrias, esta opción generalmente no tiene efecto STR_CONFIG_SETTING_ALLOW_SHARES :Permitir comprar acciones de otras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cuando se activa, permite comprar y vender acciones de empresas. Las acciones de una empresa solamente estarán disponibles cuando la empresa cumpla una edad determinada +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edad mínima de una empresa para comerciar con sus acciones: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Edad mínima que tiene que tener una empresa para poder comprar y vender sus acciones. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje del beneficio total a pagar en transferencias: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de los beneficios dados a los transportes intermedios en sistemas de transferencias, dando un mayor control sobre el beneficio de cada vehículo STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Al arrastrar, colocar señales cada: {STRING} @@ -1560,14 +1570,14 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Fija el comport STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Señales mecánicas por defecto antes de: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Fija el 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 (tienen la misma funcionalidad pero distinto aspecto) STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar la GUI de señales: {STRING} -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Muestra una ventana para escoger los tipos de señales a construir, en lugar de no usar ventana y únicamente permitir el cambio de tipo de señal por rotación mediante Ctrl+Click sobre las señales ya construidas +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Muestra una ventana para escoger los tipos de señales a construir, en lugar de no usar ventana y únicamente permitir el cambio de tipo de señal por rotación mediante Ctrl+Clic sobre las señales ya construidas STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal a construir por defecto: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal a usar por defecto STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de bloque STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Señales de ruta STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Señales de ruta de un sentido STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cambiar entre tipos de señales: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Permite seleccionar entre qué señales se debe de cambiar al usar Ctrl+Click con la herramienta de señales +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Permite seleccionar entre qué señales se debe de cambiar al usar Ctrl+Clic con la herramienta de señales STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de bloque STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo señales de ruta STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas @@ -1773,7 +1783,7 @@ STR_INTRO_ONLINE_CONTENT :{BLACK}Contenid STR_INTRO_SCRIPT_SETTINGS :{BLACK}Configuración de Scripts STR_INTRO_QUIT :{BLACK}Salir -STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Comenzar nuevo juego. Ctrl+Click omite la configuración del escenario +STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Comenzar nuevo juego. Ctrl+Clic omite la configuración del escenario STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Cargar un juego guardado STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Empezar juego nuevo, usando mapa de altura como terreno STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Comienza un nuevo juego, usando un escenario personalizado desde el disco @@ -1842,9 +1852,9 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Ver esqu STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Ver esquema de color de los vehículos de carretera STR_LIVERY_SHIP_TOOLTIP :{BLACK}Ver esquema de color de los barcos STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Mostrar esquema de color de aeronaves -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Selecciona el color primario para el esquema seleccionado. Ctrl+Click fijará este color para todo el esquema -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Selecciona el color secundario para el esquema seleccionado. Ctrl+Click fijará este color para todo el esquema -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecciona un esquema de color a modificar, o selecciona varios pulsando Ctrl+Click. Pulsa en la caja para cambiar el uso del esquema +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Selecciona el color primario para el esquema seleccionado. Ctrl+Clic fijará este color para todo el esquema +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Selecciona el color secundario para el esquema seleccionado. Ctrl+Clic fijará este color para todo el esquema +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecciona un esquema de color a modificar, o selecciona varios pulsando Ctrl+Clic. Pulsa en la caja para cambiar el uso del esquema STR_LIVERY_DEFAULT :Estación normal STR_LIVERY_STEAM :Locomotora a Vapor @@ -1944,7 +1954,7 @@ STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clientes STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clientes online / máx. clientes{}Empresas online / máximo empresas STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Tamaño del mapa -STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Tamaño del mapa del juego{}Click para ordenar por área +STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Tamaño del mapa del juego{}Clic para ordenar por área STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Fecha STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Fecha actual STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Años @@ -2160,6 +2170,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrase STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor está completo STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Se ha prohibido tu acceso al servidor STR_NETWORK_ERROR_KICKED :{WHITE}Has sido expulsado del servidor +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Razón: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}No se permiten trucos en este servidor STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Estabas enviando demasiados comandos al servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Tardaste demasiado en introducir la contraseña @@ -2219,6 +2230,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} da STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Entregas a la empresa {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha cerrado la sesión STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Se está reiniciando el servidor...{}Espere por favor... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} ha sido expulsado. Razón: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Descarga de contenido @@ -2295,15 +2307,15 @@ STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, sali # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opciones de Transparencia -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ajustar transparencia para carteles. Ctrl+Click para bloquear -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ajustar transparencia para árboles. Ctrl+Click para bloquear -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ajustar transparencia para casas. Ctrl+Click para bloquear -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ajustar transparencia para industrias. Ctrl+Click para bloquear -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ajustar transparencia para construcciones como estaciones, depósitos o puntos de ruta. Ctrl+Click para bloquear -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ajustar transparencia para puentes. Ctrl+Click para bloquear -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ajustar transparencia para estructuras como faros o antenas. Ctrl+Click para bloquear -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ajustar transparencia para catenaria. Ctrl+Click para bloquear -STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Ajustar transparencia para los indicadores de carga. Ctrl+Click para bloquear +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ajustar transparencia para carteles. Ctrl+Clic para bloquear +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ajustar transparencia para árboles. Ctrl+Clic para bloquear +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ajustar transparencia para casas. Ctrl+Clic para bloquear +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ajustar transparencia para industrias. Ctrl+Clic para bloquear +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ajustar transparencia para construcciones como estaciones, depósitos o puntos de ruta. Ctrl+Clic para bloquear +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ajustar transparencia para puentes. Ctrl+Clic para bloquear +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ajustar transparencia para estructuras como faros o antenas. Ctrl+Clic para bloquear +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ajustar transparencia para catenaria. Ctrl+Clic para bloquear +STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Ajustar transparencia para los indicadores de carga. Ctrl+Clic para bloquear STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Poner objetos invisibles en vez de transparentes # Linkgraph legend window @@ -2340,16 +2352,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construcción F STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construcción de Monorraíl STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construcción de Maglev -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir tramo de ferrocarril. Ctrl permite retirar ferrocarriles. Shift permite mostrar una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir tramos de ferrocarril usando modo Autorraíl. Ctrl permite retirar ferrocarriles. Shift permite mostrar una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trenes (para comprar y dar servicio a trenes). Shift permite mostrar una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Convertir ferrocarril a punto de ruta. Ctrl activa la unión de puntos de ruta. Shift permite mostrar una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estación de ferrocarril. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir señales de ferrocarril. Ctrl cambia entre señales mecánicas y eléctricas{}Arrastrar construye señales a lo largo del tramo recto de ferrocarril seleccionado. Ctrl construye señales hasta el siguiente cruce o señal{}Ctrl+Click cambia a la ventana de selección de señales. Shift cambia entre construir/mostrar el precio estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir puente de ferrocarril. Shift permite mostrar una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviario. Shift permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir tramo de ferrocarril. Ctrl permite retirar ferrocarriles. Mayús permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir tramos de ferrocarril usando modo Autorraíl. Ctrl permite retirar ferrocarriles. Mayús permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trenes (para comprar y dar servicio a trenes). Mayús permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Convertir ferrocarril a punto de ruta. Ctrl activa la unión de puntos de ruta. Mayús permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estación de ferrocarril. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir señales de ferrocarril. Ctrl cambia entre señales mecánicas y eléctricas{}Arrastrar construye señales a lo largo del tramo recto de ferrocarril seleccionado. Ctrl construye señales hasta el siguiente cruce o señal{}Ctrl+Clic cambia a la ventana de selección de señales. Mayús cambia entre construir/mostrar el precio estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir puente de ferrocarril. Mayús permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviario. Mayús permite mostrar una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Cambiar entre construir/retirar ferrocarriles, señales, estaciones y puntos de ruta de ferrocarril. Mantener pulsado Ctrl retirará también el ferrocarril al retirar estaciones y puntos de ruta -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Convertir/Actualizar tipo de ferrocarril. Shift permite mostrar una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Convertir/Actualizar tipo de ferrocarril. Mayús permite mostrar una estimación del precio STR_RAIL_NAME_RAILROAD :Ferrocarril STR_RAIL_NAME_ELRAIL :Ferrocarril eléctrico @@ -2395,7 +2407,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal d STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}La señal combo actúa como señal de entrada y salida a la vez. Esto permite construir grandes "árboles" de señales condicionales STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar a un bloque de señales a la vez, si el tren puede reservar una ruta hasta un lugar seguro. Pueden ser traspasadas desde atrás STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Una señal de ruta permite a más de un tren entrar a un bloque de señales a la vez, si el tren puede reservar una ruta hasta un lugar seguro. No pueden ser traspasadas desde atrás -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Convertir señal{}Cuando es seleccionado, pulsar sobre una señal existente la convierte en el tipo y variante indicados. Pulsar Ctrl+Click permite cambiar de variante. Shift+Click muestra una estimación del precio de conversión +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Convertir señal{}Cuando es seleccionado, pulsar sobre una señal existente la convierte en el tipo y variante indicados. Pulsar Ctrl+Clic permite cambiar de variante. Mayús+Clic muestra una estimación del precio de conversión STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia del arrastre de señales STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir distancia del arrastre de señales STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Incrementar distancia del arrastre de señales @@ -2403,7 +2415,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Incremen # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Seleccione Puente de Ferrocarril STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Elige puente de carretera -STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selección de puente - Click en el puente elegido para construirlo +STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selección de puente - Clic en el puente elegido para construirlo STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} STR_BRIDGE_NAME_SUSPENSION_STEEL :Colgante, Acero @@ -2419,25 +2431,25 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silici # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construcción de carretera STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construcción de tranvía -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir sección de carretera. Ctrl permite retirar carreteras. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir sección de tranvía. Ctrl permite retirar tranvías. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir carretera usando el modo de Autocarretera. Ctrl permite retirar carreteras. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir tranvías usando el modo de Autotranvías. Ctrl permite retirar tranvías. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito de carretera (para comprar y mantener vehículos). Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de tranvías (para comprar y mantener vehículos). Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estación de autobús. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estación de tranvía de pasajeros. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estación de carga para camiones. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estación de tranvía de carga. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir sección de carretera. Ctrl permite retirar carreteras. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir sección de tranvía. Ctrl permite retirar tranvías. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir carretera usando el modo de Autocarretera. Ctrl permite retirar carreteras. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construir tranvías usando el modo de Autotranvías. Ctrl permite retirar tranvías. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito de carretera (para comprar y mantener vehículos). Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de tranvías (para comprar y mantener vehículos). Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construir estación de autobús. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estación de tranvía de pasajeros. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estación de carga para camiones. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estación de tranvía de carga. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Activar/Desactivar carreteras de un sentido -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir puente de carretera. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir puente de tranvía. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel de carretera. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel de tranvía. Shift permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Construir puente de carretera. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir puente de tranvía. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel de carretera. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel de tranvía. Mayús permite mostrar una estimación del precio STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Cambiar entre construir/retirar carretera STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Activar construir/quitar para construcciones de tranvía -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Convertir/Actualizar tipo de carretera. Shift permite mostrar una estimación del precio -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Convertir/Actualizar tipo de tranvía. Shift permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Convertir/Actualizar tipo de carretera. Mayús permite mostrar una estimación del precio +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Convertir/Actualizar tipo de tranvía. Mayús permite mostrar una estimación del precio STR_ROAD_NAME_ROAD :Carretera STR_ROAD_NAME_TRAM :Tranvía @@ -2461,12 +2473,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Seleccio # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construcción de Canales STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Canales -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canales. Shift permite mostrar una estimación del precio -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir esclusas. Shift permite mostrar una estimación del precio -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir astillero (para comprar y dar servicio a barcos). Shift permite mostrar una estimación del precio -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir muelles. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar boya que puede ser usada como punto de ruta. Shift permite mostrar una estimación del precio -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir acueducto. Shift permite mostrar una estimación del precio +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canales. Mayús permite mostrar una estimación del precio +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir esclusas. Mayús permite mostrar una estimación del precio +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir astillero (para comprar y dar servicio a barcos). Mayús permite mostrar una estimación del precio +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir muelles. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Colocar boya que puede ser usada como punto de ruta. Mayús permite mostrar una estimación del precio +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir acueducto. Mayús permite mostrar una estimación del precio STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definir área de agua.{}Crea un canal, a menos que se pulse Ctrl al nivel del mar, en cuyo caso se inundarán los alrededores STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar ríos @@ -2479,7 +2491,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Muelle # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Aeropuertos -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construir aeropuerto. Ctrl activa la unión de estaciones. Shift permite mostrar una estimación del precio +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Construir aeropuerto. Ctrl activa la unión de estaciones. Mayús permite mostrar una estimación del precio # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Selección de aeropuerto @@ -2506,14 +2518,14 @@ STR_STATION_BUILD_NOISE :{BLACK}Ruido ge # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Terreno -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Bajar una esquina del terreno. Arrastrar reduce la esquina seleccionada y nivela el resto del terreno seleccionado a dicha altura. Ctrl permite seleccionar un área diagonalmente. Shift permite mostrar una estimación del precio -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Subir una esquina del terreno. Arrastrar eleva la esquina seleccionada y nivela el resto del terreno seleccionado a dicha altura. Ctrl permite seleccionar un área diagonalmente. Shift permite mostrar una estimación del precio -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivela un área de terreno a la altura de la primera esquina seleccionada. Ctrl permite seleccionar un área diagonalmente. Shift permite mostrar una estimación del precio -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar tierra para usos futuros. Shift permite mostrar una estimación del precio +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Bajar una esquina del terreno. Arrastrar reduce la esquina seleccionada y nivela el resto del terreno seleccionado a dicha altura. Ctrl permite seleccionar un área diagonalmente. Mayús permite mostrar una estimación del precio +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Subir una esquina del terreno. Arrastrar eleva la esquina seleccionada y nivela el resto del terreno seleccionado a dicha altura. Ctrl permite seleccionar un área diagonalmente. Mayús permite mostrar una estimación del precio +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivela un área de terreno a la altura de la primera esquina seleccionada. Ctrl permite seleccionar un área diagonalmente. Mayús permite mostrar una estimación del precio +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar tierra para usos futuros. Mayús permite mostrar una estimación del precio # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selección de Objeto -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Seleccionar objeto a construir. Shift permite mostrar una estimación del precio +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Seleccionar objeto a construir. Mayús permite mostrar una estimación del precio STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Seleccione el tipo de objeto a construir STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Vista previa del objeto STR_OBJECT_BUILD_SIZE :{BLACK}Tamaño: {GOLD}{NUM} x {NUM} casillas @@ -2525,7 +2537,7 @@ STR_OBJECT_CLASS_TRNS :Transmisor STR_PLANT_TREE_CAPTION :{WHITE}Árboles STR_PLANT_TREE_TOOLTIP :{BLACK}Seleccione el tipo de árboles a plantar. Si la casilla ya tiene un árbol, se añadirán más árboles de distintos tipos sin importar el tipo elegido STR_TREES_RANDOM_TYPE :{BLACK}Tipo aleatorio -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar distintos árboles al azar. Shift permite mostrar una estimación del precio +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar distintos árboles al azar. Mayús permite mostrar una estimación del precio STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Árboles al azar STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta árboles al azar sobre el terreno @@ -2546,7 +2558,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}¿Está # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Creación de Municipios STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nuevo Municipio -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nuevo municipio. Shift+Click muestra una estimación del precio +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nuevo municipio. Mayús+Clic muestra una estimación del precio STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Municipio al Azar STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar municipio en lugar aleatorio STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Varios municipios al azar @@ -2554,7 +2566,7 @@ STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cubre el STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nombre del municipio: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introducir nombre de municipio -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Click para introducir nombre del municipio +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clic para introducir nombre del municipio STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nombre aleatorio STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Generar nuevo nombre @@ -2591,8 +2603,8 @@ STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadena d STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Industrias suministradoras STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Industrias clientes STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Casas -STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Click en la industria para ver sus suministradores y clientes -STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Click en la carga para mostrar sus suministradores y clientes +STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clic en la industria para ver sus suministradores y clientes +STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clic en la carga para mostrar sus suministradores y clientes STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostrar cadena STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar industrias que suministran o aceptan la carga STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Enlazar al mapa @@ -2981,7 +2993,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ir al sp STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite anterior STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Saltar al sprite anterior (ignorando pseudosprites, sprites recoloreados y sprites de fuente) y pasar del primer al último sprite STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representación del sprite seleccionado. Su alineamiento es ignorado al dibujarlo -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover el sprite, cambiando los ajustes X e Y. Ctrl+Click mueve el sprite ocho unidades de una sola vez +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover el sprite, cambiando los ajustes X e Y. Ctrl+Clic mueve el sprite ocho unidades de una sola vez STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reiniciar coordenadas relativas STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reinicia las coordenadas relativas actuales STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Coordenada X: {NUM}, Coordenada Y: {NUM} (Absoluta) @@ -3084,7 +3096,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Municipi STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ninguna - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Ciudad){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nombres de los municipios - click sobre un nombre para centrar la vista principal en él. Ctrl+Click abre una ventana de visualización en dicha posición +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nombres de los municipios - Clic sobre un nombre para centrar la vista principal en él. Ctrl+Clic abre una ventana de visualización en dicha posición STR_TOWN_POPULATION :{BLACK}Población mundial: {COMMA} # Town view window @@ -3102,7 +3114,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}El munic STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}El municipio crece cada {ORANGE}{COMMA}{BLACK}{NBSP}día{P "" s} (edificios fundados) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}El municipio {RED}no{BLACK} está creciendo STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Nivel de ruido en municipio: {ORANGE}{COMMA}{BLACK} Máx.: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista sobre el municipio. Ctrl+Click abre un punto de vista en dicha posición +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista sobre el municipio. Ctrl+Clic abre un punto de vista en dicha posición STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoridad local STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Mostrar información sobre autoridades locales STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Cambiar nombre del municipio @@ -3117,10 +3129,11 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renombrar Munic # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} autoridad local STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar zona dentro del límite de la autoridad local STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Calificación de empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acciones disponibles: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acciones posibles en este municipio - Click sobre cada línea para obtener más detalles +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acciones posibles en este municipio - Clic sobre cada línea para obtener más detalles STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Hágalo STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Hacer lo que se ha marcado en la opción anterior @@ -3153,7 +3166,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- No ap STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}Metas de la compañía: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click en una meta para centrar la vista principal en la casilla, industria o municipio. Ctrl+Click abre una nueva vista en esa localización +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clic en una meta para centrar la vista principal en la casilla, industria o municipio. Ctrl+Clic abre una nueva vista en esa localización # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :Pregunta @@ -3189,7 +3202,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Ninguno - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Líneas ya subvencionadas: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} desde {STRING} a {STRING}{YELLOW} ({COMPANY}{YELLOW}, hasta {DATE_SHORT}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click sobre el servicio para centrar la vista principal en esta industria/municipio. Ctrl+Click abre un punto de vista en dicha posición +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clic sobre el servicio para centrar la vista principal en esta industria/municipio. Ctrl+Clic abre un punto de vista en dicha posición # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Historial de {COMPANY} @@ -3205,7 +3218,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ir a la STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referencia de metas inválida # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Nombres de estación - Click sobre un nombre para centrar la vista principal en la estación. Ctrl+Click abre un punto de vista en dicha posición +STR_STATION_LIST_TOOLTIP :{BLACK}Nombres de estación - Clic sobre un nombre para centrar la vista principal en la estación. Ctrl+Clic abre un punto de vista en dicha posición STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Mantén pulsado Ctrl para seleccionar más de un elemento STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Estaciones STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3267,7 +3280,7 @@ STR_CARGO_RATING_EXCELLENT :Excelente STR_CARGO_RATING_OUTSTANDING :Excepcional ############ range for rating ends -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en la posición de la estación. Ctrl+Click abre un punto de vista en dicha posición +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en la posición de la estación. Ctrl+Clic abre un punto de vista en dicha posición STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Cambiar nombre de la estación STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Mostrar todos los trenes que tienen esta estación en su horario @@ -3282,9 +3295,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Prevenir # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en posición del punto de ruta. Ctrl+Click abre un punto de vista en dicha posición +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en posición del punto de ruta. Ctrl+Clic abre un punto de vista en dicha posición STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambiar nombre del punto de ruta -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en posición de la boya. Ctrl+Click abre un punto de vista en dicha posición +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista en posición de la boya. Ctrl+Clic abre un punto de vista en dicha posición STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Cambiar nombre de boya STR_EDIT_WAYPOINT_NAME :{WHITE}Editar nombre del punto de ruta @@ -3314,9 +3327,9 @@ STR_FINANCES_LOAN_TITLE :{WHITE}Préstam STR_FINANCES_MAX_LOAN :{WHITE}Préstamo Máximo: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Pedir Préstamo {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Incrementar préstamo. Ctrl+Click solicita todo el préstamo posible +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Incrementar préstamo. Ctrl+Clic solicita todo el préstamo posible STR_FINANCES_REPAY_BUTTON :{BLACK}Pagar Préstamo {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Pagar parte del préstamo. Ctrl+Click paga todo el préstamo posible +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Pagar parte del préstamo. Ctrl+Clic paga todo el préstamo posible STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraestructura # Company view @@ -3346,7 +3359,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Construi STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Ver Sede STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Ver sede de la empresa STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Reubicar Sede -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reubica la sede de la empresa a cualquier otro lugar, con el coste del 1% del valor total de la empresa. Shift+Click muestra una estimación del precio sin mover la sede +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reubica la sede de la empresa a cualquier otro lugar, con el coste del 1% del valor total de la empresa. Mayús+Clic muestra una estimación del precio sin mover la sede STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalles STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver informe detallado de infraestructura @@ -3361,8 +3374,8 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Cambiar STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Comprar un 25% de sus acciones STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Vender 25% de acciones -STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Comprar 25% de acciones de esta empresa. Shift+Click muestra una estimación del precio sin comprar ninguna acción -STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vender 25% acciones de esta empresa. Shift+Click muestra una estimación del beneficio sin vender ninguna acción +STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Comprar 25% de acciones de esta empresa. Mayús+Clic muestra una estimación del precio sin comprar ninguna acción +STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vender 25% acciones de esta empresa. Mayús+Clic muestra una estimación del beneficio sin vender ninguna acción STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nombre Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nombre del Presidente @@ -3385,14 +3398,23 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrias STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ninguna - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportado){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nombre de industrias - Click sobre un nombre para centrar la vista principal en la industria. Ctrl+Click abre un punto de vista en dicha posición +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} y {NUM} más... +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nombre de industrias - Clic sobre un nombre para centrar la vista principal en la industria. Ctrl+Clic abre un punto de vista en dicha posición +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceptada: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Carga producida: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos los tipos de carga +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Ninguna # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producción del mes anterior: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar la vista sobre la industria. Ctrl+Click abre un punto de vista en dicha posición +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar la vista sobre la industria. Ctrl+Clic abre un punto de vista en dicha posición STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! @@ -3413,10 +3435,10 @@ STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Barcos STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave{P "" s} -STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenes - Click en tren para información -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Vehículos de carretera - Click en el vehículo para información -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Barcos - Click en barco para información -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronave - Click en la aeronave para información +STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenes - Clic en tren para información +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Vehículos de carretera - Clic en el vehículo para información +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Barcos - Clic en barco para información +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronave - Clic en la aeronave para información STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Beneficio este año: {CURRENCY_LONG} (último año: {CURRENCY_LONG}) @@ -3436,8 +3458,8 @@ STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar a Depós STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Enviar a Astillero STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Enviar al Hangar -STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click para detener todos los vehículos de la lista -STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Click para arrancar todos los vehículos de la lista +STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Clic para detener todos los vehículos de la lista +STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Clic para arrancar todos los vehículos de la lista STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Órdenes compartidas de {COMMA} Vehículo{P "" s} @@ -3454,12 +3476,12 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sin a STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Click en un grupo para ver la lista de sus vehículos. Es posible arrastrar grupos para modificar su jerarquía. -STR_GROUP_CREATE_TOOLTIP :{BLACK}Click para crear un grupo +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clic en un grupo para ver la lista de sus vehículos. Es posible arrastrar grupos para modificar su jerarquía. +STR_GROUP_CREATE_TOOLTIP :{BLACK}Clic para crear un grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Borrar el grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renombrar el grupo seleccionado STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambiar el color del grupo seleccionado -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click para proteger este grupo del auto reemplazado global +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clic para proteger este grupo del auto reemplazado global STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Borrar Grupo STR_GROUP_DELETE_QUERY_TEXT :{WHITE}¿Está seguro de querer borrar este grupo y todos sus subgrupos? @@ -3516,10 +3538,10 @@ STR_PURCHASE_INFO_MAX_TE :{BLACK}F.T máx STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} casillas STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de selección de los vehículos de ferrocarril. Click en el vehículo para más información. Ctrl+Click para mostrar/ocultar el tipo del vehículo -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de selección de vehículos de carretera. Click en el vehículo para más información. Ctrl+Click para mostrar/ocultar el tipo del vehículo -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selección de barcos. Click en el barco para más información. Ctrl+Click para mostrar/ocultar el tipo del barco -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de selección de aeronaves. Click en la aeronave para más información. Ctrl+Click para mostrar/ocultar el tipo de la aeronave +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de selección de los vehículos de ferrocarril. Clic en el vehículo para más información. Ctrl+Clic para mostrar/ocultar el tipo del vehículo +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de selección de vehículos de carretera. Clic en el vehículo para más información. Ctrl+Clic para mostrar/ocultar el tipo del vehículo +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selección de barcos. Clic en el barco para más información. Ctrl+Clic para mostrar/ocultar el tipo del barco +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de selección de aeronaves. Clic en la aeronave para más información. Ctrl+Clic para mostrar/ocultar el tipo de la aeronave STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar vehículo STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar vehículo @@ -3531,15 +3553,15 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar y Reformar Barco STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar y Reformar Aeronave -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehículo de ferrocarril resaltado. Shift+Click muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el vehículo de carretera resaltado. Shift+Click muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el barco resaltado. Shift+Click muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar la aeronave resaltada. Shift+Click muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehículo de ferrocarril resaltado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el vehículo de carretera resaltado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el barco resaltado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar la aeronave resaltada. Mayús+Clic muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar el vehículo de ferrocarril resaltado. Shift+Click muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar el vehículo resaltado. Shift+Click muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar el barco resaltado. Shift+Click muestra una estimación del precio sin realizar la compra -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}}Comprar y reformar la aeronave resaltada. Shift+Click muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar el vehículo de ferrocarril resaltado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar el vehículo resaltado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar el barco resaltado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}}Comprar y reformar la aeronave resaltada. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renombrar STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renombrar @@ -3582,10 +3604,10 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE} STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vehículo {P "" s}{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenes - arrastrar vehículo con Click izquierdo para añadir/retirar del tren, Click derecho para mostrar información. Mantén pulsado Ctrl para usar estos comandos con el resto del tren -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vehículos de carretera - Click derecho en el vehículo para información -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Barcos - Click derecho en el barco para información -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronave - Click derecho en la aeronave para información +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenes - arrastrar vehículo con Clic izquierdo para añadir/retirar del tren, Clic derecho para mostrar información. Mantén pulsado Ctrl para usar estos comandos con el resto del tren +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vehículos de carretera - Clic derecho en el vehículo para información +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Barcos - Clic derecho en el barco para información +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronave - Clic derecho en la aeronave para información STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Arrastrar aquí el vehículo de raíl para venderlo STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Arrastrar aquí el vehículo de carretera para venderlo @@ -3619,30 +3641,30 @@ STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Clonar v STR_DEPOT_CLONE_SHIP :{BLACK}Clonar barco STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar aeronave -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Esto comprará una copia del tren incluyendo todos sus vagones. Pulse este botón y después en el tren dentro o fuera del depósito. Ctrl+Click compartirá las órdenes. Shift+Click muestra el precio estimado sin realizar la compra -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Esto comprará una copia del vehículo de carretera. Pulse este botón y después en el vehículo dentro o fuera del depósito. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Esto comprará una copia del barco. Pulse este botón y después el barco dentro o fuera del muelle. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Esto comprará una copia de la aeronave. Pulse este botón y después en la aeronave dentro o fuera del hangar. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Esto comprará una copia del tren incluyendo todos sus vagones. Pulse este botón y después en el tren dentro o fuera del depósito. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra el precio estimado sin realizar la compra +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Esto comprará una copia del vehículo de carretera. Pulse este botón y después en el vehículo dentro o fuera del depósito. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Esto comprará una copia del barco. Pulse este botón y después el barco dentro o fuera del muelle. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Esto comprará una copia de la aeronave. Pulse este botón y después en la aeronave dentro o fuera del hangar. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del depósito de trenes. Ctrl+Click abre un punto de vista en dicha posición -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del depósito de vehículos. Ctrl+Click abre un punto de vista en dicha posición -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del astillero. Ctrl+Click abre un punto de vista en dicha posición -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del hangar. Ctrl+Click abre un punto de vista en dicha posición +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del depósito de trenes. Ctrl+Clic abre un punto de vista en dicha posición +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del depósito de vehículos. Ctrl+Clic abre un punto de vista en dicha posición +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del astillero. Ctrl+Clic abre un punto de vista en dicha posición +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del hangar. Ctrl+Clic abre un punto de vista en dicha posición STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Obtener lista de todos los trenes con este depósito en sus órdenes STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Obtener lista de todos los vehículos con el depósito actual en sus órdenes STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Obtener lista de todos los barcos con este astillero en sus órdenes STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Obtener lista de todas las aeronaves con cualquier hangar de este aeropuerto en sus órdenes -STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Click para detener todos los trenes dentro del depósito -STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Click para detener todos los vehículos dentro del depósito -STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Click para detener todos los barcos dentro del depósito -STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Click para detener todas las aeronaves dentro del hangar +STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Clic para detener todos los trenes dentro del depósito +STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Clic para detener todos los vehículos dentro del depósito +STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Clic para detener todos los barcos dentro del depósito +STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Clic para detener todas las aeronaves dentro del hangar -STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Click para arrancar todos los trenes dentro del depósito -STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Click para arrancar todos los vehículos dentro del depósito -STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Click para arrancar todos los barcos dentro del astillero -STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Click para arrancar todas las aeronaves dentro del hangar +STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Clic para arrancar todos los trenes dentro del depósito +STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Clic para arrancar todos los vehículos dentro del depósito +STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Clic para arrancar todos los barcos dentro del astillero +STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Clic para arrancar todas las aeronaves dentro del hangar STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Está a punto de vender todos los vehículos en el depósito. ¿Está seguro? @@ -3717,20 +3739,20 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Hacer qu # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del tren. Ctrl+Click sigue al tren en la vista principal -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del vehículo. Ctrl+Click sigue al vehículo en la vista principal -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del barco. Ctrl+Click sigue al barco en la vista principal -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición de la aeronave. Ctrl+Click sigue a la aeronave en la vista principal +STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del tren. Ctrl+Clic sigue al tren en la vista principal +STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del vehículo. Ctrl+Clic sigue al vehículo en la vista principal +STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición del barco. Ctrl+Clic sigue al barco en la vista principal +STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar vista en posición de la aeronave. Ctrl+Clic sigue a la aeronave en la vista principal -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar tren al depósito. Ctrl+Click para realizar solamente mantenimiento -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar vehículo al depósito. Ctrl+Click para realizar solamente mantenimiento -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar barco al astillero. Ctrl+Click para realizar solamente mantenimiento -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave al hangar. Ctrl+Click para realizar solamente mantenimiento +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar tren al depósito. Ctrl+Clic para realizar solamente mantenimiento +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar vehículo al depósito. Ctrl+Clic para realizar solamente mantenimiento +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar barco al astillero. Ctrl+Clic para realizar solamente mantenimiento +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar aeronave al hangar. Ctrl+Clic para realizar solamente mantenimiento -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Esto comprará una copia del tren incluyendo sus vagones. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Esto comprará una copia del vehículo. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Esto comprará una copia del barco. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esto comprará una copia de la aeronave. Ctrl+Click compartirá las órdenes. Shift+Click muestra una estimación del precio sin realizar la compra +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Esto comprará una copia del tren incluyendo sus vagones. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Esto comprará una copia del vehículo. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Esto comprará una copia del barco. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esto comprará una copia de la aeronave. Ctrl+Clic compartirá las órdenes. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forzar al tren a proceder sin esperar a la apertura de señal @@ -3742,20 +3764,20 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Cambiar dirección del tren STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forzar vehículo a girar -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Ver órdenes del tren. Ctrl+Click muestra su horario -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Ver órdenes del vehículo Ctrl+Click muestra su horario -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Ver órdenes del barco. Ctrl+Click muestra su horario -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Ver órdenes de la aeronave. Ctrl+Click muestra su horario +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Ver órdenes del tren. Ctrl+Clic muestra su horario +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Ver órdenes del vehículo Ctrl+Clic muestra su horario +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Ver órdenes del barco. Ctrl+Clic muestra su horario +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Ver órdenes de la aeronave. Ctrl+Clic muestra su horario STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Ver detalles del tren STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalles del vehículo STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalles del barco STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalles de la aeronave -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual del tren - Click para detener/arrancar el tren. Ctrl+Click para desplazarse hasta el destino -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual del vehículo - Click para detener/arrancar vehículo. Ctrl+Click para desplazarse hasta el destino -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual del barco - Click para detener/arrancar barco. Ctrl+Click para desplazarse hasta el destino -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual de la aeronave - Click para detener/arrancar aeronave. Ctrl+Click para desplazarse hasta el destino +STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual del tren - Clic para detener/arrancar el tren. Ctrl+Clic para desplazarse hasta el destino +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual del vehículo - Clic para detener/arrancar vehículo. Ctrl+Clic para desplazarse hasta el destino +STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual del barco - Clic para detener/arrancar barco. Ctrl+Clic para desplazarse hasta el destino +STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual de la aeronave - Clic para detener/arrancar aeronave. Ctrl+Clic para desplazarse hasta el destino # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Cargando / Descargando @@ -3813,8 +3835,8 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Crédito STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}días{BLACK} Último mantenimiento: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}%{BLACK} Último mantenimiento: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Incrementar intervalo de mantenimiento en 10. Ctrl+Click incrementa el intervalo de mantenimiento en 5 -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Reducir intervalo de mantenimiento en 10. Ctrl+Click reduce el intervalo de mantenimiento en 5 +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Incrementar intervalo de mantenimiento en 10. Ctrl+Clic incrementa el intervalo de mantenimiento en 5 +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Reducir intervalo de mantenimiento en 10. Ctrl+Clic reduce el intervalo de mantenimiento en 5 STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Cambiar tipo de intervalo de mantenimiento STR_VEHICLE_DETAILS_DEFAULT :Por defecto @@ -3856,7 +3878,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nueva ca STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Beneficio de reforma: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Coste de reforma: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Beneficio de reforma: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecciona los vehículos a reformar. Arrastrar con el ratón permite seleccionar múltiples vehículos. Hacer Click en un espacio vacío seleccionará el vehículo completo. Ctrl+Click selecciona un vehículo y la cadena que tenga a continuación +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecciona los vehículos a reformar. Arrastrar con el ratón permite seleccionar múltiples vehículos. Hacer Clic en un espacio vacío seleccionará el vehículo completo. Ctrl+Clic selecciona un vehículo y la cadena que tenga a continuación STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Elegir tipo de carga transportable para el tren STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Selecciona tipo de carga que transportará el vehículo de carretera @@ -3878,7 +3900,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horarios STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambiar a la vista de horarios -STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de órdenes - Click en una orden para resaltarla. Ctrl+Click para desplazarse a la estación de la orden +STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de órdenes - Clic en una orden para resaltarla. Ctrl+Clic para desplazarse a la estación de la orden STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} @@ -3908,9 +3930,9 @@ STR_ORDER_DROP_NO_UNLOADING :No descargar STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Cambiar el comportamiento de descarga en la orden seleccionada STR_ORDER_REFIT :{BLACK}Reformar -STR_ORDER_REFIT_TOOLTIP :{BLACK}Selecciona el tipo de carga a reformar en esta orden. Ctrl+Click para eliminar la orden de reforma +STR_ORDER_REFIT_TOOLTIP :{BLACK}Selecciona el tipo de carga a reformar en esta orden. Ctrl+Clic para eliminar la orden de reforma STR_ORDER_REFIT_AUTO :{BLACK}Reforma en la estación -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selecciona el tipo de carga a reformar en esta orden. Ctrl+Click elimina la orden de reforma. La reforma solamente puede llevarse a cabo si el vehículo lo permite +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Selecciona el tipo de carga a reformar en esta orden. Ctrl+Clic elimina la orden de reforma. La reforma solamente puede llevarse a cabo si el vehículo lo permite STR_ORDER_DROP_REFIT_AUTO :Carga fijada STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponible @@ -3946,20 +3968,20 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}El valor STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Introduce el valor a comparar STR_ORDERS_SKIP_BUTTON :{BLACK}Saltarse -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar orden actual y comenzar la siguiente. Ctrl+Click salta a la orden seleccionada +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar orden actual y comenzar la siguiente. Ctrl+Clic salta a la orden seleccionada STR_ORDERS_DELETE_BUTTON :{BLACK}Borrar STR_ORDERS_DELETE_TOOLTIP :{BLACK}Borrar orden resaltada STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Borrar todas las órdenes STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Parar de compartir -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Parar de compartir la lista de órdenes. Adicionalmente, Ctrl+Click borra todas las órdenes de este vehículo +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Parar de compartir la lista de órdenes. Adicionalmente, Ctrl+Clic borra todas las órdenes de este vehículo STR_ORDERS_GO_TO_BUTTON :{BLACK}Ir a STR_ORDER_GO_TO_NEAREST_DEPOT :Ir al depósito más cercano STR_ORDER_GO_TO_NEAREST_HANGAR :Ir al hangar más cercano STR_ORDER_CONDITIONAL :Salto de orden condicional STR_ORDER_SHARE :Compartir órdenes -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden resaltada, o añadirla al final de la lista. Ctrl sobre estaciones ordena 'Carga completa de cualquier carga', sobre puntos de ruta ordena 'sin paradas' y sobre depósitos ordena 'mantenimiento'. Ctrl o Compartir órdenes permite a este vehículo compartir órdenes con el vehículo seleccionado. Click sobre un vehículo copia las órdenes. Una órden de depósito desactiva el mantenimiento automático del vehículo +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Añadir nueva orden antes de la orden resaltada, o añadirla al final de la lista. Ctrl sobre estaciones ordena 'Carga completa de cualquier carga', sobre puntos de ruta ordena 'sin paradas' y sobre depósitos ordena 'mantenimiento'. Ctrl o Compartir órdenes permite a este vehículo compartir órdenes con el vehículo seleccionado. Clic sobre un vehículo copia las órdenes. Una órden de depósito desactiva el mantenimiento automático del vehículo STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Ver todos los vehículos con el mismo calendario @@ -4061,7 +4083,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este hor STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horario empezará en {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}Fecha de inicio -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona una fecha como punto de partida de este horario. Ctrl+Click permite fijar el punto de partida de este horario y distribuye todos los vehículos que lo compartan siempre y cuando el horario esté completo +STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona una fecha como punto de partida de este horario. Ctrl+Clic permite fijar el punto de partida de este horario y distribuye todos los vehículos que lo compartan siempre y cuando el horario esté completo STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Horario STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la cantidad de tiempo que debe tardar una orden marcada @@ -4079,7 +4101,7 @@ STR_TIMETABLE_RESET_LATENESS :{BLACK}Reinicia STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reajustar el contador del retraso, así el vehículo estará en horario STR_TIMETABLE_AUTOFILL :{BLACK}Rellenar automáticamente -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Rellena la tabla de horarios automáticamente con los valores de la siguiente jornada (Ctrl+Click para tratar de mantener los tiempos de espera)) +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Rellena la tabla de horarios automáticamente con los valores de la siguiente jornada (Ctrl+Clic para tratar de mantener los tiempos de espera)) STR_TIMETABLE_EXPECTED :{BLACK}Esperado STR_TIMETABLE_SCHEDULED :{BLACK}Programado @@ -4150,7 +4172,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configur STR_AI_LIST_CAPTION :{WHITE}Disponible {STRING} STR_AI_LIST_CAPTION_AI :IAs STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de Juego -STR_AI_LIST_TOOLTIP :{BLACK}Click para seleccionar un script +STR_AI_LIST_TOOLTIP :{BLACK}Clic para seleccionar un script STR_AI_LIST_AUTHOR :{LTBLUE}Autor: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Versión: {ORANGE}{NUM} @@ -4161,6 +4183,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No cambiar de script +STR_SCREENSHOT_CAPTION :Realizar captura de pantalla +STR_SCREENSHOT_SCREENSHOT :{BLACK}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 :Mapa de alturas +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimapa # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Parámetros {STRING} From a36a1b5ff53b70993ffc8486e3d2958e0bc9af2f Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 6 Oct 2020 17:51:50 +0000 Subject: [PATCH 270/601] Update: Translations from eints slovak: 193 changes by FuryPapaya spanish: 46 changes by MontyMontana --- src/lang/slovak.txt | 333 +++++++++++++++++++++++++------------------ src/lang/spanish.txt | 92 ++++++------ 2 files changed, 239 insertions(+), 186 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 0d1be6d7f5..31b8f81c1f 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -299,8 +299,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Vybrať STR_BUTTON_SORT_BY :{BLACK}Usporiadať STR_BUTTON_LOCATION :{BLACK}Poloha STR_BUTTON_RENAME :{BLACK}Premenovať -STR_BUTTON_CATCHMENT :Pokrytie -STR_TOOLTIP_CATCHMENT :Prepnúť zobrazenie oblasti pokrytia +STR_BUTTON_CATCHMENT :{BLACK}Pokrytie +STR_TOOLTIP_CATCHMENT :{BLACK}Prepnúť zobrazenie oblasti pokrytia STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Zavrieť okno STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Nadpis okna - potiahni pre posun okna @@ -383,7 +383,7 @@ STR_SORT_BY_RATING :Hodnotenie STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrýchliť priebeh hry STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Nastavenia -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť hru, opustiť hru, ukončiť +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť hru, opustiť hru, ukončiť program STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Zobraziť mapu STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Zobraziť zoznam miest STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Zobraziť dotácie @@ -412,16 +412,16 @@ STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informá STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Prepnúť panely nástrojov # Extra tooltips for the scenario editor toolbar -STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Uložiť scenár, nahrať scenár, opustiť editor scenára, koniec +STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Uložiť scenár, nahrať scenár, opustiť editor scenára, ukončiť program STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor scenárov STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Posunúť začiatok o rok dozadu STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Posunúť začiatok o rok dopredu STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Kliknúť pre zadanie počiatočného roku STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Zobraziť mapu, zoznam miest -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Vytvorenie uzemia -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Vytvorenie mesta -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Vytvorenie priemyslu +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generovanie krajiny +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generovanie miest +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generovanie priemyslu STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stavba cesty STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadenie stromov. Shift zobrazí odhad nákladov STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umiestniť popis @@ -432,9 +432,9 @@ STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Uložiť scená STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Nahrať scenár STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Uložiť výškovú mapu STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Nahrať výškovú mapu -STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Ukončiť editor scenára +STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Opustiť editor scenára STR_SCENEDIT_FILE_MENU_SEPARATOR : -STR_SCENEDIT_FILE_MENU_QUIT :Koniec +STR_SCENEDIT_FILE_MENU_QUIT :Ukončiť program ############ range for SE file menu starts ############ range for settings menu starts @@ -459,7 +459,7 @@ STR_FILE_MENU_SAVE_GAME :Uložiť hru STR_FILE_MENU_LOAD_GAME :Nahrať hru STR_FILE_MENU_QUIT_GAME :Opustiť hru STR_FILE_MENU_SEPARATOR : -STR_FILE_MENU_EXIT :Koniec +STR_FILE_MENU_EXIT :Ukončiť program ############ range ends here # map menu @@ -689,7 +689,7 @@ STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Hotovos STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Úver: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Spolu: ############ End of order list -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Počet vozidiel (automobilov, vlakov, lodí a lietadiel), ktoré zmenili zisk minulý rok +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Počet vozidiel, ktoré dosiahli v minulom roku zisk. Patria sem cestné vozidlá, vlaky, lode a lietadlá STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Počet nedávno obsluhovaných staníc. Železničná stanica, autobus. zastávka, letisko sa počítajú oddelene aj keď patria do rovnakej stanice STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Zisk vozidla s najnižším príjmom (zo všetkých vozidiel starších ako 2 roky) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Množstvo peňazí zarobených v kvartáli s najmenším ziskom v posledných 12 kvartáloch @@ -846,7 +846,7 @@ STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLAC STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvý vlak dorazil do stanice {STATION}! STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvý autobus dorazil do {STATION}! -STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvý automobil dorazil do {STATION}! +STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvý nákladný automobil dorazil do {STATION}! STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvá električka dorazila do stanice {STATION}! STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvá nákladná električka dorazila do stanice {STATION}! STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Mesto oslavuje . . .{}Prvá loď dorazila do {STATION}! @@ -859,7 +859,7 @@ STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLAC STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Letecké nešťastie!{}Lietadlu došlo palivo, {COMMA} mŕtvych pri požiari STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Zeppelin zničený pri nehode na {STATION}! -STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Automobil bol zničený pri kolízii s 'UFO' +STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Cestné vozidlo bolo zničené pri kolízii s 'UFO' STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Ropná rafinéria explodovala neďaleko mesta {TOWN}! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Za nejasných okolností bola zničená továreň neďaleko mesta {TOWN}! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}'UFO' pristalo nedaleko mesta {TOWN}! @@ -1250,8 +1250,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Povoliť úprav STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Umožňuje úpravy terénu pod budovami a traťami bez potreby ich odstránenia STR_CONFIG_SETTING_CATCHMENT :Povoliť realistickejšiu veľkosť oblasti pokrytia: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Má úchytné plochy rôznych veľkostí pre rôzne typy staníc a letísk -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stanice spoločnosti môžu obsluhovať priemysel s pripojenými neutrálnymi stanicami: {STRING} -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ak je povolené, priemysel s pripojenými stanicami (napríklad Ropné plošiny) môžu obsluhovať aj stanice vlastnené spoločnosťou postavené v blízkosti. Ak je zakázané, tento priemysel môžu obsluhovať iba jeho pripojené stanice. Žiadne blízke stanice vlastnené spoločnosťou ich nebudú môcť obsluhovať a pripojená stanica nebude slúžiť ničomu inému ako priemyslu +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stanice spoločnosti môžu obsluhovať priemysel s pripojenými stanicami: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ak je povolené, priemysel s pripojenými neutrálnymi stanicami (napríklad Ropné plošiny) môžu obsluhovať aj stanice vlastnené spoločnosťou postavené v blízkosti. Ak je zakázané, tento priemysel môžu obsluhovať iba jeho pripojené stanice. Žiadne blízke stanice vlastnené spoločnosťou ich nebudú môcť obsluhovať a pripojená stanica nebude slúžiť ničomu inému ako priemyslu STR_CONFIG_SETTING_EXTRADYNAMITE :Odstrániť viaceré mestské cesty, mosty a tunely: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Uľahči odstraňovanie mestom vlastnených budov a infraštruktúry STR_CONFIG_SETTING_TRAIN_LENGTH :Maximálna dĺžka vlakov: {STRING} @@ -1525,8 +1525,8 @@ STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Zakázať výst STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Ak je zapnuté, infraštruktúra je k dispozícii len ak su k nej pripojené vozidlá. Toto predchádza plýtvaniu peniazmi a časom pri nepoužiteľnej infraštruktúre. STR_CONFIG_SETTING_MAX_TRAINS :Maximálny počet vlakov na spoločnosť: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maximálny počet vlakov ktorý môže spoločnosť vlastniť. -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximálny počet automobilov na spoločnosť: {STRING} -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maximálny počet automobilov ktorý môže spoločnosť vlastniť. +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximálny počet cestných vozidiel na spoločnosť: {STRING} +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maximálny počet cestných vozidiel ktorý môže spoločnosť vlastniť. STR_CONFIG_SETTING_MAX_AIRCRAFT :Maximálny počet lietadiel na spoločnosť: {STRING} STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maximálny počet lietadiel ktorý môže spoločnosť vlastniť. STR_CONFIG_SETTING_MAX_SHIPS :Maximálny počet lodí na spoločnosť: {STRING} @@ -1534,8 +1534,8 @@ STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Maximálny poč STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Zakázať vlaky pre počítač: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Povolením nastavenia znemožní počítačovým hráčom budovať vlaky. -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Zakázať automobily pre počítač: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Povolením nastavenia znemožní počítačovým hráčom budovať automobily. +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Zakázať cestné vozidlá pre počítač: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Povolením nastavenia znemožní počítačovým hráčom budovať cestné vozidlá. STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Zakázať lietadlá pre počítač: {STRING} STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Povolením nastavenia znemožní počítačovým hráčom budovať lietadlá. STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Zakázať lode pre počítač: {STRING} @@ -1557,16 +1557,16 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Servisné intervaly v percentách: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Zvoľte či servisovanie vozidiel bude podliehať času od posledného servisu, alebo poklesom percenta návratnosti z celkovej maximálnej návratnosti. -STR_CONFIG_SETTING_SERVINT_TRAINS :Štandardný interval servisu pre vlaky: {STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Nastav štandardný interval pre nové vlaky.Ak nie je nastavený podrobnejší interval. +STR_CONFIG_SETTING_SERVINT_TRAINS :Predvolený interval servisu pre vlaky: {STRING} +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Nastav predvolený interval pre nové vlaky. Ak nie je nastavený podrobnejší interval. STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} deň/% STR_CONFIG_SETTING_SERVINT_DISABLED :vypnuté -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Štandardný interval servisu pre automobily: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Nastav štandardný interval pre nové automobily. Ak nie je nastavený podrobnejší interval. -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Štandardný interval servisu pre lietadlá: {STRING} -STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Nastav štandardný interval pre nové lietadlá. Ak nie je nastavený podrobnejší interval. -STR_CONFIG_SETTING_SERVINT_SHIPS :Štandardný interval servisu pre lode: {STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Nastav štandardný interval pre nové lode. Ak nie je nastavený podrobnejší interval. +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Predvolený interval servisu pre cestné vozidlá: {STRING} +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Nastav predvolený interval pre nové cestné vozidlá. Ak nie je nastavený podrobnejší interval. +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Predvolený interval servisu pre lietadlá: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Nastav predvolený interval pre nové lietadlá. Ak nie je nastavený podrobnejší interval. +STR_CONFIG_SETTING_SERVINT_SHIPS :Predvolený interval servisu pre lode: {STRING} +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Nastav predvolený interval pre nové lode. Ak nie je nastavený podrobnejší interval. STR_CONFIG_SETTING_NOSERVICE :Vypnúť servisy, ak sú vypnuté poruchy: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ak je zapnuté, vozidlá nebudú servisované ak sú vypnuté poruchy. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Obmedzenie rýchlosti pre vagóny: {STRING} @@ -1798,8 +1798,8 @@ STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(odp STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Algoritmus hľadania cesty pre vlaky: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Vyhľadávač trasy pre vlaky -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Algoritmus hľadania cesty pre automobily: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Vyhľadávač trasy pre automobily +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Algoritmus hľadania cesty pre cestné vozidlá: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Vyhľadávač trasy pre cestné vozidlá STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Algoritmus hľadania cesty pre lode: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Vyhľadávač trasy pre lode STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatické obrátenie na semaforoch: {STRING} @@ -2596,7 +2596,7 @@ STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Nahodné STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine # Land generation window (SE) -STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generovanie uzemia +STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generovanie územia STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Umiestnit nahodne skaly STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Vytvoriť oblasť púšte.{}Držaním Ctrl ju odstránite STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Pre zvýšenie/zníženie oblasti je potrebné zväčšiť územie @@ -2791,11 +2791,62 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} team OpenTTD # Framerate display window -STR_FRAMERATE_CAPTION :Snímková frekvencia +STR_FRAMERATE_CAPTION :{WHITE}Snímková frekvencia STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Frekvencia simulácie: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Počet herných tiknutí simulovaných za sekundu. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Snímková frekvencia grafiky: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Počet video snímok vykreslených za sekundu. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Súčasný násobok hernej rýchlosti: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Súčasná rýchlosť hry v porovnaní s rýchlosťou, akou by mala hra normálne bežať. +STR_FRAMERATE_CURRENT :{WHITE}Teraz +STR_FRAMERATE_AVERAGE :{WHITE}Priemer +STR_FRAMERATE_MEMORYUSE :{WHITE}Pamäť +STR_FRAMERATE_DATA_POINTS :{BLACK}Dáta sú založené na {COMMA} meraniach +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} snímok/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} snímok/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} snímok/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}Herný cyklus celkovo: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Manipulácia s nákladom: +STR_FRAMERATE_GL_TRAINS :{BLACK} Tiknutia vlakov: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tiknutia cestných vozidiel: +STR_FRAMERATE_GL_SHIPS :{BLACK} Tiknutia lodí: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tiknutia lietadiel: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tiknutia sveta: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Oneskorenie spojovacieho grafu: +STR_FRAMERATE_DRAWING :{BLACK}Vykresľovanie grafiky: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Pohľady na svet: +STR_FRAMERATE_VIDEO :{BLACK}Výstup videa: +STR_FRAMERATE_SOUND :{BLACK}Miešanie zvukov: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Herný skript/AI spolu: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Herný skript: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Herný cyklus +STR_FRAMETIME_CAPTION_GL_ECONOMY :Manipulácia s nákladom +STR_FRAMETIME_CAPTION_GL_TRAINS :Tiknutia vlakov +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tiknutia cestných vozidiel +STR_FRAMETIME_CAPTION_GL_SHIPS :Tiknutia lodí +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tiknutia lietadiel +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tiknutia sveta +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Oneskorenie spojovacieho grafu +STR_FRAMETIME_CAPTION_DRAWING :Vykresľovanie grafiky +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Vykresľovanie pohľadu na svet +STR_FRAMETIME_CAPTION_VIDEO :Výstup videa +STR_FRAMETIME_CAPTION_SOUND :Miešanie zvukov +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Herný skript/AI spolu +STR_FRAMETIME_CAPTION_GAMESCRIPT :Herný skript +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2884,17 +2935,17 @@ STR_GENERATION_WORLD :{WHITE}Generuje STR_GENERATION_ABORT :{BLACK}Zrušiť STR_GENERATION_ABORT_CAPTION :{WHITE}Zrušiť generovanie krajiny STR_GENERATION_ABORT_MESSAGE :{YELLOW}Skutočne chceš ukončiť generovanie? -STR_GENERATION_PROGRESS :{WHITE}{NUM}% hotovych +STR_GENERATION_PROGRESS :{WHITE}{NUM}% hotových STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} -STR_GENERATION_WORLD_GENERATION :{BLACK}Vytvorenie krajiny -STR_GENERATION_RIVER_GENERATION :{BLACK}Vytvorenie rieky +STR_GENERATION_WORLD_GENERATION :{BLACK}Generovanie sveta +STR_GENERATION_RIVER_GENERATION :{BLACK}Generovanie riek STR_GENERATION_TREE_GENERATION :{BLACK}Generovanie stromov STR_GENERATION_OBJECT_GENERATION :{BLACK}Generovanie objektov -STR_GENERATION_CLEARING_TILES :{BLACK}Generovanie nerovnosti a skal +STR_GENERATION_CLEARING_TILES :{BLACK}Generovanie nerovností a skál STR_GENERATION_SETTINGUP_GAME :{BLACK}Nastavovanie hry -STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spustam tile-loop -STR_GENERATION_PREPARING_SCRIPT :{BLACK}Bežiaci skript -STR_GENERATION_PREPARING_GAME :{BLACK}Priprava hry +STR_GENERATION_PREPARING_TILELOOP :{BLACK}Spúšťanie políčkového cyklu +STR_GENERATION_PREPARING_SCRIPT :{BLACK}Spúšťanie skriptu +STR_GENERATION_PREPARING_GAME :{BLACK}Pripravovanie hry # NewGRF settings STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Nastavenie NewGRF súborov @@ -3296,12 +3347,12 @@ STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Výstavba STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nové vozidlá STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Prevádzka vlakov -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Prevádzka automobilov +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Prevádzka cestných vozidiel STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Prevádzka lietadiel STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Prevádzka lodí STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Údržba majetku STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Tržby vlakov -STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Tržby automobilov +STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Tržby cestných vozidiel STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Tržby lietadiel STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Tržby lodí STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Úroky @@ -3327,7 +3378,7 @@ STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Zvolený: STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Farebná schéma: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Stroje: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} vlak{P "" y ov} -STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} automobil{P "" y ov} +STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} cestn{P é é ých} vozid{P lo lá iel} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} lietad{P lo lá iel} STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} lo{P ď de dí} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Žiadne @@ -3389,7 +3440,7 @@ STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Názvy p # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkcia za posledný mesiac +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkcia minulý mesiac: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% prepraven{P é é ých}) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu továrne. Ctrl+klik otvorí nové okno s pohľadom na továreň STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}% @@ -3408,7 +3459,7 @@ STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmeniť # Vehicle lists STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Vlak{P "" y ov} -STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Automobil{P "" y ov} +STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Cestn{P é é ých} vozid{P lo lá iel} STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Lo{P ď de dí} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Lietad{P lo lá iel} @@ -3431,8 +3482,8 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :Vymeniť vozidl STR_VEHICLE_LIST_SEND_FOR_SERVICING :Vykonať servis STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Poslať do depa -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslat do garáže -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Poslat do lodenice +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslať do garáže +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Poslať do lodenice STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Poslať do hangáru STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Zastaviť všetky vozidlá v zozname @@ -3480,9 +3531,11 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nové jednokoľ STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nové magnetické vlaky STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nové automobily +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nové električky ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Železnicne vozidlá +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nové cestné vozidlá STR_BUY_VEHICLE_SHIP_CAPTION :Nové lode STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nove Lietadlo ############ range for vehicle availability ends @@ -3551,7 +3604,7 @@ STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Prepnú STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Prepnúť zobrazenie/skrytie typu lietadla STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Premenovať typ vlaku -STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Premenovať typ automobilu +STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Premenovať typ cestného vozidla STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Premenovať typ lode STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Premenovať typ lietadla @@ -3572,7 +3625,7 @@ STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Lode - p STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lietadlo - pravý kliknutím na lietadlo sa zobrazia informácie STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Presunutím lokomotívy bude predaná -STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Automobil presunutý sem bude predaný +STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vozidlo presunuté sem bude predané STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Presunutím lode sem sa predá STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Presunutím lietadla sem sa predá @@ -3594,7 +3647,7 @@ STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nové lo STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nové Lietadlo STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Kúpiť nový vlak -STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Kúpiť nový automobil +STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Kúpiť nové cestné vozidlo STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Vyrobiť novú loď STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Kúpiť nové lietadlo @@ -3638,7 +3691,7 @@ STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=z}železnič STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=z}jednokoľajová lokomotíva STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=z}magnetická lokomotíva -STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}automobil +STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=s}cestné vozidlo STR_ENGINE_PREVIEW_AIRCRAFT :{G=s}lietadlo STR_ENGINE_PREVIEW_SHIP :{G=z}loď @@ -3650,7 +3703,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {C # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Výmena {STRING} - {STRING} STR_REPLACE_VEHICLE_TRAIN :{G=m}Vlak -STR_REPLACE_VEHICLE_ROAD_VEHICLE :{G=m}Automobil +STR_REPLACE_VEHICLE_ROAD_VEHICLE :{G=s}Cestné vozidlo STR_REPLACE_VEHICLE_SHIP :{G=z}Loď STR_REPLACE_VEHICLE_AIRCRAFT :{G=s}Lietadlo @@ -3721,7 +3774,7 @@ STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Zobrazi STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Zobraziť cestovné príkazy lietadla. Ctrl+klik pre zobrazenie cestovného poriadku lietadla STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o vlaku -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o automobile +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o cestnom vozidle STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o lodi STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o lietadle @@ -3758,7 +3811,7 @@ STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE STR_VEHICLE_NAME_BUTTON :{BLACK}Meno STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Pomenovať vlak -STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Premenovať automobil +STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Premenovať cestné vozidlo STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Pomenovať loď STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Pomenovat lietadlo @@ -3793,7 +3846,7 @@ STR_VEHICLE_DETAILS_DAYS :Dni STR_VEHICLE_DETAILS_PERCENT :Percentáž STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Premenovať vlak -STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Premenovať automobil +STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Premenovať cestné vozidlo STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Premenovať loď STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Premenovať lietadlo @@ -4131,7 +4184,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vybrať STR_AI_LIST_CANCEL :{BLACK}Zrušiť STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemeniť skript -STR_SCREENSHOT_CAPTION :Vytvoriť snímku obrazovky +STR_SCREENSHOT_CAPTION :{WHITE}Vytvoriť snímku obrazovky STR_SCREENSHOT_SCREENSHOT :{BLACK}Normálna snímka STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Plne priblížená snímka STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Predvolene priblížená snímka @@ -4488,7 +4541,7 @@ STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nie je m # Generic vehicle errors STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Vlak v ceste -STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Automobil v ceste +STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Cestné vozidlo v ceste STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Loď v ceste STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Lietadlo v ceste @@ -4498,27 +4551,27 @@ STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Nemožno STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Nie je možné prestavať na nový typ nákladu... STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Vlak nemožno pomenovať... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Nemožno premenovať automobil... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Nemožno premenovať cestné vozidlo... STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Nemožno pomenovať loď... STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Nie je možné pomenovať lietadlo... STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Nemožno zastaviť/spustiť vlak... -STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Nemožno zastaviť/spustiť automobil... +STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Nemožno zastaviť/spustiť cestné vozidlo... STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Nemožno zastaviť/spustiť loď... STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Nemožno zastaviť/spustiť lietadlo... STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Vlak sa nedá poslať do depa... -STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Nemožno poslať automobil do garáže... +STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Nemožno poslať cestné vozidlo do garáže... STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nemožno poslať loď do lodenice... STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Nemožno poslať lietadlo do hangáru... STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Nemožno kúpiť vlak... -STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Nie je možné zakúpiť automobil... +STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Nie je možné zakúpiť cestné vozidlo... STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Nemožno vyrobiť loď... STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Nemožno vyrobiť lietadlo... STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Typ vlaku nemôže byť premenovaný... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Nemožno premenovať typ automobilu... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Nemožno premenovať typ cestného vozidla... STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Nemožno premenovať typ lode... STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Nemožno premenovať typ lietadla... @@ -4678,35 +4731,35 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=z}Cukrová b STR_SV_EMPTY : STR_SV_UNNAMED :Bez názvu STR_SV_TRAIN_NAME :{G=m}Vlak {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=m}Automobil {COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=s}Cestné vozidlo {COMMA} STR_SV_SHIP_NAME :{G=z}Loď {COMMA} STR_SV_AIRCRAFT_NAME :{G=s}Lietadlo {COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Sever STR_SV_STNAME_SOUTH :{STRING} Juh -STR_SV_STNAME_EAST :{STRING} Vychod -STR_SV_STNAME_WEST :{STRING} Zapad +STR_SV_STNAME_EAST :{STRING} Východ +STR_SV_STNAME_WEST :{STRING} Západ STR_SV_STNAME_CENTRAL :{STRING} Centrum -STR_SV_STNAME_TRANSFER :{STRING} Razcestie +STR_SV_STNAME_TRANSFER :{STRING} Rázcestie STR_SV_STNAME_HALT :{STRING} Za horou -STR_SV_STNAME_VALLEY :{STRING} Udolie +STR_SV_STNAME_VALLEY :{STRING} Údolie STR_SV_STNAME_HEIGHTS :{STRING} Na kopci STR_SV_STNAME_WOODS :{STRING} Lesy -STR_SV_STNAME_LAKESIDE :{STRING} Jazera +STR_SV_STNAME_LAKESIDE :{STRING} Pri jazere STR_SV_STNAME_EXCHANGE :{STRING} Predmestie STR_SV_STNAME_AIRPORT :{STRING} Letisko -STR_SV_STNAME_OILFIELD :{STRING} Vrtna plosina +STR_SV_STNAME_OILFIELD :{STRING} Vrtná plošina STR_SV_STNAME_MINES :{STRING} Bane -STR_SV_STNAME_DOCKS :{STRING} Pristav +STR_SV_STNAME_DOCKS :{STRING} Prístav STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 -STR_SV_STNAME_ANNEXE :{STRING} Zastavka +STR_SV_STNAME_ANNEXE :{STRING} Zastávka STR_SV_STNAME_SIDINGS :{STRING} Vidiek -STR_SV_STNAME_BRANCH :{STRING} Konecna -STR_SV_STNAME_UPPER :Horny {STRING} -STR_SV_STNAME_LOWER :Dolny {STRING} +STR_SV_STNAME_BRANCH :{STRING} Konečná +STR_SV_STNAME_UPPER :Horný {STRING} +STR_SV_STNAME_LOWER :Dolný {STRING} STR_SV_STNAME_HELIPORT :{STRING} Heliport STR_SV_STNAME_FOREST :{STRING} Les STR_SV_STNAME_FALLBACK :{STRING} Stanica #{NUM} @@ -4714,17 +4767,17 @@ STR_SV_STNAME_FALLBACK :{STRING} Stanic ##id 0x8000 # Vehicle names -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Parny) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Parný) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut Diesel -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (Parny) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (Parny) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Parny) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Parny) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (Parný) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (Parný) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Parný) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Parný) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel) @@ -4737,10 +4790,10 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (D STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Elektricky) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Elektrický) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Vagón pre cestujúcich STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Poštový vagón STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Vagón na uhlie @@ -4768,64 +4821,64 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Vagón na hrač STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Vagón na baterky STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Vagón na malinovku STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Vagón na umelinu -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Elektricky) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Elektrický) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Vagón pre cestujúcich STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Poštový vagón STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Vagón na uhlie -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_OIL_TANKER :Vagon na ropu -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_LIVESTOCK_VAN :Vagon na dobytok -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GOODS_VAN :Vagon na tovar -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GRAIN_HOPPER :Vagon na obilie -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WOOD_TRUCK :Vagon na drevo +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_OIL_TANKER :Vagón na ropu +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_LIVESTOCK_VAN :Vagón na dobytok +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GOODS_VAN :Vagón na tovar +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_GRAIN_HOPPER :Vagón na obilie +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WOOD_TRUCK :Vagón na drevo STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_IRON_ORE_HOPPER :Vagón na železnú rudu -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_STEEL_TRUCK :Vagon na ocel -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_ARMORED_VAN :Obrneny vagon -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Vagon na jedlo -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PAPER_TRUCK :Vagon na papier +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_STEEL_TRUCK :Vagón na oceľ +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_ARMORED_VAN :Obrnený vagón +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FOOD_VAN :Vagón na jedlo +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PAPER_TRUCK :Vagón na papier STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COPPER_ORE_HOPPER :Vagón na medenú rudu -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WATER_TANKER :Vagon na vodu -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FRUIT_TRUCK :Vagon na ovocie -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Vagon na kaucuk -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Vagon na cukor -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Vagon na cukrovu vatu -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Vagon na karamel +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WATER_TANKER :Vagón na vodu +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FRUIT_TRUCK :Vagón na ovocie +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Vagón na kaučuk +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Vagón na cukor +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Vagón na cukrovú vatu +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Vagón na karamel STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Vagón na bublinky -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Vagon na kofolu -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Vagon na cukriky +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Vagón na kofolu +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Vagón na cukríky STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Vagón na hračky STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Vagón na baterky STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Vagón na malinovku STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Vagón na umelinu -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Elektricky) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Elektricky) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Elektrický) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Elektrický) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Vagon pre cestujucich -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Postovy vagon -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COAL_CAR :Vagon na uhlie -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_OIL_TANKER :Vagon na ropu -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_LIVESTOCK_VAN :Vagon na dobytok -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Vagon na tovar -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GRAIN_HOPPER :Vagon na obilie -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Vagon na drevo -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Vagon na zeleznu rudu -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Vagon na ocel -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Obrneny vagon -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Vagon na jedlo -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Vagon na papier +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Vagón pre cestujúcich +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Poštový vagón +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COAL_CAR :Vagón na uhlie +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_OIL_TANKER :Vagón na ropu +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_LIVESTOCK_VAN :Vagón na dobytok +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Vagón na tovar +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GRAIN_HOPPER :Vagón na obilie +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Vagón na drevo +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Vagón na železnú rudu +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Vagón na oceľ +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Obrnený vagón +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Vagón na jedlo +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Vagón na papier STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Vagón na medenú rudu -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Vagon na vodu -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Vagon na ovocie -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Vagon na kaucuk -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Vagon na cukor -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Vagon na cukrovu vatu -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Vagon na karamel +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Vagón na vodu +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Vagón na ovocie +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Vagón na kaučuk +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Vagón na cukor +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Vagón na cukrovú vatu +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Vagón na karamel STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Vagón na bublinky -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Vagon na kofolu -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Vagon na cukriky +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Vagón na kofolu +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Vagón na cukríky STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Vagón na hračky STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Vagón na baterky STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Vagón na malinovku @@ -4840,9 +4893,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Ploddyphut MkII STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Balogh - Uhlie STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Uhl - Uhlie STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :DW - Uhlie -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS - Posta -STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard - Posta -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry - Posta +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS - Pošta +STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard - Pošta +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry - Pošta STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :MightyMover - Pošta STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught - Pošta STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Wizzowow - Pošta @@ -4864,12 +4917,12 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Moreland - Drev STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :MPS - Železná ruda STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Uhl - Železná ruda STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Chippy - Železná ruda -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Balogh - Ocel -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Uhl - Ocel -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Kelling - Ocel -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Balogh - Obrnene vozidlo -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Uhl - Obrnene vozidlo -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Foster - Obrnene vozidlo +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Balogh - Oceľ +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Uhl - Oceľ +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Kelling - Oceľ +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Balogh - Obrnené vozidlo +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Uhl - Obrnené vozidlo +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Foster - Obrnené vozidlo STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Foster - Jedlo STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Perry - Jedlo STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Chippy - Jedlo @@ -4885,18 +4938,18 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :MPS - Voda STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Balogh - Ovocie STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Uhl - Ovocie STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Kelling - Ovocie -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh - Kaucuk -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl - Kaucuk -STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT - Kaucuk +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh - Kaučuk +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl - Kaučuk +STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT - Kaučuk STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover - Cukor STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Powernaught - Cukor STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow - Cukor STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover - Kofola STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Powernaught - Kofola STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow - Kofola -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover - Cukrova vata -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught - Cukrova vata -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow - Cukrova vata +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover - Cukrová vata +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught - Cukrová vata +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow - Cukrová vata STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover - Karamel STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught - Karamel STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Wizzowow - Karamel diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 168412a2b9..efe012ed15 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1346,7 +1346,7 @@ STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Mejorado STR_CONFIG_SETTING_ROAD_SIDE :Vehículos de carretera: {STRING} STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Elegir el lado de conducción STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotación del Mapa de alturas: {STRING} -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :A la izquierda +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido antihorario STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido horario STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :El nivel de la altura del mapa plano tiene: {STRING} STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Una o más casillas del borde norte no están vacías @@ -1424,10 +1424,10 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Usar grupos en STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activa el uso de listas de vehículos avanzadas para agrupar vehículos STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Permite escoger si se deben de mostrar indicadores de carga encima de vehículos que estén en estaciones -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar horario en ticks en vez de en días: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Muestra los tiempos de viaje en tablas de horario en ticks en lugar de en días -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar salidas y llegadas en horarios: {STRING} -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Muestra tiempos de llegada y salida adelantados en tablas de tiempo +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar horario en tics en vez de en días: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Muestra los tiempos de viaje en los horarios en tics en lugar de en días +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar salidas y llegadas en los horarios: {STRING} +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Muestra tiempos de llegada y salida adelantados en los horarios STR_CONFIG_SETTING_QUICKGOTO :Creación rápida de órdenes para vehículos: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Preselecciona el cursor "Ir a" al abrir la ventana de órdenes STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Raíl por defecto (juego nuevo/cargar juego): {STRING} @@ -2744,7 +2744,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Tasa de Simulación: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de ticks de juego simulados por segundo. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tics de juego simulados por segundo. STR_FRAMERATE_RATE_BLITTER :{BLACK}FPS de gráficos: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas renderizados por segundo. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidad de juego actual: {DECIMAL}x @@ -2767,11 +2767,11 @@ STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COM ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}Bucles de juego totales: STR_FRAMERATE_GL_ECONOMY :{BLACK} Manejo de cargamento -STR_FRAMERATE_GL_TRAINS :{BLACK} Ticks de trenes: -STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ticks de vehículos de carretera: -STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks de barcos: -STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks de aeronaves: -STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Ticks de mapa: +STR_FRAMERATE_GL_TRAINS :{BLACK} Tics de trenes: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tics de vehículos de carretera: +STR_FRAMERATE_GL_SHIPS :{BLACK} Tics de barcos: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tics de aeronaves: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tics de mapa: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Retraso del gráfico de distribución: STR_FRAMERATE_DRAWING :{BLACK}Renderizado gráfico: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Ventanas de vista generales: @@ -2784,11 +2784,11 @@ STR_FRAMERATE_AI :{BLACK} IA {N ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Bucle de juego STR_FRAMETIME_CAPTION_GL_ECONOMY :Manejo de cargamento -STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes -STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ticks de vehículo de carretera -STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks de barcos -STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks de aeronaves -STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Ticks de mapa +STR_FRAMETIME_CAPTION_GL_TRAINS :Tics de trenes +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tics de vehículo de carretera +STR_FRAMETIME_CAPTION_GL_SHIPS :Tics de barcos +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tics de aeronaves +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tics de mapa STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Retraso del gráfico de distribución STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Representación de la vista del Mundo @@ -3897,8 +3897,8 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Órdenes) -STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horarios -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambiar a la vista de horarios +STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horario +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambia a la vista de horarios STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de órdenes - Clic en una orden para resaltarla. Ctrl+Clic para desplazarse a la estación de la orden STR_ORDER_INDEX :{COMMA}:{NBSP} @@ -4049,56 +4049,56 @@ STR_ORDER_CONDITIONAL_UNCONDITIONAL :Saltar a orden STR_ORDER_CONDITIONAL_NUM :Saltar a orden {COMMA} cuando {STRING} {STRING} {COMMA} STR_ORDER_CONDITIONAL_TRUE_FALSE :Saltar a orden {COMMA} cuando {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Orden inválida) +STR_INVALID_ORDER :{RED} (Orden no válida) # Time table window -STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horarios) +STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horario) STR_TIMETABLE_ORDER_VIEW :{BLACK}Órdenes STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Cambiar a la vista de órdenes -STR_TIMETABLE_TOOLTIP :{BLACK}Horarios - pulse en una orden para marcarla +STR_TIMETABLE_TOOLTIP :{BLACK}Horario - Pulse en una orden para marcarla STR_TIMETABLE_NO_TRAVEL :Sin viaje STR_TIMETABLE_NOT_TIMETABLEABLE :Viajar (automático; programado por la próxima orden manual) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viaje (sin horarios) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Viajar (sin horarios) a como máximo {2:VELOCITY} +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viajar (sin programar) +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Viajar (sin programar) a {2:VELOCITY} como máximo STR_TIMETABLE_TRAVEL_FOR :Viajar durante {STRING} -STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar a {STRING} con un límite de velocidad de {VELOCITY} -STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajando (a {STRING}, sin horarios) -STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajando (a {STRING}, sin horario) a como máximo {VELOCITY} -STR_TIMETABLE_STAY_FOR_ESTIMATED :(permaneciendo por {STRING}, sin horarios) -STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajando a {STRING}, sin horarios) +STR_TIMETABLE_TRAVEL_FOR_SPEED :Viajar durante {STRING} a {VELOCITY} como máximo +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajando (durante {STRING}, sin programar) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajando (durante {STRING}, sin programar) a {VELOCITY} como máximo +STR_TIMETABLE_STAY_FOR_ESTIMATED :(permaneciendo {STRING}, sin programar) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajando durante {STRING}, sin programar) STR_TIMETABLE_STAY_FOR :y esperar {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :y viajar durante {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}día{P "" s} STR_TIMETABLE_TICKS :{COMMA}{NBSP}tic{P "" s} -STR_TIMETABLE_TOTAL_TIME :{BLACK}Los horarios tomarán {STRING} para completarse -STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Estos horarios tomarán {STRING} para completarse (no todos los horarios) +STR_TIMETABLE_TOTAL_TIME :{BLACK}El horario tardará {STRING} en completarse +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}El horario tardará al menos {STRING} en completarse (no todas las órdenes) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este vehículo está actualmente en hora STR_TIMETABLE_STATUS_LATE :{BLACK}Este vehículo está actualmente retrasado {STRING} -STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo está actualmente {STRING} adelantado +STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo está actualmente adelantado {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horario no ha comenzado -STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horario empezará en {STRING} +STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horario comenzará en {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}Fecha de inicio STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona una fecha como punto de partida de este horario. Ctrl+Clic permite fijar el punto de partida de este horario y distribuye todos los vehículos que lo compartan siempre y cuando el horario esté completo -STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Horario -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la cantidad de tiempo que debe tardar una orden marcada +STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar duración +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la duración de la orden seleccionada -STR_TIMETABLE_CLEAR_TIME :{BLACK}Limpiar Horario -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpiar la cantidad de tiempo para la orden seleccionada +STR_TIMETABLE_CLEAR_TIME :{BLACK}Borrar duración +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Borra la duración de la orden seleccionada -STR_TIMETABLE_CHANGE_SPEED :{BLACK}Cambiar Límite de Velocidad +STR_TIMETABLE_CHANGE_SPEED :{BLACK}Cambiar límite de velocidad STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Cambia el límite de velocidad de la orden seleccionada -STR_TIMETABLE_CLEAR_SPEED :{BLACK}Limpiar Límite de Velocidad -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Limpia el límite de velocidad de la orden seleccionada +STR_TIMETABLE_CLEAR_SPEED :{BLACK}Borrar límite de velocidad +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Borra el límite de velocidad de la orden seleccionada -STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar Retrasos -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reajustar el contador del retraso, así el vehículo estará en horario +STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar retrasos +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Pone a cero el retraso del vehículo, así el vehículo estará en hora STR_TIMETABLE_AUTOFILL :{BLACK}Rellenar automáticamente STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Rellena la tabla de horarios automáticamente con los valores de la siguiente jornada (Ctrl+Clic para tratar de mantener los tiempos de espera)) @@ -4115,9 +4115,9 @@ STR_TIMETABLE_DEPARTURE_ABBREVIATION :S: STR_DATE_CAPTION :{WHITE}Seleccionar fecha STR_DATE_SET_DATE :{BLACK}Seleccionar fecha STR_DATE_SET_DATE_TOOLTIP :{BLACK}Usar la fecha seleccionada como punto de inicio del horario -STR_DATE_DAY_TOOLTIP :{BLACK}Selecciona día -STR_DATE_MONTH_TOOLTIP :{BLACK}Selecciona mes -STR_DATE_YEAR_TOOLTIP :{BLACK}Selecciona año +STR_DATE_DAY_TOOLTIP :{BLACK}Selecciona el día +STR_DATE_MONTH_TOOLTIP :{BLACK}Selecciona el mes +STR_DATE_YEAR_TOOLTIP :{BLACK}Selecciona el año # AI debug window @@ -4188,7 +4188,7 @@ STR_SCREENSHOT_SCREENSHOT :{BLACK}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 :Mapa de alturas +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Mapa de alturas STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimapa # AI Parameters @@ -4630,7 +4630,7 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... dema STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... la aeronave no tiene suficiente alcance # Timetable related errors -STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}No se pueden asignar horarios al vehículo... +STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}No se puede asignar horario al vehículo... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Los vehículos solo pueden esperar en estaciones STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo no va a detenerse en esta estación From 6e53bf00c4aa454971b1554b0e700bb32cd71254 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 8 Oct 2020 17:51:56 +0000 Subject: [PATCH 271/601] Update: Translations from eints slovak: 56 changes by FuryPapaya --- src/lang/slovak.txt | 81 +++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 25 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 31b8f81c1f..55307773bf 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1654,7 +1654,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :náhodne STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Mestá môžu staviať cesty: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Povolí mestám budovať cesty kvôli potrebe rozšírenia. Vypnite na zamedzenie mestám budovať cesty kdekoľvek. STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Mestá umožňujú stavbu železničných priecestí: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Povolením nastavenia umožní mestám stavať úrovňové križovania. +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Povolením nastavenia sa umožní mestám stavať železničné priecestia STR_CONFIG_SETTING_NOISE_LEVEL :Povoliť mestom určené hlukové limity pre letiská: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Ak je nastavenie vypnuté, potom môžu byť dve letiská v jednom meste. Ak je nastavenie zapnuté, počet letísk je obmedzený prijateľnou hlučnosťou, ktorá závisí od počtu obyvateľov a veľkosti letiska a jeho vzdialenosti od mesta STR_CONFIG_SETTING_TOWN_FOUNDING :Zakladanie nových miest počas hry: {STRING} @@ -2382,6 +2382,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Všetko STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nič STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Vyberte spoločnosti pre zobrazenie +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}nevyužité @@ -2419,7 +2420,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Postavi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť stavbu/odstránenie železničných koľají, návestidiel, smerových bodov a staníc. Podržte Ctrl a budú odstránené viaceré objekty v rade za sebou -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice. Shift zobrazí predpokladanú cenu STR_RAIL_NAME_RAILROAD :Železnica STR_RAIL_NAME_ELRAIL :Elektrifikovaná železnica @@ -2506,7 +2507,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Postavi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Postaviť tunel pre električky STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Prepnúť stavbu/odstraňovanie cesty STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Prepnúť stavbu/odstraňovanie električkovej dráhy +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertovať/vylepšiť typ cesty. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konvertovať/vylepšiť typ električkovej trate. Shift zobrazí predpokladanú cenu +STR_ROAD_NAME_ROAD :Cesta +STR_ROAD_NAME_TRAM :Električková trať # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientacia garaze @@ -2690,8 +2695,12 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Názov l STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Prijíma náklad: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) -STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Rýchlostný limit koľají: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Typ železnice: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Typ cesty: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Typ električkovej trate: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Rýchlostný limit železnice: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Rýchlostný limit cesty: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Rýchlostný limit električkovej trate: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Skaly @@ -2729,9 +2738,9 @@ STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železnica vlak STR_LAI_ROAD_DESCRIPTION_ROAD :Cesta STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Cesta s lampami STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Cesta v aleji -STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Cestné depo -STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Železnične priecestie -STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Elektrickova dráha +STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Garáž +STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Železničné priecestie +STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Električková trať # Houses come directly from their building names STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (vo výstavbe) @@ -2781,7 +2790,7 @@ STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Akvadukt STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Vysielac STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Maják -STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sidlo firmy +STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sídlo spoločnosti STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou vlastnený pozemok # About OpenTTD window @@ -3387,19 +3396,19 @@ STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraštruktúra: STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} políč{P ko ka ok} železnice STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} políč{P ko ka ok} cesty -STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} políč{P ko ka ok} vody +STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} vodn{P é é ých} políč{P ko ka ok} STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} políč{P ko ka ok} stanice STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} let{P isko iská ísk} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Žiadne STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Postaviť sídlo -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Postaviť sídlo firmy -STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Pozriet sidlo -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Pozrieť sídlo firmy -STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Premiestnit sidlo +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Postaviť sídlo spoločnosti +STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Pozrieť sídlo +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Pozrieť sídlo spoločnosti +STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Premiestniť sídlo STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo spoločnosti je možné premiestniť za 1% hodnoty spoločnosti. Shift+klik zobrazí predpokladanú cenu STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaily -STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ukázať detailné počty infraštruktúry +STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Zobraziť podrobné políčka infraštruktúry STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nová tvár STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vybrať novú tvár prezidenta @@ -3425,6 +3434,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrašt STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Políčka železnice: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafóry STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Políčka cesty: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Električkové políčka: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vodné políčka: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanále STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice: @@ -3547,7 +3557,7 @@ STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Rýchlos STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Rýchlosť na kanály/rieke: {GOLD}{VELOCITY} STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Prevádzkové náklady: {GOLD}{CURRENCY_LONG}/rok STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapacita: {GOLD}{CARGO_LONG} {STRING} -STR_PURCHASE_INFO_REFITTABLE :(mozna prestavba) +STR_PURCHASE_INFO_REFITTABLE :(možná prestavba) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Vyrobené: {GOLD}{NUM}{BLACK} Životnosť: {GOLD}{COMMA} rok{P "" y ov} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. spoľahlivosť: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cena: {GOLD}{CURRENCY_LONG} @@ -3555,28 +3565,36 @@ STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Hmotnos STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Rýchlosť: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacita: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Poháňané vagóny: {GOLD}+{POWER}{BLACK} Hmotnosť: {GOLD}+{WEIGHT_SHORT} -STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prestavatelne na: {GOLD}{STRING} +STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prestavateľné na: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Všetky druhy nákladu STR_PURCHASE_INFO_ALL_BUT :Všetko okrem {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. trakčná sila: {GOLD}{FORCE} -STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Dosah: {GOLD}{COMMA} políčok +STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Dolet: {GOLD}{COMMA} políčok STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Výber vlakov. Pre získanie informácií klikni na vlak. CTRL+klik prepne skrytie typu vlaku. STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Výber cestných vozidiel. Pre získanie informácií klikni na vozidlo. CTRL+klik prepne skrytie typu vozidla. STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Zoznam lodí. Pre získanie informácií klikni na loď. CTRL+klik prepnie skrytie typu lode. STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zoznam lietadiel. Pre získanie informácií klikni na lietadlo. CTRL+klik prepnie skrytie typu lietadla. -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť vozidlo +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť vlak STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť vozidlo STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť loď STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť lietadlo +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať vlak +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať vozidlo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať loď +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať lietadlo -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu. +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift+klik zobrazí predpokladanú cenu bez nákupu STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift+klik zobrazí predpokladanú cenu bez nákupu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané vozidlo. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybranú loď. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané lietadlo. Shift+klik zobrazí predpokladanú cenu bez nákupu STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Premenovať STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Premenovať @@ -3688,10 +3706,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Správa STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Práve sme navrhli nov{G "ý" "ú" "é"} {STRING} - máte záujem o právo exkluzívneho používania na 1 rok? Chceme otestovať vlastnosti tohto modelu pred jeho uvedením na trh. STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=z}železničná lokomotíva +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=z}elektrická lokomotíva STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=z}jednokoľajová lokomotíva STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=z}magnetická lokomotíva STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=s}cestné vozidlo +STR_ENGINE_PREVIEW_TRAM_VEHICLE :{G=z}električka STR_ENGINE_PREVIEW_AIRCRAFT :{G=s}lietadlo STR_ENGINE_PREVIEW_SHIP :{G=z}loď @@ -3699,6 +3719,10 @@ STR_ENGINE_PREVIEW_SHIP :{G=z}loď STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {CURRENCY_LONG} Hmotnosť: {WEIGHT_SHORT}{}Rýchlosť: {VELOCITY} Výkon: {POWER}{}Prevádzkové náklady: {CURRENCY_LONG}/rok{}Kapacita: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cena: {CURRENCY_LONG} Hmotnosť: {WEIGHT_SHORT}{}Rýchlosť: {VELOCITY} Sila: {POWER} Max. T.E.: {6:FORCE}{}Prevádzkové náklady: {4:CURRENCY_LONG}/yr{}Kapacita: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Max. Rýchlosť: {VELOCITY}{}Kapacita: {CARGO_LONG}{}Prevádzkové náklady: {CURRENCY_LONG}/rok +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Rýchlosť: {VELOCITY}{}Typ lietadla: {STRING}{}Kapacita: {CARGO_LONG}, {CARGO_LONG}{}Prevádzkové náklady: {CURRENCY_LONG}/rok +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Rýchlosť: {VELOCITY}{}Typ lietadla: {STRING}{}Kapacita: {CARGO_LONG}{}Prevádzkové náklady: {CURRENCY_LONG}/rok +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Rýchlosť: {VELOCITY}{}Typ lietadla: {STRING} Dolet: {COMMA} políčok{}Kapacita: {CARGO_LONG}, {CARGO_LONG}{}Prevádzkové náklady: {CURRENCY_LONG}/rok +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Cena: {CURRENCY_LONG} Rýchlosť: {VELOCITY}{}Typ lietadla: {STRING} Dolet: {COMMA} políčok{}Kapacita: {CARGO_LONG}{}Prevádzkové náklady: {CURRENCY_LONG}/rok # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Výmena {STRING} - {STRING} @@ -3874,8 +3898,8 @@ STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Zobrazi STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kapacita: {LTBLUE} # Vehicle refit -STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Prestavat) -STR_REFIT_TITLE :{GOLD}Vyber typ nákladu: +STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Prestavať) +STR_REFIT_TITLE :{GOLD}Vyberte druh nákladu: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nová kapacita: {GOLD}{CARGO_LONG}{}{BLACK}Cena prestavby: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nová kapacita: {GOLD}{CARGO_LONG}{}{BLACK}Príjem z prestavby: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nová kapacita: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Cena prestavby: {RED}{CURRENCY_LONG} @@ -3932,7 +3956,7 @@ STR_ORDER_DROP_NO_UNLOADING :Nevykladaj STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Zmeniť spôsob vykladania pre označený príkaz STR_ORDER_REFIT :{BLACK}Prestavba -STR_ORDER_REFIT_TOOLTIP :{BLACK}Vyberte typ nákladu na prestavbu v tomto poradí. CTRL+klik na odstránenie príkazu prestavby +STR_ORDER_REFIT_TOOLTIP :{BLACK}Vyberte druh nákladu na prestavbu v tomto poradí. Ctrl+klik na odstránenie príkazu prestavby STR_ORDER_REFIT_AUTO :{BLACK}Automaticky modernizovať STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vyber ktorý druh tovaru sa bude automaticky nakladať. Ctrl+Klik pre odstránenie automatického nakladania. Automatické nakladanie musí byť podporované vozidlom STR_ORDER_DROP_REFIT_AUTO :Pevný náklad @@ -4234,8 +4258,8 @@ STR_FEEDER_INCOME_TINY :{TINY_FONT}{YEL STR_FEEDER_INCOME :{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {GREEN}Zisk: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {RED}Náklady: {CURRENCY_LONG} STR_FEEDER_COST :{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {RED}Náklady: {CURRENCY_LONG} -STR_MESSAGE_ESTIMATED_COST :{WHITE}Priblizna cena: {CURRENCY_LONG} -STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Priblizny zisk: {CURRENCY_LONG} +STR_MESSAGE_ESTIMATED_COST :{WHITE}Predpokladaná cena: {CURRENCY_LONG} +STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Predpokladaný zisk: {CURRENCY_LONG} # Saveload messages STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry este bezi,{}pockajte prosim na dokoncenie! @@ -4463,7 +4487,8 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Najprv j STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Žiadne použiteľné železničné koľaje STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Musíš najskôr odstrániť železničné koľaje STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Cesta je jednosmerná alebo blokovaná. -STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Nie sú povolené priecestia pre tento typ železníc +STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Nie sú povolené priecestia pre tento typ železnice +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Nie sú povolené priecestia pre tento typ cesty STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nemôžeš tu stavať návestidlá... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nemôžeš tu stavať železničné koľaje... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nemôžeš tu odstrániť železničné koľaje... @@ -4483,6 +4508,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nemôže STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nemôžeš tu odstrániť električkovú trať... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... nenašla sa cesta STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...nenašla sa električková trať +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Nemôžeš tu konvertovať cestu... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Nemôžeš tu konvertovať električkovú trať... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Žiadna použiteľná cesta +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Žiadna použiteľná električková trať +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nekompatibilné električkové trate # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tu sa nedá postaviť prieplav... @@ -4526,7 +4556,7 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tune STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... priveľa objektov STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Nemožno postaviť objekt... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}V ceste je prekážka -STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sídlo firmy v ceste +STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sídlo spoločnosti v ceste STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Tento pozemok nie je možné kúpiť... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... už to vlastníš! @@ -4535,6 +4565,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nie je m STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Nie je možné zrušiť túto skupinu... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Nie je možné premenovať skupinu... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Nie je možné nastaviť rodičovskú skupinu... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... v skupinovej hierarchii nie sú povolené cykly STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nie je možné odstrániť všetky vozidlá z tejto skupiny... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nie je možné pridať vozidlo do tejto skupiny STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nie je možné pridať zdielané vozidlo do skupiny From 50417ab0c5a81c72602452f618d6e9284c06ec7b Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 9 Oct 2020 17:51:37 +0000 Subject: [PATCH 272/601] Update: Translations from eints slovak: 131 changes by FuryPapaya --- src/lang/slovak.txt | 220 ++++++++++++++++++++++++++------------------ 1 file changed, 131 insertions(+), 89 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 55307773bf..a4a351ac7c 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -396,14 +396,15 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Hodnotenie spoločností STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financovať výstavbu nového priemyslu STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Zoznam vlakov spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Zoznam automobilov spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Zoznam cestných vozidiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Zoznam lodí spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Zoznam lietadiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priblížiť STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Oddialiť STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Výstavba železnice STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Výstavba ciest -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Výstavba prístavov +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Výstavba električkových tratí +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Výstavba vodných ciest STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Výstavba letísk STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Otvoriť panel nástrojov pre úpravy terénu, výsadbu stromov, a pod. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Zobraziť okno zvuku a hudby @@ -423,6 +424,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generova STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generovanie miest STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generovanie priemyslu STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stavba cesty +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba električkovej trate STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadenie stromov. Shift zobrazí odhad nákladov STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umiestniť popis STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Shift zobrazí odhad nákladov @@ -507,7 +509,7 @@ STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Výstavba magne ############ range for road construction menu starts STR_ROAD_MENU_ROAD_CONSTRUCTION :Výstavba cesty -STR_ROAD_MENU_TRAM_CONSTRUCTION :Výstavba električkovej dráhy +STR_ROAD_MENU_TRAM_CONSTRUCTION :Výstavba električkovej trate ############ range ends here ############ range for waterways construction menu starts @@ -706,8 +708,8 @@ STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLA STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Starý štýl STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Nový štýl STR_MUSIC_PLAYLIST_EZY_STREET :{TINY_FONT}{BLACK}Ezy Street -STR_MUSIC_PLAYLIST_CUSTOM_1 :{TINY_FONT}{BLACK}Vlastné 1 -STR_MUSIC_PLAYLIST_CUSTOM_2 :{TINY_FONT}{BLACK}Vlastné 2 +STR_MUSIC_PLAYLIST_CUSTOM_1 :{TINY_FONT}{BLACK}Vlastný1 +STR_MUSIC_PLAYLIST_CUSTOM_2 :{TINY_FONT}{BLACK}Vlastný2 STR_MUSIC_MUSIC_VOLUME :{TINY_FONT}{BLACK}Hlasitosť hudby STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLACK}Hlasitosť zvuk. efektov STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- @@ -715,31 +717,34 @@ STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKG STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Hudba nieje dostupná STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" -STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Stopa -STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Title +STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Skladba +STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Názov STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Náhodne STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Program -STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Predchádzajúca stopa -STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Nasledujúca stopa +STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Predchádzajúca skladba +STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Nasledujúca skladba STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Zastaviť prehrávanie hudby STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Spustiť prehrávanie hudby -STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Ťahať posúvač pre nastavenie hudby a zvukových efektov +STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Ťahať posúvač pre nastavenie hlasitosti hudby a zvukových efektov STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vybrať program 'všetky skladby' -STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Zvoliť 'Starý štýl' +STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Vybrať 'Starý štýl' STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Vybrať 'Nový štýl' -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Zvoliť 'Ezy Street style music' program -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Zvoliť program 'Vlastný 1' (definovaný užívateľom) -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Zvoliť program 'Vlastný 2' (definovaný užívateľom) +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Vybrať 'Ezy Street' +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vybrať program 'Vlastný1' (definovaný užívateľom) +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Vybrať program 'Vlastný2' (definovaný užívateľom) STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Prepnúť náhodný výber -STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zobraziť okno pre výber hudobných stôp +STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zobraziť okno pre výber hudobných skladieb # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Hudobný program - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Zoznam skladieb STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' -STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Zmazať -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Vymazať aktuálny program (len Vlastný 1 a Vlastný 2 program) -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknúť na stopu pre uloženie (len Vlastný1 a Vlastný2 program) +STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Vymazať +STR_PLAYLIST_CHANGE_SET :{BLACK}Zmeniť sadu +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Vymazať aktuálny program (len program Vlastný1 alebo Vlastný2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Zmeniť sadu hudby na inú nainštalovanú sadu +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknúť na skladbu pre uloženie (len program Vlastný1 alebo Vlastný2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknite na hudobnú stopu pre jej odstránenie z programu (len Vlastný1 alebo Vlastný2) # Highscore window @@ -809,7 +814,7 @@ STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Bez vlastníka STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Mestá STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Priemysel -STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Púšt +STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Púšť STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Sneh STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Zapnúť/vypnúť názvy miest na mape @@ -1189,7 +1194,7 @@ STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Filtruje STR_CONFIG_SETTING_RESTRICT_BASIC :Základné nastavenia STR_CONFIG_SETTING_RESTRICT_ADVANCED :Pokročilé nastavenia STR_CONFIG_SETTING_RESTRICT_ALL :Odborné nastavenia / všetky nastavenia -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Nastavenia s odlišnou hodnotou ako je štandard +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Nastavenia s odlišnou hodnotou ako je predvolená STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Nastavenia s odlišnou hodnotou než aké má tvoja nová hra STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Obmedzuje zoznam nižšie na niektoré typy nastavení @@ -1202,7 +1207,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Nastavenia spol STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}kategórie {BLACK}na {WHITE}{STRING} STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}typu {BLACK}na {WHITE}Všetky typy nastavenia STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}kategórie {BLACK}na {WHITE}{STRING} {BLACK}a {SILVER}typu {BLACK}na {WHITE}Všetky typy nastavenia -STR_CONFIG_SETTINGS_NONE :{WHITE}- Nič - +STR_CONFIG_SETTINGS_NONE :{WHITE}- Žiadne - STR_CONFIG_SETTING_OFF :nie STR_CONFIG_SETTING_ON :áno @@ -1541,7 +1546,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Povolením nast STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Zakázať lode pre počítač: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Povolením nastavenia znemožní počítačovým hráčom budovať lode. -STR_CONFIG_SETTING_AI_PROFILE :Štandardné nastavenia profilu: {STRING} +STR_CONFIG_SETTING_AI_PROFILE :Predvolený profil nastavení: {STRING} STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vyberte, ktorý profil nastavení sa má použiť pre náhodných počítačových hráčov alebo pre počiatočné hodnoty pri pridávaní nových počítačových hráčov alebo Herného skriptu STR_CONFIG_SETTING_AI_PROFILE_EASY :Ľahký STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Stredný @@ -1870,7 +1875,7 @@ STR_INTRO_TRANSLATION :{BLACK}V prekla # Quit window STR_QUIT_CAPTION :{WHITE}Koniec -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Si si istý, že chceš ukončiť hru a vrátiť sa do {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ste si istý, že chcete ukončiť hru a vrátiť sa do {STRING}? STR_QUIT_YES :{BLACK}Áno STR_QUIT_NO :{BLACK}Nie @@ -1884,8 +1889,8 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Opustiť hru -STR_ABANDON_GAME_QUERY :{YELLOW}Si si istý, že chceš opustiť túto hru? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Si si istý že chceš opustiť tento scenár? +STR_ABANDON_GAME_QUERY :{YELLOW}Ste si istý, že chcete opustiť túto hru? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ste si istý, že chcete opustiť tento scenár? # Cheat window STR_CHEATS :{WHITE}Cheaty @@ -2167,6 +2172,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odpojiť STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chránený. Zadaj heslo STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Spoločnosť je chránená. Zadaj heslo +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Zoznam klientov # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Zoznam klientov @@ -2231,6 +2237,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nespravn STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server je plny STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Si zablokovany na tomto serveri STR_NETWORK_ERROR_KICKED :{WHITE}Bol si vyhodeny z hry +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Dôvod: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Cheatovanie nie je povolene na tomto serveri STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Posielali ste priveľa príkazov serveru STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Príliš dlho si zadával heslo @@ -2290,6 +2297,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} da STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dal si {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server ukoncil relaciu STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server sa reštartuje...{}Čakajte prosím... +STR_NETWORK_MESSAGE_KICKED :*** Hráč {STRING} bol vyhodený. Dôvod: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Sťahovanie obsahu @@ -2400,7 +2408,7 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Dodáva: # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Spojiť stanicu -STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Postaviť oddelene stanicu +STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Postaviť stanicu oddelene STR_JOIN_WAYPOINT_CAPTION :{WHITE}Nasledovať navádzač STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postaviť oddelený navádzač @@ -2415,7 +2423,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Vybudova STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Stavba železničnej trate s režimom Autorail. Ctrl odoberie konštrukciu. Shift zobrazí výšku nákladov STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postavit zeleznicne depo (pre nákup a opravu vlakov). So Shift-om zobrazíte odhadovanú výšku nákladov STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Konvertovať železnicu na smerové body -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Postaviť železničné semafóry STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel @@ -2436,12 +2444,12 @@ STR_WAYPOINT_CAPTION :{WHITE}Smerovy STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vyber typ kontrolneho bodu # Rail station construction window -STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Vyber zeleznicnej stanice -STR_STATION_BUILD_ORIENTATION :{BLACK}Orientacia +STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Výber železničnej stanice +STR_STATION_BUILD_ORIENTATION :{BLACK}Orientácia STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Vybrat orientaciu zeleznicnej stanice STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Počet koľají STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Počet koľají železničnej stanice -STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Dlzka nastupista +STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Dĺžka nástupišťa STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Dlzka zeleznicnej stanice STR_STATION_BUILD_DRAG_DROP :{BLACK}Automaticky STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Automaticky postavit stanicu podla oznaceneho bloku terenu @@ -2488,18 +2496,18 @@ STR_BRIDGE_TUBULAR_SILICON :Krytý plastov # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Výstavba cesty -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Výstavba električkovej trate +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Výstavba ciest +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Výstavba električkových tratí STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl prepína stavať/odobrať stavbu cesty. Shift zobrazí odhad nákladov STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej dráhy STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Stavať časti ciest použitím automatického módu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Stavať časti električkovej trate použitím automatického módu. Ctrl prepína stavanie/odstránenie električkovej trate -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť depo pre cestné vozidlá (na výrobu a opravy vozidiel) -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkové depo -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl+klik umožní spájanie zastávok -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť osobnú električkovú stanicu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť nákladnú električkovú stanicu. CTRL umožní.... SHIFT ukáže náklady na stavbu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť automobilovú garáž (na výrobu a opravu vozidiel). Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkovú garáž (na výrobu a opravu vozidiel). Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť električkovú vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Prepnút stavbu jednosmerných ciest STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Postaviť cestný most STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Postaviť most pre električky @@ -2514,19 +2522,19 @@ STR_ROAD_NAME_ROAD :Cesta STR_ROAD_NAME_TRAM :Električková trať # Road depot construction window -STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientacia garaze -STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Zvoľte orientáciu garáže -STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Orientácia elektrickového depa -STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Zvoľte orientáciu električkového depa +STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientácia garáže +STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Vybrať orientáciu automobilovej garáže +STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Orientácia garáže +STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Vybrať orientáciu električkovej garáže # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientácia zastávky STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Vybrat orientaciu stanice STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientácia vykládky STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Vybrat orientaciu vykladky -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientácia osobnej električkovej stanice +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientácia električkovej zastávky STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Zvoľte orientáciu osobnej električkovej stanice -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientácia nákladnej električkovej stanice +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientácia električkovej vykládky STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Zvoľte orientáciu nákladnej električkovej stanice # Waterways toolbar (last two for SE only) @@ -2534,8 +2542,8 @@ STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Výstavb STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vodné cesty STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Stavba kanálov. Shift zobrazí odhad nákladov STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (pre výrobu a opravy lodí) -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť lodenicu +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (na výrobu a opravu lodí). Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Postavit boju pouzitelnu pre vyznacenie trasy STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definovat oblast vody.{}Vytvorí kanál, pri stlacení CTRL na úrovni mora zaplaví okolie @@ -2543,34 +2551,34 @@ STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Umiestni # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientácia lodenice -STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Vyber orientáciu prístavu +STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu lodenice # Dock construction window -STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Mólo +STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Prístav # Airport toolbar -STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Letiská -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Postaviť letisko. Ctrl umožňuje spájanie staníc. Shift umožňuje prepínanie medzi nákupom a zobrazením ceny +STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Výstavba letísk +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Postaviť letisko. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu # Airport construction window -STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Vyber letiska +STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Výber letiska STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Vybrať veľkosť/typ letiska -STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Trieda lietadla +STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Trieda letiska STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Rozloženie{NUM} -STR_AIRPORT_SMALL :Male -STR_AIRPORT_CITY :Mestske +STR_AIRPORT_SMALL :Malé +STR_AIRPORT_CITY :Mestské STR_AIRPORT_METRO :Metropolitné STR_AIRPORT_INTERNATIONAL :Medzinárodné -STR_AIRPORT_COMMUTER :Vnutrostatne -STR_AIRPORT_INTERCONTINENTAL :Medzikontinentalne +STR_AIRPORT_COMMUTER :Vnútroštátne +STR_AIRPORT_INTERCONTINENTAL :Medzikontinentálne STR_AIRPORT_HELIPORT :Heliport -STR_AIRPORT_HELIDEPOT :Heliport s hangarom -STR_AIRPORT_HELISTATION :Velky heliport +STR_AIRPORT_HELIDEPOT :Heliport s hangárom +STR_AIRPORT_HELISTATION :Veľký heliport -STR_AIRPORT_CLASS_SMALL :Male letiska -STR_AIRPORT_CLASS_LARGE :Velke letiska -STR_AIRPORT_CLASS_HUB :Najvacsie letiska +STR_AIRPORT_CLASS_SMALL :Malé letiská +STR_AIRPORT_CLASS_LARGE :Veľké letiská +STR_AIRPORT_CLASS_HUB :Najväčšie letiská STR_AIRPORT_CLASS_HELIPORTS :Heliporty STR_STATION_BUILD_NOISE :{BLACK}Vytváraný hluk: {GOLD}{COMMA} @@ -2609,10 +2617,10 @@ STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Pre zvý STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Vygenerovať náhodné územie STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Vytvoriť nový scenár STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Zresetovat územie -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Odstránit všetok majetok vlastnený hrácom z mapy +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Odstrániť všetok majetok spoločnosti z mapy STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Zresetovat Územie -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Naozaj odstrániť všetok hráčov majetok z mapy? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ste si istý, že chcete odstrániť všetok majetok spoločnosti? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Vytvorenie mesta @@ -2686,7 +2694,7 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Vlastní STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Miestna správa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neznáme STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Súradnice: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Postavene: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Postavené: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Trieda stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Trieda letiska: {LTBLUE}{STRING} @@ -2746,29 +2754,29 @@ STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Električková STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (vo výstavbe) STR_LAI_TREE_NAME_TREES :Stromy -STR_LAI_TREE_NAME_RAINFOREST :Dazdovy prales +STR_LAI_TREE_NAME_RAINFOREST :Dážďový prales STR_LAI_TREE_NAME_CACTUS_PLANTS :Kaktusy -STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Zeleznicna stanica +STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Železničná stanica STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Letecký hangár STR_LAI_STATION_DESCRIPTION_AIRPORT :Letisko STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Vykladka STR_LAI_STATION_DESCRIPTION_BUS_STATION :Stanica -STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Pristav -STR_LAI_STATION_DESCRIPTION_BUOY :Boja -STR_LAI_STATION_DESCRIPTION_WAYPOINT :Smerovy bod +STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Prístav +STR_LAI_STATION_DESCRIPTION_BUOY :Bója +STR_LAI_STATION_DESCRIPTION_WAYPOINT :Smerový bod STR_LAI_WATER_DESCRIPTION_WATER :Voda -STR_LAI_WATER_DESCRIPTION_CANAL :Prieplav +STR_LAI_WATER_DESCRIPTION_CANAL :Kanál STR_LAI_WATER_DESCRIPTION_LOCK :Stavidlo STR_LAI_WATER_DESCRIPTION_RIVER :Rieka -STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Pobrezie alebo nabrezie +STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Pobrežie alebo nábrežie STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Lodenica # Industries come directly from their industry names -STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Zeleznicny tunel -STR_LAI_TUNNEL_DESCRIPTION_ROAD :Cestny tunel +STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Železničný tunel +STR_LAI_TUNNEL_DESCRIPTION_ROAD :Cestný tunel STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Ocelovy zavesny zeleznicny most STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ocelovy pilierovy zeleznicny most @@ -2881,6 +2889,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detaily STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Informácia nie je k dispozícii STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrovací reťazec: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Prepísanie súboru +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Ste si istý, že chcete prepísať existujúci súbor? STR_SAVELOAD_OSKTITLE :{BLACK}Zadajte názov pre uloženie hry @@ -2962,7 +2973,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Detailn STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Aktívne NewGRF súbory STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Neaktívne NewGRF súbory STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Vybrať predvoľbu: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtrovať podľa: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtrovací reťazec: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Nahrať vybraný zoznam STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Uložit zoznam STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Uložit aktuálne nastavenie ako zoznam @@ -2998,7 +3009,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Verzia: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibilná verzia: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Predvolené (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Predvolené (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Zdedené (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Zdedené (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametre: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Žiadne STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Žiadne dostupné informácie STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Príslušný súbor nenájdený @@ -3079,6 +3095,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Čítanie za ko STR_NEWGRF_ERROR_GRM_FAILED :Požadované GRF prostriedky nie sú dosupné (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} bol vypnutý {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Nesprávny/neznámy formát rozloženia sprite(ov) (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Príliš veľa hodnôt vlastnosti v zozname (sprite {3:NUM}, vlastnosť {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Neplatný výsledok produkčného priemyslu (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Upozornenie! @@ -3110,6 +3128,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informácia o zmene nákladu pre'{1:ENGINE}' sa líši od konštrukčného listu pri kúpe. Môže to spôsobiť, že nové vozidlá sa nebudú prerábať na určitý tovar korektne. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' spôsobil nekonečnú slučku v spätnom odvolávaní produkcie. STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} vrátil neznámy alebo chybný výsledok {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' vrátil neplatný druh nákladu v produkcii v {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3255,6 +3274,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliknú # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Kniha príbehov STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globálna kniha príbehov +STR_STORY_BOOK_SPECTATOR :Globálna kniha príbehov STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strana {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skočiť na určitú stranu výberom zo zoznamu @@ -3430,7 +3450,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Meno prezidenta STR_BUY_COMPANY_MESSAGE :{WHITE}Hľadáme záujemcu o kúpu našej spoločnosti{}{}Chcete kúpiť našu spoločnosť {COMPANY} za {CURRENCY_LONG}? # Company infrastructure window -STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraštruktúra spoločnosti {COMPANY} +STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} - Infraštruktúra STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Políčka železnice: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafóry STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Políčka cesty: @@ -3445,8 +3465,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Priemysel STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nič - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% prepraven{P é é ých}){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} a {NUM} ďalšie... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Názvy priemyslu - klikni na meno pre vycentrovanie priemyslu na stred obrazovky +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Prijímaný náklad: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produkovaný náklad: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Všetky druhy nákladu +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Žiadne # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3474,14 +3503,14 @@ STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Lietad{P lo lá iel} STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - kliknúť pre zobrazenie detailov -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Automobily - kliknúť pre zobrazenie detailov +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Cestné vozidlá - kliknúť pre zobrazenie detailov STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Lode - kliknúť pre zobrazenie detailov STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lietadlá - kliknúť pre zobrazenie detailov STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit tento rok: {CURRENCY_LONG} (minulý rok: {CURRENCY_LONG}) STR_VEHICLE_LIST_AVAILABLE_TRAINS :Dostupné vlaky -STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Dostupné automobily +STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Dostupné vozidlá STR_VEHICLE_LIST_AVAILABLE_SHIPS :Dostupné lode STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Dostupné lietadlá STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Zobraziť zoznam dostupných dizajnov pre tento typ vozidla @@ -3503,12 +3532,12 @@ STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Zdieľan # Group window STR_GROUP_ALL_TRAINS :Všetky vlaky -STR_GROUP_ALL_ROAD_VEHICLES :Všetky automobily +STR_GROUP_ALL_ROAD_VEHICLES :Všetky cestné vozidlá STR_GROUP_ALL_SHIPS :Všetky lode STR_GROUP_ALL_AIRCRAFTS :Všetky lietadlá STR_GROUP_DEFAULT_TRAINS :Nezaradené vlaky -STR_GROUP_DEFAULT_ROAD_VEHICLES :Nezaradené automobily +STR_GROUP_DEFAULT_ROAD_VEHICLES :Nezaradené cestné vozidlá STR_GROUP_DEFAULT_SHIPS :Nezaradené lode STR_GROUP_DEFAULT_AIRCRAFTS :Nezaradené lietadlá @@ -3551,6 +3580,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nove Lietadlo ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Hmotnosť: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} (Cena prestavby: {GOLD}{CURRENCY_LONG}{BLACK}) Hmotnosť: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Rýchlosť: {GOLD}{VELOCITY}{BLACK} Výkon: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Rýchlosť: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Rýchlosť na oceáne: {GOLD}{VELOCITY} @@ -3561,15 +3591,19 @@ STR_PURCHASE_INFO_REFITTABLE :(možná presta STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Vyrobené: {GOLD}{NUM}{BLACK} Životnosť: {GOLD}{COMMA} rok{P "" y ov} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. spoľahlivosť: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cena: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} (Cena prestavby: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Hmotnosť: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Rýchlosť: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} (Cena prestavby: {GOLD}{CURRENCY_LONG}{BLACK}) Rýchlosť: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacita: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Poháňané vagóny: {GOLD}+{POWER}{BLACK} Hmotnosť: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prestavateľné na: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Všetky druhy nákladu +STR_PURCHASE_INFO_NONE :Žiadne STR_PURCHASE_INFO_ALL_BUT :Všetko okrem {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. trakčná sila: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Dolet: {GOLD}{COMMA} políčok +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Typ lietadla: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Výber vlakov. Pre získanie informácií klikni na vlak. CTRL+klik prepne skrytie typu vlaku. STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Výber cestných vozidiel. Pre získanie informácií klikni na vozidlo. CTRL+klik prepne skrytie typu vozidla. @@ -3602,7 +3636,7 @@ STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Premenov STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Premenovať STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Premenovať typ vlaku -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Premenovať typ automobilu +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Premenovať typ cestného vozidla STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Premenovať typ lode STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Premenovať typ lietadla @@ -3736,8 +3770,8 @@ STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}Stĺpec STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES :{YELLOW}Dostupné dopravné prostriedky STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Stĺpec s vozidlami, ktoré možno nahradiť -STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Zvoľte typ lokomotívy na výmenu -STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Zvoľte nový typ lokomotívy, ktorú chceš použiť namiesto typu z ľavého zoznamu +STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Zvoľte typ vozidla na výmenu +STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Zvoľte nový typ vozidla, ktorý chceš použiť namiesto typu z ľavého zoznamu STR_REPLACE_VEHICLES_START :{BLACK}Začať výmenu vozidiel STR_REPLACE_VEHICLES_NOW :Vymeniť všetky vozidlá teraz ! @@ -3752,14 +3786,19 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Stlačte STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Prepne medzi oknami na výmenu lokomotív a vagónov STR_REPLACE_ENGINES :Lokomotívy STR_REPLACE_WAGONS :Vagónov +STR_REPLACE_ALL_RAILTYPE :Všetky železničné vozidlá +STR_REPLACE_ALL_ROADTYPE :Všetky cestné vozidlá -STR_REPLACE_HELP_RAILTYPE :{BLACK}Vyber typ koľajníc, pre ktoré chceš vymieňať lokomotívy +STR_REPLACE_HELP_RAILTYPE :{BLACK}Vybrať typ železnice, pre ktorú chceš vymieňať lokomotívy +STR_REPLACE_HELP_ROADTYPE :{BLACK}Vybrať typ cesty, pre ktorú chceš vymieňať vozidlá STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Zobrazí, ak existuje lokomotíva z ľavého zoznamu, ktorá sa zamení s ňou STR_REPLACE_RAIL_VEHICLES :Lokomotívy STR_REPLACE_ELRAIL_VEHICLES :Elektrické lokomotívy STR_REPLACE_MONORAIL_VEHICLES :Lokomotíva pre jednokoľajku STR_REPLACE_MAGLEV_VEHICLES :Lokomotíva pre magnetickú dráhu +STR_REPLACE_ROAD_VEHICLES :Automobily +STR_REPLACE_TRAM_VEHICLES :Električky STR_REPLACE_REMOVE_WAGON :{BLACK}Odstránenie vagónu: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Zachovanie pôvodnej dĺžky vlaku, odstránením vagónov (odpredu), keď by funkcia automatickej zmeny rušňa vlak predĺžila @@ -3845,6 +3884,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} rok{P " STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} rok{P "" y ov} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Max. rýchlosť: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Rýchlosť: {LTBLUE}{VELOCITY} {BLACK}Typ lietadla: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Rýchlosť: {LTBLUE}{VELOCITY} {BLACK}Typ lietadla: {LTBLUE}{STRING} {BLACK}Dolet: {LTBLUE}{COMMA} políčok STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Hmotnosť: {LTBLUE}{WEIGHT_SHORT} {BLACK}Sila: {LTBLUE}{POWER}{BLACK} Max. rýchlosť: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Hmotnosť: {LTBLUE}{WEIGHT_SHORT} {BLACK}Sila: {LTBLUE}{POWER}{BLACK} Max. rýchlosť: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE} @@ -3978,6 +4019,7 @@ STR_ORDER_CONDITIONAL_AGE :Vek vozidla (v STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Vyžaduje servis STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Vždy STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Zostávajúca životnosť (v rokoch) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Max. spoľahlivosť STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Sposob porovnania údajov vozidla so zadanou hodnotou STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :je rovné @@ -4175,7 +4217,7 @@ STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skript, STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AIs budú nastavené v ďalšej hre. STR_AI_CONFIG_HUMAN_PLAYER :Človek STR_AI_CONFIG_RANDOM_AI :Náhodná AI -STR_AI_CONFIG_NONE :(none) +STR_AI_CONFIG_NONE :(žiadne) STR_AI_CONFIG_MOVE_UP :{BLACK}Posunúť vyššie STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Posunúť vyššie vybrané AI v zozname @@ -4454,7 +4496,7 @@ STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bój STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Nemôžeš tu postaviť vlakové depo... STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Nemôžeš tu postaviť garáž... STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Nemôžeš tu postaviť električkové depo... -STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Nemôžeš tu postaviť lodné depo... +STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Nemôžeš tu postaviť lodenicu... STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Depo sa nedá premenovať... @@ -5072,10 +5114,10 @@ STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerovy bod {TO STR_FORMAT_DEPOT_NAME_TRAIN :Vlakové depo {TOWN} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Depo cestných vozidiel {TOWN} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Depo cestných vozidiel {TOWN} #{COMMA} -STR_FORMAT_DEPOT_NAME_SHIP :Lodné depo {TOWN} -STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Lodné depo {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Garáž {TOWN} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garáž {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_SHIP :Lodenica {TOWN} +STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Lodenica {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :Letecký hangár {STATION} STR_UNKNOWN_STATION :neznáma stanica From f1ab41e3375cd605e3f43ce07438e6e25dd162e0 Mon Sep 17 00:00:00 2001 From: FuryPapaya <72335586+FuryPapaya@users.noreply.github.com> Date: Sat, 10 Oct 2020 14:34:21 +0200 Subject: [PATCH 273/601] Fix: Slovak ownname was using the wrong form (#8326) Noun vs Adjective --- src/lang/slovak.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index a4a351ac7c..bf9671eaec 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1,5 +1,5 @@ ##name Slovak -##ownname Slovensky +##ownname Slovenčina ##isocode sk_SK ##plural 10 ##textdir ltr From 2073c8d67f6c8bee42eb49e37a89acfa8c45eac3 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 3 Oct 2020 16:20:06 +0100 Subject: [PATCH 274/601] Add: [Actions] Add problem matchers for CI platforms --- .github/workflows/ci-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 8ab2783e9e..ba30c2436e 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -53,6 +53,7 @@ jobs: - name: CMake run: mkdir build && cd build && cmake .. + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: cd build && make -j2 @@ -80,6 +81,7 @@ jobs: vcpkgArguments: 'liblzma libpng lzo zlib' vcpkgTriplet: '${{ matrix.arch }}-windows-static' + - uses: ammaraskar/msvc-problem-matcher@master - name: 'Build' uses: lukka/run-cmake@v3 with: @@ -131,6 +133,7 @@ jobs: - name: CMake run: mkdir build && cd build && cmake .. + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: cd build && make -j2 From 13e1b13a4e559f19f39d83208b151c4618381f21 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 10 Oct 2020 13:39:37 +0100 Subject: [PATCH 275/601] Fix: [Actions] Call apt-get update before trying to install packages --- .github/workflows/ci-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index ba30c2436e..8786c079be 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -28,6 +28,7 @@ jobs: steps: - name: Install dependencies run: | + sudo apt-get update sudo apt-get install -y --no-install-recommends \ libfontconfig-dev \ libicu-dev \ From b607f54462214f620f287b5c9dfec49525d7f08e Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 10 Oct 2020 17:51:52 +0000 Subject: [PATCH 276/601] Update: Translations from eints slovak: 35 changes by FuryPapaya tamil: 1 change by Ramesh78dev --- src/lang/slovak.txt | 70 ++++++++++++++++++++++----------------------- src/lang/tamil.txt | 1 + 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index bf9671eaec..cbf7eb6b6c 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -307,10 +307,10 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Nadpis o STR_TOOLTIP_SHADE :{BLACK}Zabaliť okno - zobraziť len názov okna STR_TOOLTIP_DEBUG :{BLACK}Zobraziť NewGRF debugové informácie STR_TOOLTIP_DEFSIZE :{BLACK}Zmena veľkosti okna na základnú veľkosť. Ctrl+klik uloží aktuálnu veľkosť ako základnú -STR_TOOLTIP_STICKY :{BLACK}Zamknúť toto okno, nebude sa dať zatvoriť klávesou "Zavri všetky okná". Ctrl+Click uloží stav ako predvolený +STR_TOOLTIP_STICKY :{BLACK}Zamknúť toto okno, nebude sa dať zatvoriť klávesou "Zavri všetky okná". Ctrl+klik uloží stav ako predvolený STR_TOOLTIP_RESIZE :{BLACK}Uchop a ťahaj pre zmenu veľkosti okna STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Prepnúť veľkosť okna -STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Navigacná lišta +STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Navigačná lišta - posúva zoznam hore/dole STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Posuvná lišta - posúva zoznam doľava/doprava STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolácia budov atď. na rovný terén. CTRL označí oblasť diagonálne. Shift zobrazí odhad nákladov @@ -480,7 +480,7 @@ STR_SUBSIDIES_MENU_SUBSIDIES :Dotácie ############ range ends here ############ range for graph menu starts -STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf prevádzkového zisku +STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf prevádzkového profitu STR_GRAPH_MENU_INCOME_GRAPH :Graf tržieb STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf prepraveného nákladu STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Graf hodnotenia výkonu @@ -491,7 +491,7 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Ceny prepravy ############ range for company league menu starts STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Hodnotenie spoločností STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detailné hodnotenie výkonu -STR_GRAPH_MENU_HIGHSCORE :Hodnotenie +STR_GRAPH_MENU_HIGHSCORE :Najvyššie skóre ############ range ends here ############ range for industry menu starts @@ -637,11 +637,11 @@ STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STR STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} -STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Graf prevádzkového zisku -STR_GRAPH_INCOME_CAPTION :{WHITE}Graf príjmov -STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Dopravených jednotiek nákladu -STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Hodnotenie produktivity spoločnosti (maximálna produktivita je 1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Hodnota spoločnosti +STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Graf prevádzkového profitu +STR_GRAPH_INCOME_CAPTION :{WHITE}Graf tržieb +STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Graf prepraveného nákladu (jednotiek nákladu) +STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Graf hodnotenia výkonu (najvyššie hodnotenie je 1000) +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graf hodnoty spoločnosti STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ceny prepravy STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Počet dní na ceste @@ -660,7 +660,7 @@ STR_GRAPH_KEY_CAPTION :{WHITE}Výber p STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Kliknúť pre zobrazenie tejto spoločnosti na grafe # Company league window -STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Hodnotenie spoločnosti +STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Hodnotenie spoločností STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Inžinier STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Manažér dopravy @@ -673,8 +673,8 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Prezident STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detaily hodnotenia výkonu -STR_PERFORMANCE_DETAIL_KEY :{BLACK}Podrobne +STR_PERFORMANCE_DETAIL :{WHITE}Detailné hodnotenie výkonu +STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detaily STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% @@ -682,18 +682,18 @@ STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Ukázať ############ Those following lines need to be in this order!! STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Vozidlá: STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stanice: -STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Min. zisk: +STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Min. profit: STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Min. príjem: STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Max. príjem: -STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Doručené: +STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Prepravené: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Náklad: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Hotovosť: STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Úver: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Spolu: ############ End of order list STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Počet vozidiel, ktoré dosiahli v minulom roku zisk. Patria sem cestné vozidlá, vlaky, lode a lietadlá -STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Počet nedávno obsluhovaných staníc. Železničná stanica, autobus. zastávka, letisko sa počítajú oddelene aj keď patria do rovnakej stanice -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Zisk vozidla s najnižším príjmom (zo všetkých vozidiel starších ako 2 roky) +STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Počet nedávno obsluhovaných staníc. Železničné stanice, autobusové zastávky, letiská a pod. sa počítajú oddelene aj keď patria do rovnakej stanice +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Profit vozidla s najnižšími tržbami (zo všetkých vozidiel starších ako 2 roky) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Množstvo peňazí zarobených v kvartáli s najmenším ziskom v posledných 12 kvartáloch STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Množstvo peňazí zarobených v kvartáli s najväčším ziskom v posledných 12 kvartáloch STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Počet jednotiek nákladu prepravených v posledných štyroch kvartáloch @@ -748,7 +748,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknú STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknite na hudobnú stopu pre jej odstránenie z programu (len Vlastný1 alebo Vlastný2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najlepšie spoločnosti, ktoré dosiahli {NUM} +STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najlepšie spoločnosti, ktoré dosiahli rok {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabuľka spoločnosti v roku {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :{G=z}Obchodníčka @@ -1843,12 +1843,12 @@ STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor s STR_INTRO_MULTIPLAYER :{BLACK}Viacero hráčov STR_INTRO_GAME_OPTIONS :{BLACK}Nastavenia hry -STR_INTRO_HIGHSCORE :{BLACK}Najlepší hráči +STR_INTRO_HIGHSCORE :{BLACK}Najvyššie skóre STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Nastavenia STR_INTRO_NEWGRF_SETTINGS :{BLACK}Nastavenia NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Skontrolovať online obsah STR_INTRO_SCRIPT_SETTINGS :{BLACK}Umelá inteligencia / Nastavenia skriptu -STR_INTRO_QUIT :{BLACK}Koniec +STR_INTRO_QUIT :{BLACK}Ukončiť STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Spustiť novú hru. Ctrl+klik preskočí nastavenie mapy STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Nahrať uloženú hru @@ -2134,7 +2134,7 @@ STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Aktualny STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFO O SPOLOCNOSTI STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Názov spoločnosti: {WHITE}{STRING} STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Zalozene: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Hodnota spolocnosti: {WHITE}{CURRENCY_LONG} +STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Hodnota spoločnosti: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Stav uctu: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Zisk v minulom roku: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Vykon: {WHITE}{NUM} @@ -2421,7 +2421,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Magnetická dr STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Vybudovať železničnú trať. Ctrl prepína stavať/odobrať stavbu železnice. Shift zobrazí odhad nákladov STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Stavba železničnej trate s režimom Autorail. Ctrl odoberie konštrukciu. Shift zobrazí výšku nákladov -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postavit zeleznicne depo (pre nákup a opravu vlakov). So Shift-om zobrazíte odhadovanú výšku nákladov +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postaviť vlakové depo (na nákup a opravu vlakov). Shift zobrazí predpokladanú cenu STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Konvertovať železnicu na smerové body STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Postaviť železničné semafóry @@ -2437,7 +2437,7 @@ STR_RAIL_NAME_MAGLEV :Maglev # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientácia depa -STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vyber orientacie depa +STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu vlakového depa # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Smerovy bod @@ -2446,13 +2446,13 @@ STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vyber ty # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Výber železničnej stanice STR_STATION_BUILD_ORIENTATION :{BLACK}Orientácia -STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Vybrat orientaciu zeleznicnej stanice +STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu železničnej stanice STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Počet koľají STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Počet koľají železničnej stanice STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Dĺžka nástupišťa -STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Dlzka zeleznicnej stanice +STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Dĺžka železničnej stanice STR_STATION_BUILD_DRAG_DROP :{BLACK}Automaticky -STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Automaticky postavit stanicu podla oznaceneho bloku terenu +STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Automaticky postaviť stanicu podľa označeného bloku terénu STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vyberte druh stanice pre zobrazenie STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vyberte typ stanice pre vystavbu @@ -2529,13 +2529,13 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Vybrať # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Orientácia zastávky -STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Vybrat orientaciu stanice +STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu zastávky STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Orientácia vykládky -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Vybrat orientaciu vykladky +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu vykládky STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Orientácia električkovej zastávky -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Zvoľte orientáciu osobnej električkovej stanice +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu električkovej zastávky STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orientácia električkovej vykládky -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Zvoľte orientáciu nákladnej električkovej stanice +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu električkovej vykládky # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Výstavba vodných ciest @@ -3365,7 +3365,7 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na umiestnenie navádzača STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Zmeniť meno smerového bodu STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na umiestnenie bójky -STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Zmeniť meno bójky +STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Zmeniť meno bóje STR_EDIT_WAYPOINT_NAME :{WHITE}Upraviť názvy smerových bodov @@ -3411,7 +3411,7 @@ STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} lietad{P lo lá iel} STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} lo{P ď de dí} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Žiadne -STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Hodnota spolocnosti: {WHITE}{CURRENCY_LONG} +STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Hodnota spoločnosti: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% vlastní {COMPANY}) STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraštruktúra: STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} políč{P ko ka ok} železnice @@ -3576,7 +3576,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nové električ STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Železnicne vozidlá STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nové cestné vozidlá STR_BUY_VEHICLE_SHIP_CAPTION :Nové lode -STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nove Lietadlo +STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nové lietadlá ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Hmotnosť: {GOLD}{WEIGHT_SHORT} @@ -3693,10 +3693,10 @@ STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Automati STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Automaticky nahradit všetky lode v lodenici STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Automaticky nahradit všetky lietadlá v hangári -STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nové vozidlá +STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nové vlaky STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nové vozidlá STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nové lode -STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nové Lietadlo +STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nové lietadlá STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Kúpiť nový vlak STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Kúpiť nové cestné vozidlo @@ -4366,7 +4366,7 @@ STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... obla STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... limit úpravy terénu dosiahnutý STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limit čistenia políčok dosiahnutý STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... dosiahol si limit sadenia stromov -STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Meno musí byt jedinecné +STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Meno musí byť jedinečné STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} v ceste STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Nieje povolené ak je hra pozastavená diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 0727649df8..bb3697ce59 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1121,6 +1121,7 @@ STR_CONFIG_SETTING_CITY_APPROVAL :நகர ம STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :அதிகபட்ச வரைபட உயரம்: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :இந்த வரைபடத்திலுள்ள மலைகளின் அதிகபட்ச உயரத்தினை அமை +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}இந்த மதிப்புக்கு அதிகபட்ச வரைபட உயரத்தை நீங்கள் அமைக்க முடியாது. ஏனென்றால் வரைபடத்தில் குறைந்தது ஒரு மலையாவது இந்த மதிப்பை விட உயரமாக உள்ளது STR_CONFIG_SETTING_EXTRADYNAMITE :நகரத்தின் சாலைகள், பாலங்கள் மற்றும் சுரங்கங்களை நீக்க அனுமதிக்கவும்: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :நகராட்சியின் கட்டடங்கள் நீக்குவதை எளிதாக்கவும் STR_CONFIG_SETTING_TRAIN_LENGTH :இரயில்களின் அதிகபட்ச நீளம்: {STRING} From dcdcf6d57cdc45f39dbadda76022d536bfcb77e1 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 11 Oct 2020 17:53:38 +0000 Subject: [PATCH 277/601] Update: Translations from eints slovak: 57 changes by FuryPapaya tamil: 1 change by Ramesh78dev --- src/lang/slovak.txt | 114 ++++++++++++++++++++++---------------------- src/lang/tamil.txt | 2 +- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index cbf7eb6b6c..3132e46c23 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -306,13 +306,13 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Zavrieť STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Nadpis okna - potiahni pre posun okna STR_TOOLTIP_SHADE :{BLACK}Zabaliť okno - zobraziť len názov okna STR_TOOLTIP_DEBUG :{BLACK}Zobraziť NewGRF debugové informácie -STR_TOOLTIP_DEFSIZE :{BLACK}Zmena veľkosti okna na základnú veľkosť. Ctrl+klik uloží aktuálnu veľkosť ako základnú +STR_TOOLTIP_DEFSIZE :{BLACK}Zmeniť veľkosť okna na predvolenú veľkosť. Ctrl+klik uloží aktuálnu veľkosť ako predvolenú STR_TOOLTIP_STICKY :{BLACK}Zamknúť toto okno, nebude sa dať zatvoriť klávesou "Zavri všetky okná". Ctrl+klik uloží stav ako predvolený STR_TOOLTIP_RESIZE :{BLACK}Uchop a ťahaj pre zmenu veľkosti okna STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Prepnúť veľkosť okna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Navigačná lišta - posúva zoznam hore/dole STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Posuvná lišta - posúva zoznam doľava/doprava -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolácia budov atď. na rovný terén. CTRL označí oblasť diagonálne. Shift zobrazí odhad nákladov +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolovať budovy atď. na rovný terén. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Ukáž skryté @@ -380,7 +380,7 @@ STR_SORT_BY_POPULATION :Populácia STR_SORT_BY_RATING :Hodnotenie # Tooltips for the main toolbar -STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza +STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pozastaviť hru STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrýchliť priebeh hry STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Nastavenia STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť hru, opustiť hru, ukončiť program @@ -399,8 +399,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Zoznam v STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Zoznam cestných vozidiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Zoznam lodí spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Zoznam lietadiel spoločnosti. Ctrl+klik prepína zoznam skupín/vozidiel -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priblížiť -STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Oddialiť +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Priblížiť pohľad +STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Oddialiť pohľad STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Výstavba železnice STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Výstavba ciest STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Výstavba električkových tratí @@ -425,9 +425,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generova STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generovanie priemyslu STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stavba cesty STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba električkovej trate -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadenie stromov. Shift zobrazí odhad nákladov +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Shift zobrazí predpokladanú cenu STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umiestniť popis -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Shift zobrazí odhad nákladov +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Shift zobrazí predpokladanú cenu ############ range for SE file menu starts STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Uložiť scenár @@ -442,8 +442,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Ukončiť progr ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Nastavenia hry STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Nastavenia -STR_SETTINGS_MENU_SCRIPT_SETTINGS :Umelá inteligencia / Nastavenia hry -STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavenie NewGRF +STR_SETTINGS_MENU_SCRIPT_SETTINGS :Nastavenia AI/skriptu +STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavenia NewGRF STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Nastavenie priehľadnosti STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Zobraziť názvy miest STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Zobraziť názvy staníc @@ -540,7 +540,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vymazať všetk STR_ABOUT_MENU_LAND_BLOCK_INFO :Informácie o pozemku STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobraziť / skryť konzolu -STR_ABOUT_MENU_AI_DEBUG :Umelá inteligencia / Ladenie skriptov +STR_ABOUT_MENU_AI_DEBUG :Ladenie AI/skriptu STR_ABOUT_MENU_SCREENSHOT :Snímka obrazovky STR_ABOUT_MENU_SHOW_FRAMERATE :Zobraziť snímkovú frekvenciu STR_ABOUT_MENU_ABOUT_OPENTTD :O hre 'OpenTTD' @@ -837,7 +837,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Zobrazi # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Zobraziť poslednú správu alebo novinku STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - -STR_STATUSBAR_PAUSED :{YELLOW}* * PAUZA * * +STR_STATUSBAR_PAUSED :{YELLOW}* * POZASTAVENÉ * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOULOŽENIE STR_STATUSBAR_SAVING_GAME :{RED}* * HRA SA UKLADÁ * * @@ -1480,7 +1480,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :krátky (31-12- STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Automatická pauza pri štarte novej hry: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ak je zapnuté, hra sa automaticky zapauzuje ked začne nová hra. Toto umožňuje lepšie preskúmanie mapy hry pred začatím. +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ak je zapnuté, hra sa automaticky pozastaví ked začne nová hra. Toto umožňuje lepšie preskúmanie mapy hry pred začatím. STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Ak je hra pozastavená povol: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Zvoľte ktoré akcie môžu byt vykonané keď je hra pozastavená. STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :žiadne akcie @@ -1847,7 +1847,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Najvyš STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Nastavenia STR_INTRO_NEWGRF_SETTINGS :{BLACK}Nastavenia NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Skontrolovať online obsah -STR_INTRO_SCRIPT_SETTINGS :{BLACK}Umelá inteligencia / Nastavenia skriptu +STR_INTRO_SCRIPT_SETTINGS :{BLACK}Nastavenia AI/skriptu STR_INTRO_QUIT :{BLACK}Ukončiť STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Spustiť novú hru. Ctrl+klik preskočí nastavenie mapy @@ -1864,10 +1864,10 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vybrať STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Zobraziť nastavenia hry STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Zobraziť tabuľku hráčov s najvyšším skóre -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Nastavenie zobrazenia -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Zobraziť NewGRF nastavenia +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Zobraziť nastavenia +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Zobraziť nastavenia NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Skontrolovať nový a aktualizovaný obsah pre stiahnutie -STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Zobraz umelú inteligenciu a nastavenia skriptu +STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Zobraziť nastavenia AI/skriptu STR_INTRO_TOOLTIP_QUIT :{BLACK}Ukončiť 'OpenTTD' STR_INTRO_BASESET :{BLACK}Vo vybranej základnej sade grafiky chýba {NUM} prv{P ok ky kov}. Prosím skontrolujte aktualizácie sady grafiky. @@ -2498,23 +2498,23 @@ STR_BRIDGE_TUBULAR_SILICON :Krytý plastov # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Výstavba ciest STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Výstavba električkových tratí -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl prepína stavať/odobrať stavbu cesty. Shift zobrazí odhad nákladov -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej dráhy -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Stavať časti ciest použitím automatického módu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Stavať časti električkovej trate použitím automatického módu. Ctrl prepína stavanie/odstránenie električkovej trate +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl odstráni časť cesty. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej trate. Ctrl odstráni časť trate. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Postaviť časť cesty v automatickom režime. Ctrl odstráni časť cesty. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Postaviť časť električkovej trate v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť automobilovú garáž (na výrobu a opravu vozidiel). Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkovú garáž (na výrobu a opravu vozidiel). Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť električkovú vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Prepnút stavbu jednosmerných ciest -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Postaviť cestný most -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Postaviť most pre električky -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Postaviť cestný tunel -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Postaviť tunel pre električky -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Prepnúť stavbu/odstraňovanie cesty -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Prepnúť stavbu/odstraňovanie električkovej dráhy +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Prepnúť stavbu jednosmernej cesty +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Postaviť cestný most. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Postaviť električkový most. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Postaviť cestný tunel. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Postaviť električkový tunel. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Prepnúť na odstránenie cesty +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Prepnúť na odstránenie električkovej trate STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertovať/vylepšiť typ cesty. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konvertovať/vylepšiť typ električkovej trate. Shift zobrazí predpokladanú cenu @@ -2540,13 +2540,13 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vybrať # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Výstavba vodných ciest STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vodné cesty -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Stavba kanálov. Shift zobrazí odhad nákladov -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Postaviť časť vodného kanálu. Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. Shift zobrazí predpokladanú cenu STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (na výrobu a opravu lodí). Shift zobrazí predpokladanú cenu STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Postavit boju pouzitelnu pre vyznacenie trasy -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definovat oblast vody.{}Vytvorí kanál, pri stlacení CTRL na úrovni mora zaplaví okolie +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Umiestniť bóju na vyznačenie trasy. Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt. Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definovať oblasť vody.{}Vytvorí vodný kanál, pri stlacení CTRL na úrovni mora zaplaví okolie STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Umiestniť rieku. # Ship depot construction window @@ -2585,10 +2585,10 @@ STR_STATION_BUILD_NOISE :{BLACK}Vytvára # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Úprava terénu -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Znížit roh terénu. Ťahaním znížite prvý vybraný roh a celú vybranú oblasť na novú výšku. CTRL označí oblasť diagonálne. Shift zobrazí odhad nákladov -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšit roh terénu. Ťahaním zvýšite prvý vybraný roh a celú vybranú oblasť na novú výšku. CTRL označí oblasť diagonálne. Shift zobrazí odhad nákladov -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovnať výšku terénu oblasti podľa prvého vybraného rohu. CTRL označí oblasť diagonálne. Shift zobrazí odhad nákladov -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Znížiť roh políčka. Ťahaním znížite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšiť roh políčka. Ťahaním zvýšite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovnať výšku terénu podľa vybraného rohu. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie. Shift zobrazí predpokladanú cenu # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Výber objektov @@ -2602,10 +2602,10 @@ STR_OBJECT_CLASS_TRNS :Vysielače # Tree planting window (last two for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Stromy -STR_PLANT_TREE_TOOLTIP :{BLACK}Vybrať typ stromu pre sadenie. Ak sa už strom na mieste nachádza, pridá viac stromov zmiešaných typov nezávisle od vybraného +STR_PLANT_TREE_TOOLTIP :{BLACK}Vybrať druh stromu na sadenie. Ak sa už strom na políčku nachádza, pridá sa viac stromov zmiešaných druhov nezávisle od vybraného druhu STR_TREES_RANDOM_TYPE :{BLACK}Nahodne stromy -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť náhodné stromy. Shift prepína nakúp a zobrazenie ceny bez nákupu -STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Nahodné stromy +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť náhodné stromy. Shift zobrazí predpokladanú cenu +STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine # Land generation window (SE) @@ -2968,7 +2968,7 @@ STR_GENERATION_PREPARING_SCRIPT :{BLACK}Spúšť STR_GENERATION_PREPARING_GAME :{BLACK}Pripravovanie hry # NewGRF settings -STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Nastavenie NewGRF súborov +STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Nastavenia NewGRF STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Detailné NewGRF informácie STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Aktívne NewGRF súbory STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Neaktívne NewGRF súbory @@ -3001,7 +3001,7 @@ STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Prepnú STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Potvrdit zmeny STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Nájsť chýbajúci obsah online -STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Skontrolovať či chýbajúci obsah je dostupný online +STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Skontrolovať či je chýbajúci obsah dostupný online STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Názov súboru: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}ID GRF: {SILVER}{STRING} @@ -3152,7 +3152,7 @@ STR_SIGN_LIST_MATCH_CASE :{BLACK}Vyžadov STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Brať/nebrať do úvahy veľkosť písmen pri porovnávaní textu popisov s filtrovacím reťazcom # Sign window -STR_EDIT_SIGN_CAPTION :{WHITE}Upravit text popisu +STR_EDIT_SIGN_CAPTION :{WHITE}Upraviť text popisu STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Prejst na dalsiu znacku STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Prejsť na predchádzajúcu značku @@ -3162,13 +3162,13 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Zadajte STR_TOWN_DIRECTORY_CAPTION :{WHITE}Mestá STR_TOWN_DIRECTORY_NONE :{ORANGE}- Žiadne - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (City){BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Veľkomesto){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Názvy miest - kliknite na názov pre pohľad na mesto. Ctrl+klik otvorí nové okno s pohľadom na mesto STR_TOWN_POPULATION :{BLACK}Svetová populácia: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Mesto) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Veľkomesto) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Obyvateľstvo: {ORANGE}{COMMA}{BLACK} Domov: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} minulý mesiac: {ORANGE}{COMMA}{BLACK} najviac: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Tovar potrebný k rozrastu mesta: @@ -3456,7 +3456,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafór STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Políčka cesty: STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Električkové políčka: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vodné políčka: -STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanále +STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}K Vodné kanály STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Políčka staníc STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Letiská @@ -3584,7 +3584,7 @@ STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cena: {G STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Rýchlosť: {GOLD}{VELOCITY}{BLACK} Výkon: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Rýchlosť: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Rýchlosť na oceáne: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Rýchlosť na kanály/rieke: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Rýchlosť na kanále/rieke: {GOLD}{VELOCITY} STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Prevádzkové náklady: {GOLD}{CURRENCY_LONG}/rok STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapacita: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(možná prestavba) @@ -4188,7 +4188,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Vyberte # AI debug window -STR_AI_DEBUG :{WHITE}Umelá inteligencia / Ladenie skriptov +STR_AI_DEBUG :{WHITE}Ladenie AI/skriptu STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Meno skriptu STR_AI_DEBUG_SETTINGS :{BLACK}Nastavenia @@ -4209,12 +4209,12 @@ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Pozri lo STR_ERROR_AI_NO_AI_FOUND :Nebolo nájdená žiadne použitelné AI.{}Toto AI je hlúpe a nebude nič robiť.{}Môžete si stiahnúť niekoľko AI cez 'Online Obsah' systém. STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Jeden z bežiacich skriptov spadol. Prosím nahláste to autorovi a priložte screenshot Debugovacej obrazovky. -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Umelá inteligencia / Okno ladenia je dostupné len pre server +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno ladenia AI/skriptu je dostupné len pre server # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}Umelá inteligencia / Konfigurácia hry +STR_AI_CONFIG_CAPTION :{WHITE}Nastavenia AI/skriptu STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skript, ktorý bude načítaný v ďalšej hre -STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AIs budú nastavené v ďalšej hre. +STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI, ktoré budú načítané v ďalšiej hre STR_AI_CONFIG_HUMAN_PLAYER :Človek STR_AI_CONFIG_RANDOM_AI :Náhodná AI STR_AI_CONFIG_NONE :(žiadne) @@ -4225,9 +4225,9 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Posunú STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Posunúť nižšie vybrané AI v zozname STR_AI_CONFIG_GAMESCRIPT :{SILVER}Herný skript -STR_AI_CONFIG_AI :{SILVER}AIs +STR_AI_CONFIG_AI :{SILVER}AI (umelá inteligencia) -STR_AI_CONFIG_CHANGE :{BLACK}Vyber {STRING} +STR_AI_CONFIG_CHANGE :{BLACK}Vybrať {STRING} STR_AI_CONFIG_CHANGE_NONE : STR_AI_CONFIG_CHANGE_AI :AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :Skript @@ -4237,7 +4237,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Nastavi # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Dostupné {STRING} -STR_AI_LIST_CAPTION_AI :AIs +STR_AI_LIST_CAPTION_AI :AI STR_AI_LIST_CAPTION_GAMESCRIPT :Herné skripty STR_AI_LIST_TOOLTIP :{BLACK}Klikni pre výber skriptu @@ -4274,7 +4274,7 @@ STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licencia {STRING} STR_TEXTFILE_WRAP_TEXT :{WHITE}Zalamovať text STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Zalamovať text v okne tak, aby ho nebolo nutné posúvať -STR_TEXTFILE_VIEW_README :{BLACK}Zobraz čítajma +STR_TEXTFILE_VIEW_README :{BLACK}Zobraziť readme STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Log zmien STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licencia @@ -4557,15 +4557,15 @@ STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Žiadna STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... nekompatibilné električkové trate # Waterway construction errors -STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tu sa nedá postaviť prieplav... +STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tu sa nedá postaviť vodný kanál... STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Tu sa nedá postaviť stavidlo... STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Tu nie je možné umiestniť rieku... STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... musíš postaviť na vode STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... nemôžeš postaviť na vode STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... nemôžeš postaviť na otvorenom mori -STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... nemôže byť postavené na kanály +STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... nemôže byť postavené na vodnom kanále STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... nemôže byť postavené na rieke -STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Najprv sa musí zbúrať kanál +STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Najprv sa musí zbúrať vodný kanál STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Tu nie je možné postaviť akvadukt... # Tree related errors diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index bb3697ce59..ae9a20bb78 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1121,7 +1121,7 @@ STR_CONFIG_SETTING_CITY_APPROVAL :நகர ம STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :அதிகபட்ச வரைபட உயரம்: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :இந்த வரைபடத்திலுள்ள மலைகளின் அதிகபட்ச உயரத்தினை அமை -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}இந்த மதிப்புக்கு அதிகபட்ச வரைபட உயரத்தை நீங்கள் அமைக்க முடியாது. ஏனென்றால் வரைபடத்தில் குறைந்தது ஒரு மலையாவது இந்த மதிப்பை விட உயரமாக உள்ளது +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE} அதிகபட்ச வரைபட உயரமாக இந்த மதிப்பை நீங்கள் தர இயலாது. வரைபடத்தில் குறைந்தது ஒரு மலையாவது இந்த மதிப்பை விட உயரமாக உள்ளது STR_CONFIG_SETTING_EXTRADYNAMITE :நகரத்தின் சாலைகள், பாலங்கள் மற்றும் சுரங்கங்களை நீக்க அனுமதிக்கவும்: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :நகராட்சியின் கட்டடங்கள் நீக்குவதை எளிதாக்கவும் STR_CONFIG_SETTING_TRAIN_LENGTH :இரயில்களின் அதிகபட்ச நீளம்: {STRING} From 86ec74347d9150d27c4fd746812796a8ef56af53 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 12 Oct 2020 17:51:42 +0000 Subject: [PATCH 278/601] Update: Translations from eints german: 4 changes by matthiasradde slovak: 23 changes by FuryPapaya --- src/lang/german.txt | 4 ++++ src/lang/slovak.txt | 46 ++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 1599e2b171..f8f2c77def 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1538,10 +1538,13 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Zeitung STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Farbige Nachrichten erscheinen ab: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jahr in dem die Zeitung in Farbe herausgebracht wird. Vor diesem Jahr erscheint sie in Schwarz-Weiß-Druck STR_CONFIG_SETTING_STARTING_YEAR :Startdatum: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie STR_CONFIG_SETTING_SMOOTH_ECONOMY :Feinere Wirtschaft aktivieren (mehrere, kleinere Veränderungen): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wird diese Option ausgewählt, ändert sich die Produktionsmenge der Industrien häufiger, aber dafür in kleineren Schritten. Diese Einstellung hat gewöhnlicherweise KEINEN Effekt, wenn die Industrien von NewGRFs bereitgestellt werden STR_CONFIG_SETTING_ALLOW_SHARES :Handel mit Firmenanteilen erlauben: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Erlaube das Kaufen und Verkaufen von Firmenanteilen. Firmenanteile sind nur verfügbar für Firmen, die hinreichend lange existieren +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimales Alter einer Firma, um an der Börse gehandelt zu werden: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Setze das minimale Alter einer Firma, ab dem Andere Firmenanteile dieser Firma kaufen und verkaufen können. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prozentsatz des Profits für Teilstrecken: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Um das Einkommen der einzelnen Fahrzeuge einer Lieferkette ungefähr abschätzen zu können, wird vom Transporterlös bei Ablieferung einer Fracht der gewählte Prozentsatz den Zulieferfahrzeugen zugeschlagen STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Signalabstand beim Ziehen: {STRING} @@ -4427,6 +4430,7 @@ STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...hier STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Straßentyp kann hier nicht geändert werden... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden... STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Keine geeigneten Straßenbahnschienen +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... inkompatible Straßenbahngleise # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden... diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 3132e46c23..07ca569202 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -522,7 +522,7 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Výstavba letis ############ range for landscaping menu starts STR_LANDSCAPING_MENU_LANDSCAPING :Úprava terénu -STR_LANDSCAPING_MENU_PLANT_TREES :Výsadba stromov +STR_LANDSCAPING_MENU_PLANT_TREES :Sadenie stromov STR_LANDSCAPING_MENU_PLACE_SIGN :Umiestnenie popisu ############ range ends here @@ -2502,8 +2502,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postavi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej trate. Ctrl odstráni časť trate. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Postaviť časť cesty v automatickom režime. Ctrl odstráni časť cesty. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Postaviť časť električkovej trate v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť automobilovú garáž (na výrobu a opravu vozidiel). Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkovú garáž (na výrobu a opravu vozidiel). Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť automobilovú garáž (na výrobu a opravu vozidiel). Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkovú garáž (na výrobu a opravu vozidiel). Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu @@ -2515,8 +2515,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Postavi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Postaviť električkový tunel. Shift zobrazí predpokladanú cenu STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Prepnúť na odstránenie cesty STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Prepnúť na odstránenie električkovej trate -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertovať/vylepšiť typ cesty. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konvertovať/vylepšiť typ električkovej trate. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertovať/vylepšiť typ cesty. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konvertovať/vylepšiť typ električkovej trate. Shift zobrazí odhadovanú cenu STR_ROAD_NAME_ROAD :Cesta STR_ROAD_NAME_TRAM :Električková trať @@ -2542,7 +2542,7 @@ STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Výstavb STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vodné cesty STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Postaviť časť vodného kanálu. Shift zobrazí predpokladanú cenu STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. Shift zobrazí predpokladanú cenu -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (na výrobu a opravu lodí). Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (na výrobu a opravu lodí). Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Umiestniť bóju na vyznačenie trasy. Shift zobrazí predpokladanú cenu STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt. Shift zobrazí predpokladanú cenu @@ -2603,7 +2603,7 @@ STR_OBJECT_CLASS_TRNS :Vysielače # Tree planting window (last two for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Stromy STR_PLANT_TREE_TOOLTIP :{BLACK}Vybrať druh stromu na sadenie. Ak sa už strom na políčku nachádza, pridá sa viac stromov zmiešaných druhov nezávisle od vybraného druhu -STR_TREES_RANDOM_TYPE :{BLACK}Nahodne stromy +STR_TREES_RANDOM_TYPE :{BLACK}Náhodný druh stromov STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť náhodné stromy. Shift zobrazí predpokladanú cenu STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine @@ -2625,7 +2625,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Ste si i # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Vytvorenie mesta STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nové mesto -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Založiť nové mesto. Shift+klik zobrazí predpokladanú cenu +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Založiť nové mesto. Shift+klik zobrazí odhadovanú cenu STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Nahodné mesto STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Postaviť mesto na náhodnej pozícii STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veľa náhodných miest @@ -3009,8 +3009,8 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Verzia: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibilná verzia: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} -STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Predvolené (D) -STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Predvolené (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Predvolená (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Predvolená (D) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Zdedené (W) STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Zdedené (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametre: {SILVER}{STRING} @@ -3035,7 +3035,7 @@ STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Uložiť STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Zmeniť NewGRF parametre STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Zatvoriť STR_NEWGRF_PARAMETERS_RESET :{BLACK}Resetovať -STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Nastaviť východiskové hodnoty parametrov +STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Nastaviť predvolené hodnoty parametrov STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parameter {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Počet parametrov: {ORANGE}{NUM} @@ -3426,7 +3426,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Postavi STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Pozrieť sídlo STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Pozrieť sídlo spoločnosti STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Premiestniť sídlo -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo spoločnosti je možné premiestniť za 1% hodnoty spoločnosti. Shift+klik zobrazí predpokladanú cenu +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo spoločnosti je možné premiestniť za 1% hodnoty spoločnosti. Shift+klik zobrazí odhadovanú cenu STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaily STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Zobraziť podrobné políčka infraštruktúry @@ -3441,8 +3441,8 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Zmeniť STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Kúpiť 25% podiel v spoločnosti STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Predať 25% podiel v spoločnosti -STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Kúpiť 25% podiel v tejto spoločnosti. Shift+klik zobrazí predpokladanú cenu bez zakúpenia podielu. -STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Predať 25% podiel v tejto spoločnosti. Shift+klik zobrazí predpokladanú cenu bez predaja podielu. +STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Kúpiť 25% podiel v tejto spoločnosti. Shift+klik zobrazí odhadovanú cenu bez zakúpenia podielu. +STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Predať 25% podiel v tejto spoločnosti. Shift+klik zobrazí odhadovanú cenu bez predaja podielu. STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Názov spoločnosti STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Meno prezidenta @@ -3621,14 +3621,14 @@ STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať lietadlo STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift+klik zobrazí predpokladanú cenu bez nákupu -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift+klik zobrazí predpokladanú cenu bez nákupu -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift+klik zobrazí odhadovanú cenu bez nákupu -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané vozidlo. Shift+klik zobrazí predpokladanú cenu bez nákupu -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybranú loď. Shift+klik zobrazí predpokladanú cenu bez nákupu -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané lietadlo. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybraný vlak. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané vozidlo. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybranú loď. Shift+klik zobrazí odhadovanú cenu bez nákupu +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kúpiť a prestavať vybrané lietadlo. Shift+klik zobrazí odhadovanú cenu bez nákupu STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Premenovať STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Premenovať @@ -5104,8 +5104,8 @@ STR_FORMAT_DATE_SHORT :{STRING} {NUM} STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} -STR_FORMAT_BUOY_NAME :{TOWN} Bójka -STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bójka #{COMMA} +STR_FORMAT_BUOY_NAME :{TOWN} Bója +STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bója #{COMMA} STR_FORMAT_COMPANY_NUM :(Spoločnosť {COMMA}) STR_FORMAT_GROUP_NAME :Skupina {COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} From 313141d2f1218e487a546514831b91d794c20fde Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 13 Oct 2020 17:51:59 +0000 Subject: [PATCH 279/601] Update: Translations from eints slovak: 33 changes by FuryPapaya --- src/lang/slovak.txt | 66 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 07ca569202..0bfe919e9e 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -312,7 +312,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Uchop a STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Prepnúť veľkosť okna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Navigačná lišta - posúva zoznam hore/dole STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Posuvná lišta - posúva zoznam doľava/doprava -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolovať budovy atď. na rovný terén. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolovať budovy atď. na rovný terén. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Ukáž skryté @@ -425,9 +425,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generova STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generovanie priemyslu STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stavba cesty STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba električkovej trate -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Shift zobrazí predpokladanú cenu +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Shift zobrazí odhadovanú cenu STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umiestniť popis -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Shift zobrazí predpokladanú cenu +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Shift zobrazí odhadovanú cenu ############ range for SE file menu starts STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Uložiť scenár @@ -2421,14 +2421,14 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Magnetická dr STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Vybudovať železničnú trať. Ctrl prepína stavať/odobrať stavbu železnice. Shift zobrazí odhad nákladov STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Stavba železničnej trate s režimom Autorail. Ctrl odoberie konštrukciu. Shift zobrazí výšku nákladov -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postaviť vlakové depo (na nákup a opravu vlakov). Shift zobrazí predpokladanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postaviť vlakové depo (na nákup a opravu vlakov). Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Konvertovať železnicu na smerové body -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Postaviť železničné semafóry STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť stavbu/odstránenie železničných koľají, návestidiel, smerových bodov a staníc. Podržte Ctrl a budú odstránené viaceré objekty v rade za sebou -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice. Shift zobrazí predpokladanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice. Shift zobrazí odhadovanú cenu STR_RAIL_NAME_RAILROAD :Železnica STR_RAIL_NAME_ELRAIL :Elektrifikovaná železnica @@ -2498,21 +2498,21 @@ STR_BRIDGE_TUBULAR_SILICON :Krytý plastov # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Výstavba ciest STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Výstavba električkových tratí -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl odstráni časť cesty. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej trate. Ctrl odstráni časť trate. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Postaviť časť cesty v automatickom režime. Ctrl odstráni časť cesty. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Postaviť časť električkovej trate v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Postaviť časť cesty. Ctrl odstráni časť cesty. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Postaviť časť električkovej trate. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Postaviť časť cesty v automatickom režime. Ctrl odstráni časť cesty. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Postaviť časť električkovej trate v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postaviť automobilovú garáž (na výrobu a opravu vozidiel). Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postaviť električkovú garáž (na výrobu a opravu vozidiel). Shift zobrazí odhadovanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť električkovú vykládku. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Prepnúť stavbu jednosmernej cesty -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Postaviť cestný most. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Postaviť električkový most. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Postaviť cestný tunel. Shift zobrazí predpokladanú cenu -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Postaviť električkový tunel. Shift zobrazí predpokladanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Postaviť autobusovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postaviť električkovú zastávku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Postaviť vykládku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Postaviť električkovú vykládku. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Prepnúť na stavbu jednosmernej cesty +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Postaviť cestný most. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Postaviť električkový most. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Postaviť cestný tunel. Shift zobrazí odhadovanú cenu +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Postaviť električkový tunel. Shift zobrazí odhadovanú cenu STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Prepnúť na odstránenie cesty STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Prepnúť na odstránenie električkovej trate STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertovať/vylepšiť typ cesty. Shift zobrazí odhadovanú cenu @@ -2540,12 +2540,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vybrať # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Výstavba vodných ciest STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vodné cesty -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Postaviť časť vodného kanálu. Shift zobrazí predpokladanú cenu -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Postaviť časť vodného kanálu. Shift zobrazí odhadovanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Postaviť stavidlá. Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Postaviť lodenicu (na výrobu a opravu lodí). Shift zobrazí odhadovanú cenu -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Umiestniť bóju na vyznačenie trasy. Shift zobrazí predpokladanú cenu -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt. Shift zobrazí predpokladanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Postaviť prístav. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Umiestniť bóju na vyznačenie trasy. Shift zobrazí odhadovanú cenu +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Postaviť akvadukt. Shift zobrazí odhadovanú cenu STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definovať oblasť vody.{}Vytvorí vodný kanál, pri stlacení CTRL na úrovni mora zaplaví okolie STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Umiestniť rieku. @@ -2558,7 +2558,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Prístav # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Výstavba letísk -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Postaviť letisko. Ctrl umožní spájanie staníc. Shift zobrazí predpokladanú cenu +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Postaviť letisko. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Výber letiska @@ -2585,10 +2585,10 @@ STR_STATION_BUILD_NOISE :{BLACK}Vytvára # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Úprava terénu -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Znížiť roh políčka. Ťahaním znížite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšiť roh políčka. Ťahaním zvýšite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovnať výšku terénu podľa vybraného rohu. Ctrl označí oblasť diagonálne. Shift zobrazí predpokladanú cenu -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie. Shift zobrazí predpokladanú cenu +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Znížiť roh políčka. Ťahaním znížite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšiť roh políčka. Ťahaním zvýšite prvý vybraný roh a vyrovnáte celú vybranú oblasť na novú výšku. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovnať výšku terénu podľa vybraného rohu. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie. Shift zobrazí odhadovanú cenu # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Výber objektov @@ -2604,7 +2604,7 @@ STR_OBJECT_CLASS_TRNS :Vysielače STR_PLANT_TREE_CAPTION :{WHITE}Stromy STR_PLANT_TREE_TOOLTIP :{BLACK}Vybrať druh stromu na sadenie. Ak sa už strom na políčku nachádza, pridá sa viac stromov zmiešaných druhov nezávisle od vybraného druhu STR_TREES_RANDOM_TYPE :{BLACK}Náhodný druh stromov -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť náhodné stromy. Shift zobrazí predpokladanú cenu +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť stromy náhodného druhu. Shift zobrazí odhadovanú cenu STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine @@ -3620,7 +3620,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať loď STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kúpiť a prestavať lietadlo -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí odhadovanú cenu bez nákupu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift+klik zobrazí odhadovanú cenu bez nákupu STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift+klik zobrazí odhadovanú cenu bez nákupu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift+klik zobrazí odhadovanú cenu bez nákupu @@ -4300,8 +4300,8 @@ STR_FEEDER_INCOME_TINY :{TINY_FONT}{YEL STR_FEEDER_INCOME :{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {GREEN}Zisk: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {RED}Náklady: {CURRENCY_LONG} STR_FEEDER_COST :{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {RED}Náklady: {CURRENCY_LONG} -STR_MESSAGE_ESTIMATED_COST :{WHITE}Predpokladaná cena: {CURRENCY_LONG} -STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Predpokladaný zisk: {CURRENCY_LONG} +STR_MESSAGE_ESTIMATED_COST :{WHITE}Odhadovaná cena: {CURRENCY_LONG} +STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadovaný zisk: {CURRENCY_LONG} # Saveload messages STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry este bezi,{}pockajte prosim na dokoncenie! From b99fec1e4d8d19988c0c782efdc65e80733ec106 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 14 Oct 2020 17:51:50 +0000 Subject: [PATCH 280/601] Update: Translations from eints slovak: 29 changes by FuryPapaya polish: 7 changes by yazalo --- src/lang/polish.txt | 14 +++++------ src/lang/slovak.txt | 58 ++++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index cd265afca8..f4f92b5150 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3731,7 +3731,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} p{P ole ola ól} wody STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} p{P ole ola ól} stacji STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} lotnisk{P o a ""} -STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Żaden +STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Brak STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Budowa Siedziby STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Zbuduj siedzibę firmy @@ -3784,9 +3784,9 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} więcej... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nazwy zakładów - kliknij na nazwie zakładu by wyśrodkować na nim widok. Ctrl+klik otwiera nowy podgląd na lokacji zakładu -STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Akceptowane cargo: {SILVER}{STRING} -STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Wyprodukowane cargo: {SILVER}{STRING} -STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Wszystkie typy cargo +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Akceptowany ładunek: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produkowany ładunek: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Wszystkie typy ładunku STR_INDUSTRY_DIRECTORY_FILTER_NONE :Żadne # Industry view @@ -4569,12 +4569,12 @@ STR_AI_LIST_CANCEL :{BLACK}Anuluj STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nie zmieniaj skryptu STR_SCREENSHOT_CAPTION :{WHITE}Zrób zrzut ekranu -STR_SCREENSHOT_SCREENSHOT :{BLACK} Normalny zrzut ekranu -STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Maksymalnie przybliżono na zrzucie ekranu +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalny zrzut ekranu +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Zrzut ekranu z maksymalnym przybliżeniem STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zrzut ekranu z domyślnym przybliżeniem STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Zrzut ekranu całej mapy STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Zrzut ekranu mapy wysokościowej -STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK} Zrzut ekranu minimapy +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Zrzut ekranu minimapy # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 0bfe919e9e..aee99448b8 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -415,7 +415,7 @@ STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Prepnú # Extra tooltips for the scenario editor toolbar STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Uložiť scenár, nahrať scenár, opustiť editor scenára, ukončiť program STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD -STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor scenárov +STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor scenára STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Posunúť začiatok o rok dozadu STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Posunúť začiatok o rok dopredu STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Kliknúť pre zadanie počiatočného roku @@ -440,7 +440,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Ukončiť progr ############ range for SE file menu starts ############ range for settings menu starts -STR_SETTINGS_MENU_GAME_OPTIONS :Nastavenia hry +STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti hry STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Nastavenia STR_SETTINGS_MENU_SCRIPT_SETTINGS :Nastavenia AI/skriptu STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavenia NewGRF @@ -959,7 +959,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mapa pod STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Nastaviť hlavný pohľad na mapu podľa tohto pohľadu # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Nastavenia hry +STR_GAME_OPTIONS_CAPTION :{WHITE}Možnosti hry STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mena STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Výber menovej jednotky @@ -1839,10 +1839,10 @@ STR_INTRO_NEW_GAME :{BLACK}Nová hr STR_INTRO_LOAD_GAME :{BLACK}Nahrať hru STR_INTRO_PLAY_SCENARIO :{BLACK}Hrať scenár STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Hrať výškovú mapu -STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor scenárov +STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor scenára STR_INTRO_MULTIPLAYER :{BLACK}Viacero hráčov -STR_INTRO_GAME_OPTIONS :{BLACK}Nastavenia hry +STR_INTRO_GAME_OPTIONS :{BLACK}Možnosti hry STR_INTRO_HIGHSCORE :{BLACK}Najvyššie skóre STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Nastavenia STR_INTRO_NEWGRF_SETTINGS :{BLACK}Nastavenia NewGRF @@ -1862,7 +1862,7 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vybrať STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vybrať subtropickú krajinu STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vybrať krajinu hračiek -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Zobraziť nastavenia hry +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Zobraziť možnosti hry STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Zobraziť tabuľku hráčov s najvyšším skóre STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Zobraziť nastavenia STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Zobraziť nastavenia NewGRF @@ -2414,33 +2414,33 @@ STR_JOIN_WAYPOINT_CAPTION :{WHITE}Nasledov STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postaviť oddelený navádzač # Rail construction toolbar -STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Železnica -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektrifikovana železnica -STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Jednokoľajka - Monorail -STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Magnetická dráha - Maglev +STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Výstavba elektrifikovanej železnice +STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Výstavba jednokoľajky (Monorail) +STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Výstavba magnetickej dráhy (Maglev) -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Vybudovať železničnú trať. Ctrl prepína stavať/odobrať stavbu železnice. Shift zobrazí odhad nákladov -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Stavba železničnej trate s režimom Autorail. Ctrl odoberie konštrukciu. Shift zobrazí výšku nákladov +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Postaviť železničnú trať. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Postaviť železničnú trať v automatickom režime. Ctrl odstráni časť trate. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postaviť vlakové depo (na nákup a opravu vlakov). Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Konvertovať železnicu na smerové body +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Umiestniť smerový bod. Ctrl umožní spájanie smerových bodov. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Postaviť železničné semafóry -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť stavbu/odstránenie železničných koľají, návestidiel, smerových bodov a staníc. Podržte Ctrl a budú odstránené viaceré objekty v rade za sebou +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Umiestniť železničné signály. Ctrl prepína mechanické/svetelné signály{}Ťahanie umiestní signály na rovnom úseku trate. Ctrl umiestní signály až po najbližšiu križovatku alebo signál{}Ctrl+klik prepína otvorenie okna na výber signálu. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť na odstránenie železničnej trate, signálov, smerových bodov a staníc. Ctrl odstráni aj koľaj smerového bodu a stanice STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice. Shift zobrazí odhadovanú cenu STR_RAIL_NAME_RAILROAD :Železnica STR_RAIL_NAME_ELRAIL :Elektrifikovaná železnica STR_RAIL_NAME_MONORAIL :Jednokoľajka -STR_RAIL_NAME_MAGLEV :Maglev +STR_RAIL_NAME_MAGLEV :Magnetická dráha # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientácia depa STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Vybrať orientáciu vlakového depa # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Smerovy bod +STR_WAYPOINT_CAPTION :{WHITE}Smerový bod STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vyber typ kontrolneho bodu # Rail station construction window @@ -2689,7 +2689,7 @@ STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Zisk pri STR_LAND_AREA_INFORMATION_OWNER_N_A :Neznáme STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Vlastník: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Vlastník cesty: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlastník elektrickovej dráhy: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlastník električkovej trate: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Vlastník železnice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Miestna správa: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Neznáme @@ -2719,7 +2719,7 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Polia STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zasnežený terén STR_LAI_CLEAR_DESCRIPTION_DESERT :Púšť -STR_LAI_RAIL_DESCRIPTION_TRACK :Železnica trať +STR_LAI_RAIL_DESCRIPTION_TRACK :Železničná trať STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železnica trať so signálmi STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železnica trať s pre-signálmi STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železnica trať s exit-signálmi @@ -2796,7 +2796,7 @@ STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Kryty cestny mo STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Akvadukt -STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Vysielac +STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Vysielač STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Maják STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sídlo spoločnosti STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou vlastnený pozemok @@ -3456,7 +3456,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafór STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Políčka cesty: STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Električkové políčka: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vodné políčka: -STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}K Vodné kanály +STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Vodné kanály STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Políčka staníc STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Letiská @@ -3564,8 +3564,8 @@ STR_GROUP_OCCUPANCY :Súčasné vyu STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window -STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nove vlaky -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nové elektrické lokomotívy a vagóny +STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nové vlaky +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nové elektrické vlaky STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nové jednokoľajové vlaky STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nové magnetické vlaky @@ -3671,10 +3671,10 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE} STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vozid{P lo lá iel}{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - ťahaj ľavým kliknutím pre pridanie/odoberanie vozňa, pravým kliknutím sa zobrazia informácie o vozni a CTRL + pravé kliknutie zobrazí celkové informácie +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlaky - ťahaj ľavým kliknutím pre pridanie/odoberanie vozidiel, pravým kliknutím sa zobrazia informácie o vozidle. Ctrl+pravé kliknutie zobrazí celkové informácie STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vozidlá - pravým kliknutím na vozidlo sa zobrazia informácie STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Lode - pravým kliknutím na loď sa zobrazia informácie -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lietadlo - pravý kliknutím na lietadlo sa zobrazia informácie +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lietadlá - pravým kliknutím na lietadlo sa zobrazia informácie STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Presunutím lokomotívy bude predaná STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vozidlo presunuté sem bude predané @@ -5109,8 +5109,8 @@ STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bója #{ STR_FORMAT_COMPANY_NUM :(Spoločnosť {COMMA}) STR_FORMAT_GROUP_NAME :Skupina {COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} -STR_FORMAT_WAYPOINT_NAME :Smerovy bod {TOWN} -STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerovy bod {TOWN} #{COMMA} +STR_FORMAT_WAYPOINT_NAME :Smerový bod {TOWN} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerový bod {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_TRAIN :Vlakové depo {TOWN} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} #{COMMA} From 5043f6feff6411f503ee8009444ace80744044db Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 15 Oct 2020 17:51:56 +0000 Subject: [PATCH 281/601] Update: Translations from eints slovak: 16 changes by FuryPapaya --- src/lang/slovak.txt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index aee99448b8..a02bcbf76b 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -911,7 +911,7 @@ STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} čaká v leteckom hangári # Order review system / warnings -STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} má veľmi málo príkazov v poriadku +STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} má nedostatok príkazov v poriadku STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} má neplatný príkaz STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} má dvojité príkazy STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} má nesprávnu stanicu v zozname @@ -2410,8 +2410,8 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Dodáva: STR_JOIN_STATION_CAPTION :{WHITE}Spojiť stanicu STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Postaviť stanicu oddelene -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Nasledovať navádzač -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postaviť oddelený navádzač +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spojiť smerový bod +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postaviť smerový bod oddelene # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice @@ -3233,7 +3233,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- Nepou STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}Ciele spoločnosti: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni pre vycentrovanie na priemysel/mesto/políčko. Ctrl+klik otvorí nové okno s priemyslom/mestom/políčkom +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni pre vycentrovanie pohľadu na priemysel/mesto/políčko. Ctrl+klik otvorí nové okno s pohľadom na priemysel/mesto/políčko # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :Otázka @@ -3362,9 +3362,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Zakáž # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na umiestnenie navádzača +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu smerového bodu. Ctrl+klik otvorí nové okno s pohľadom na smerový bod STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Zmeniť meno smerového bodu -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na umiestnenie bójky +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu bóje. Ctrl+klik otvorí nové okno s pohľadom na bóju STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Zmeniť meno bóje STR_EDIT_WAYPOINT_NAME :{WHITE}Upraviť názvy smerových bodov @@ -3471,7 +3471,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} a {NUM} ďalšie... -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Názvy priemyslu - klikni na meno pre vycentrovanie priemyslu na stred obrazovky +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Názvy priemyslu - klikni na meno pre vycentrovanie pohľadu na priemysel. Ctrl+klik otvorí nové okno s pohľadom na priemysel STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Prijímaný náklad: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produkovaný náklad: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Všetky druhy nákladu @@ -3481,7 +3481,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Žiadne STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkcia minulý mesiac: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% prepraven{P é é ých}) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu továrne. Ctrl+klik otvorí nové okno s pohľadom na továreň +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu priemyslu. Ctrl+klik otvorí nové okno s pohľadom na priemysel STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Priemysel oznámil blížiace sa uzatvorenie! @@ -3713,10 +3713,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Zakúpi STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Zakúpi kópiu lode. Klikni na toto tlačidlo a následne na loď v depe alebo mimo neho. CTRL+klik skopíruje aj príkazy STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Zakúpi kópiu lietadla. Klikni na toto tlačidlo a potom na lietadlo v hangári alebo mimo neho. CTRL+Klik budú príkazy zdielané. Shift+klik zobrazí odhad nákladov -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Poloha depa uprostred hlavného okna. CTRL+klik otvorí nové okno s pohľadom na depo -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Pohoha garáže uprostred hlavného okna. CTRL+klik otvorí nový pohľad na umiestnenie garáže -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Poloha lodenice uprostred hlavného okna. CTRL+klik otvorí nové okno s pohľadom na lodenicu -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Poloha hangáru uprostred hlavného okna. CTRL+klik otvorí nové okno s pohľadom na hangár +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu depa. Ctrl+klik otvorí nové okno s pohľadom na depo +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu garáže. Ctrl+klik otvorí nové okno s pohľadom na garáž +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lodenice. Ctrl+klik otvorí nové okno s pohľadom na lodenicu +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu hangáru. Ctrl+klik otvorí nové okno s pohľadom na hangár STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Zobraziť zoznam všetkých vlakov, ktoré majú toto depo v zozname príkazov STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Zobraziť zoznam všetkých vozidiel, ktoré majú túto garáž v zozname príkazov @@ -4447,7 +4447,7 @@ STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nemôže STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Nemôžeš tu postaviť prístav... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nemôžeš tu postaviť letisko... -STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Susedi z viacerými stanicami/výkladkami +STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Susedí z viacerými stanicami/výkladkami STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stanica je príliš veľká STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Príliš veľa staníc/vykládok STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Veľa častí vlakovej stanice @@ -4480,15 +4480,15 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Prístav STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Letisko musíš najskôr zbúrať # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Pridať viac než jeden existujúci navádzač -STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Veľmi blízko k ďaľšiemu navádzaču +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Susedí z viacerými smerovými bodmi +STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Príliš blízko iného smerovému bodu STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Tu nie je možné postaviť železničný smerový bod... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Nemôžeš tu postaviť bóju... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Názov smerového bodu sa nedá zmeniť... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Tu nie je možné odstrániť železničný smerový bod... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Najprv musí byť odstránený železničný navádzač +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Najprv musí byť odstránený železničný smerový bod STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bója v ceste STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bóju používa iná spoločnosť! From b6615b2cd4d45698ad6d2077c07a3faec2c0dcc9 Mon Sep 17 00:00:00 2001 From: Jelle van der Waa Date: Wed, 14 Oct 2020 21:24:48 +0200 Subject: [PATCH 282/601] Fix: make reproducible by not embedding timestamps By default gzip embeds a timestamps which makes building it twice not reproducible, passing -n skips this embedding behaviour. Motivation: https://reproducible-builds.org --- cmake/InstallAndPackage.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index eafcfc21b6..9c2ae1924c 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -45,7 +45,7 @@ if(OPTION_INSTALL_FHS) install(CODE " execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${MAN_SOURCE_FILE} ${MAN_BINARY_FILE}) - execute_process(COMMAND gzip -9 -f ${MAN_BINARY_FILE}) + execute_process(COMMAND gzip -9 -n -f ${MAN_BINARY_FILE}) " COMPONENT manual) install(FILES From b3362c526a8024b2c1bd4185407d2e1fdac3df41 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 16 Oct 2020 17:51:43 +0000 Subject: [PATCH 283/601] Update: Translations from eints german: 5 changes by Luensche --- src/lang/german.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lang/german.txt b/src/lang/german.txt index f8f2c77def..1d02a5db36 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3506,13 +3506,17 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Fahrzeug STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schiff kaufen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Flugzeug kaufen +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :Fahrzeug kaufen und umrüsten +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Fahrzeug kaufen und umrüsten STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Schiff kaufen und umrüsten +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :Flugzeug kaufen und umrüsten STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Angewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Schiff kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Augewähltes Flugzeug kaufen. Shift schaltet zwischen Bauen und Kostenvoranschlag um +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :Ausgewähltes Fahrzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Umbenennen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Umbenennen @@ -3679,6 +3683,7 @@ STR_REPLACE_ELRAIL_VEHICLES :elektrische Sch STR_REPLACE_MONORAIL_VEHICLES :Einschienenbahn STR_REPLACE_MAGLEV_VEHICLES :Magnetschwebebahn +STR_REPLACE_ROAD_VEHICLES :Straßenfahrzeuge STR_REPLACE_TRAM_VEHICLES :Straßenbahnfahrzeuge STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon-Entfernung: {ORANGE}{STRING} From d9e7e8cec09f13a2ae0f4e86ec1458be9273ad68 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 17 Oct 2020 17:51:59 +0000 Subject: [PATCH 284/601] Update: Translations from eints german: 17 changes by Luensche --- src/lang/german.txt | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 1d02a5db36..46d3afcf8c 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -467,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sound/Musik ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Letzte Mitteilung/Nachricht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Vergangene Nachrichten +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Alle Nachrichten löschen ############ range ends here ############ range for about menu starts @@ -1538,6 +1539,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Zeitung STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Farbige Nachrichten erscheinen ab: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jahr in dem die Zeitung in Farbe herausgebracht wird. Vor diesem Jahr erscheint sie in Schwarz-Weiß-Druck STR_CONFIG_SETTING_STARTING_YEAR :Startdatum: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie STR_CONFIG_SETTING_SMOOTH_ECONOMY :Feinere Wirtschaft aktivieren (mehrere, kleinere Veränderungen): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wird diese Option ausgewählt, ändert sich die Produktionsmenge der Industrien häufiger, aber dafür in kleineren Schritten. Diese Einstellung hat gewöhnlicherweise KEINEN Effekt, wenn die Industrien von NewGRFs bereitgestellt werden @@ -2616,6 +2618,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Angenommene Frachtarten: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Gleistyp: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Straßenbahntyp: {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} @@ -2769,6 +2772,8 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafik-Renderin STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Karten-Rendering STR_FRAMETIME_CAPTION_VIDEO :Videoausgabe STR_FRAMETIME_CAPTION_SOUND :Sound-Abmischung +STR_FRAMETIME_CAPTION_GAMESCRIPT :Spielskript +STR_FRAMETIME_CAPTION_AI :KI {NUM} {STRING} ############ End of leave-in-this-order @@ -3367,6 +3372,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Keine - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportiert){BLACK} 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 @@ -3463,16 +3469,18 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Neue elektrisch STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Neue Einschienenbahnfahrzeuge STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Neue Magnetbahnfahrzeuge -STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Neue Fahrzeuge +STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Neue Straßenfahrzeuge STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Neue Straßenbahnen ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Neue Schienenfahrzeuge +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Neue Straßenfahrzeuge STR_BUY_VEHICLE_SHIP_CAPTION :Neue Schiffe STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Neue Flugzeuge ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Gewicht: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (Umrüstkosten: {GOLD}{CURRENCY_LONG}{BLACK}) Gewicht: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Geschw.: {GOLD}{VELOCITY}{BLACK} Leistung: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Geschwindigkeit: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Geschwindigkeit auf dem Meer: {GOLD}{VELOCITY} @@ -3511,12 +3519,15 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Fahrzeug STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Schiff kaufen und umrüsten STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :Flugzeug kaufen und umrüsten -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Angewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Schiff kaufen. Shift+Klick zeigt einen Kostenvoranschlag -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Augewähltes Flugzeug kaufen. Shift schaltet zwischen Bauen und Kostenvoranschlag um +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Augewähltes Flugzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :Ausgewähltes Fahrzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Straßenfahrzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Schiff kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Flugzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Umbenennen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Umbenennen @@ -4139,6 +4150,8 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript n STR_SCREENSHOT_CAPTION :{WHITE}Sreenshot erzeugen STR_SCREENSHOT_SCREENSHOT :{BLACK}Normaler Screenshot STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screenshot des ganzen Spielfeldes +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Reliefkarten-Screenshot +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap Screenshot # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4434,6 +4447,7 @@ STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...hier STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...hier ist kein Straßenbahngleis STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Straßentyp kann hier nicht geändert werden... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Keine geeignete Straße STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Keine geeigneten Straßenbahnschienen STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... inkompatible Straßenbahngleise From eb01f2e08d42151ac6f03ff6c4e774374802f89e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 18 Oct 2020 17:51:49 +0000 Subject: [PATCH 285/601] Update: Translations from eints romanian: 10 changes by ALEX11BR tamil: 26 changes by Aswn --- src/lang/romanian.txt | 10 ++++++++++ src/lang/tamil.txt | 26 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index cbb2f5a285..b9f34916fc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -263,6 +263,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Activân STR_BUTTON_DEFAULT :{BLACK}Prestabilit(e) STR_BUTTON_CANCEL :{BLACK}Anulează STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Avertisment: Administratorii serverului pot citi orice text introdus aici. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -1289,6 +1290,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grosimea liniil STR_CONFIG_SETTING_LANDSCAPE :Peisaj: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Peisajele definesc scenariile de bază a jocului cu cerințe diferite pentru încărcături și dezvoltare a orașelor. NewGRF și scripturile de joc permit un control mai fin STR_CONFIG_SETTING_LAND_GENERATOR :Generator teren: {STRING} +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Generatorul original depinde de setul grafic, și compune forme de teren fixate. TerraGenesis este un generator de zgomot Perlin cu setări de control mai fine STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tip teren: {STRING} @@ -1297,6 +1299,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitatea indu STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distanța maximă de la marginea hărții pentru rafinării: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinăriile de petrol vor fi construite doar la marginea hărţii, sau pe coastă, în cazul harţilor insulare STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Grosimea stratului de zăpadă: {STRING} +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controlează înălțimea de la care zăpada apare în peisajul sub-arctic. De asemenea, zăpada afectează generarea industriilor și cerințele de creștere a orașelor. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Duritatea terenului (doar pt TerraGenesis) : {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Doar TerraGenesis) Alegeți frecvența dealurilor: Peisajele line au dealuri mai puține și mai întinse. Peisajele dure au multe dealuri și pot arăta repetitiv STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Foarte fin @@ -1304,6 +1307,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Fin STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Dur STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Foarte dur STR_CONFIG_SETTING_VARIETY :Distribuția varietății: {STRING} +STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Alege câte râuri să fie generate STR_CONFIG_SETTING_TREE_PLACER :Algoritm amplasare arbori: {STRING} STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Alegeți distribuția copacilor pe hartă: 'Original' plantează copacii dispersați uniform, 'Îmbunătățit' îi plantează grupat STR_CONFIG_SETTING_TREE_PLACER_NONE :Niciunul @@ -1330,6 +1334,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde închis STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mov STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mută harta ținând apăsat click dreapta, poziția cursorului rămânând fixă +STR_CONFIG_SETTING_SCROLLMODE_LMB :Mută harta cu clic stânga STR_CONFIG_SETTING_SMOOTH_SCROLLING :Derulare uşoară ecran: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controlează modul de deplasare a imaginii din ecranul principal când se face click pe harta mică sau când se execută o comandă de deplasare către un obiect anume de pe hartă. Dacă este activată, imaginea se deplasează în mod fluid, altfel imaginea sare direct la zona dorită STR_CONFIG_SETTING_MEASURE_TOOLTIP :Arată o indicaţie de distanţă la folosirea uneltelor de construcţie: {STRING} @@ -1363,6 +1368,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Oprit STR_CONFIG_SETTING_AUTOSAVE :Autosalvare: {STRING} +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Alege intervalul de timp dintre salvările automate STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Foloseşte formatul datei {STRING} pentru numele salvărilor STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formatul datei in numele salvărilor @@ -2661,14 +2667,17 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Echipa OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}FPS STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr de evenimente de joc simulate per secundă. STR_FRAMERATE_AVERAGE :{WHITE}Medie +STR_FRAMERATE_MEMORYUSE :{WHITE}Memorie STR_FRAMERATE_DATA_POINTS :{BLACK}Date bazate pe măsurători {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} cadre/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! STR_FRAMERATE_VIDEO :{BLACK}Ieșire video: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script joc: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Buclă de joc @@ -3313,6 +3322,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicule rutier STR_GROUP_DEFAULT_SHIPS :Nave negrupate STR_GROUP_DEFAULT_AIRCRAFTS :Aeronave negrupate +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupuri - click pe un grup pentru lista completă a vehiculelor acestuia STR_GROUP_CREATE_TOOLTIP :{BLACK}Click pentru a creea un grup diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index ae9a20bb78..ce35c2c4f1 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -259,6 +259,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}மற STR_BUTTON_DEFAULT :{BLACK}Default STR_BUTTON_CANCEL :{BLACK}தவிர் STR_BUTTON_OK :{BLACK}சரி +STR_WARNING_PASSWORD_SECURITY :{YELLOW}எச்சரிக்கை: சேவையக நிர்வாகிகளால் இங்கு உள்ளிட்டப்படும் எந்த உரையையும் படிக்க முடியும். # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -842,6 +843,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} இப்போது {STRING} {STRING} ஆகியவற்றை ஏற்றுக்கொள்கிறது STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}மானியம் இனிமேல் தரப்படாது:{}{}{STRING} இருந்து {STRING} {STRING} வரை போக்குவரத்திற்கு மானியம் வழங்கப்படாது +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}{STRING} இற்கு சேவை மானியம் வழங்கப்படுகிறது!{}{} {STRING} முதல் {STRING} to வரையிலான {STRING} சேவை அடுத்த ஆண்டுக்கு 50% கூடுதல் கட்டணம் செலுத்தும்! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN}இல் சாலை போக்குவரத்து பாதிப்பு!{}{}Road rebuilding programme funded by {STRING} brings 6 months of misery to motorists! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}போக்குவரத்து தனியுரிமை! @@ -890,6 +892,7 @@ STR_GAME_OPTIONS_CURRENCY_LTL :லிதுவ STR_GAME_OPTIONS_CURRENCY_KRW :தென்கொரிய வொன் (KRW) STR_GAME_OPTIONS_CURRENCY_ZAR :தென் ஆப்பிரிக்க ரான்ட் (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :புதிதாக... +STR_GAME_OPTIONS_CURRENCY_GEL :ஜார்ஜிய லாரி (GEL) STR_GAME_OPTIONS_CURRENCY_RUB :புதிய ரஷ்ய ரூபிள் (RUB) ############ end of currency region @@ -1118,6 +1121,7 @@ STR_CONFIG_SETTING_RECESSIONS :பொருள STR_CONFIG_SETTING_TRAIN_REVERSING :நிலையங்களில் இரயில்களை திருப்புவதை அனுமதிக்காதே: {STRING} STR_CONFIG_SETTING_DISASTERS :பேரழிவுகள்: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL :நகர மறு அமைப்பின் மீது நகராட்சியின் நிலை: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :நிறுவனங்களின் சத்தம் மற்றும் சுற்றுச்சூழல் சேதம் அவர்களின் நகர மதிப்பீட்டை பாதிக்கும் மற்றும் அவற்றின் பகுதியில் மேலும் கட்டுமான நடவடிக்கைகளைத் தேர்வுசெய்க STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :அதிகபட்ச வரைபட உயரம்: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :இந்த வரைபடத்திலுள்ள மலைகளின் அதிகபட்ச உயரத்தினை அமை @@ -1173,6 +1177,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :நிறுவ STR_CONFIG_SETTING_ALLOW_FUND_ROAD :உள்ளூர் சாலை மறுசீரமைக்க நிதியளி: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :மற்ற நிறுவனங்களுக்கு பணம் அனுப்ப அனுமதி: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS :பெரிய இரயில்களின் சரக்குகளுக்கு எடை பெருக்கி: {STRING} +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :ரயில்களில் சரக்குகளை கொண்டு செல்வதன் தாக்கத்தை அமைக்கவும். அதிக மதிப்பு ரயில்களுக்கு, குறிப்பாக மலைகளில் தேவைப்படும் அளவுக்கு சரக்குகளை எடுத்துச் செல்கிறது STR_CONFIG_SETTING_PLANE_SPEED :விமான வேக பெருக்கி: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :விமான விபத்துகளின் எண்ணிக்கை: {STRING} @@ -1234,8 +1239,10 @@ STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :வலமிர STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :இடமிலிருந்து வலஞ்செல் STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :சமமான சித்திரக்காட்சியின் உயர அளவு: {STRING} STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}வடதுருவத்தில் ஒன்று அல்லது அதற்கு மேற்பட்ட கட்டங்கள் காலியாக இல்லை +STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}விளிம்புகளில் ஒன்று அல்லது அதற்கு மேற்பட்ட ஓடுகளில் தண்ணீர் இல்லை STR_CONFIG_SETTING_STATION_SPREAD :அதிக. நிலைய விரிப்பு: {STRING} +STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :ஒரு நிலையத்தின் அதிகபட்ச பரப்பளவு. உயர் மதிப்புகள் விளையாட்டை மெதுவாக்கும் என்பதினை நினைவில் கொள்க STR_CONFIG_SETTING_SERVICEATHELIPAD :ஹெலிகாப்ப்டர்களை தானாக சரிபார்ர்க்கவும்: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :சிறுபடத்தில் பயன்படுத்திய நில நிறம்: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :சிறுபடத்தில் நிலப்பகுதியின் நிறம் @@ -1294,6 +1301,7 @@ STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :செய்த STR_CONFIG_SETTING_SOUND_NEWS :செய்தித்தாள்: {STRING} STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :செய்திதாள்களைக் காட்டும்போது ஒலி எழுப்பவும் STR_CONFIG_SETTING_SOUND_NEW_YEAR :ஆண்டின் முடிவு: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :முந்தைய ஆண்டை ஒப்பிடும்போது ஆண்டின் செயல்திறனை சுருக்கமாக ஒரு ஆண்டின் இறுதியில் ஒலி ஒன்றினை இயக்குங்கள் STR_CONFIG_SETTING_SOUND_CONFIRM :கட்டுமானம்: {STRING} STR_CONFIG_SETTING_SOUND_CLICK :பொத்தான் அழுத்தங்கள்: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :பொத்தான்களை அழுத்தும்போது ஒலி எழுப்பவும் @@ -1369,6 +1377,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :தொகுப 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_SMOOTH_ECONOMY :இயல்பான பொருளாதாரத்தினைச் செயல்படுத்தவும் (அதிகமான, சிறிய மாற்றங்கள்): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :மற்ற நிறுவனங்களின் பங்குகளை வாங்குவதை அனுமதிக்கவும்: {STRING} @@ -1445,6 +1454,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :சமச்ச STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :சமச்சீரான STR_CONFIG_SETTING_DISTRIBUTION_PAX :பயணிகள் பரிமாற்றம் வகை: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL :அஞ்சல் பரிமாற்றம் வகை: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :இதை 0 ஐ விட அதிகமான மதிப்பாக அமைத்தால், சில சரக்குகளின் மூல நிலையம் A க்கும் சாத்தியமான இலக்கு B க்கும் இடையிலான தூரம் A இலிருந்து B க்கு அனுப்பப்படும் சரக்குகளின் அளவை பாதிக்கும். மேலும் தொலைவில் உள்ள B A இலிருந்து குறைவாக உள்ளது சரக்கு அனுப்பப்படும். நீங்கள் அதை அதிகமாக அமைத்தால், குறைந்த சரக்கு தொலைதூர நிலையங்களுக்கு அனுப்பப்படும், மேலும் அதிகமான சரக்குகள் அருகிலுள்ள நிலையங்களுக்கு அனுப்பப்படும். STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :வேக அலகுகள்: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :இம்பீரியல் (mph) @@ -1452,6 +1462,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :மெட்ர STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (மீ/நொடி) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :வாகன திறன் பிரிவுகள்: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :ஒரு வாகனத்தின் சக்தி பயனர் இடைமுகத்தில் காட்டப்படும் போதெல்லாம், தேர்ந்தெடுக்கப்பட்ட அலகுகளில் அதைக் காட்டு STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :இம்பீரியல் (கு.ஆ) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :மெட்ரிக் (கு.ஆ) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (கி.வாட்) @@ -1646,6 +1657,7 @@ STR_FACE_SIMPLE :{BLACK}எள STR_FACE_SIMPLE_TOOLTIP :{BLACK}எளிதான முகம் தேர்ந்தெடுத்தல் STR_FACE_LOAD :{BLACK}ஏற்று STR_FACE_LOAD_TOOLTIP :{BLACK}பிடித்த முகத்தினை பதிவேற்று +STR_FACE_LOAD_DONE :{WHITE}உங்களுடைய பிடித்த முகம் OpenTTD உள்ளமைவு கோப்பிலிருந்து ஏற்றப்பட்டுள்ளது STR_FACE_FACECODE :{BLACK}விளையாடுபவர் முக எண் STR_FACE_FACECODE_CAPTION :{WHITE}நிறுவனரின் முக எண்னை பார் அல்லது அமை STR_FACE_FACECODE_SET :{WHITE}புதிய முக எண் குறி அமைக்கப்பட்டது @@ -2032,6 +2044,7 @@ STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}இல # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}ஒளி அமைப்புகள் STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}வீடுகளுக்கான வெளிப்படைத்தன்மையை நிலைமாற்று. Ctrl + கிளிக் பூட்ட செய்க +STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}வெளிப்படையானதற்கு பதிலாக கண்ணுக்கு தெரியாததாக பொருட்களை அமைக்கவும் # Linkgraph legend window STR_LINKGRAPH_LEGEND_ALL :{BLACK}அனைத்தும் @@ -2165,6 +2178,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}கா STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}நீர்ப்பூட்டுகளைக் கட்டு. Shift அழுத்தினால் கட்டடம்/செலவு மதிப்பீடு காட்டப்படும் STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}கப்பல் பணிமனையினைக் கட்டவும்(கப்பல்களை வாங்க மற்றும் பழுதுபார்க்க). Shift அழுத்தினால் கட்டுமான/செலவு மதிப்பீடு காட்டப்படும் STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}கப்பல் துறைமுகத்தினைக் கட்டவும். Ctrl அழுத்தினால் துறைமுகங்களினை இணைக்கலாம். Shift அழுத்தினால் கட்டுமான/செலவு மதிப்பீடு காட்டப்படும் +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}நீர்வாழ்வை உருவாக்குங்கள். Shift கட்டிடம் கட்டுதல் / செலவு மதிப்பீட்டைக் காட்டும் STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}ஆறுகளை அமைக்கவும் # Ship depot construction window @@ -2424,6 +2438,7 @@ STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} ############ Leave those lines in this order!! +STR_FRAMERATE_GL_TRAINS :{BLACK} இரயில் நேரம்: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} உலக சொடுக்குகள்: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} இணைப்பு வரைபட தாமதம்: STR_FRAMERATE_SOUND :{BLACK}இசை இயக்கம்: @@ -2457,6 +2472,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}ஆட STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}எந்த தகவலும் கிடைக்கவில்லை STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}ஏற்கனவே உள்ள கோப்பை மேலெழுத விரும்புகிறீர்களா? STR_SAVELOAD_OSKTITLE :{BLACK}பதிவு-ஆட்டத்திற்கு பெயர் ஒன்றினை இடு @@ -2628,9 +2644,11 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} இ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF கோப்பு மொழிபெயர்க்க வடிமைக்கப்பட்டது STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :அளவிற்கு அதிகமான NewGRF கள் ஏற்றப்பட்டுள்ளன STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :எதிர்பார்க்கப்படாத ஸ்பிரைட்டு(ஸ்பிரைட்டு {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :தெரியாத செயல் 0 பொருள் {4:HEX} (ஸ்பிரிட் {3:NUM}) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :பல அதிரடி 8 உள்ளீடுகளைக் கொண்டுள்ளது (ஸ்பிரிட் {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :கேட்கப்பட்ட GRF கள் கிடைக்கவில்லை (ஸ்பிரைட்டு {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}, {STRING}ஆல் செயலிழக்க செய்யப்பட்டது +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :தவறான / அறியப்படாத ஸ்பிரிட் தளவமைப்பு வடிவம் (ஸ்பிரிட் {3:NUM}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}எச்சரிக்கை! @@ -2789,6 +2807,7 @@ STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}உலக கதைப் புத்தகம் STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :பக்கம் {NUM} +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}இந்த கீழ்தோன்றும் பட்டியலில் ஒரு குறிப்பிட்ட பக்கத்தைத் தேர்ந்தெடுப்பதன் மூலம் செல்லவும். STR_STORY_BOOK_PREV_PAGE :{BLACK}முந்தைய STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}முந்தைய பக்கத்திற்குச் செல்லவும் STR_STORY_BOOK_NEXT_PAGE :{BLACK}அடுத்தது @@ -2965,6 +2984,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}தொழிற்சாலைகள் STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- ஒன்றுமில்லை - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}ஏற்றுக்கொள்ளப்படும் சரக்குகள்: {SILVER}{STRING} # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3029,6 +3049,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}கு STR_GROUP_CREATE_TOOLTIP :{BLACK}ஓர் குழுவினை உருவாக்க சொடுக்கவும் STR_GROUP_DELETE_TOOLTIP :{BLACK}தேர்ந்தெடுக்கப்பட்ட குழுவின் பெயரினை நீக்கவும் STR_GROUP_RENAME_TOOLTIP :{BLACK}தேர்ந்தெடுக்கப்பட்ட குழுவின் பெயரினை மாற்றவும் +STR_GROUP_LIVERY_TOOLTIP :{BLACK}தேர்ந்தெடுக்கப்பட்ட குழுவின் நிறத்தினை மாற்றவும் STR_GROUP_ADD_SHARED_VEHICLE :பகிர்ந்த வாகனங்களை சேர்க்கவும் @@ -3103,6 +3124,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}சா STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}கப்பல் வகையின் பெயரினை மாற்றவும் STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}விமான வகையின் பெயரினை மாற்றவும் +STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}மறை STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}மறை STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}காட்சி @@ -3236,6 +3258,8 @@ STR_REPLACE_REMOVE_WAGON :{BLACK}பெ # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} +STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}வாகனத்தின் இருப்பிடத்தினை மையமாகக் கொள். Ctrl + Click முக்கிய பார்வையில் வாகனத்தைப் பின்தொடரும் +STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}விமானத்தின் இருப்பிடத்தினை மையமாகக் கொள். Ctrl + Click முக்கிய பார்வையில் விமானத்தைப் பின்தொடரும் STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}இரயிலினை பணிமனைக்கு அனுப்பவும். Ctrl+Click அழுத்தினால் பழுதுபார்த்தல் மட்டுமே நடக்கும் STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}வாகனத்தினை பணிமனைக்கு அனுப்பவும். Ctrl+Click அழுத்தினால் பழுதுபார்த்தல் மட்டுமே நடக்கும் @@ -3310,6 +3334,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} வர STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} வருடம்{P "" கள்} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}அதி. வேகம்: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}அதி. வேகம்: {LTBLUE}{VELOCITY} {BLACK}விமான வகை: {LTBLUE}{STRING} {BLACK}வீச்சு எல்லை: {LTBLUE}{COMMA} கட்டங்கள் STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}எடை: {LTBLUE}{WEIGHT_SHORT} {BLACK}திறன்: {LTBLUE}{POWER}{BLACK} அதி. வேகம்: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}எடை: {LTBLUE}{WEIGHT_SHORT} {BLACK}திறன்: {LTBLUE}{POWER}{BLACK} அதி. வேகம்: {LTBLUE}{VELOCITY} {BLACK}அதி. T.E.: {LTBLUE}{FORCE} @@ -3543,6 +3568,7 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :பயணம் STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :அதிகபட்சமாக {2:VELOCITY} உடன் பயணிக்கவும் (கால அட்டவணையிடப்படவில்லை) STR_TIMETABLE_TRAVEL_FOR :{STRING} காலத்திற்கு பயணி STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING} காலத்திற்கு பயணி, அதிகபட்ச வேகம் {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :பயணம் ({STRING}, நேர அட்டவணை இடப்படாதது) STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} வரை இரு, நேர அட்டவணை இடப்படாதது) STR_TIMETABLE_STAY_FOR :மற்றும் {STRING} இற்கு நிற்கவும் STR_TIMETABLE_AND_TRAVEL_FOR :மற்றும் {STRING} இற்கு பயணிக்கவும் From 97d7c0a8e1c7363b918adfc4638a44bc35b1f193 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 24 Oct 2020 17:51:58 +0000 Subject: [PATCH 286/601] Update: Translations from eints tamil: 76 changes by Aswn --- src/lang/tamil.txt | 89 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 76 insertions(+), 13 deletions(-) diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index ce35c2c4f1..0b6a8a396c 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -496,10 +496,10 @@ STR_ORDINAL_NUMBER_15TH :15வது ############ range for ordinal numbers ends ############ range for days starts -STR_DAY_NUMBER_1ST :1st -STR_DAY_NUMBER_2ND :2nd -STR_DAY_NUMBER_3RD :3rd -STR_DAY_NUMBER_4TH :4th +STR_DAY_NUMBER_1ST :1வது +STR_DAY_NUMBER_2ND :2வது +STR_DAY_NUMBER_3RD :3வது +STR_DAY_NUMBER_4TH :4வது STR_DAY_NUMBER_5TH :5வது STR_DAY_NUMBER_6TH :6வது STR_DAY_NUMBER_7TH :7வது @@ -620,6 +620,7 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}மொ ############ End of order list STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}சென்ற வருடம் லாபமடைந்த வாகனங்களின் எண்ணிக்கை. இதில் இரயில், சாலை, விமானம் மற்றும் கப்பல் வாகனங்கள் அடங்கும் STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}குறைந்தபட்ச வருமானம் உடைய வாகனத்தின் லாபம்(இரண்டு வருடங்கள் பழைய வாகனங்கள் மட்டும் கணக்கில் எடுக்கப்பட்டுள்ளது) +STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}கடந்த 12 காலாண்டுகளில் மிகக் குறைந்த லாபத்துடன் காலாண்டில் செய்யப்பட்ட பணத்தின் அளவு STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}கடந்த நான்கு காலாண்டுகளில் சேர்க்கப்பட்ட சரக்கு பெட்டிகள் STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}கடந்த காலாண்டில் கையாளப்பட்ட சரக்கு வகைகள் STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}இந்த நிறுவனம் வங்கியில் வைத்திருக்கும் பணம் @@ -793,6 +794,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(மேலாளர்) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} நிதியுதவி செய்தது புதிய நகரம் {TOWN} கட்டுவதற்கு! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}{TOWN} என்ற புதிய நகரம் கட்டப்பட்டுள்ளது! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}புது {STRING} கட்டப்படுகிறது {TOWN}அருகில்! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}ப்திய {STRING} தொடங்கப்படுகிறது {TOWN}அருகில்! @@ -807,6 +809,7 @@ STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} உற்பத்தியை அதிகரித்தது! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING} தயாரிப்பு {INDUSTRY} இல் அதிகரித்தது {COMMA}%! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} உற்பத்தி 50 சதவீதமாக குறைத்தது +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}{INDUSTRY} பூச்சி தொற்று அழிவை ஏற்படுத்துகிறது!{}உற்பத்தி 50 சதவீதமாக குறைத்தது. STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING} தயாரிப்பு {INDUSTRY} இல் குறைந்தது {COMMA}%! STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} பணிமனையில் காத்துக்கொண்டிருக்கிறது @@ -843,7 +846,8 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} இப்போது {STRING} {STRING} ஆகியவற்றை ஏற்றுக்கொள்கிறது STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}மானியம் இனிமேல் தரப்படாது:{}{}{STRING} இருந்து {STRING} {STRING} வரை போக்குவரத்திற்கு மானியம் வழங்கப்படாது -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}{STRING} இற்கு சேவை மானியம் வழங்கப்படுகிறது!{}{} {STRING} முதல் {STRING} to வரையிலான {STRING} சேவை அடுத்த ஆண்டுக்கு 50% கூடுதல் கட்டணம் செலுத்தும்! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}{STRING} இற்கு சேவை மானியம் வழங்கப்படுகிறது!{}{} {STRING} முதல் {STRING} வரையிலான {STRING} சேவை அடுத்த ஆண்டுக்கு 50% கூடுதல் கட்டணம் செலுத்தும்! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}{STRING} இற்கு சேவை மானியம் வழங்கப்படுகிறது!{}{}{STRING} முதல் {STRING} வரையிலான {STRING} சேவை அடுத்த ஆண்டுக்கு 4 மடங்கு கட்டணம் செலுத்தும்! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN}இல் சாலை போக்குவரத்து பாதிப்பு!{}{}Road rebuilding programme funded by {STRING} brings 6 months of misery to motorists! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}போக்குவரத்து தனியுரிமை! @@ -893,7 +897,13 @@ STR_GAME_OPTIONS_CURRENCY_KRW :தென்க STR_GAME_OPTIONS_CURRENCY_ZAR :தென் ஆப்பிரிக்க ரான்ட் (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :புதிதாக... STR_GAME_OPTIONS_CURRENCY_GEL :ஜார்ஜிய லாரி (GEL) +STR_GAME_OPTIONS_CURRENCY_IRR :ஈரானிய ரியால் (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :புதிய ரஷ்ய ரூபிள் (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :மெக்சிகன் பெசோ (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :புதிய தைவான் டாலர் (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :சீன ரென்மின்பி (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :ஹாங்காங் டாலர் (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :இந்திய ரூபாய் (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}சாலை வாகனங்கள் @@ -949,6 +959,7 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}தி STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}திரை அளவினைத் தேர்ந்தெடுக்கவும் STR_GAME_OPTIONS_RESOLUTION_OTHER :மற்றவை +STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}இடைமுக அளவு STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :சராசரி STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :இரண்டு மடங்கு @@ -956,7 +967,9 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :நான்க STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}எழுத்துரு அளவு +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :இயல்பான STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :இரண்டு மடங்கு +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :நான்கு மடங்கு STR_GAME_OPTIONS_BASE_GRF :{BLACK}அடிப்படை அசைவூட்டம் STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}பயன்படுத்தப்போகும் அடிப்படை அசைவூட்டத்தினை தேர்ந்தெடுக்கவும் @@ -1119,6 +1132,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :கட்டு STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :கட்டுமான அளவு மற்றும் வாங்கும் செலவுகள் ஆகியவற்றை அமை STR_CONFIG_SETTING_RECESSIONS :பொருளதாரத் தேக்கங்கள்: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING :நிலையங்களில் இரயில்களை திருப்புவதை அனுமதிக்காதே: {STRING} +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :இயக்கப்பட்டால், தலைகீழாக மாறும்போது, அடுத்த இலக்குக்கு குறுகிய பாதை இருந்தாலும், ரயில்கள் டெர்மினஸ் அல்லாத நிலையங்களில் தலைகீழாக மாறாது STR_CONFIG_SETTING_DISASTERS :பேரழிவுகள்: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL :நகர மறு அமைப்பின் மீது நகராட்சியின் நிலை: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :நிறுவனங்களின் சத்தம் மற்றும் சுற்றுச்சூழல் சேதம் அவர்களின் நகர மதிப்பீட்டை பாதிக்கும் மற்றும் அவற்றின் பகுதியில் மேலும் கட்டுமான நடவடிக்கைகளைத் தேர்வுசெய்க @@ -1190,6 +1204,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :நகரத் STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}வாகனங்கள் இருக்கும் பொது இந்த அமைப்பினை மாற்ற இயலாது STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :கட்டட பராமரிப்பு: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :துவங்கும் நிறுவனத்தின் வண்ணம்: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :விமான நிலையங்கள் என்றும் காலாவதியாகாது: {STRING} @@ -1206,6 +1221,7 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS :தானாக STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} மாத{P 0 "ம்" ங்கள்} முன்னர் STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} மாத{P 0 "ம்" ங்கள்} பின்னர் STR_CONFIG_SETTING_AUTORENEW_MONEY :காலாவதியான வாகனங்களை மாற்றியமைக்கத் தேவையான பணம்: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :தானாக புதுப்பிக்கும் வாகனங்களைக் கருத்தில் கொள்வதற்கு முன் வங்கியில் இருக்க வேண்டிய குறைந்தபட்ச பணம் STR_CONFIG_SETTING_ERRMSG_DURATION :பிழை செய்திக்கான கால அளவு: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} விநாடி{P 0 "" கள்} STR_CONFIG_SETTING_HOVER_DELAY :tooltips இனை காட்டு: {STRING} @@ -1218,17 +1234,20 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :வரைபட STR_CONFIG_SETTING_LANDSCAPE : நிலவெளி: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR :நில உருவாக்கி: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :உண்மையான -STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis +STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :புவிதுவக்கம் +STR_CONFIG_SETTING_TERRAIN_TYPE :நிலவகை: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY :தொழிற்சாலை அடர்த்தி: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :வரைபட எல்லையிலிருந்து எண்ணெய் தொழிற்சாலைகள் இருக்கக்கூடிய தூரம்: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :எண்ணெய் சுத்திகரிப்பு நிலையங்கள் வரைபடத்தின் எல்லைகளில் மட்டுமே கட்ட இயலும், அதாவது தீவு வரைபடங்களில் கடற்கரைகளில் கட்ட இயலும் STR_CONFIG_SETTING_SNOWLINE_HEIGHT :பனி-கோடின் உயரம்: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :நிலப்பகுதியின் சமனில்லாத நிலை (TerraGenesis மட்டும்) : {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :நிலப்பகுதியின் சமனில்லாத நிலை (புவிதுவக்கம் மட்டும்) : {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :மிகவும் சமமான STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :சமமான STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :கரடுமுரடான STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :மிகவும் கரடுமுரடான +STR_CONFIG_SETTING_VARIETY :பலவகை பரவல்: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :ஆறுகளின் எண்ணிக்கை: {STRING} +STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :எத்தனை ஆறுகளை உருவாக்க வேண்டும் என்பதைத் தேர்வுசெய்க STR_CONFIG_SETTING_TREE_PLACER :மரங்கள் நடும் வகை: {STRING} STR_CONFIG_SETTING_TREE_PLACER_NONE :ஒன்றுமில்லை STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :உண்மையான @@ -1249,6 +1268,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :சிறுப STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :பச்சை STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :கரும் பச்சை STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :ஊதா +STR_CONFIG_SETTING_SCROLLMODE_RMB :வலது சுட்டி பொத்தானைக் கொண்டு வரைபடத்தை நகர்த்தவும் +STR_CONFIG_SETTING_SCROLLMODE_LMB :இடது சுட்டி பொத்தானைக் கொண்டு வரைபடத்தை நகர்த்தவும் STR_CONFIG_SETTING_SMOOTH_SCROLLING :பார்படத்தின் இலகுவான பக்கமுருட்டல்: {STRING} STR_CONFIG_SETTING_LIVERIES :நிறுவன livery களைக் காட்டு: {STRING} STR_CONFIG_SETTING_LIVERIES_NONE :ஒன்றுமில்லை @@ -1271,6 +1292,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :அணை STR_CONFIG_SETTING_AUTOSAVE :தானியங்கிபதிவு: {STRING} +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :தானியங்கி விளையாட்டு சேமிப்புகளுக்கு இடையில் இடைவெளியைத் தேர்ந்தெடுக்கவும் STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :{STRING} தேதி வகையினை பதிவுஆட்டங்கள் பெயர்களுக்கு பயன்படுத்தவும் STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :பதிவு ஆட்டங்கள் கோப்புப் பெயர்களில் உள்ள தேதி வகையினை அமை @@ -1379,6 +1401,9 @@ 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_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :என்றுமில்லை STR_CONFIG_SETTING_SMOOTH_ECONOMY :இயல்பான பொருளாதாரத்தினைச் செயல்படுத்தவும் (அதிகமான, சிறிய மாற்றங்கள்): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :மற்ற நிறுவனங்களின் பங்குகளை வாங்குவதை அனுமதிக்கவும்: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :பங்குகள் பரிமாற்றத்திற்கு தேவையான குறைந்தபட்ச நிறுவன வயது: {STRING} @@ -1404,6 +1429,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 கட் STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 கட்டங்கள் STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :ஏதொவொரு STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :நகரங்கள் சாலைகளை கட்ட அனுமதி: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :வளர்ச்சிக்கு சாலைகளை உருவாக்க நகரங்களை அனுமதிக்கவும். நகர அதிகாரிகள் சாலைகளை உருவாக்குவதைத் தடுக்க முடக்கு STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :நகரங்கள் சாலைச் சந்திப்புகளை கட்ட அனுமதி: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :இந்த அமைப்பு நகராட்சிகள் இருப்புப்பாதை சந்திக் கடவுகளைக் கட்ட அனுமதிக்கும் STR_CONFIG_SETTING_NOISE_LEVEL :விமான நிலையங்களுக்கு நகராட்சியால் நிர்ணயிக்கப்பட்ட இரைச்சல் அளவினை அனுமதிக்கவும்: {STRING} @@ -1415,6 +1441,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :அனுமத STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :அனுமதிக்கப்படுகிறது, ஆனால் மாற்றியமைக்கப்பட்ட நகர அமைப்பு STR_CONFIG_SETTING_TOWN_CARGOGENMODE :நகரத்தின் சரக்கு உற்பத்தி: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :இருபடி (அசல்) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :நேரியல் STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :ஆட்டத்தின் போது மரங்களை நடுதல்: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :விளையாட்டின் போது மரங்களின் சீரற்ற தோற்றத்தைக் கட்டுப்படுத்தவும். இது மர வளர்ச்சியை நம்பியுள்ள தொழில்களை பாதிக்கலாம், எடுத்துக்காட்டாக மரம் வெட்டுதல் ஆலைகள் @@ -1440,11 +1467,11 @@ STR_CONFIG_SETTING_TOWN_GROWTH :நகர வ STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :நகர வளர்ச்சி வேகம் STR_CONFIG_SETTING_TOWN_GROWTH_NONE :ஒன்றுமில்லை STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :மெதுவாக -STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :சாதாரணமாக +STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :இயல்பான STR_CONFIG_SETTING_TOWN_GROWTH_FAST :வேகமாக STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :அதிவேகமாக STR_CONFIG_SETTING_LARGER_TOWNS :நகரங்கள் மாநகரங்கள் ஆகும் வாய்ப்பு: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 in {COMMA} +STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 இல் {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :ஒன்றுமில்லை STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :தொடக்க நகர அளவு பெருக்கம்: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :ஆட்டத்தின் தொடக்கத்தில் மாநகரங்களின் அளவு நகரங்களை ஒப்பிடுகையில் @@ -1454,6 +1481,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :சமச்ச STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :சமச்சீரான STR_CONFIG_SETTING_DISTRIBUTION_PAX :பயணிகள் பரிமாற்றம் வகை: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL :அஞ்சல் பரிமாற்றம் வகை: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE :கோரிக்கைகளின் தூரத்தின் விளைவு: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :இதை 0 ஐ விட அதிகமான மதிப்பாக அமைத்தால், சில சரக்குகளின் மூல நிலையம் A க்கும் சாத்தியமான இலக்கு B க்கும் இடையிலான தூரம் A இலிருந்து B க்கு அனுப்பப்படும் சரக்குகளின் அளவை பாதிக்கும். மேலும் தொலைவில் உள்ள B A இலிருந்து குறைவாக உள்ளது சரக்கு அனுப்பப்படும். நீங்கள் அதை அதிகமாக அமைத்தால், குறைந்த சரக்கு தொலைதூர நிலையங்களுக்கு அனுப்பப்படும், மேலும் அதிகமான சரக்குகள் அருகிலுள்ள நிலையங்களுக்கு அனுப்பப்படும். STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :வேக அலகுகள்: {STRING} @@ -1482,13 +1510,14 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :மெட்ர STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :உயரங்கள் அலகுகள்: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :பயனர் இடைமுகத்தில் ஒரு உயரம் காட்டப்படும் போதெல்லாம், தேர்ந்தெடுக்கப்பட்ட அலகுகளில் அதைக் காட்டுங்கள் STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :இம்பீரியல் (அடி) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :மெட்ரிக் (மீ) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (மீ) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :அனைத்துலக முறை அலகு (மீ) STR_CONFIG_SETTING_GRAPHICS :{ORANGE}அசைவூட்டம் STR_CONFIG_SETTING_SOUND :{ORANGE}ஒலிகள் -STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interface +STR_CONFIG_SETTING_INTERFACE :{ORANGE}இடைமுகம் STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE} பொதுவான STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}கட்டுமானம் STR_CONFIG_SETTING_ADVISORS :{ORANGE}செய்திகள் / அறிவுரைஞர்கள் @@ -1499,7 +1528,9 @@ STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}இய STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}வழி மாற்றல் STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}எல்லைகள் STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}பேரழிவுகள் / விபத்துகள் +STR_CONFIG_SETTING_GENWORLD :{ORANGE}உலகம் உருவாக்குதல் STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}சுற்றுச்சூழல் +STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}அதிகாரிகள் STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}நகரங்கள் STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}தொழிற்சாலைகள் STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}சரக்கு பரிமாற்றம் @@ -1756,6 +1787,7 @@ STR_NETWORK_START_SERVER_UNADVERTISED :இல்லை STR_NETWORK_START_SERVER_ADVERTISED :ஆம் STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} விளையாடுபவர்{P "" கள்} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}அதிகபட்ச வீரர்கள்: +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}வாடிக்கையாளர்களின் அதிகபட்ச எண்ணிக்கையைத் தேர்வுசெய்க. எல்லா இடங்களும் நிரப்பப்பட வேண்டியதில்லை STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} நிறுவன{P ம் ங்கள்} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}அதிகபட்ச நிறுவனங்கள்: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}சர்வர்கு குறிப்பிட்ட அளவு நிறுவனங்களை மட்டுமே அனுமதி @@ -1972,6 +2004,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** நீங்கள் கொடுத்தீற்கள் {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}சர்வர் ஆட்டத்தினை முடித்தது STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}சர்வர் மீண்டும் தொடங்குகிறது...{}சற்று பொறுக்கவும்... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} வெளியேற்றப்பட்டார். காரணம்: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}கோப்புகள் பதிவிறக்கம் செய்யப்படுகின்றன @@ -2061,6 +2094,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}செயல்படும் பகுதியினை குறிக்கவும் STR_STATION_BUILD_COVERAGE_OFF :{BLACK}நிறுத்து STR_STATION_BUILD_COVERAGE_ON :{BLACK}இயக்கு +STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}முன்மொழியப்பட்ட தளத்தின் கவரேஜ் பகுதியை முன்னிலைப்படுத்தவும் STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}ஏற்றுக்கொள்பவை: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}விநியோகிப்பவை: {GOLD}{CARGO_LIST} @@ -2154,6 +2188,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}சா STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}ட்ராம்வே கட்டுமானம் செய்யவும்/நீக்கவும் STR_ROAD_NAME_ROAD :சாலை +STR_ROAD_NAME_TRAM :தண்டூர்தி # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}சாலை வாகன பணிமனை திசையமைப்பு @@ -2434,19 +2469,28 @@ STR_FRAMERATE_AVERAGE :{WHITE}சர STR_FRAMERATE_MEMORYUSE :{WHITE}நினைவாற்றல் STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} நுண்ணொடி +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} மில்லி விநாடி(கள்) STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} விநாடி(கள்) ############ Leave those lines in this order!! STR_FRAMERATE_GL_TRAINS :{BLACK} இரயில் நேரம்: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} சாலை வாகனத்தின் பயண நேரம்: +STR_FRAMERATE_GL_SHIPS :{BLACK} கப்பல் பயண நேரம்: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} விமான டிக்குகள்: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} உலக சொடுக்குகள்: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} இணைப்பு வரைபட தாமதம்: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} உலக காட்சிகள்: +STR_FRAMERATE_VIDEO :{BLACK}வீடியோ வெளியீடு: STR_FRAMERATE_SOUND :{BLACK}இசை இயக்கம்: STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI மொத்தம்: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_ECONOMY :சரக்கு கையாளுதல் STR_FRAMETIME_CAPTION_GL_ROADVEHS :சாலை வாகனத்தின் பயண நேரம் +STR_FRAMETIME_CAPTION_DRAWING :கிராபிக்ஸ் ரெண்டரிங் +STR_FRAMETIME_CAPTION_SOUND :ஒலி கலவை STR_FRAMETIME_CAPTION_GAMESCRIPT :விளையாட்டின் ஸ்கிரிப்ட் STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2598,6 +2642,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}இந் # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}Preset-ஐ பதிவுசெய் STR_SAVE_PRESET_TITLE :{BLACK}Preset இற்கு ஒரு பெயரினை இடு +STR_SAVE_PRESET_CANCEL :{BLACK}இரத்து செய் STR_SAVE_PRESET_SAVE :{BLACK}சேமி # NewGRF parameters window @@ -2624,6 +2669,7 @@ STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}அட STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}ஸ்பிரைட்டுயிற்கு செல்லவும் STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}முந்தைய ஸ்பிரைட்டு STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}முன்னிருந்தமாதிரி மாற்று +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}தற்போதைய ஆஃப்செட்களை மீட்டமைக்கவும் STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X ஒதுக்கம்: {NUM}, Y ஒதுக்கம்: {NUM} (சார்பு) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}ஸ்பிரைட்டினைத் தேர்ந்தெடுக்கவும் @@ -2754,12 +2800,14 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :நகராட STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}சிறிய விளம்பர பிரசாரத்தினைத் தொடங்கு, இதனால் பயணிகள் மற்றும் சரக்குகள் உங்களது போக்குவரத்து நிறுவனத்தினைப் பயன்படுத்துவர்.{}செலவு: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}சராசரி விளம்பர பிரசாரத்தினைத் தொடங்கு, இதனால் பயணிகள் மற்றும் சரக்குகள் உங்களது போக்குவரத்து நிறுவனத்தினைப் பயன்படுத்துவர்.{}செலவு: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}பெரிய விளம்பர பிரசாரத்தினைத் தொடங்கு, இதனால் பயணிகள் மற்றும் சரக்குகள் உங்களது போக்குவரத்து நிறுவனத்தினைப் பயன்படுத்துவர்.{}செலவு: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}நகர்ப்புற சாலை நெட்வொர்க்கின் புனரமைப்புக்கு நிதியளிக்கவும். 6 மாதங்கள் வரை சாலை போக்குவரத்துக்கு கணிசமான இடையூறு ஏற்படுகிறது.{}செலவு: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}தங்கள் நிறுவனத்தின் பெருமைக்காக ஓர் சிலையினைக் கட்டவும்.{}செலவு: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} குறிக்கோள்கள் -STR_GOALS_SPECTATOR_CAPTION :{WHITE}பூலோக குறிக்கோள்கள் -STR_GOALS_GLOBAL_TITLE :{BLACK}பூலோக குறிக்கோள்கள்: +STR_GOALS_SPECTATOR_CAPTION :{WHITE}உலகளாவிய குறிக்கோள்கள் +STR_GOALS_SPECTATOR :உலகளாவிய குறிக்கோள்கள் +STR_GOALS_GLOBAL_TITLE :{BLACK}உலகளாவிய குறிக்கோள்கள்: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- ஏதுமில்லை - STR_GOALS_SPECTATOR_NONE :{ORANGE}- இதற்கு அமையாது - @@ -2956,6 +3004,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}வி STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}புதிய முகம் STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}மேலாளருக்கு புதிய முகத்தினைத் தேர்ந்தெடு STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}நிறக் கோட்பாடு +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}நிறுவன வாகனத்தின் நிறத்தினை மாற்று STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}நிறுவனத்தின் பெயர் STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}நிறுவனத்தின் பெயரை மாற்று STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}மேலாளரின் பெயர் @@ -2985,6 +3034,8 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}தொ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- ஒன்றுமில்லை - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}ஏற்றுக்கொள்ளப்படும் சரக்குகள்: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}உற்பத்தி செய்யப்பட்ட சரக்குகள்: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :அனைத்து சரக்கு வகைகள் # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3057,7 +3108,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :அனைத் STR_GROUP_RENAME_CAPTION :{BLACK}குழுவின் பெயரினை மாற்றவும் +STR_GROUP_PROFIT_THIS_YEAR :இந்த ஆண்டு லாபம்: +STR_GROUP_PROFIT_LAST_YEAR :கடந்த ஆண்டு லாபம்: STR_GROUP_OCCUPANCY :தற்போதைய பயன்பாடு: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :புது இரயில் வாகனங்கள் @@ -3094,6 +3148,7 @@ STR_PURCHASE_INFO_ALL_TYPES :அனைத் STR_PURCHASE_INFO_ALL_BUT :அனைத்தும் {CARGO_LIST} தவிர STR_PURCHASE_INFO_MAX_TE :{BLACK}அதி. இழு திறன்: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}தூரம்: {GOLD}{COMMA} கட்டங்கள் +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}விமான வகை: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}இரயில் வாகனங்கள் பட்டியல் - மேலும் விவரங்களுக்கு வாகனத்தை சொடுக்கவும் STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}சாலை வாகனங்கள் பட்டியல் - மேலும் விவரங்களுக்கு வாகனத்தை சொடுக்கவும் @@ -3130,6 +3185,7 @@ STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}மற STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}காட்சி STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}காட்சி +STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}இரயில் வகையினை காட்டு/மறை STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}கப்பல் வகையினை காட்டு/மறை STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}இரயில் வாகன வகையின் பெயரினை மாற்றவும் @@ -3219,6 +3275,7 @@ STR_ENGINE_PREVIEW_SHIP :கப்பல STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}செலவு: {CURRENCY_LONG} எடை: {WEIGHT_SHORT}{}வேகம்: {VELOCITY} திறன்: {POWER}{}ஓட்டுவதற்கான செலவு: {CURRENCY_LONG}/வரு{}கொள்ளளவு: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}செலவு: {CURRENCY_LONG} எடை: {WEIGHT_SHORT}{}வேகம்: {VELOCITY} திறன்: {POWER} அதி. T.E.: {6:FORCE}{}ஓட்டுவதற்கான செலவு: {4:CURRENCY_LONG}/வரு{}கொள்ளளவு: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}செலவு: {CURRENCY_LONG} அதி. வேகம்: {VELOCITY}{}கொள்ளளவு: {CARGO_LONG}{}ஓட்டும் செலவு: {CURRENCY_LONG}/ஆண்டிற்கு +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}செலவு: {CURRENCY_LONG} அதி. வேகம்: {VELOCITY}{}விமான வகை: {STRING}{}கொள்ளளவு: {CARGO_LONG}, {CARGO_LONG}{}ஓட்டும் செலவு: {CURRENCY_LONG}/ஆண்டிற்கு STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}செலவு: {CURRENCY_LONG} அதி. வேகம்: {VELOCITY}{}விமான வகை: {STRING}{}கொள்ளளவு: {CARGO_LONG}{}ஓட்டும் செலவு: {CURRENCY_LONG}/ஆண்டிற்கு STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}செலவு: {CURRENCY_LONG} அதி. வேகம்: {VELOCITY}{}விமான வகை: {STRING} வீச்சு எல்லை: {COMMA} கட்டங்கள்{}கொள்ளளவு: {CARGO_LONG}, {CARGO_LONG}{}ஓட்டும் செலவு: {CURRENCY_LONG}/ஆண்டிற்கு @@ -3334,6 +3391,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} வர STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} வருடம்{P "" கள்} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}அதி. வேகம்: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}அதி. வேகம்: {LTBLUE}{VELOCITY} {BLACK}விமான வகை: {LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}அதி. வேகம்: {LTBLUE}{VELOCITY} {BLACK}விமான வகை: {LTBLUE}{STRING} {BLACK}வீச்சு எல்லை: {LTBLUE}{COMMA} கட்டங்கள் STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}எடை: {LTBLUE}{WEIGHT_SHORT} {BLACK}திறன்: {LTBLUE}{POWER}{BLACK} அதி. வேகம்: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}எடை: {LTBLUE}{WEIGHT_SHORT} {BLACK}திறன்: {LTBLUE}{POWER}{BLACK} அதி. வேகம்: {LTBLUE}{VELOCITY} {BLACK}அதி. T.E.: {LTBLUE}{FORCE} @@ -3570,6 +3628,7 @@ STR_TIMETABLE_TRAVEL_FOR :{STRING} கா STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING} காலத்திற்கு பயணி, அதிகபட்ச வேகம் {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :பயணம் ({STRING}, நேர அட்டவணை இடப்படாதது) STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} வரை இரு, நேர அட்டவணை இடப்படாதது) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(பயணி {STRING}, நேர அட்டவணை இடப்படாதது) STR_TIMETABLE_STAY_FOR :மற்றும் {STRING} இற்கு நிற்கவும் STR_TIMETABLE_AND_TRAVEL_FOR :மற்றும் {STRING} இற்கு பயணிக்கவும் STR_TIMETABLE_DAYS :{COMMA}{NBSP}நாள்{P "" "நாட்கள்"} @@ -3680,6 +3739,7 @@ STR_AI_LIST_CANCEL :{BLACK}இர STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}வரிவடிவத்தினை மாற்றாதே STR_SCREENSHOT_SCREENSHOT :{BLACK}சாதாரண திரைப்பிடிப்பு +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}உயர்படத்தின் திரைப்பிடிப்பு # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} குணாதிசயங்கள் @@ -3855,6 +3915,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... ப STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... பனி-கோடின் மேலே மட்டுமே கட்ட முடியும் STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... பனி-கோடின் கீழே மட்டுமே கட்ட முடியும் +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}'{STRING}' தொழிற்சாலைகளை நிறுவ தகுந்த இடங்கள் கிடைக்கவில்லை # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}இங்கே இரயில் நிலையம் கட்ட முடியாது... @@ -3948,6 +4009,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}தக STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}முதலில் இரயில்வே தடத்தினை எடுக்க வேண்டும் STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}சாலை ஒருவழிப்பாதை அல்லது மறிக்கப்பட்டுள்ளது STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}இந்த வகையிலான இரயில்களுக்கு இருப்புப்பாதை சந்திக் கடவுகள் கிடையாது +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}இந்த சாலை வகைக்கு நிலை குறுக்குவெட்டுகள் அனுமதிக்கப்படவில்லை STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}இங்கே சிக்னல்களை நிறுவ இயலாது... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}இங்கே இரயில்வே தடங்களை பதிய முடியாது... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}இங்கிருந்து இரயில்வே தடங்களை அகற்ற முடியாது... @@ -3967,6 +4029,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}இங STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}இங்கிருந்து ட்ராம்வேயினை நீக்க முடியாது... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...சாலை இல்லை STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...ட்ராம் வழி இல்லை +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}பொருத்தமான சாலை இல்லை STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... இணக்கமற்ற தண்டூர்தி # Waterway construction errors From 59ae40af53783ee5be51e1c3b55e2b476ab9f457 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 26 Oct 2020 17:52:01 +0000 Subject: [PATCH 287/601] Update: Translations from eints vietnamese: 24 changes by KhoiCanDev --- src/lang/vietnamese.txt | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1ce6b766f5..45b00a0361 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -864,6 +864,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Mở cửa sổ gom nhóm và hiện nhóm của phương tiện 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 @@ -934,6 +935,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso México (M STR_GAME_OPTIONS_CURRENCY_NTD :Tân Đài tệ (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Nhân dân tệ TQ (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Đô-la Hồng Kông (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rupee Ấn Độ (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Xe cộ @@ -948,7 +950,7 @@ STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Lựa ch STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Tiếng Anh (Nguyên bản) STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Pháp STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Đức -STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Tiếng Anh (Bổ Sung) +STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Tiếng Anh (Bổ sung) STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Mỹ-Latin STR_GAME_OPTIONS_TOWN_NAME_SILLY :Silly STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Thụy Điển @@ -1275,7 +1277,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Khi mở, thì STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Màu bắt đầu của công ty: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Thay đổi màu sắc mặc định khi bắt đầu công ty -STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Sân bay không bao giờ thành đồ cổ: {STRING} +STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Sân bay không bao giờ hết hạn sử dụng: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bật tùy chọn này cho phép tất cả các loại sân bay không bị lỗi thời STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Cảnh báo nếu phương tiện bị thất lạc: {STRING} @@ -1287,7 +1289,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :có, nhưng tr STR_CONFIG_SETTING_ORDER_REVIEW_ON :tất cả phương tiện STR_CONFIG_SETTING_WARN_INCOME_LESS :Cảnh báo nếu thu nhập của phương tiện bị âm: {STRING} STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Nếu bật, sẽ có một thông báo nếu một phương tiện nào đó không có lãi trong một năm -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Phương tiện không bao giờ thành đồ cổ: {STRING} +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Phương tiện không bao giờ hết hạn sử dụng: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Nếu bật, tất cả các model phương tiện sẽ không bị lỗi thời STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Tự thay mới phương tiện nếu hết hạn sử dụng: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Nếu bật, phương tiện gần hết hạn sẽ được tự động thay mới và điều kiện thay mới được thỏa mãn @@ -1308,6 +1310,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Hiện dân s STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Hiển thị dân số của đô thị trên nhãn của nó trên bản đồ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Độ đậm của đường kẻ trong đồ thị: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Độ đậm của đường vẽ trên đồ thị. Một đường mảnh sẽ chính xác hơn, trong khi đó đường đậm sẽ dễ nhìn hơn và màu sắc dễ phân biệt hơn +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Hiển thị tên NewGRF trong cửa sổ xây phương tiện: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Thêm một dòng vào cửa sổ xây phương tiện, hiển thị phương tiện đến từ NewGRF nào. STR_CONFIG_SETTING_LANDSCAPE :Nền đất: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Nền đất là định nghĩa cơ bản của các màn chơi với các kiểu hàng hóa và yêu cầu cho sự phát triển đô thị khác nhau. NewGRF và kịch bản chơi cho phép các điều chỉnh nhỏ hơn. @@ -1545,6 +1549,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Đủ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Tin tức có màu xuất hiện vào năm: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Năm mà các báo chí sẽ được in màu. Trước năm này, tất cả chúng là in đen/trắng STR_CONFIG_SETTING_STARTING_YEAR :Năm bắt đầu: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Năm kết thúc để tính điểm: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Năm mà ván chơi sẽ kết thúc và tính điểm. Khi năm đó kết thúc, điểm số của công ty sẽ được lưu lại và hiển thị bảng điểm chơi cao nhất, sau đó người chơi vẫn có thể tiếp tục ván chơi.{} Nếu năm được đặt nhỏ hơn năm bắt đầu, bảng điểm chơi cao nhất sẽ không bao giờ được hiển thị. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Không bao giờ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Nền kinh tế ít biến động: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Nếu bật, sản lượng của nhà máy sẽ thay đổi thường xuyên hơn, và thay đổi với mức độ nhỏ hơn. Thiết lập này sẽ không có tác dụng nếu kiểu nhà máy định nghĩa bởi NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Cho phép mua cổ phần của các công ty khác: {STRING} @@ -2161,6 +2169,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Sai mậ STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server bị đầy STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Bạn bị từ chối ở server này STR_NETWORK_ERROR_KICKED :{WHITE}Bạn bị đá khỏi ván chơi +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Lý do: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Cheat không được phép ở server này STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Bạn vừa gửi lên máy chủ quá nhiều lệnh STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Bạn nhập mật khẩu quá trễ @@ -2220,6 +2229,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} t STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Bạn cho {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server kết thúc phiên STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server khởi động lại...{}Xin chờ... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} đã bị đá khỏi ván chơi. Lý do: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Đang tải nội dung @@ -3394,6 +3404,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} và hơn {NUM}... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Tên các nhà máy - nháy vào tên để xem vị trí nhà máy. Ctrl+Click mở cửa sổ mới để xem +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Chấp nhận hàng hóa: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Hàng hóa cung cấp: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Tất cả hàng hóa +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Không # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4168,6 +4182,13 @@ 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 +STR_SCREENSHOT_CAPTION :{WHITE}Chụp màn hình +STR_SCREENSHOT_SCREENSHOT :{BLACK}Chụp màn hình bình thường +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Chụp màn hình phóng to đầy đủ +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Chụp màn hình phóng to mặc định +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Chụp toàn bản đồ +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Chụp bản đồ địa hình +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Chụp màn hình bản đồ nhỏ # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Các Thông Số From a441973d17ea9ee7d1bb3d34ef8d05832655f99b Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 27 Oct 2020 17:51:56 +0000 Subject: [PATCH 288/601] Update: Translations from eints romanian: 1 change by ALEX11BR --- src/lang/romanian.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index b9f34916fc..f4372d3311 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2566,6 +2566,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Încărcături acceptate: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tip șină: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tip de tramvai: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limită viteză pe calea ferată: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Viteza limită a drumului: {LTBLUE}{VELOCITY} From 4797e095d9dcd893a27b7d9aea7b97c4a0407d29 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 29 Oct 2020 17:51:43 +0000 Subject: [PATCH 289/601] Update: Translations from eints hungarian: 1 change by andrejmoltok portuguese (brazilian): 64 changes by JuniuSeifero --- src/lang/brazilian_portuguese.txt | 64 +++++++++++++++++++++++++++++++ src/lang/hungarian.txt | 1 + 2 files changed, 65 insertions(+) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 49a1b301c9..27ea2d1a1e 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -189,6 +189,7 @@ STR_COLOUR_BROWN :Marrom STR_COLOUR_GREY :Cinza STR_COLOUR_WHITE :Branco STR_COLOUR_RANDOM :Aleatório +STR_COLOUR_DEFAULT :Padrão # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -360,6 +361,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Geraçã STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Geração de cidades STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Geração de indústria STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Contrução de rodovias +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construção de trilho de bonde STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Shift alterna construção/exibição de preço estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Shift alterna construção/preço estimado @@ -998,7 +1000,9 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamanho da fonte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Selecione o tamanho da fonte da interface a ser usado +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Tamanho duplo STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Tamanho quádruplo @@ -1184,6 +1188,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisag STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite paisagismo sob edifícios e vias sem precisar removê-las STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista das áreas de abrangência: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Exibe áreas de abrangência de para diferentes tipos de estações e aeroportos +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de companhias podem servir indústrias com estações neutras conectadas: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando habilitado, os setores com estações conectadas (como plataformas de petróleo) também podem ser atendidos por estações de propriedade da empresa construídas nas proximidades. Quando desativados, esses setores só podem ser atendidos por suas estações anexas. Qualquer estação próxima da empresa não será capaz de atendê-los, nem a estação anexa servirá qualquer outra coisa que não seja a indústria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais rodovias, pontes, etc. das cidades: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover infraestrutura e edifícios de cidades @@ -1270,6 +1275,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Impossí STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de Infraestrutura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando ativado, infraestrutura gera custos de manutenção. O custo aumenta proporcionalmente à malha de transportes, afetando companhias maiores mais do que as menores +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial para a empresa: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolha a cor inicial para a empresa STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca saem de linha: {STRING} @@ -1305,6 +1311,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Exibir populaç STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Exibe a população das cidades nos nomes, no mapa STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das linhas nos gráficos: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicione uma linha à janela de construção do veículo, mostrando de qual NewGRF o veículo selecionado vem. STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING} @@ -1482,7 +1489,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA em STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite jogadores controlados pelo computador participar em jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos de computação que um script pode tomar em um turno +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Memória máxima usada por script: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quanta memória um único script pode consumir antes de ser encerrado à força. Isso pode precisar ser aumentado para mapas grandes. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Os intervalos de serviço são em percentagem: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Define se a manutenção de veículos é ativada pelo tempo passado desde a última manutenção ou quando a confiabilidade alcança um certo valor @@ -1541,12 +1550,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completa STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias coloridas aparecem em: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano a partir do qual os jornais são impressos em cor. Antes disso, serão em preto-e-branco STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final deste ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{} Se isso for antes do ano inicial, a tela de pontuação máxima nunca será exibida. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_SMOOTH_ECONOMY :Ativar economia regular (alterações menores): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quando ativado, a produção de indústrias muda com mais frequência, e mais sutilmente STR_CONFIG_SETTING_ALLOW_SHARES :Permite comprar ações de outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se ativado, permite a compra e venda de ações de companhias. Ações de outras empresas poderão serem compradas após um período de tempo após a fundação da empresa +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da companhia para trocar ações: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Defina a idade mínima de uma companhia para as outras estarem aptas a comprar e vender ações entre elas. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem paga em cada etapa em sistemas de baldeação: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem do lucro dado a cada estação de baldeação em sistemas de mais de um transporte, dando mais controle de lucro STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ao arrastar, colocar sinais a cada: {STRING} @@ -1587,8 +1600,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Se ativado, per STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, layout de cidades customizável +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Geração de carga da cidade: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas cidades, em relação à população geral da cidade.{} Crescimento quadrático: uma cidade com o dobro do tamanho gera quatro vezes mais passageiros.{} Crescimento linear: uma cidade com o dobro do tamanho gera o dobro da quantidade de passageiros. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Posicionamento de árvores: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o nascimento aleatório de árvores durante o jogo. Isso pode afetar indústrias que dependem do crescimento de árvores, como serrarias @@ -2155,6 +2170,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Senha in STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheio STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Você foi banido deste servidor STR_NETWORK_ERROR_KICKED :{WHITE}Você foi expulso do jogo +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Motivo: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Trapaceiros não são permitidos neste servidor STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Você enviou comandos demais ao servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Você demorou demais para digitar a senha @@ -2214,6 +2230,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} de STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Você deu a {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor fechou a sessão STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi kickado. Motivo: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Baixando conteúdo @@ -2434,6 +2451,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/atualizar o tipo de estrada. Shift altera construção/exibição de estimativa de custo STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Melhorar o tipo de bonde. Shift troca construção/amostra custo estimado +STR_ROAD_NAME_ROAD :Estrada STR_ROAD_NAME_TRAM :Bonde # Road depot construction window @@ -2620,8 +2638,10 @@ STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga ac STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de ferrovia: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipo de estrada: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipo de bonde: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Velocidade limite do trilho: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da rua: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Limite de vel. do Trem Elétrico: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rochas @@ -2739,9 +2759,13 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} quadros/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} quadros/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} quadros/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}Loop total do jogo: STR_FRAMERATE_GL_ECONOMY :{WHITE} Manuseio de carga: STR_FRAMERATE_GL_TRAINS :{WHITE} Tiques de trem: STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tiques de automóveis: @@ -2753,7 +2777,9 @@ STR_FRAMERATE_DRAWING :{WHITE}Renderiz STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Visualizações do mundo: STR_FRAMERATE_VIDEO :{WHITE}Saída de vídeo: STR_FRAMERATE_SOUND :{WHITE}Mixagem de áudio: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: STR_FRAMERATE_GAMESCRIPT :{BLACK} Script do jogo: +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo @@ -2763,10 +2789,14 @@ STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tiques de autom STR_FRAMETIME_CAPTION_GL_SHIPS :Tiques de embarcação STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tiques de aeronave: STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tiques do mundo +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso no gráfico de link STR_FRAMETIME_CAPTION_DRAWING :Renderizações de gráficos STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização da janela principal STR_FRAMETIME_CAPTION_VIDEO :Saída de vídeo STR_FRAMETIME_CAPTION_SOUND :Mixagem de áudio +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total de scripts GS/AI +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de jogo +STR_FRAMETIME_CAPTION_AI :IA {NUM} {STRING} ############ End of leave-in-this-order @@ -2792,6 +2822,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir ficheiro STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem certeza de que deseja substituir o arquivo existente? @@ -2912,7 +2943,11 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. ve STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}SomaMD5 (verf. de segurança): {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legado (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legado (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nenhum STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Sem informação disponível STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Arquivo correspondente não encontrado @@ -2993,6 +3028,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Leitura após o STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF requeridos indisponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de layout de sprite inválido/desconhecido (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Muitos elementos na lista de valores da propriedade (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Retorno de produção da indústria inválido (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! @@ -3091,6 +3128,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Cidade # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Prefeitura de {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar zona dentro dos limites da prefeitura STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Avaliações das empresas STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: @@ -3168,6 +3207,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique n # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Livro de Histórias de {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de Histórias Global +STR_STORY_BOOK_SPECTATOR :Livro de Histórias Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pág. {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Vai para uma página específicao selecionar da lista @@ -3347,6 +3387,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Partes de ferrovias: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Partes de rodovias: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Peças do bonde: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Partes d'água: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações: @@ -3357,9 +3398,15 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústrias STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nenhum - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportado){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} e {NUM} mais... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes das indústrias - clique no nome para centralizar a visçao principal na indústria. Ctrl+Clique abre uma nova janela na localização da indústria STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Carga produzida: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos os tipos de carga STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nenhum @@ -3371,6 +3418,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3424,6 +3474,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Automóveis sem STR_GROUP_DEFAULT_SHIPS :Embarcações sem grupo STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem grupo +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar seus veículos. Clique e arraste para organizar a hierarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo @@ -3462,6 +3513,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Preço: {GOLD}{CURRENCY_LONG}{BLACK} Peso: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo de Troca: {GOLD}{CURRENCY_LONG}{BLACK}) Peso: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocidade: {GOLD}{VELOCITY}{BLACK} Potência: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocidade em oceanos: {GOLD}{VELOCITY} @@ -3472,8 +3524,10 @@ STR_PURCHASE_INFO_REFITTABLE :(adaptável) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Desenvolvida: {GOLD}{NUM}{BLACK} Vida: {GOLD}{COMMA} ano{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Confiabilidade Máx.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Preço: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo para Reequipar: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Preço: {GOLD}{CURRENCY_LONG}{BLACK} Velocidade: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo de Troca: {GOLD}{CURRENCY_LONG}{BLACK}) Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacidade: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões energizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Adaptável para: {GOLD}{STRING} @@ -3494,6 +3548,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Embarcação STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e reequipar veículo STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Trocar Veículos STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Repor Navio STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e reequipar aeronaves @@ -3504,6 +3559,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a aeronave selecionada. Shift+Clique mostra o preço estimado sem a compra STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compre e troque o trem destacado. Shift+Click mostra os custos estimados sem comprar +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compre e troque o veículo terrestre destacado. Shift+Clique mostra o custo estimado sem comprá-lo STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :Compre e reponha o navio em destaque. Shift+Clique mostra o custo estimado sem comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e repor a aeronave destacada. Shift+Clique mostra o custo estimado sem comprar @@ -3622,6 +3678,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotiva mono STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva maglev STR_ENGINE_PREVIEW_ROAD_VEHICLE :automóvel +STR_ENGINE_PREVIEW_TRAM_VEHICLE :bonde STR_ENGINE_PREVIEW_AIRCRAFT :aeronave STR_ENGINE_PREVIEW_SHIP :embarcação @@ -3663,8 +3720,10 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Troca en STR_REPLACE_ENGINES :Motores STR_REPLACE_WAGONS :Vagões STR_REPLACE_ALL_RAILTYPE :Todos os veículos ferroviários +STR_REPLACE_ALL_ROADTYPE :Todos os automóveis STR_REPLACE_HELP_RAILTYPE :{BLACK}Escolha o tipo de ferrovia para o qual deseja efetuar a substituição dos motores +STR_REPLACE_HELP_ROADTYPE :{BLACK}Escolha qual tipo de estrada você quer trocar os motores STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Exibe o tipo de motor que substituirá o que está selecionado à esquerda, se algum STR_REPLACE_RAIL_VEHICLES :Trens STR_REPLACE_ELRAIL_VEHICLES :Locomotivas Elétricas @@ -3672,6 +3731,7 @@ STR_REPLACE_MONORAIL_VEHICLES :Monotrilho STR_REPLACE_MAGLEV_VEHICLES :Maglevs STR_REPLACE_ROAD_VEHICLES :Veículos terrestres +STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Faz autosubstituição manter o tamanho do trem removendo vagões (começando pela frente), se ao substituir a locomotiva o trem ficar maior @@ -4126,7 +4186,9 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mud STR_SCREENSHOT_CAPTION :{WHITE}Tirar uma captura de tela STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de tela normal STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Zoom máximo na captura de tela +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zoom padrão na captura de tela STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa todo +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de tela do mapa topográfico STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa # AI Parameters @@ -4422,6 +4484,7 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Impossí STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...não há rodovias STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...não há linha de bonde STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui ... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de trilho aqui... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Sem estrada adequada STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nenhum bonde adequado STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... bonde incompatível @@ -4477,6 +4540,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossí STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Impossível remover grupo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Impossível renomear grupo... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Impossível definir grupo ascendente... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... loops na hierarquia do grupo não é permitido STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Impossível remover todos os veículos desse grupo... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossível adicionar veículo a esse grupo STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossível adicionar veículos compartilhados a esse grupo... diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index ff9819d203..c3ea4dec4d 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -999,6 +999,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexikói Peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Új Tajvani Dollár (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kínai Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongi Dollár (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indiai Rúpia (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Közúti járművek From 421304c85008fc5775eef8fb23dbabcf5033e8f1 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 30 Oct 2020 17:51:52 +0000 Subject: [PATCH 290/601] Update: Translations from eints afrikaans: 3 changes by Gwenney --- src/lang/afrikaans.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index c478322ea0..3bb4a680b1 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -133,7 +133,7 @@ STR_ABBREV_PASSENGERS :{TINY_FONT}PS STR_ABBREV_COAL :{TINY_FONT}SK STR_ABBREV_MAIL :{TINY_FONT}PS STR_ABBREV_OIL :{TINY_FONT}OL -STR_ABBREV_LIVESTOCK :{TINY_FONT}LH +STR_ABBREV_LIVESTOCK :{TINY_FONT}VE STR_ABBREV_GOODS :{TINY_FONT}GD STR_ABBREV_GRAIN :{TINY_FONT}GR STR_ABBREV_WOOD :{TINY_FONT}HT @@ -474,7 +474,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vee alle boodsk ############ range ends here ############ range for about menu starts -STR_ABOUT_MENU_LAND_BLOCK_INFO :Gebied informasie +STR_ABOUT_MENU_LAND_BLOCK_INFO :Terreininligting STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Skakel terminaal STR_ABOUT_MENU_AI_DEBUG :AI/Spel skript ontfout @@ -2605,7 +2605,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Kies die STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Kies die nywerheid om te vertoon # Land area window -STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Land gebied informasie +STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Terreininligting STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Koste om skoon te maak: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Koste om skoon te maak: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Wins waneer skoon maak: {LTBLUE}{CURRENCY_LONG} From cf29d23ba4ca2b9e6b638720e186bf33e11d5a0f Mon Sep 17 00:00:00 2001 From: Lars Wendler Date: Fri, 30 Oct 2020 18:45:20 +0100 Subject: [PATCH 291/601] Fix: build with icu-68.1 icu-68.1 removed public macro definitions for TRUE and FALSE Signed-off-by: Lars Wendler --- src/gfx_layout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 584a712736..ebd1afaa80 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -116,7 +116,7 @@ void Font::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const le_bool Font::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const { - return FALSE; + return false; } /** From 9bd2e5bf49a0a7bb142568c25475ffd3c0494d04 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 6 Nov 2020 17:51:41 +0000 Subject: [PATCH 292/601] Update: Translations from eints slovak: 86 changes by FuryPapaya polish: 57 changes by yazalo --- src/lang/polish.txt | 114 ++++++++++++++--------------- src/lang/slovak.txt | 172 ++++++++++++++++++++++---------------------- 2 files changed, 143 insertions(+), 143 deletions(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f4f92b5150..3ad4033446 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1039,7 +1039,7 @@ STR_MUSIC_PROGRAM :{TINY_FONT}{BLA STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Przejdź do następnej ścieżki STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Przejdź do następnej ścieżki STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Zatrzymaj muzykę -STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Odgrywaj muzykę +STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Odtwarzaj muzykę STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Przesuń suwaki żeby ustawić głośność dźwięków i muzyki STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Wybierz program 'Wszystko' STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Wybierz program 'Stary styl' @@ -1059,7 +1059,7 @@ STR_PLAYLIST_CLEAR :{TINY_FONT}{BLA STR_PLAYLIST_CHANGE_SET :{BLACK}Zmień zestaw STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Wyczyść obecny program (tylko Wlasny1 lub Wlasny2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Zmień wybór muzyki na następny zainstalowany zestaw -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik na ścieżce aby dodać do obecnego programu (Wlasny1 i Wlasny2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknij na ścieżce aby dodać do obecnego programu (Wlasny1 lub Wlasny2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknij na ścieżce muzycznej aby usunąć ją z wybranego programu (Wlasny1 lub Wlasny2) # Highscore window @@ -1092,15 +1092,15 @@ STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Pokaż z STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Pokaż pojazdy na mapie STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Pokaż przedsiębiorstwa na mapie STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Pokaż przepływ towarów na mapie -STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Pokaż drogi na mapie +STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Pokaż infrastrukturę na mapie STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Pokaż roślinność na mapie STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Pokaż teren mający właściciela -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik na typie przedsiębiorstwa żeby przełączyć jego wyświetlanie. Ctrl+klik wyłącza wszystkie typy prócz wybranego. Ponowne Ctrl+klik włącza wszystkie typy przedsiębiorstw -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik na firmie żeby wyświetlić jej posiadłości. Ctrl+klik wyłącza wszystkie firmy prócz wybranej. Ponowne Ctrl+klik włącza wszystkie firmy -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Kliknij towar by przełączać wyświetlanie jego własności. Ctrl+klik wyłącza wszystkie towary oprócz zaznaczonego. Ponowny Ctrl+klik na nim włącza wszystkie towary +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik na typie przedsiębiorstwa przełącza jego wyświetlanie. Ctrl+klik wyłącza wszystkie typy prócz wybranego. Ponowne Ctrl+klik włącza wszystkie typy przedsiębiorstw +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik na firmie wyświetla jej własność. Ctrl+klik wyłącza wszystkie firmy prócz wybranej. Ponowne Ctrl+klik włącza wszystkie firmy +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klik na towar przełącza jego wyświetlanie jego przepływu. Ctrl+klik wyłącza wszystkie towary oprócz zaznaczonego. Ponowny Ctrl+klik włącza wszystkie towary STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Drogi -STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Koleje +STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Kolej STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Stacje/Lotniska/Porty STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES :{TINY_FONT}{BLACK}Budynki/Przedsiębiorstwa STR_SMALLMAP_LEGENDA_VEHICLES :{TINY_FONT}{BLACK}Pojazdy @@ -1141,8 +1141,8 @@ STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Pokaż w STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Nie pokazuj przedsiębiorstw na mapie STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Pokaż wszystkie przedsiębiorstwa na mapie STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Przełącz wyświetlanie mapy wysokości -STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nie wyświetlaj posiadłości firmy na mapie -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Wyświetl wszystkie posiadłości firmy na mapie +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nie wyświetlaj własności firm na mapie +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Wyświetl własności wszystkich firm na mapie STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Nie wyświetlaj towarów na mapie STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Wyświetl wszystkie towary na mapie @@ -1213,7 +1213,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Odkryte nowe rezerwy ropy w {INDUSTRY}!{} Podwojenie produkcji! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Polepszone metody rolne w {INDUSTRY} spowodują podwojenie produkcji! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produkcja {STRING.d} w {INDUSTRY} wzrasta o {COMMA}%! -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}produkcja w {INDUSTRY} maleje o 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Produkcja w {INDUSTRY} maleje o 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Plaga insektów w {INDUSTRY}!{}Produkcja maleje o 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Produkcja {STRING.d} w {INDUSTRY} maleje o {COMMA}%! @@ -1235,7 +1235,7 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} nie potrafi znaleźć trasy, aby kontynuować STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} się zgubił STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}Dochód {VEHICLE} w zeszłym roku to {CURRENCY_LONG} -STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} nie może dotrzeć do kolejnego punktu docelowego, ponieważ jest on poza zasięgiem +STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} nie może dotrzeć do kolejnego punktu docelowego, ponieważ punkt ten leży poza jego zasięgiem STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Zaplanowane przeładowanie zatrzymane {VEHICLE} STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Autoodnowa zawiodła przy {VEHICLE}{}{STRING} @@ -1332,7 +1332,7 @@ STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Francuskie STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Niemieckie STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Angielskie (Rozszerzone) STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Południowoamerykańskie -STR_GAME_OPTIONS_TOWN_NAME_SILLY :Śmieszne +STR_GAME_OPTIONS_TOWN_NAME_SILLY :Śmieszne (Angielskie) STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Szwedzkie STR_GAME_OPTIONS_TOWN_NAME_DUTCH :Holenderskie STR_GAME_OPTIONS_TOWN_NAME_FINNISH :Fińskie @@ -1484,7 +1484,7 @@ STR_CITY_APPROVAL_PERMISSIVE :Przyjazne STR_CITY_APPROVAL_TOLERANT :Tolerancyjne STR_CITY_APPROVAL_HOSTILE :Wrogie -STR_WARNING_NO_SUITABLE_AI :{WHITE}Brak pasujących SI...{}Możesz pobrać wszystkie SI przez system "Zawartości online" +STR_WARNING_NO_SUITABLE_AI :{WHITE}Brak pasujących SI...{}Możesz pobrać wszystkie SI przez system "Dodatki online" # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Ustawienia @@ -1577,9 +1577,9 @@ STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} p{P ole STR_CONFIG_SETTING_SMOKE_AMOUNT :Ilość dymu / iskier lokomotywy: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Ustaw jak dużo dymu lub iskier jest emitowanych przez pojazdy STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Model przyspieszania pociągu: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Wybierz model fizyki dla przyspieszania pociągów. Oryginalny model daje takie same mandaty na stokach dla wszystkich pojazdów. Realistyczny model daje mandaty na stokach i zakrętach biorąc pod uwagę różne właściwości, takie jak długość i siłę pociągową +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Wybierz model fizyki przyspieszania pociągów. Przy włączonym modelu oryginalnym, wszystkie pociągi jednakowo zwalniają na stokach. Realistyczny model sprawia, że pociągi zwalniają na stokach i zakrętach, biorąc pod uwagę różne właściwości, takie jak długość i siłę pociągową STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Model przyspieszania samochodów: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Wybierz model fizyki dla przyspieszania pojazdów drogowych. Oryginalny model daje takie same mandaty na stokach dla wszystkich pojazdów. Realistyczny model daje mandaty na stokach biorąc pod uwagę właściwości silnika, np. 'siłę pociągową' +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Wybierz model fizyki przyspieszania pojazdów drogowych. Przy włączonym modelu oryginalnym, wszystkie pojazdy jednakowo zwalniają na stokach. Realistyczny model sprawia, że pojazdy zwalniają, biorąc pod uwagę różne parametry silnika, siła pociągowa STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Nachylenie stoków dla pociągów: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Pochylenie pola stoku dla pociągów. Wyższa wartość utrudnia podjazd pod górę STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% @@ -1605,7 +1605,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Poszukiwania STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Płaska przestrzeń wokół przedsiębiorstw: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Ilość płaskiej przestrzeni wokół zakładu. To zapewnia puste miejsce dostępne przy zakładach do budowy torów itp. STR_CONFIG_SETTING_MULTIPINDTOWN :Pozwól na wiele podobnych przedsiębiorstw w mieście: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalnie każde miasto nie chce mieć więcej niż jedno przedsiębiorstwo jednego typu. Ta opcja pozwala na kilka takich samych przedsiębiorstw w jednym mieście +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalnie żadne miasto nie chce mieć więcej niż jednego przedsiębiorstwa danego typu. Ta opcja pozwala na funkcjonowanie kilku takich samych przedsiębiorstw przy jednym mieście STR_CONFIG_SETTING_SIGNALSIDE :Pokaż semafory: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Wybierz po której stronie torów stawiać semafory STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Po lewej @@ -1615,8 +1615,8 @@ STR_CONFIG_SETTING_SHOWFINANCES :Pokazuj okno fi STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Jeśli włączone, to okienko finansowe pokazuje się na zakończenie każdego roku, by ułatwić śledzenie sytuacji finansowej firmy STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nowe polecenia są domyślnie 'bez zatrzymywania się': {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalnie pojazd zatrzyma się na każdej stacji, przez którą przejeżdża. Po włączeniu tej opcji, pojazd przejedzie do swojego celu bez zatrzymywania się. Zwróć uwagę na to, że to ustawienie ma wpływ tylko na nowe polecenia. Pojedyncze polecenia mogą być ustalane bez względu na wartość tej opcji -STR_CONFIG_SETTING_STOP_LOCATION :Rozkazy nowego pociągu kończą się domyślnie na {STRING} peronu -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Miejsce, w którym pociąg domyślnie zatrzyma się na peronie. 'Bliższy koniec' oznacza blisko kierunku przyjazdu, 'środek' oznacza środkową część peronu, a 'daleki koniec' oznacza daleko od kierunku przyjazdu. Zapamiętaj, że to ustawienie określa tylko domyślną wartość dla nowych rozkazów. Wszystkie rozkazy mogą być zmienione, bez względu na wartość ustawienia +STR_CONFIG_SETTING_STOP_LOCATION :Nowe rozkazy pociągu kończą się domyślnie na {STRING} peronu +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Miejsce, w którym pociąg domyślnie zatrzyma się na peronie. 'Początek' oznacza blisko kierunku przyjazdu, 'środek' oznacza środkową część peronu, a 'koniec' oznacza daleko od kierunku przyjazdu. Zapamiętaj, że to ustawienie określa tylko domyślną wartość dla nowych poleceń. Wszystkie rozkazy mogą być zmienione, bez względu na wartość ustawienia STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :początku STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :środku STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :końcu @@ -1704,7 +1704,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Określa ukszta STR_CONFIG_SETTING_INDUSTRY_DENSITY :Liczba przedsiębiorstw: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Określa liczbę przedsiębiorstw na początku i w trakcie gry STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksymalna odległość od krawędzi dla rafinerii: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinerie są budowane tylko w pobliżu krawędzi map, to znaczy na wybrzeżach dla map wyspiarskichOgraniczenie jak daleko od krawędzi mapy mogą być budowane rafinerie i platformy wiertnicze. Na mapach wyspiarskich zapewnia to, że znajdą się blisko wybrzeża. Na mapach większych niż 256 pól, wartość ta jest skalowana w górę. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinerie są budowane tylko w pobliżu krawędzi map, to znaczy na wybrzeżach dla map wyspiarskich. To ustawienie pozwala ograniczyć jak daleko od krawędzi mapy mogą być budowane rafinerie i platformy wiertnicze. Na mapach większych niż 256 pól, wartość ta jest skalowana w górę. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Wysokość granicy wiecznych śniegów: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Wysokość linii śniegu w klimacie arktycznym. Poziom pokrywy śnieżnej wpływa na rozmieszczenie przedsiębiorstw i na warunki rozwoju miast STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Gładkość terenu: {STRING} @@ -1804,7 +1804,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Wlącz obsług STR_CONFIG_SETTING_LOADING_INDICATORS :Pokazuj wskaźniki załadunku: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wybierz, czy wskaźnik załadunku pokazuje się nad ładowanym/rozładowywanym pojazdem STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokazuj rozkłady jazdy w tickach, a nie w dniach: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tickach gry zamiast w dniach +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W rozkładach jazdy, czas podróży pokaż w tickach gry zamiast w dniach STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjazdy i odjazdy w rozkładach: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach STR_CONFIG_SETTING_QUICKGOTO :Szybkie tworzenie poleceń pojazdu: {STRING} @@ -1894,7 +1894,7 @@ STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Przy włączony STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Przybycie pierwszego pojazdu do stacji gracza: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Wyświetl wiadomość w gazecie kiedy pierwszy pojazd dojedzie do stacji gracza STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Przybycie pierwszego pojazdu do stacji przeciwnika: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Wyświetl wiadomość w gazecie kiedy pierwszy pojazd dojedzie do stacji nowego konkurenta +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Wyświetl wiadomość w gazecie kiedy pierwszy pojazd dojedzie do nowej stacji konkurenta STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Wypadki / klęski: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Wyświetl wiadomość w gazecie kiedy zdarzy się wypadek lub nastąpi katastrofa STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informacja firmy: {STRING} @@ -2201,7 +2201,7 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Wyjście -STR_ABANDON_GAME_QUERY :{YELLOW}Czy jesteś pewien, że chcesz skończyć tą grę? +STR_ABANDON_GAME_QUERY :{YELLOW}Czy jesteś pewien, że chcesz skończyć tę grę? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Czy jesteś pewny, że chcesz opuścić ten scenariusz? # Cheat window @@ -2835,18 +2835,18 @@ STR_ROAD_NAME_TRAM :Tory tramwajowe # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Ukierunkowanie zajezdni samochodowej -STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Wybierz umiejscowienie zajezdni samochodowej -STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Orientacja zajezdni tramwajowej -STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Wybierz ukierunkowanie zajezdni tramwajowej +STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Wybierz orientację zajezdni samochodowej +STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Ukierunkowanie zajezdni tramwajowej +STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Wybierz orientację zajezdni tramwajowej # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Ukierunkowanie przystanku STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Wybierz ukierunkowanie przystanku STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Ukierunkowanie stacji załadunku ciężarówek STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Wybierz ukierunkowanie stacji załadunku ciężarówek -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Ukierunkowanie Przystanku Tramwajowego +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Ukierunkowanie przystanku tramwajowego STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Wybierz ukierunkowanie przystanku tramwajowego -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Ukierunkowanie Tramwajowej Stacji Towarowej +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Ukierunkowanie tramwajowej stacji załadunkowej STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Wybierz ukierunkowanie tramwajowej stacji załadunkowej # Waterways toolbar (last two for SE only) @@ -3002,7 +3002,7 @@ STR_LAND_AREA_INFORMATION_OWNER_N_A :Brak STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Właściciel: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Wlasciciel drogi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Właściciel linii tramwajowej: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Wlaściciel linii kolejowej: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Właściciel linii kolejowej: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Lokalne władze: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Brak STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Współrzędne: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) @@ -3512,7 +3512,7 @@ STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Pokaż s STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ocena transportu firmy: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Możliwe działania: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista rzeczy do zrobienia w tym mieście - klik po więcej detali +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista działań do wykonania w tym mieście - kliknięcie pokazuje szczegóły STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Wykonaj STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Wykonaj zaznaczone działanie z listy powyżej @@ -3525,14 +3525,14 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Ufunduj nowe bu STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Kup wyłączność transportową STR_LOCAL_AUTHORITY_ACTION_BRIBE :Daj łapówkę lokalnym władzom -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Rozpocznij małą kampanię reklamową aby zachęcić pasażerów i fabryki do Twoich usług.{}Koszt: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Rozpocznij średnią kampanię reklamową aby zachęcić więcej pasażerów i fabryk do Twoich usług transportowych.{}Koszt: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Rozpocznij dużą kampanię reklamową aby zachęcić więcej pasażerów i fabryk do Twoich usług transportowych.{}Koszt: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Rozpocznij małą kampanię reklamową aby zachęcić trochę pasażerów i fabryk do korzystania z Twoich usług transportowych.{}Koszt: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Rozpocznij średnią kampanię reklamową aby zachęcić więcej pasażerów i fabryk do korzystania z Twoich usług transportowych.{}Koszt: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Rozpocznij dużą kampanię reklamową aby zachęcić mnóstwo pasażerów i fabryk do korzystania z Twoich usług transportowych.{}Koszt: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Ufunduj remont sieci dróg. Powoduje zakłócenia w ruchu ulicznym do 6 miesięcy.{}Koszt: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Zbuduj pomnik dla uczczenia Twojej firmy.{}Koszt: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Ufundowanie nowych budynków komercyjnych w mieście.{}Koszt: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Ufunduj nowe budynki komercyjne w mieście.{}Koszt: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Kup roczną wyłączność na prawa transportowe w mieście. Lokalne władze pozwolą korzystać tylko z usług Twojej firmy.{}Koszt: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Daj łapówkę lokalnym władzom, powiększ swoją ocenę, ryzykując poważne kary w razie złapania.{}Koszt: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Daj łapówkę lokalnym władzom. Powiększ swoją ocenę, ryzykując poważne kary w razie złapania.{}Koszt: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Cele firmy {COMPANY} @@ -3638,7 +3638,7 @@ STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHO STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHORT} za pośrednictwem dowolnej stacji STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} z tej stacji STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_SHORT} zatrzymuje się na tej stacji -STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} do tej stacji +STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} na tę stację STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} non-stop STR_STATION_VIEW_GROUP_S_V_D :Źródło-Przez-Cel @@ -3677,7 +3677,7 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centruj główny widok na posterunku. Ctrl+klik otwiera nowy podgląd na lokacji posterunku STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Zmień nazwę posterunku STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centruj główny widok na pozycji boi. Ctrl+klik otwiera nowy podgląd na lokacji boi -STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Zmień nazwę boji +STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Zmień nazwę boi STR_EDIT_WAYPOINT_NAME :{WHITE}Edytuj nazwę pkt. orientacyjnego @@ -3862,8 +3862,8 @@ STR_GROUP_RENAME_TOOLTIP :{BLACK}Zmień n STR_GROUP_LIVERY_TOOLTIP :{BLACK}Zmień kolor zaznaczonej grupy STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Kliknij, aby ochronić tę grupę przed globalną zamianą pojazdów -STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Skasuj Grupę -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Jesteś pewien, że chcesz skasować tą grupę i wszytskich jej członków? +STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Skasuj grupę +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Jesteś pewien, że chcesz skasować tę grupę i wszystkich jej członków? STR_GROUP_ADD_SHARED_VEHICLE :Dodaj poj. współdzielące STR_GROUP_REMOVE_ALL_VEHICLES :Usuń wszystkie pojazdy @@ -3877,15 +3877,15 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nowe pociągi -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nowe elektryczne pojazdy szynowe +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nowe pociągi elektryczne STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nowe pociągi jednoszynowe STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nowe pociągi Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nowy pojazd drogowy -STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nowe pojazdy tramwajowe +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nowe tramwaje ############ range for vehicle availability starts -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nowe Pojazdy Szynowe +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nowe pojazdy szynowe STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nowe pojazdy drogowe STR_BUY_VEHICLE_SHIP_CAPTION :Nowe statki STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nowy samolot @@ -3983,10 +3983,10 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE} STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} pojazd{P "" y ów}{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Pociągi - przeciągnij pojazd/wagon przytrzymując lewy klawisz myszy aby go dodać/usunąć ze składu pociągu, prawy-klik na pociągu aby uzyskać informacje, przytrzymując ctrl dla podanych akcji stosuje zmiany do całego składu pociągu -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Pojazdy - prawy-klik na pojeździe po więcej informacji -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Statki - prawy-kliknij aby uzyskać informacje o statku -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Samolot - prawy-klik na samolocie aby uzyskać informacje +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Pociągi - przeciągnij pojazd/wagon przytrzymując lewy klawisz myszy, aby go dodać/usunąć ze składu pociągu, kliknij na pociągu prawym aby uzyskać informacje. Przytrzymanie Ctrl dla podanych akcji stosuje zmiany do całego składu pociągu +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Pojazdy - prawy klik na pojeździe pozwala uzyskać więcej informacji +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Statki - prawy klik pozwala uzyskać informacje o statku +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Samolot - prawy klik na samolocie pozwala uzyskać informacje STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Przeciągnij tutaj pociąg aby go sprzedać STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Przeciągnij tutaj pojazd, aby go sprzedać @@ -4061,7 +4061,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE.b :lokomotywę Mag STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}pojazd STR_ENGINE_PREVIEW_ROAD_VEHICLE.b :pojazd -STR_ENGINE_PREVIEW_TRAM_VEHICLE :pojazd tramwajowy +STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramwaj STR_ENGINE_PREVIEW_AIRCRAFT :{G=m}samolot STR_ENGINE_PREVIEW_AIRCRAFT.b :samolot @@ -4108,7 +4108,7 @@ STR_REPLACE_ALL_RAILTYPE :Wszystkie pojaz STR_REPLACE_ALL_ROADTYPE :Wszystkie pojazdy drogowe STR_REPLACE_HELP_RAILTYPE :{BLACK}Wybierz dla jakiego typu torów chcesz zastąpić lokomotywy -STR_REPLACE_HELP_ROADTYPE :{BLACK}Wybierz dla jakiego typu dróg chcesz zastąpić silniki +STR_REPLACE_HELP_ROADTYPE :{BLACK}Wybierz jakiego typu pojazdy chcesz zastąpić STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Wyświetla typ pojazdu na jaki będzie zastąpiony pojazd zaznaczony po lewej stronie STR_REPLACE_RAIL_VEHICLES :Kolej STR_REPLACE_ELRAIL_VEHICLES :Kolej elektryczna @@ -4116,7 +4116,7 @@ STR_REPLACE_MONORAIL_VEHICLES :Kolej jednoszyn STR_REPLACE_MAGLEV_VEHICLES :Kolej Maglev STR_REPLACE_ROAD_VEHICLES :Pojazdy drogowe -STR_REPLACE_TRAM_VEHICLES :Pojazdy tramwajowe +STR_REPLACE_TRAM_VEHICLES :Tramwaje STR_REPLACE_REMOVE_WAGON :{BLACK}Usunięcie wagonów: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Autowymiana zachowuje długość pociągu poprzez usuwanie wagonów (począwszy od początku), jeśli wymiana lokomotywy spowoduje wydłużenie pociągu @@ -4129,10 +4129,10 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centruj STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centruj główny widok na pozycji statku. Ctrl+klik by podążać za statkiem w głównym oknie STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centruj główny widok na pozycji samolotu. Ctrl+klik by podążać za samolotem w głównym oknie -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij pociąg do warsztatów -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij pojazd do zajezdni -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij statek do stoczni -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij samolot do hangaru +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij pociąg do warsztatów. Ctrl - tylko serwis +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij pojazd do zajezdni. Ctrl - tylko serwis +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij statek do stoczni. Ctrl - tylko serwis +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Wyślij samolot do hangaru. Ctrl - tylko serwis STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Spowoduje zakup kopii pociągu wraz ze wszystkimi wagonami. Ctrl+klik spowoduje współdzielenie poleceń. Shift+klik tylko pokazuje szacowany koszt STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Spowoduje zakup kopii pojazdu drogowego. Ctrl+klik spowoduje współdzielenie poleceń. Shift+klik tylko pokazuje szacowany koszt @@ -4155,7 +4155,7 @@ STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Pokaż p STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Pokaż polecenia samolotu. Ctrl+klik pokazuje harmonogram lotów samolotu. STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaż szczegóły pociągu -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaż detale pojazdu +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaż szczegóły pojazdu STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaż szczegóły statku STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaż szczegóły samolotu @@ -4366,7 +4366,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Idź do najbli STR_ORDER_GO_TO_NEAREST_HANGAR :Leć do najbliższego hangaru STR_ORDER_CONDITIONAL :Warunkowy skok poleceń STR_ORDER_SHARE :Współdzielenie poleceń -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Wstaw nowe polecenie na końcu listy lub przed zaznaczonym poleceniem. Ctrl ustawia polecenia stacji na 'pełny załadunek dowolnego towaru', polecenia pkt. orientacyjnych na 'bez zatrzymywania się', a polecenia zajezdni na 'serwisuj'. 'Współdzielenie poleceń' lub Ctrl pozwala na dzielenie poleceń z wybranym pojazdem. Kliknięcie pojazdu kopiuje jego polecenia. Polecenie zajezdni wyłącza automatyczne serwisowanie pojazdu +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Wstaw nowe polecenie na końcu listy lub przed zaznaczonym poleceniem. Ctrl ustawi polecenie stacji na 'pełny załadunek dowolnego towaru', pkt. orientacyjnego na 'bez zatrzymywania się', a zajezdni na 'serwisuj'. Kliknięcie innego pojazdu kopiuje jego polecenia, ctrl+klik (lub 'Współdzielenie poleceń') pozwala na dzielenie z nim poleceń. Polecenie zajezdni wyłącza automatyczne serwisowanie pojazdu STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Pokaż wszystkie pojazdy współdzielące te polecenia @@ -4583,11 +4583,11 @@ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Zamknij STR_AI_SETTINGS_RESET :{BLACK}Resetuj STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_START_DELAY :Liczba dni, aby aktywować tą SI po uruchomieniu poprzedniej (zwiększ lub zmniejsz): {ORANGE}{STRING} +STR_AI_SETTINGS_START_DELAY :Liczba dni do aktywowania tej SI po uruchomieniu poprzedniej (zwiększ lub zmniejsz): {ORANGE}{STRING} # Textfile window -STR_TEXTFILE_README_CAPTION :{WHITE}'CzytajTo' dla {STRING} {STRING} +STR_TEXTFILE_README_CAPTION :{WHITE}Plik 'ReadMe' dla {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Zmiany w {STRING} dla {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Licencja dla {STRING} {STRING} STR_TEXTFILE_WRAP_TEXT :{WHITE}Zawijaj tekst @@ -4681,7 +4681,7 @@ STR_ERROR_SITE_UNSUITABLE :{WHITE}... niew STR_ERROR_ALREADY_BUILT :{WHITE}... już zbudowano STR_ERROR_OWNED_BY :{WHITE}... w posiadaniu {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... teren jest własnością innej firmy -STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... osiągnięto limit terraformowania +STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... osiągnięto limit kształtowania terenu STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... osiągnięto limit czyszczenia pól STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... wykorzystano limit sadzenia drzew STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nazwa nie może się powtarzać diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index a02bcbf76b..1f712061de 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -784,8 +784,8 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Zobrazi STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Zobraziť dopravné trasy na mape STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Zobraziť vegetáciu na mape STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Zobraziť vlastníkov pozemkov na mape -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Kliknite na typ priemyslu pre zmenu jeho zobrazenia. Ctrl+Klik skryje všetky priemysly okrem vybraného. Ctrl+Klik znova zobrazí všetky priemysly -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klikni na spoločnosť pre prepnutie zobrazenia jej majetku. Ctrl+Klik skryje všetky spoločnosti okrem vybranej. Ctrl+Klik znova zase zobrazí všetky spoložnosti. +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Kliknite na typ priemyslu pre prepnutie jeho zobrazenia. Ctrl+klik skryje všetky druhy priemyslu okrem určeného. Opätovný Ctrl+klik zobrazí všetky druhy priemyslu +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Kliknite na spoločnosť pre prepnutie zobrazenia jej majetku. Ctrl+klik skryje všetky spoločnosti okrem vybranej. Opätovný Ctrl+klik zobrazí všetky spoločnosti STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Kliknite na náklad pre prepnutie jeho zobrazenia. Ctrl+klik skryje všetky druhy nákladu okrem určeného. Opätovný Ctrl+klik zobrazí všetky druhy nákladu STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Cesty @@ -800,15 +800,15 @@ STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Dopravné trasy STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Les STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Železničná stanica -STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Nakladacia rampa -STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Autobusová stanica -STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Letisko +STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Vykládka +STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Autobusová zastávka +STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Letisko/Heliport STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Prístav STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Nerovný terén STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Trávnatý terén STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Holý terén STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Polia -STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Lesy +STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Stromy STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Skaly STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Voda STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Bez vlastníka @@ -823,14 +823,14 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}zakázať všetky -STR_SMALLMAP_ENABLE_ALL :{BLACK}Povolit vsetky +STR_SMALLMAP_DISABLE_ALL :{BLACK}Skryť všetko +STR_SMALLMAP_ENABLE_ALL :{BLACK}Zobraziť všetko STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Ukázať výšku STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Nezobraziť žiadny priemysel na mape STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Zobraziť všetok priemysel na mape -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Prepnúť zobrazenie výškovej mapy -STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nezobrazovať žiadný majetok spoločnosti na mape -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Zobraziť celý majetok spoločnosti na mape +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Prepnúť zobrazenie vrstevníc na mape +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nezobraziť žiadny majetok spoločností na mape +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Zobraziť majetok všetkých spoločností na mape STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Nezobraziť žiadny náklad na mape STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Zobraziť všetok náklad na mape @@ -1179,7 +1179,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Nastaven STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrovací reťazec: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Rozšíriť všetko STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Zbaliť všetky -STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(nie je potrebné vysvetlenie) +STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(nie je dostupné vysvetlenie) STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Pôvodná hodnota: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Nastavenie typu: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Nastavenia klienta (neuchovávané v uložených hrách; ovplyvní všetky hry) @@ -1209,8 +1209,8 @@ STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Zobrazen STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}kategórie {BLACK}na {WHITE}{STRING} {BLACK}a {SILVER}typu {BLACK}na {WHITE}Všetky typy nastavenia STR_CONFIG_SETTINGS_NONE :{WHITE}- Žiadne - -STR_CONFIG_SETTING_OFF :nie -STR_CONFIG_SETTING_ON :áno +STR_CONFIG_SETTING_OFF :Nie +STR_CONFIG_SETTING_ON :Áno STR_CONFIG_SETTING_DISABLED :zakázané STR_CONFIG_SETTING_COMPANIES_OFF :Vypnutý @@ -1294,8 +1294,8 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Rovné územie STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Cena voľného priestoru vedľa priemyslu. Týmto sa zabezpečí voľné miesto pre výstavbu ciest atď. STR_CONFIG_SETTING_MULTIPINDTOWN :Povoliť viac rovnakých závodov pri jednom meste: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normálne, mesto nechce viac ako jeden priemysel každého typu. Týmto nastavením bude možné niekoľko rovnakých priemyslov v meste -STR_CONFIG_SETTING_SIGNALSIDE :Ukáž signály (semafory): {STRING} -STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Zvolte stranu trate na ktorej sa budú umiestňovať semafory +STR_CONFIG_SETTING_SIGNALSIDE :Zobrazovať návestidlá: {STRING} +STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Zvoľte stranu trate na ktorej sa budú umiestňovať návestidlá STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Vľavo STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Na strane kde sa jazdí STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Vpravo @@ -1629,25 +1629,25 @@ STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimálny vek STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Určuje minimálny vek spoločnosti na to, aby od nej mohli ostatné spoločnosti kupovať a predavať podiely. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentáž profitu na zaplatenie podávacieho systému: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percento príjmov dať na strednú ´nohu´ vo feeder systémoch, získate väčšiu kontrolu nad príjmamy -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Pri ťahaní, umiestni semafóry každý: {STRING} diel -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Nastav vzdialenosť ako ďaleko budú umiestnené semafóry po prekážke na trati (most/tunel/rozcestie) pri ťahaní. -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} diel(ov) -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Pri ťahaní, zachovaj fixnú medzeru medzi semafórmi: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Zvoľte ako sa zachová umiestňovanie semafórov pri CTRL+posun. Ak je vypnuté, semafóry sú umiestnené okolo tunelov alebo mostov aby sa zabránilo dlhým úsekom bez signalizácie. Ak je zapnuité, semafóry sú umiestňované každých N dielov čím sa umožní lepšie rozloženie na paralelných tratiach. -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automaticky stavať semafóry namiesto signálov pred rokom: {STRING} -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Zvoľte rok od ktorého sa budú používať elekrické semafóry na tratiach. Pred týmto rokom sa budú používať staré ne-elektrické návestidlá. Funkcionalita je ale stále rovnaká len vzhľad je iný. -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Zapnúť grafické rozhranie stavby signálov: {STRING} -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Zobrazí okno s možnosťou výberu semafóru namiesto rotačnej voľby klikaním pomocou CTRL. -STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Štandardne budovaný typ signálov: {STRING} -STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Prednastavený typ semafórov na použitie. -STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Blokové signály -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Obojsmerné signály -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Jednosmerné signály -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Prepínanie medzi typmi signálov: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Zvoľte ktoré semafóry budú použité v rotačnej voľbe pomocou CTRL+klik na ikonu stavania semafórov. -STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :len blokové -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :len obojsmerné -STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :všetky +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Pri ťahaní, umiestni návestidlo každé: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Nastaviť vzdialenosť návestidiel, akou budú umiestnené na trati po najbližšiu prekážku (návestidlo, križovatku), pri stavbe ťahaním +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} políč{P ko ka ok} +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Pri ťahaní, zachovať určenú medzeru medzi návestidlami: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Zvoliť ako sa zachová umiestňovanie návestidiel pri Ctrl+ťahaní. Ak je vypnuté, návestidlá sú umiestnené okolo tunelov alebo mostov aby sa zabránilo dlhým úsekom bez návestidiel. Ak je zapnuté, návestidlá sú umiestňované každých n-políčok, čím sa umožní lepšie rozloženie na paralelných tratiach +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automaticky stavať mechanické návestidlá namiesto elektrických pred rokom: {STRING} +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Zvoľte rok od ktorého sa budú používať elekrické návestidlá na tratiach. Pred týmto rokom sa budú používať mechanické návestidlá (funkcionalita je ale stále rovnaká, iba vzhľad je rozličný) +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Povoliť grafické rozhranie výberu návestidla: {STRING} +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Zobraziť okno s možnosťou výberu návestidla, namiesto prepínania typu návestidla Ctrl-klikaním na umiestnené návestidlo +STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Predvolene budovaný typ návestidiel: {STRING} +STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Predvolený typ návestidiel na použitie +STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Obyčajné návestidlá +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Trasové návestidlá +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Jednosmerné trasové návestidlá +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Prepínanie medzi typmi návestidiel: {STRING} +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Výber návestidiel použitých v zámene pomocou Ctrl+kliku na návestidlo počas umiestňovania návestidiel +STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Iba blokové návestidlá +STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Iba trasové návestidlá +STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Všetky STR_CONFIG_SETTING_TOWN_LAYOUT :Návrh ciest pre nové mestá: {STRING} STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Rozloženie cestnej siete v mestách. @@ -1807,8 +1807,8 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Algoritmus hľa STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Vyhľadávač trasy pre cestné vozidlá STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Algoritmus hľadania cesty pre lode: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Vyhľadávač trasy pre lode -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatické obrátenie na semaforoch: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Umožniť vlakom otočiť sa na semafóroch, ak tam čakajú dlhý čas. +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatické obrátenie na návestidlách: {STRING} +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Povoliť vlakom otočiť sa na návestidlách, ak tam čakajú dlhý čas STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Zmeniť hodnotu nastavenia @@ -2462,22 +2462,22 @@ STR_STATION_CLASS_WAYP :Smerove body # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Výber návestidla -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Štandardný signál (návestidlo){}Signály sú nutné preto aby nedochádzalo ku zrážke vlakov na trati kde jazdí viac ako 1 vlak -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Vstupný signál (semafór){}Zelená svieti dovtedy, kým v nasledujúcom úseku trate je aspoň 1 zelený výstupný signál. Inak ukazuje červenú. -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Výstupný signál (semafór){}Chová sa rovnako ako štandardný signál, ale je nevyhnutné nastaviť správnu farbu pre vstupné a kombinované pre-signály -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Kombinovaný signál (semafór){}Slúži zároveň ako vstupný aj výstupný signál, Tým umožnuje postaviť "stromovú" hierarchiu signálov. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Smerový signál (návestidlo){}Smerový signál umožní vstúpiť viacerým vlakom na trať z oboch strán, iba ak vlak dokáže bezpečne zastaviť pred návestidlom. Smerový signál môže byť na jednej koľaji proti sebe. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Jednosmerný signál (návestidlo){}Jednosmerný signál umožňuje vstúpiť viacerým vlakom na trať súčasne, iba ak vlak dokáže bezpečne zastaviť pred návestidlom. Jednosmerné signály nemôžu byť na jednej koľaji proti sebe -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Štandardný signál (elektrický){}Základný typ signálu, dovolí len 1 vlak v jednom bloku v rovnakom čase -STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Vstupný signál (elektrický){}Zelená tak dlho, kým je aspoň 1 zelený výstupný signál na nasledujúcom úseku trate. Inak ukazuje červenú -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Výstupný signál (elektrický){}Funguje rovnako ako štandardný signál, je však nevyhnutné určenie správnej farby na vstupných a kombinovaných signáloch -STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinovaný signál (elektrický){}Funguje zároveň ako vstupný aj výstupný signál, Tým umožňuje budovať veľké "stromové" hierarchie signálov -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Obojstranné signály (elektrické){}Obojstranné signály umožnujú vstúpiť viacerým vlakom na trať súčasne, iba ak vlak dokáže zastaviť pred brzdiacim bodom. Obojstranné signály môžu byť postavené vedľa seba zadnou stranou -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednosmerné signály (elektrické){}Jednosmerné signály umožnujú vstúpiť viacerým vlakom na trať súčasne, iba ak vlak dokáže zastaviť pred brzdiacim bodom. Jednosmerné signály nemôžu byť postavené vedľa zadnou stranou -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zmena signálu{}Po vybratí, kliknutím na existujúci signál dochádza k zmene na vybraný typ signálu a varianty, Ctrl+klik prepne existujúcu variantu. Shift+klik zobrazí odhad nákladov na zmenu -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Hustota signálov pri stavbe ťahaním -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Znižit hustotu signálov -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zvýšit hustotu signálov +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Obyčajné návestidlo (mechanické){}Základný typ návestidla, povolí iba jeden vlak v jednom úseku v rovnakom čase +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Vstupné návestidlo (mechanické){}Zelená tak dlho, kým je aspoň jedno zelené výstupné návestidlo na nasledujúcom úseku trate. Inak ukazuje červenú +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Výstupné návestidlo (mechanické){}Funguje rovnako ako obyčajné návestidlo, je však nevyhnutné na určenie správnej farby na vstupných a kombinovaných návestidlách umiestnených pred ním +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Kombinované návestidlo (mechanické){}Funguje zároveň ako vstupné aj výstupné návestidlo. Tým umožňuje budovať veľké "stromové" hierarchie návestidiel +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Trasové návestidlo (mechanické){}Trasové návestidlo povolí viac vlakov v jednom úseku súčasne, ak má vlak voľnú trasu, ktorú si rezervuje. Bežné trasové návestidla môžu vlaky prechádzať aj opačným smerom +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Jednosmerné trasové návestidlo (mechanické){}Trasové návestidlo povolí viac vlakov v jednom úseku súčasne, ak má vlak voľnú trasu, ktorú si rezervuje. Jednosmerné trasové návestidla môžu vlaky prechádzať iba z prednej strany +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Obyčajné návestidlo (elektrické){}Základný typ návestidla, povolí iba jeden vlak v jednom úseku v rovnakom čase +STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Vstupné návestidlo (elektrické){}Zelená tak dlho, kým je aspoň jedno zelené výstupné návestidlo na nasledujúcom úseku trate. Inak ukazuje červenú +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Výstupné návestidlo (elektrické){}Funguje rovnako ako obyčajné návestidlo, je však nevyhnutné na určenie správnej farby na vstupných a kombinovaných návestidlách umiestnených pred ním +STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombinované návestidlo (elektrické){}Funguje zároveň ako vstupné aj výstupné návestidlo. Tým umožňuje budovať veľké "stromové" hierarchie návestidiel +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Trasové návestidlo (elektrické){}Trasové návestidlo povolí viac vlakov v jednom úseku súčasne, ak má vlak voľnú trasu, ktorú si rezervuje. Bežné trasové návestidla môžu vlaky prechádzať aj opačným smerom +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednosmerné trasové návestidlo (elektrické){}Trasové návestidlo povolí viac vlakov v jednom úseku súčasne, ak má vlak voľnú trasu, ktorú si rezervuje. Jednosmerné trasové návestidla môžu vlaky prechádzať iba z prednej strany +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zameniť návestidlo{}Po vybratí, kliknutím na existujúce návestidlo dochádza k zámene na vybraný typ a variantu návestidla. Ctrl+klik prepne existujúcu variantu. Shift+klik zobrazí odhadovanú cenu zámeny +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Hustota návestidiel pri stavbe ťahaním +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Znižit hustotu návestidiel +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zvýšit hustotu návestidiel # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vyber železničný most @@ -2720,28 +2720,28 @@ STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Zasnežený ter STR_LAI_CLEAR_DESCRIPTION_DESERT :Púšť STR_LAI_RAIL_DESCRIPTION_TRACK :Železničná trať -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železnica trať so signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železnica trať s pre-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železnica trať s exit-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Železnica trať s combo-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Železnica trať s path signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Železnica trať s jednosmernými signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Železnica trať s block a pre-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Železnica trať s block a exit-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Železnica trať s block a combo-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Železnica trať s BLOCK a PATH signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Železnica trať s block a jednosmernými signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Železnica trať s pre- and exit-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Železnica trať s pre- a combo-signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Železnica trať s pre- a path signálmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Železnica trať s pred- a jednosmernými semafórmy -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Železnica trať s výstupnémi a kombinovanými semafórmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Železnica trať s výstupnými semafórmi a semafórmi cesty -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Železnica trať s výstupnými a jednosmernými semafórmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Železnica trať s kombinovanými semafórmi a semafórmi cesty -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Železnica trať s kombinovanými a jednosmernými semafórmi -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Železnica trať so semáfórmi cesty a jednosmernými -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železnica vlakové depo +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Železničná trať s obyčajnými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Železničná trať so vstupnými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Železničná trať s výstupnými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Železničná trať s kombinovanými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Železničná trať s trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Železničná trať s jednosmernými trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Železničná trať s obyčajnými a vstupnými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Železničná trať s obyčajnými a výstupnými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Železničná trať s obyčajnými a kombinovanými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Železničná trať s obyčajnými a trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Železničná trať s obyčajnými a jednosmernými trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Železničná trať so vstupnými a výstupnými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Železničná trať so vstupnými a kombinovanými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Železničná trať so vstupnými a trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Železničná trať so vstupnými a jednosmernými trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Železničná trať s výstupnými a kombinovanými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Železničná trať s výstupnými a trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Železničná trať s výstupnými a jednosmernými trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Železničná trať s kombinovanými a trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Železničná trať s kombinovanými a jednosmernými trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Železničná trať s trasovými a jednosmernými trasovými návestidlami +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Železničné vlakové depo STR_LAI_ROAD_DESCRIPTION_ROAD :Cesta STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Cesta s lampami @@ -3196,7 +3196,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Premenovať mes # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Miestna správa {TOWN} STR_LOCAL_AUTHORITY_ZONE :{BLACK}Oblasť -STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zobraziť oblasť miestnej správy mesta +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zobraziť oblasť pôsobenia miestnej správy mesta STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Hodnotenie dopravných spoločností: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Dostupné činnosti: @@ -3452,7 +3452,7 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}Hľadám # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} - Infraštruktúra STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Políčka železnice: -STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafóry +STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Návestidlá STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Políčka cesty: STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Električkové políčka: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vodné políčka: @@ -3821,7 +3821,7 @@ STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Zakúpi STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Zakúpi kópiu lode. Stlačením CTRL+klik budú príkazy zdieľané. Shift+klik zobrazí odhad nákladov STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Zakúpi kópiu lietadla. Stlačením CTRL+klik budú príkazy zdieľané. Shift+klik zobrazí odhad nákladov -STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Povoliť vlaku pokračovať v ceste bez čakania na zelenú +STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Prinútiť vlak pokračovať cez návestidlo bez čakania na zelenú STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Prestavať vlak na iný druh nákladu STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Prestavať vozidlo na prepravu iný typ nákladu @@ -4294,8 +4294,8 @@ STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED STR_INCOME_FLOAT_COST :{RED}Cena: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}Zisk: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}Zisk: {CURRENCY_LONG} -STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Prekladka: {CURRENCY_LONG} -STR_FEEDER :{YELLOW}Prekladka: {CURRENCY_LONG} +STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Prekládka: {CURRENCY_LONG} +STR_FEEDER :{YELLOW}Prekládka: {CURRENCY_LONG} STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {GREEN}Zisk: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {GREEN}Zisk: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Prevod: {CURRENCY_LONG}{WHITE} / {RED}Náklady: {CURRENCY_LONG} @@ -4525,19 +4525,19 @@ STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(finančný lim # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Nemožná kombinácia trate -STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Najprv je treba odstrániť semafory +STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Najskôr je potrebné odstrániť návestidlá STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Žiadne použiteľné železničné koľaje STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Musíš najskôr odstrániť železničné koľaje STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Cesta je jednosmerná alebo blokovaná. STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Nie sú povolené priecestia pre tento typ železnice STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Nie sú povolené priecestia pre tento typ cesty -STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nemôžeš tu stavať návestidlá... +STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nemôžeš tu umiestniť návestidlá... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nemôžeš tu stavať železničné koľaje... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nemôžeš tu odstrániť železničné koľaje... -STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nemôžeš tu odstrániť semafory... -STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Nie je možné zmeniť typ semaforov... +STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nemôžeš tu odstrániť návestidlá... +STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Tu nie je možné zameniť návestidlá... STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...nenašli sa železničné koľaje -STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... nenašlo sa návestidlo +STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... nenašli sa návestidlá STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Nemôžeš tu konvertovať železnicu... @@ -4669,7 +4669,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Zatiaľ STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Začnite novú hru po {DATE_SHORT} alebo použite NewGRF, ktoré zabezpečí vozidlá v skoršom čase # Specific vehicle errors -STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nemôžeš pustiť vlak na červenú keď hrozí nebezpečenstvo... +STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nemôžeš nechať vlak prejsť cez návestidlo keď hrozí nebezpečenstvo... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nemožno zmeniť smer vlaku... STR_ERROR_TRAIN_START_NO_POWER :Vlak nemá energiu From f23a7a59b62bf9afbda855bd5a41a33ad4e992ba Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 7 Nov 2020 17:52:16 +0000 Subject: [PATCH 293/601] Update: Translations from eints slovak: 26 changes by FuryPapaya polish: 1 change by yazalo --- src/lang/polish.txt | 2 +- src/lang/slovak.txt | 52 ++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 3ad4033446..f92c600731 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2538,7 +2538,7 @@ STR_NETWORK_ERROR_NOSERVER :{WHITE}Nie moż STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Serwer nie odpowiada STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Nie można było połączyć z powodu niezgodności NewGRF STR_NETWORK_ERROR_DESYNC :{WHITE}Błąd synchronizacji gry sieciowej. -STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Połączenie utracone w grze sieciowej. +STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Utracono połączenie z grą sieciową. STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Nie można wczytać zapisanej gry z serwera. STR_NETWORK_ERROR_SERVER_START :{WHITE}Nie można uruchomić serwera STR_NETWORK_ERROR_CLIENT_START :{WHITE}Nie można połączyć diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 1f712061de..c037d5d9b9 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -444,7 +444,7 @@ STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti hry STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Nastavenia STR_SETTINGS_MENU_SCRIPT_SETTINGS :Nastavenia AI/skriptu STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavenia NewGRF -STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Nastavenie priehľadnosti +STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Nastavenia priehľadnosti STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Zobraziť názvy miest STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Zobraziť názvy staníc STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Zobraziť navigačné body @@ -452,8 +452,8 @@ STR_SETTINGS_MENU_SIGNS_DISPLAYED :Zobraziť popis STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Značky a mená konkurentov zobrazené STR_SETTINGS_MENU_FULL_ANIMATION :Plná animácia STR_SETTINGS_MENU_FULL_DETAIL :Plné detaily -STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Priesvitné budovy -STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Priesvitné názvy +STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Priehľadné budovy +STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Priehľadné nápisy ############ range ends here ############ range for file menu starts @@ -2373,17 +2373,17 @@ STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Áno, st STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nie, ukončiť OpenTTD # Transparency settings window -STR_TRANSPARENCY_CAPTION :{WHITE}Nastavenie priehľadnosti -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Prepnúť priehľadnosť názvov staníc. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Prepnúť priehľadnosť stromov. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Prepnúť priehľadnosť domov. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Prepnúť priehľadnosť priemyslu. CTRL+klik uzamkne nastavenie +STR_TRANSPARENCY_CAPTION :{WHITE}Nastavenia priehľadnosti +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Prepnúť priehľadnosť nápisov. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Prepnúť priehľadnosť stromov. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Prepnúť priehľadnosť domov. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Prepnúť priehľadnosť priemyslu. Ctrl+klik uzamkne nastavenie STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Prepnúť priehľadnosť stavieb ako stanice, depá, smerové body. Ctrl+klik uzamkne nastavenie -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Prepínať priehľadnosť mostov. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Prepnúť priehľadnosť stavieb ako sú majáky a antény. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Zmena priehľadnosti trakčného vedenia. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Prepnúť zobrazenie ukazateľov nakladania. CTRL+klik uzamkne nastavenie -STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Nastavit objekty neviditelné namiesto priehladných +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Prepnúť priehľadnosť mostov. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Prepnúť priehľadnosť objektov ako sú majáky a vysielače. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Prepnúť priehľadnosť trakčného vedenia. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Prepnúť priehľadnosť ukazateľov nakladania. Ctrl+klik uzamkne nastavenie +STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Nastaviť objekty neviditeľné namiesto priehľadných # Linkgraph legend window STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda k smerovaniu nákladu @@ -2424,10 +2424,10 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Postavi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Postaviť vlakové depo (na nákup a opravu vlakov). Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Umiestniť smerový bod. Ctrl umožní spájanie smerových bodov. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Postaviť železničnú stanicu. Ctrl umožní spájanie staníc. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Umiestniť železničné signály. Ctrl prepína mechanické/svetelné signály{}Ťahanie umiestní signály na rovnom úseku trate. Ctrl umiestní signály až po najbližšiu križovatku alebo signál{}Ctrl+klik prepína otvorenie okna na výber signálu. Shift zobrazí odhadovanú cenu +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Umiestniť železničné návestidlá. Ctrl prepína mechanické/svetelné návestidlá{}Ťahanie umiestní návestidlá na rovnom úseku trate. Ctrl umiestní návestidlá až po najbližšiu križovatku alebo návestidlo{}Ctrl+klik prepína otvorenie okna na výber návestidla. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Postaviť železničný most. Shift zobrazí odhadovanú cenu STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Postaviť železničný tunel. Shift zobrazí odhadovanú cenu -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť na odstránenie železničnej trate, signálov, smerových bodov a staníc. Ctrl odstráni aj koľaj smerového bodu a stanice +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnúť na odstránenie železničnej trate, návestidiel, smerových bodov a staníc. Ctrl odstráni aj koľaj smerového bodu a stanice STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Konvertovať/vylepšiť typ železnice. Shift zobrazí odhadovanú cenu STR_RAIL_NAME_RAILROAD :Železnica @@ -2591,11 +2591,11 @@ STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Vyrovna STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakúpiť pozemok pre budúce použitie. Shift zobrazí odhadovanú cenu # Object construction window -STR_OBJECT_BUILD_CAPTION :{WHITE}Výber objektov -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vybrať objekt na postavenie -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte triedu objektu vybudovaniu +STR_OBJECT_BUILD_CAPTION :{WHITE}Výber objektu +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt na vybudovanie. Shift zobrazí odhadovanú cenu +STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte triedu objektu na vybudovanie STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Náhľad objektu -STR_OBJECT_BUILD_SIZE :{BLACK}Rozmery: {GOLD}{NUM} x {NUM} polí +STR_OBJECT_BUILD_SIZE :{BLACK}Rozmery: {GOLD}{NUM} x {NUM} políčok STR_OBJECT_CLASS_LTHS :Majáky STR_OBJECT_CLASS_TRNS :Vysielače @@ -3059,16 +3059,16 @@ STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Prejsť STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Prejsť na daný sprite. Ak nie je normálny, prejsť na najbližší normálny sprite STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Predchádzajúci sprite STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Prejsť na predchádzajúci normálny sprite, vynechajúc akékoľvek falošné/prefarbené sprites a sprites fontu použité na začiatku -STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Reprezentuje aktuálne zvolený objekt. Zarovnanie je ignorované pri vykresľovaní objektu -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pri hýbaní objektom, sa menia X a Y súradnice +STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Reprezentuje aktuálne zvolený sprite. Zarovnanie je ignorované pri vykresľovaní sprite-u +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Posúvajte sprite, so súčasnou zmenou X a Y súradnice. Ctrl+klik posunie sprite o osem jednotiek súčasne STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Resetovať relatívne STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Resetovať aktuálne relatívne posunutie STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (absolútne) STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset: {NUM}, Y offset: {NUM} (relatívne) -STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Vybrať objekt -STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Vyberte objekt z obrazovky +STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Vybrať sprite +STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Vyberte sprite z obrazovky -STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Ísť na objekt +STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Ísť na sprite # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} @@ -3396,7 +3396,7 @@ STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENC STR_FINANCES_BORROW_BUTTON :{BLACK}Požičať {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Zvýšiť veľkosť úveru. Crtl+klik požičia koľko sa dá STR_FINANCES_REPAY_BUTTON :{BLACK}Splatiť {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Splatiť časť úveru +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Splatiť časť úveru. Ctrl+klik splatí koľko sa dá STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infraštruktúra # Company view @@ -3876,7 +3876,7 @@ STR_VEHICLE_NAME_BUTTON :{BLACK}Meno STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Pomenovať vlak STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Premenovať cestné vozidlo STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Pomenovať loď -STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Pomenovat lietadlo +STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Pomenovať lietadlo STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Prevádzkové náklady: {LTBLUE}{CURRENCY_LONG}/rok # The next two need to stay in this order From 918857e03b2c014ab747e3b3e3dad4b8242a7c20 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 8 Nov 2020 17:51:33 +0000 Subject: [PATCH 294/601] Update: Translations from eints korean: 1 change by telk5093 slovak: 86 changes by FuryPapaya --- src/lang/korean.txt | 2 +- src/lang/slovak.txt | 172 ++++++++++++++++++++++---------------------- 2 files changed, 87 insertions(+), 87 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 61cac93d64..f050da5b0e 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2070,7 +2070,7 @@ STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}설립: STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}회사가치: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}재정 수익: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}작년 수익: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}퍼포먼스: {WHITE}{NUM} +STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}성취도: {WHITE}{NUM} STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}차량: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}역: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index c037d5d9b9..393a04c3ff 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -409,7 +409,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Výstavb STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Otvoriť panel nástrojov pre úpravy terénu, výsadbu stromov, a pod. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Zobraziť okno zvuku a hudby STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Zobraziť poslednú správu/novinku, nastavenia správ -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informácie o pozemku, konzola, AI ladenie, screenshoty, o OpenTTD +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informácie o pozemku, konzola, ladenie skriptu, snímky obrazovky, o OpenTTD STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Prepnúť panely nástrojov # Extra tooltips for the scenario editor toolbar @@ -1301,7 +1301,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Na strane kde s STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Vpravo STR_CONFIG_SETTING_SHOWFINANCES :Zobraziť rozpočet na konci roku: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Ak zapnuté, okno s financiami sa ukáže na konci každého roku a umožňuje tak rýchly náhľad na stav financií spoločnosti. -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nové príkazy sú štandardne 'non-stop': {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nové príkazy sú štandardne 'nonstop': {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normálne, vlak vždy zastaví v každej stanici cez ktorú prechádza. Povolením tohoto nastavenia, vlak bude pokračovať cez všetky stanice ktoré má v ceste až do svojej cieľovej stanice. Uvedomte si to, že toto nastavenie definuje "pôvodné" nastavenie LEN pre nové trasy. Samostatne zadávané cesty môžu byť nastavené aj inak. STR_CONFIG_SETTING_STOP_LOCATION :Vlaky zastavujú štandardne {STRING} stanice. STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Zvoľte kde zastaví vlak po príjazde do stanice. "Blízky koniec" znamená že vlak zastaví najbližšie ku vstupnému bodu, "Stred" že zastaví v strede stanice a "daleký koniec" že zastaví čo najďalej od vstupného bodu. @@ -1491,8 +1491,8 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Použit skupiny STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Povolí použitie rozšíreného zoznamu vozidiel pre skupiny STR_CONFIG_SETTING_LOADING_INDICATORS :Zobraziť ukazovatele nakladania/vykladania: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Zvoľte či indikátory nakladania/vykladania budú zobrazené nad vozidlom. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zobraziť cestovné poriadky v tikoch namiesto dní: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zobrazí časy cestovania v časových rozpisoch namiesto dní. +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zobraziť cestovné poriadky v tiknutiach namiesto dní: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zobrazí časy cestovania v cestovnom poriadku v herných tiknutiach namiesto dní STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Zobraziť príchody a odchody v cestovných poriadkoch: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Zobrazí predpokladané časy príchodov a odchodov v časových rozpisoch. STR_CONFIG_SETTING_QUICKGOTO :Rýchla tvorba cestovného poriadku vozidla: {STRING} @@ -3200,9 +3200,9 @@ STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zobrazi STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Hodnotenie dopravných spoločností: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Dostupné činnosti: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Čo sa dá urobiť v tomto meste - kliknúť na položku pre detaily +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Zoznam vecí, ktoré sa dajú vykonať v tomto meste - kliknúť na položku pre detaily STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Vykonať -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Vykonať činnosť zvýraznenú v zozname +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Vykonať činnosť zvýraznenú v zozname vyššie STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Malá reklamná kampaň STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Stredná reklamná kampaň @@ -3213,13 +3213,13 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financovať vý STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Zakúpiť exkluzívne dopravné práva STR_LOCAL_AUTHORITY_ACTION_BRIBE :Podplatiť miestnu správu -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Spustiť malú reklamnú kampaň vašich dopravných služieb.{} Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Spustiť strednú reklamnú kampaň vašich dopravných služieb.{} Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Spustiť veľkú reklamnú kampaň vašich dopravných služieb.{} Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Spustiť malú reklamnú kampaň, ktorá privedie viac cestujúcich a nákladu k vašej spoločnosti.{} Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Spustiť strednú reklamnú kampaň, ktorá privedie viac cestujúcich a nákladu k vašej spoločnosti.{} Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Spustiť veľkú reklamnú kampaň, ktorá privedie viac cestujúcich a nákladu k vašej spoločnosti.{} Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financovať rekonštrukciu mestskej cestnej siete. Spôsobí dopravný chaos a zápchy trvajúce ďalších 6 mesiacov.{} Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Postaviť sochu na oslavu vašej spoločnosti.{} Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financovať výstavbu administratívnych a obchodných budov.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Zakúpiť exkluzívne dopravné práva na 1 rok pre vašu spoločnosť. Mestský úrad dovolí cestujúcim a nákladu používať len vaše stanice.{} Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financovať výstavbu nových administratívnych a obchodných budov v meste.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Zakúpiť exkluzívne dopravné práva na 1 rok pre vašu spoločnosť. Miestna správa dovolí cestujúcim a nákladu používať len vaše stanice.{} Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podplatiť miestnu správu pre zvýšenie hodnotenia tvojej spoločnosti, s rizikom ťažkého postihu pri odhalení!{}Cena: {CURRENCY_LONG} # Goal window @@ -3831,10 +3831,10 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Prestava STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Opačný smer vlaku STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Otočiť vozidlo -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Zobraziť cestovné príkazy vlakov -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Zobraziť cestovné príkazy -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Zobraziť cestovné príkazy lodí. Ctrl+klik pre zobrazenie cestovného poriadku lodí -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Zobraziť cestovné príkazy lietadla. Ctrl+klik pre zobrazenie cestovného poriadku lietadla +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Zobraziť príkazy vlaku. Ctrl+klik zobrazí cestovný poriadok vlaku +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Zobraziť príkazy vozidla. Ctrl+klik zobrazí cestovný poriadok vozidla +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Zobraziť príkazy lode. Ctrl+klik zobrazí cestovný poriadok lode +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Zobraziť príkazy lietadla. Ctrl+klik zobrazí cestovný poriadok lietadla STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o vlaku STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Zobraziť detaily o cestnom vozidle @@ -3847,7 +3847,7 @@ STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Aktuáln STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Aktuálna činnosť lietadla - kliknutím sa zastaví/spustí. Ctrl+klik presunie pohľad na cieľovú stanicu # Messages in the start stop button in the vehicle view -STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Naklada/Vyklada +STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Nakláda / Vykláda STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Opúšta STR_VEHICLE_STATUS_CRASHED :{RED}Zničené! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Pokazený @@ -3963,23 +3963,23 @@ STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Prestava STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Prestavať lietadlo na iný druh nákladu # Order view -STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Prikazy) -STR_ORDERS_TIMETABLE_VIEW :{BLACK}CP +STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Príkazy) +STR_ORDERS_TIMETABLE_VIEW :{BLACK}Cestovný poriadok STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Prepnút na zobrazenie cestovného poriadku -STR_ORDERS_LIST_TOOLTIP :{BLACK}Zoznam príkazov - kliknúť na príkaz pre označenie. CTRL+klik presunie sa na miesto zmeny +STR_ORDERS_LIST_TOOLTIP :{BLACK}Zoznam príkazov - kliknúť na príkaz pre označenie. Ctrl+klik presunie pohľad na cieľ príkazu STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} -STR_ORDERS_END_OF_ORDERS :- - Koniec prikazov - - -STR_ORDERS_END_OF_SHARED_ORDERS :- - Koniec zdielanych prikazov - - +STR_ORDERS_END_OF_ORDERS :- - Koniec príkazov - - +STR_ORDERS_END_OF_SHARED_ORDERS :- - Koniec zdieľaných príkazov - - # Order bottom buttons -STR_ORDER_NON_STOP :{BLACK}Non-stop +STR_ORDER_NON_STOP :{BLACK}Nonstop STR_ORDER_GO_TO :Choď do -STR_ORDER_GO_NON_STOP_TO :Choď non-stop do +STR_ORDER_GO_NON_STOP_TO :Choď nonstop do STR_ORDER_GO_VIA :Choď cez -STR_ORDER_GO_NON_STOP_VIA :Choď non-stop cez +STR_ORDER_GO_NON_STOP_VIA :Choď nonstop cez STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Zmeniť spôsob zastavenia pre označený príkaz STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Plne nalož čokoľvek @@ -3998,30 +3998,30 @@ STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Zmeniť STR_ORDER_REFIT :{BLACK}Prestavba STR_ORDER_REFIT_TOOLTIP :{BLACK}Vyberte druh nákladu na prestavbu v tomto poradí. Ctrl+klik na odstránenie príkazu prestavby -STR_ORDER_REFIT_AUTO :{BLACK}Automaticky modernizovať -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vyber ktorý druh tovaru sa bude automaticky nakladať. Ctrl+Klik pre odstránenie automatického nakladania. Automatické nakladanie musí byť podporované vozidlom -STR_ORDER_DROP_REFIT_AUTO :Pevný náklad +STR_ORDER_REFIT_AUTO :{BLACK}Prestavba na stanici +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vyberte druh nákladu na prestavbu v tomto príkaze. Ctrl+klik pre odstránenie pokynu na prestavbu. Prestavba na staniciach je možná iba ak ju vozidlo podporuje +STR_ORDER_DROP_REFIT_AUTO :Fixný náklad STR_ORDER_DROP_REFIT_AUTO_ANY :Dostupný náklad -STR_ORDER_SERVICE :{BLACK}Oprava +STR_ORDER_SERVICE :{BLACK}Servis STR_ORDER_DROP_GO_ALWAYS_DEPOT :Vždy choď -STR_ORDER_DROP_SERVICE_DEPOT :Servis, ak je potrebné +STR_ORDER_DROP_SERVICE_DEPOT :Servis, ak je potrebný STR_ORDER_DROP_HALT_DEPOT :Zastav -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Preskočiť tento príkaz pokiaľ nie je potrebná oprava +STR_ORDER_SERVICE_TOOLTIP :{BLACK}Preskočiť tento príkaz pokiaľ nie je potrebný servis STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Údaje vozidla na základe ktorých sa vykoná skok # Conditional order variables, must follow order of OrderConditionVariable enum STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Percento naplnenia -STR_ORDER_CONDITIONAL_RELIABILITY :Spolahlivost +STR_ORDER_CONDITIONAL_RELIABILITY :Spoľahlivosť STR_ORDER_CONDITIONAL_MAX_SPEED :Maximálna rýchlosť STR_ORDER_CONDITIONAL_AGE :Vek vozidla (v rokoch) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Vyžaduje servis STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Vždy STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Zostávajúca životnosť (v rokoch) -STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Max. spoľahlivosť +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximálna spoľahlivosť -STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Sposob porovnania údajov vozidla so zadanou hodnotou +STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Spôsob porovnania údajov vozidla so zadanou hodnotou STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :je rovné STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :nie je rovné STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :je menej ako @@ -4031,78 +4031,78 @@ STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :je viac alebo r STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :je pravda STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :je nepravda -STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Hodnota, s ktorou sa majú porovnat dáta vozidla -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Zadajte hodnotu voci ktorej sa ma porovnat +STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Hodnota, s ktorou sa majú porovnať dáta vozidla +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Zadajte hodnotu, s ktorou sa má porovnať STR_ORDERS_SKIP_BUTTON :{BLACK}Preskočiť -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Preskočiť aktuálny príkaz a začať ďalší. CTRL+klik pre skok na označený príkaz +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Preskočiť aktuálny príkaz a začať ďalší. Ctrl+klik pre skok na označený príkaz STR_ORDERS_DELETE_BUTTON :{BLACK}Vymazať STR_ORDERS_DELETE_TOOLTIP :{BLACK}Vymazať označený príkaz STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Vymazať všetky príkazy STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Prestať zdieľať -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Prestať zdieľať zoznam príkazov. Ctrl+Klik naviac zmaže všetky príkazy tohoto vozidla. +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Prestať zdieľať zoznam príkazov. Ctrl+klik naviac zmaže všetky príkazy tohoto vozidla STR_ORDERS_GO_TO_BUTTON :{BLACK}Choď do STR_ORDER_GO_TO_NEAREST_DEPOT :Choď do najbližšieho depa STR_ORDER_GO_TO_NEAREST_HANGAR :Choď do najbližšieho hangáru STR_ORDER_CONDITIONAL :Podmienený príkaz skoku STR_ORDER_SHARE :Zdieľať príkazy -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Vložiť nový príkaz pred označený príkaz alebo na koniec zoznamu. CTRL zmení príkaz pre stanicu na 'plne nalož čokoľvek', waypoint príkazy na pokračuj 'non-stop' a pre depá 'servisuj'. 'Zdieľať príkazy' alebo CTRL umožní vozidlu zdieľať príkazy s vybraným vozidlom. Kliknutím na vozidlo sa skopírujú príkazy z vozidla. Príkaz na presun do depa zneplatní automatické servisovanie vozidla +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Vložiť nový príkaz pred označený príkaz, alebo na koniec zoznamu. Ctrl zmení príkazy pre stanicu na 'plne nalož čokoľvek', príkazy pre smerový bod na 'nonstop' a príkazy pre depo na 'servis'. 'Zdieľať príkazy' alebo Ctrl umožní vozidlu zdieľať príkazy s vybraným vozidlom. Kliknutím na vozidlo sa skopírujú príkazy z vozidla. Príkaz na presun do depa vypne automatický servis vozidla -STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Zobraziť všetky vozidlá s rovnakým zoznamom príkazov +STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Zobraziť všetky vozidlá, ktoré zdieľajú tento zoznam príkazov # String parts to build the order string -STR_ORDER_GO_TO_WAYPOINT :Chod cez {WAYPOINT} -STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Chod bez zastavky cez {WAYPOINT} +STR_ORDER_GO_TO_WAYPOINT :Choď cez {WAYPOINT} +STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Choď nonstop cez {WAYPOINT} STR_ORDER_SERVICE_AT :Servis v -STR_ORDER_SERVICE_NON_STOP_AT :Servis non-stop v +STR_ORDER_SERVICE_NON_STOP_AT :Servis nonstop v STR_ORDER_NEAREST_DEPOT :najbližší STR_ORDER_NEAREST_HANGAR :najbližší hangár STR_ORDER_TRAIN_DEPOT :Depo -STR_ORDER_ROAD_VEHICLE_DEPOT :Cestné depo +STR_ORDER_ROAD_VEHICLE_DEPOT :Garáž STR_ORDER_SHIP_DEPOT :Lodenica STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_REFIT_ORDER :(Prestavba na {STRING}) -STR_ORDER_REFIT_STOP_ORDER :(Prestavať na {STRING} a zastaviť) -STR_ORDER_STOP_ORDER :(Zastaviť) +STR_ORDER_REFIT_STOP_ORDER :(Prestavba na {STRING} a zastav) +STR_ORDER_STOP_ORDER :(Zastav) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Predpokladané) STR_ORDER_FULL_LOAD :(Plne nalož) -STR_ORDER_FULL_LOAD_ANY :(Plne nalož akýkoľvek náklad) +STR_ORDER_FULL_LOAD_ANY :(Plne nalož čokoľvek) STR_ORDER_NO_LOAD :(Nenakladaj) -STR_ORDER_UNLOAD :(Vylož a nalož náklad) +STR_ORDER_UNLOAD :(Vylož a zober náklad) STR_ORDER_UNLOAD_FULL_LOAD :(Vylož a čakaj na plné naloženie) -STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Vylož a pockaj na plné naloženie akéhokoľvek nákladu) +STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Vylož a čakaj na plné naloženie čohokoľvek) STR_ORDER_UNLOAD_NO_LOAD :(Vylož a nechaj prázdne) -STR_ORDER_TRANSFER :(Prelož a nalož) +STR_ORDER_TRANSFER :(Prelož a zober náklad) STR_ORDER_TRANSFER_FULL_LOAD :(Prelož a čakaj na plné naloženie) -STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Prelož a čakaj na plné naloženie akéhokoľvek nákladu) +STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Prelož a čakaj na plné naloženie čohokoľvek) STR_ORDER_TRANSFER_NO_LOAD :(Prelož a nechaj prázdne) STR_ORDER_NO_UNLOAD :(Nevykladaj a nalož) STR_ORDER_NO_UNLOAD_FULL_LOAD :(Nevykladaj a čakaj na plné naloženie) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Nevykladaj a čakaj na plné naloženie akéhokoľvek nákladu) -STR_ORDER_NO_UNLOAD_NO_LOAD :(Žiadné vykládanie a nakládanie) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Nevykladaj a čakaj na plné naloženie čohokoľvek) +STR_ORDER_NO_UNLOAD_NO_LOAD :(Žiadne vykládanie ani nakládanie) -STR_ORDER_AUTO_REFIT :(Upraviť na {STRING}) -STR_ORDER_FULL_LOAD_REFIT :(Plné naloženie s automatickým nakladaním do {STRING}) -STR_ORDER_FULL_LOAD_ANY_REFIT :(Plné naloženie akéhokoľvek nákladu s automatickým nakladaním do {STRING}) -STR_ORDER_UNLOAD_REFIT :(Vyložiť a zobrať náklad automaticky do {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Vyložiť a čakať pre plné naloženie automaticky do {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Vylož a čakaj na akékoľvek plné naloženie automaticky do {STRING}) -STR_ORDER_TRANSFER_REFIT :(Presuň sa a zober náklad s automatickým naložením do {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Presuň sa a čakaj pre plné naloženie automaticky do {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Prelož a čakaj pre akékoľvek plné naloženie s automatickým nakladaním do {STRING}) -STR_ORDER_NO_UNLOAD_REFIT :(Nevykladať a zobrať náklad s automatickým nakladaním do {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Nevykladať a čakať pre plné naloženie s automatickým nakladaním do {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Nevykladať a čakať na plné naloženie s nastavením do {STRING}) +STR_ORDER_AUTO_REFIT :(Prestavať na {STRING}) +STR_ORDER_FULL_LOAD_REFIT :(Plne nalož s prestavbou na {STRING}) +STR_ORDER_FULL_LOAD_ANY_REFIT :(Plne nalož čokoľvek s prestavbou na {STRING}) +STR_ORDER_UNLOAD_REFIT :(Vylož a zober náklad s prestavbou na {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Vylož a čakaj na plné naloženie s prestavbou na {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Vylož a čakaj na plné naloženie čohokoľvek s prestavbou na {STRING}) +STR_ORDER_TRANSFER_REFIT :(Prelož a zober náklad s prestavbou na {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Prelož a čakaj na plné naloženie s prestavbou na {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Prelož a čakaj na plné naloženie čohokoľvek s prestavbou na {STRING}) +STR_ORDER_NO_UNLOAD_REFIT :(Nevykladaj a zober náklad s prestavbou na {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Nevykladaj a čakaj na plné naloženie s prestavbou na {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Nevykladaj a čakaj na plné naloženie čohokoľvek s prestavbou na {STRING}) STR_ORDER_AUTO_REFIT_ANY :dostupný náklad @@ -4110,11 +4110,11 @@ STR_ORDER_STOP_LOCATION_NEAR_END :[blízky koniec STR_ORDER_STOP_LOCATION_MIDDLE :[stred] STR_ORDER_STOP_LOCATION_FAR_END :[ďaleký koniec] -STR_ORDER_OUT_OF_RANGE :{RED} (Nasledovný ciel je mimo dosahu) +STR_ORDER_OUT_OF_RANGE :{RED} (Nasledovný cieľ je mimo dosahu) STR_ORDER_CONDITIONAL_UNCONDITIONAL :Skok na príkaz {COMMA} -STR_ORDER_CONDITIONAL_NUM :Skok na príkaz {COMMA} ak {STRING} {STRING} {COMMA} -STR_ORDER_CONDITIONAL_TRUE_FALSE :Skok na príkaz {COMMA} ak {STRING} {STRING} +STR_ORDER_CONDITIONAL_NUM :Skok na príkaz {COMMA}, ak {STRING} {STRING} {COMMA} +STR_ORDER_CONDITIONAL_TRUE_FALSE :Skok na príkaz {COMMA}, ak {STRING} {STRING} STR_INVALID_ORDER :{RED} (Neplatný príkaz) @@ -4126,22 +4126,22 @@ STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Prepnú STR_TIMETABLE_TOOLTIP :{BLACK}Cestovný poriadok - kliknite na príkaz pre jeho označenie STR_TIMETABLE_NO_TRAVEL :Necestuj -STR_TIMETABLE_NOT_TIMETABLEABLE :Cestovanie (automaticky; nastavené po ďalšom zadaní objednávky) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Cesta (neurcený cas) +STR_TIMETABLE_NOT_TIMETABLEABLE :Cestuj (automaticky; nastavené po ďalšom zadaní príkazu) +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Cesta (neurčený čas) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Cestovanie (bez cestovného plánu) s najviac {2:VELOCITY} STR_TIMETABLE_TRAVEL_FOR :Cesta {STRING} -STR_TIMETABLE_TRAVEL_FOR_SPEED :Cestovanie na {STRING} s {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_SPEED :Cesta {STRING} s najviac {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Cesta ({STRING}, nerozvrhnuté) -STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Cesta (for {STRING}, nerozvrhnuté) pri najviac {VELOCITY} +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Cesta (for {STRING}, nerozvrhnuté) s najviac {VELOCITY} STR_TIMETABLE_STAY_FOR_ESTIMATED :(prestávka {STRING}, nerozvrhnuté) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(cesta {STRING}, nerozvrhnuté) STR_TIMETABLE_STAY_FOR :prestávka {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :a cestuj {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}d{P eň ni ní} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P "" y ov} +STR_TIMETABLE_TICKS :{COMMA}{NBSP}tiknut{P ie ia í} STR_TIMETABLE_TOTAL_TIME :{BLACK}Na dokončenie cestovného poriadku je potrebných {STRING} -STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Na dokončenie cestovného poriadku je potrebných min. {STRING} (nie všetko je určené) +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Na dokončenie cestovného poriadku je potrebných aspoň {STRING} (nie všetko je určené) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Toto vozidlo ide presne STR_TIMETABLE_STATUS_LATE :{BLACK}Toto vozidlo mešká {STRING} @@ -4152,26 +4152,26 @@ STR_TIMETABLE_STATUS_START_AT :{BLACK}Tento ce STR_TIMETABLE_STARTING_DATE :{BLACK}Začiatočný dátum STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyberte dátum začiatku cestovného poriadku. Ctrl+klik nastaví počiatočný dátum tohto cestovného poriadku pre všetky vozidlá zdieľajúce tieto príkazy na základe ich relatívneho poradia, ak je cestovný poriadok kompletne vyplnený -STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmenit cas -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmenit dlžku trvania oznaceného príkazu +STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmeniť čas +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmeniť dĺžku trvania označeného príkazu -STR_TIMETABLE_CLEAR_TIME :{BLACK}Vymazat cas -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Vymazať dĺžku trvania označeného príkazu +STR_TIMETABLE_CLEAR_TIME :{BLACK}Odstrániť čas +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Odstrániť dĺžku trvania označeného príkazu -STR_TIMETABLE_CHANGE_SPEED :{BLACK}Zmeň maximálnu rýchlosť -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Zmeň maximálnu rýchlosť zvoleného poriadku +STR_TIMETABLE_CHANGE_SPEED :{BLACK}Zmeniť maximálnu rýchlosť +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Zmeniť maximálnu rýchlosť označeného príkazu -STR_TIMETABLE_CLEAR_SPEED :{BLACK}Odstráň obmedzenie maximánej rýchlosti -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstráň obmedzenie maximánej rýchlosti pre zvolený poriadok +STR_TIMETABLE_CLEAR_SPEED :{BLACK}Odstrániť rýchlostné obmedzenie +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstrániť obmedzenie maximánej rýchlosti označeného príkazu -STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset meskania +STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset meškania STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Vynulovať počítadlo meškania, takže vozidlo pôjde presne -STR_TIMETABLE_AUTOFILL :{BLACK}Vyplnit -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Naplň časový plán automaticky s hodnotami z nasledujúcej trasy (CTRL-klik - pokúsiť sa udržať čakacie doby) +STR_TIMETABLE_AUTOFILL :{BLACK}Automaticky vyplniť +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vyplniť časový plán automaticky s hodnotami z nasledujúcej trasy (Ctrl+klik - pokúsiť sa udržať čakacie doby) -STR_TIMETABLE_EXPECTED :{BLACK}Čakať -STR_TIMETABLE_SCHEDULED :{BLACK}Naplánovaný +STR_TIMETABLE_EXPECTED :{BLACK}Očakávané +STR_TIMETABLE_SCHEDULED :{BLACK}Plánované STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Prepnúť medzi očakávaným a plánovaným STR_TIMETABLE_ARRIVAL_ABBREVIATION :P: From 4dc986f32da5c737e3ec3ab40828228b8a3cdc1e Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 9 Nov 2020 17:51:50 +0000 Subject: [PATCH 295/601] Update: Translations from eints slovak: 19 changes by FuryPapaya --- src/lang/slovak.txt | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 393a04c3ff..1b841e6aaa 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3708,10 +3708,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Klonova STR_DEPOT_CLONE_SHIP :{BLACK}Klonovať loď STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klonovať lietadlo -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Zakúpi kópiu vlaku vrátane vozňov. Klikni na toto tlačidlo a potom na vlak v depe alebo mimo neho. Stlačením CTRL budú príkazy zdielané. Shift+klik zobrazí odhad nákladov -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Zakúpi kópiu cestného vozidla. Klikni na toto tlačidlo a potom na vozidlo v garáži alebo mimo nej. CTRL+klik budú príkazy zdieľané. Shift+klik zobrazí odhad nákladov. -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Zakúpi kópiu lode. Klikni na toto tlačidlo a následne na loď v depe alebo mimo neho. CTRL+klik skopíruje aj príkazy -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Zakúpi kópiu lietadla. Klikni na toto tlačidlo a potom na lietadlo v hangári alebo mimo neho. CTRL+Klik budú príkazy zdielané. Shift+klik zobrazí odhad nákladov +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Zakúpiť kópiu vlaku vrátane vagónov. Kliknite na toto tlačidlo a potom na vlak v depe alebo mimo neho. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Zakúpiť kópiu cestného vozidla. Kliknite na toto tlačidlo a potom na vozidlo v garáži alebo mimo nej. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Zakúpiť kópiu lode. Kliknite na toto tlačidlo a potom na loď v lodenici alebo mimo nej. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Zakúpiť kópiu lietadla. Kliknite na toto tlačidlo a potom na lietadlo v hangári alebo mimo neho. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu depa. Ctrl+klik otvorí nové okno s pohľadom na depo STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu garáže. Ctrl+klik otvorí nové okno s pohľadom na garáž @@ -3807,19 +3807,19 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Zachovan STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vlaku. Ctrl+klik bude sledovať vlak -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na vozidlo. CTRL+klik bude sledovať vozidlo v hlavnom okne -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na loď. Ctrl+klik bude sledovať loď -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na lietadlo. Ctrl+klik bude sledovať lietadlo +STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vozidla. Ctrl+klik bude sledovať vozidlo +STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lode. Ctrl+klik bude sledovať loď +STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lietadla. Ctrl+klik bude sledovať lietadlo -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vlak do depa. CTRL+klik len servis. -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vozidlo do depa. CTRL+klik len servis. -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať loď do lodenice. CTRL+klik len servis -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať lietadlo do hangáru. CTRL+klik len servis +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vlak do depa. Ctrl+klik iba servis +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vozidlo do garáže. Ctrl+klik iba servis. +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať loď do lodenice. Ctrl+klik iba servis +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať lietadlo do hangáru. Ctrl+klik iba servis -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Zakúpi kópiu vlaku vrátane vozňov. CTRL+klik bude zdieľať príkazy. Shift+Klik ukáže odhadované náklady bez kúpy -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Zakúpi kópiu cestného vozidla. Stlačením CTRL+klik budú príkazy zdieľané. Shift+klik zobrazí odhad nákladov -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Zakúpi kópiu lode. Stlačením CTRL+klik budú príkazy zdieľané. Shift+klik zobrazí odhad nákladov -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Zakúpi kópiu lietadla. Stlačením CTRL+klik budú príkazy zdieľané. Shift+klik zobrazí odhad nákladov +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Zakúpiť kópiu vlaku vrátane vagónov. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Zakúpiť kópiu cestného vozidla. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Zakúpiť kópiu lode. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Zakúpiť kópiu lietadla. Ctrl+klik bude zdieľať príkazy. Shift+klik zobrazí odhadovanú cenu STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Prinútiť vlak pokračovať cez návestidlo bez čakania na zelenú @@ -3828,8 +3828,8 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Prestava STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Prestavať loď na iný druh nákladu STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Prestavať lietadlo na iný druh nákladu -STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Opačný smer vlaku -STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Otočiť vozidlo +STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Otočiť vlak naopak +STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Prinútiť vozidlo otočiť sa naopak STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Zobraziť príkazy vlaku. Ctrl+klik zobrazí cestovný poriadok vlaku STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Zobraziť príkazy vozidla. Ctrl+klik zobrazí cestovný poriadok vozidla @@ -4507,7 +4507,7 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... mus STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Vlaky sa dajú nahradiť len v depe STR_ERROR_TRAIN_TOO_LONG :{WHITE}Vlak je príliš dlhý -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Nemôžem otočiť vozidlo... +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Nemôžem otočiť vozidlo naopak... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... zložené z viacerých jednotiek STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Nekompatibilné typy koľají @@ -4670,7 +4670,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Začnite # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nemôžeš nechať vlak prejsť cez návestidlo keď hrozí nebezpečenstvo... -STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nemožno zmeniť smer vlaku... +STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Nemožno otočiť vlak naopak... STR_ERROR_TRAIN_START_NO_POWER :Vlak nemá energiu STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Nemôžem otočiť cestné vozidlo... From 79f00277c4ea038e227ff1df5c3eebaf9a465be1 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 10 Nov 2020 17:51:54 +0000 Subject: [PATCH 296/601] Update: Translations from eints slovak: 16 changes by FuryPapaya --- src/lang/slovak.txt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 1b841e6aaa..c2a65d874e 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1177,8 +1177,8 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}Nieje do # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Nastavenia STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrovací reťazec: -STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Rozšíriť všetko -STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Zbaliť všetky +STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Rozbaliť všetko +STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Zabaliť všetko STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(nie je dostupné vysvetlenie) STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Pôvodná hodnota: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Nastavenie typu: {ORANGE}{STRING} @@ -1190,10 +1190,10 @@ STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Nastavenia spol STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategória: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Typ: -STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Filtruje zoznam podľa definovaných nastavení -STR_CONFIG_SETTING_RESTRICT_BASIC :Základné nastavenia -STR_CONFIG_SETTING_RESTRICT_ADVANCED :Pokročilé nastavenia -STR_CONFIG_SETTING_RESTRICT_ALL :Odborné nastavenia / všetky nastavenia +STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Obmedzuje zoznam nižšie podľa definovaných nastavení +STR_CONFIG_SETTING_RESTRICT_BASIC :Základné (zobrazí iba dôležité nastavenia) +STR_CONFIG_SETTING_RESTRICT_ADVANCED :Pokročilé (zobrazí väčšinu nastavení) +STR_CONFIG_SETTING_RESTRICT_ALL :Odborné (zobrazí všetky nastavenia, vrátane tých podivných) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Nastavenia s odlišnou hodnotou ako je predvolená STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Nastavenia s odlišnou hodnotou než aké má tvoja nová hra @@ -1473,8 +1473,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Zatvorí okno k STR_CONFIG_SETTING_AUTOSAVE :Automatické ukladanie: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vyberte interval pre automatické ukladanie hry -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Použiť {STRING} dátum v názve uloženej hry -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formát dátumov v názvoch uložených hier. +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Použiť {STRING} formát dátumu v názve uloženej hry +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formát dátumu v názvoch uložených hier STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :dlhý (31st Dec 2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :krátky (31-12-2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) @@ -1739,37 +1739,37 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Vyťaženie kr STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Často je viac ciest medzi dvoma stanicami. Cargodist vyťaží najprv najkratšiu cestu, potom využije druhú najkratšiu cestu až kým nebude vyťažená atď. Vyťaženie je určené podľa odhadu kapacity a plánovaného využitia. Ak sú vyťažené všetky trasy a nepostačuje to, preťaží všetky trasy, s preferenciou najkapacitnejšej. Väčšinou algoritmus neodhadne kapacitu presne. Toto nastavenie umožňuje určiť na koľko percent musí byť vyťažená prvá pred výberom nasledujúcej dlhšej. Nastavte na menej ako 100%, aby sa zabránilo preplneniu staníc v prípade nadhodnotenia kapacity. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jednotky rýchlosti: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vždy, keď sú zobrazené rýchlosti v používateľskom rozhraní, zobrazia sa vo vybraných jednotkách +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vždy, keď sa zobrazí rýchlosť v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiálne (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrické (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Jednotky výkonu vozidiel: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vždy, keď sú zobrazené výkony vozidla v používateľskom rozhraní, zobrazia sa vo vybraných jednotkách +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vždy, keď sa zobrazí výkon vozidla v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperiálne (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metrické (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Jednotky váhy: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Vždy, keď sú zobrazené váhy v používateľskom rozhraní, zobrazia sa vo vybraných jednotkách +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Jednotky hmotnosti: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Vždy, keď sa zobrazí hmotnosť v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperiálne ("krátka" t/tona) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metrické (t/tona) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Jednotky objemu: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Vždy, keď sú zobrazené objemy v používateľskom rozhraní, zobrazia sa vo vybraných jednotkách +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Vždy, keď sa zobrazí objem v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperiálne (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metrické (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Jednotky ťažnej sily: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Vždy, keď sa zobrazí ťažná sila v používateľskom rozhraní, zobrazí sa vo vybraných jednotkách +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Jednotky trakčnej sily: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Vždy, keď sa zobrazí trakčná sila v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperiálne (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metrické (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Jednotky výšky: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Vždy, keď sú zobrazené výšky v používateľskom rozhraní, zobrazia sa vo vybraných jednotkách +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Vždy, keď sa zobrazí výška v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperialne (ft) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrické (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) From 8e4a3a0e764a05ed8655629facdadf475eb31e28 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 11 Nov 2020 17:51:36 +0000 Subject: [PATCH 297/601] Update: Translations from eints danish: 1 change by achton --- src/lang/danish.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index b284d0f60f..c9de1ecefe 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3824,7 +3824,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vægt: { STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Overskud i år: {LTBLUE}{CURRENCY_LONG} (sidste år: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pålidelighed: {LTBLUE}{COMMA}% {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA} -STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}Ingen{STRING} STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO_LONG}{3:STRING} STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacitet: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) From 92236ccd2f9a2cd5dcd53f7efe40462b69c16ed2 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 12 Nov 2020 17:51:47 +0000 Subject: [PATCH 298/601] Update: Translations from eints indonesian: 117 changes by dimaspaf14 --- src/lang/indonesian.txt | 117 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 9ee4f619aa..3c285aa980 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -187,6 +187,8 @@ STR_COLOUR_ORANGE :Oranye STR_COLOUR_BROWN :Coklat STR_COLOUR_GREY :Abu-abu STR_COLOUR_WHITE :Putih +STR_COLOUR_RANDOM :Acak +STR_COLOUR_DEFAULT :Standar # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mil/j @@ -234,6 +236,7 @@ STR_BUTTON_SORT_BY :{BLACK}Urutkan STR_BUTTON_LOCATION :{BLACK}Lokasi STR_BUTTON_RENAME :{BLACK}Ubah nama STR_BUTTON_CATCHMENT :{BLACK}Jangkauan +STR_TOOLTIP_CATCHMENT :{BLACK}Tombol tampilan area cakupan STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Tutup window STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Judul Jendela - klik dan tahan disini untuk memindahkan jendela @@ -262,6 +265,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Mengakti STR_BUTTON_DEFAULT :{BLACK}Standar STR_BUTTON_CANCEL :{BLACK}Batal STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Peringatan: Administrator server mungkin dapat membaca teks apa pun yang dimasukkan di sini. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -335,6 +339,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Perbesar STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Perkecil tampilan STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Membangun rel kereta STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Membangun jalan +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Bangun jalur trem STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Membangun pelabuhan kapal STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Membangun bandara STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Buka toolbar lansekap untuk menaik-turunkan tanah, menanam pohon, dsb. @@ -355,6 +360,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Pertumbu STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Pertumbuhan Kota STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Membuat Industri STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Pembangunan Jalan +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Pembangunan Jalur Tram STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Menanam Pohon. Shift untuk menampilkan perkiraan biaya STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Memasang pengenal STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Tempatkan Obyek. Shift untuk menampilkan perkiraan biaya @@ -673,6 +679,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Kosong STR_PLAYLIST_CHANGE_SET :{BLACK}Gantikan set STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Hapus program saat ini (hanya Bebas 1 atau Bebas 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mengubah pilihan musik ke set yang terinstal lainnya STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik pada musik track untuk menambah pada program sekarang (hanya Bebas 1 atau Bebas 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik pada track musik untuk menghapusnya dari program saat ini. (Bebas 1 atau Bebas 2 saja) @@ -857,6 +864,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_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Membuka jendela grup yang berfokus pada rombongan kendaraan 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} @@ -923,6 +931,11 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Atur sendiri... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgia (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iran (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Rubel Rusia Baru (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexiko(MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Dollar Taiwan Baru (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Cina (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dollar Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :India Rupee (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kendaraan jalan raya @@ -986,6 +999,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kali dua STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Kali empat STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Ukuran font +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Pilih ukuran font antarmuka yang akan digunakan STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kali dua @@ -1173,6 +1187,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Ijinkan pembent STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Ijinkan pembentukan tanah dibawah bangunan dan trek tanpa merusaknya STR_CONFIG_SETTING_CATCHMENT :Ijinkan ukuran jangkauan wilayah lebih realistik: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Gunakan area penarikan berbeda untuk tipe stasiun dan airport yang berbeda +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stasiun perusahaan dapat melayani pabrik dengan stasiun netral terpasang: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Jika diaktifkan, industri dengan stasiun terlampir (seperti Rig Minyak) juga dapat dilayani oleh stasiun milik perusahaan yang dibangun di dekatnya. Saat dinonaktifkan, industri ini hanya dapat dilayani oleh stasiun yang terhubung. Stasiun perusahaan terdekat mana pun tidak akan dapat melayani mereka, dan stasiun terlampir tidak akan melayani hal lain selain industri STR_CONFIG_SETTING_EXTRADYNAMITE :Ijinkan menggusur lebih banyak jalan, jembatan, terowongan milik kota, dsb: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Permudah membuang infrasturktur yang dimiliki kota STR_CONFIG_SETTING_TRAIN_LENGTH :Panjang kereta maksimum: {STRING} @@ -1258,6 +1274,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tidak di STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Pemeliharaan Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Jika dinyalakan, infrastruktur membutuhkan biaya pemeliharaan. Biaya berkembang secara proporsional sesuai dengan ukuran jaringan, lebih berdampak pada perusahaan besar dari pada perusahaan kecil +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Memulai warna perusahaan: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Pilih warna awal perusahaan STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Bandara tidak kedaluarsa: {STRING} @@ -1293,6 +1310,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Tampilkan popul STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Tampilkan populasi kota di label nama kota pada peta STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Ketebalan garis pada grafik: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Tebalnya garis pada grafis. Garis tipis akan mudah dibaca ,garis tipis juga lebih terlihat +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Tampilkan nama NewGRF di jendela beli kendaraan: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Tambahkan garis ke jendela beli kendaraan, yang menunjukkan NewGRF kendaraan yang dipilih berasal. STR_CONFIG_SETTING_LANDSCAPE :Bentang Darat: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Bentang darat akan menegaskan skenario bermain dasar dengan muatan berbeda dan kebutuhan pertumbuhan kota. Data NewGRF dan Game Script lain membolehkan lebih banyak pengaturan. @@ -1343,10 +1362,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Warna daratan d STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Hijau STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Hijau Gelap STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet +STR_CONFIG_SETTING_SCROLLMODE :Perilaku pergeseran area viewport: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Kelakuan waktu menggerakkan peta STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Gerakan viewport memakai tombol kanan tetikus, posisi tetikus terkunci STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Gerakan peta memakai tombol kanan tetikus, posisi tetikus terkunci STR_CONFIG_SETTING_SCROLLMODE_RMB :Gerakan peta memakai tombol kanan tetikus +STR_CONFIG_SETTING_SCROLLMODE_LMB :Pindahkan peta dengan klik kiri tetikus STR_CONFIG_SETTING_SMOOTH_SCROLLING :Pergeseran pandangan viewport secara halus: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Menyetel bagaimana tampilan utama menggeser posisi di peta kecil. Jika dinyalakan, peta akan bergeser secara halus. Jika dimatikan, peta langsung menuju tempat yang di klik STR_CONFIG_SETTING_MEASURE_TOOLTIP :Tampilkan ukuran ketika menggunakan alat pembangun: {STRING} @@ -1379,6 +1400,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Kontrol-klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Non-aktifkan STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Tutup jendela dengan klik kanan: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Menutup jendela dengan mengklik kanan di dalamnya. Menonaktifkan keterangan alat saat klik kanan! STR_CONFIG_SETTING_AUTOSAVE :Simpan otomatis: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Memilih jarak waktu antara menyimpan data game @@ -1466,6 +1488,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Ijinkan kecerda STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Bolehkan pemain komputer AI untuk ikut permainan multiplayer STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes sebelum scripts di-tahan: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Batas maksimal langkah perhitungan yang boleh ambil oleh skript dalam satu putaran +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximal memory yang digunakan per script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Berapa banyak memori yang dapat dikonsumsi satu skrip sebelum dihentikan secara paksa. Ini mungkin perlu ditingkatkan untuk peta besar. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Jangka waktu perbaikan dalam persen: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pilih apakah servis kendaraan dipicu oleh waktu terlewat sejak servis terakhir atau dari kehandalan menjatuh beberapa persentase dari kehandalan maximum @@ -1524,11 +1549,15 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Penuh STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Berita berwarna tampil pada: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Tahun saat surat kabar/koran menjadi berwarna. Sebelum tahun ini, koran menggunakan warna hitam-putih STR_CONFIG_SETTING_STARTING_YEAR :Tahun mulai: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Penilaian akhir tahun: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Tahun pertandingan berakhir untuk tujuan mencetak gol. Pada akhir tahun ini, skor perusahaan dicatat dan layar skor tertinggi ditampilkan, tetapi para pemain dapat terus bermain setelah itu.{} Jika ini sebelum tahun mulai, layar skor tinggi tidak pernah ditampilkan. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Tidak pernah STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktifkan pertumbuhan ekonomi yang stabil (jarang berubah): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ketika diaktifkan, produksi industri mengalami perubahan lebih sering, dalam gerakan kecil. Pengaturan tidak berpengaruh jika jenis industri disediakan oleh NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Ijinkan pembelian saham perusahaan lain: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Jika diaktifkan, pemain dibolehkan membeli saham suatu perusahaan. Saham hanya bisa dibeli saat perusahaan memasuki umur tertentu +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Usia minimum perusahaan untuk memperdagangkan saham: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set umur minimal perusahaan saat sahamnya dapat dibeli atau dijual. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Persentase keuntungan akhir dari sistem pengisi: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Persentase pendapatan yang diberikan dari sistem pengisi, memberikan lebih banyak kendali pendapatan @@ -1570,7 +1599,9 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mengaktifkan se STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Dilarang STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Diijinkan STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Diijinkan, layout kota sendiri +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generasi Kargo Kota: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Seberapa banyak kargo dihasilkan oleh rumah di kota , relatif terhadap keseluruhan populasi kota.{}Pertumbuhan kuadrat: Kota yang membesar dua kali menghasilkan penumpang empat kali lipat.{}Pertumbuhan linier: Kota yang membesar dua kali menghasilkan penumpang dua kali lipat. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kuadrat (asli) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linier STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Penempatan pohon dalam permainan: {STRING} @@ -1771,6 +1802,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Cari kon STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Tampilkan pengaturan permainan dan AI STR_INTRO_TOOLTIP_QUIT :{BLACK}Keluar OpenTTD +STR_INTRO_BASESET :{BLACK}Kumpulan grafik dasar yang dipilih saat ini hilang {NUM} sprite {P ..}. Silakan periksa pembaruan untuk baseset. STR_INTRO_TRANSLATION :{BLACK}Terjemahan ini kurang {NUM} kalimat. Bantu Openttd dengan menjadi Penterjemah. lihat readme.txt lebih lanjut. # Quit window @@ -2072,6 +2104,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Putuskan STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server terkunci, masukkan kata kunci STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Perusahaan terkunci, masukkan kata kunci +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Daftar klien # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Daftar klien @@ -2136,6 +2169,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Kata kun STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server penuh STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Anda ditolak memasuki server ini STR_NETWORK_ERROR_KICKED :{WHITE}Anda diusir dari permainan +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Alasan: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Tidak boleh curang di server ini STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Anda mengirim terlalu banyak perintah ke server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Jangan terlalu lama memasukkan kata kunci @@ -2195,6 +2229,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} te STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Anda telah memberi {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server menutup sesi STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server memulai ulang...{}Tunggulah... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} telah dikeluarkan. Alasan: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Mengunduh konten @@ -2412,7 +2447,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Membangu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Membangun terowongan trem. Shift untuk menampilkan perkiraan biaya STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Bangun/Bongkar konstruksi jalanan STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Membangun/bongkar konstruksi jalur trem +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konversi/Upgrade jenis tram. Shift untuk menampilkan perkiraan biaya +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konversi/Upgrade jenis tram. Shift untuk menampilkan perkiraan biaya +STR_ROAD_NAME_ROAD :Jalan +STR_ROAD_NAME_TRAM :Jalur trem # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Arah Bengkel Kendaraan @@ -2597,8 +2636,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Muatan diterima: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipe Rel: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipe jalan: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipe Trem: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Batasan kecepatan rel: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Batasan kecepatan jalan: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Batas kecepatan trem: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Bebatuan @@ -2698,20 +2740,31 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Tim OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}laju bingkai STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Rata simulasi: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Jumlah detak permainan tersimulasi per detik. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Tampilan laju bingkai: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Jumlah bingkai video yang dirender per detik. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Faktor kecepatan permainan saat ini: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beberapa cepat permainan lagi berjalan, dibanding dengan kecepatan diharapkan memakai rata simulasi biasa. STR_FRAMERATE_CURRENT :{WHITE}Sekarang +STR_FRAMERATE_AVERAGE :{WHITE}Rata-rata STR_FRAMERATE_MEMORYUSE :{WHITE}Memori STR_FRAMERATE_DATA_POINTS :{WHITE}Data tergantung oleh ukuran {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} bingkai/dtk +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} bingkai/detik +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} bingkai/dtk +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}Total pengulangan permainan: STR_FRAMERATE_GL_ECONOMY :{WHITE} Penanganan kargo: STR_FRAMERATE_GL_TRAINS :{WHITE} Titik kereta: STR_FRAMERATE_GL_ROADVEHS :{WHITE} Titik kendaraan: @@ -2723,15 +2776,25 @@ STR_FRAMERATE_DRAWING :{BLACK}Render g STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Viewport dunia: STR_FRAMERATE_VIDEO :{BLACK}Keluaran Video: STR_FRAMERATE_SOUND :{WHITE}Mixing suara: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Total GS/AI: +STR_FRAMERATE_GAMESCRIPT :{BLACK}Script Permainan: +STR_FRAMERATE_AI :{BLACK} Bot {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Pengulangan permainan STR_FRAMETIME_CAPTION_GL_ECONOMY :Penanganan kargo STR_FRAMETIME_CAPTION_GL_TRAINS :Titik kereta STR_FRAMETIME_CAPTION_GL_ROADVEHS :Titik kendaraan STR_FRAMETIME_CAPTION_GL_SHIPS :Titik kapal STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Titik pesawat STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Titik dunia +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Jarak tunda linkgraph +STR_FRAMETIME_CAPTION_DRAWING :Render grafis +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Rendering viewport dunia +STR_FRAMETIME_CAPTION_VIDEO :Keluaran Video STR_FRAMETIME_CAPTION_SOUND :Mixing suara +STR_FRAMETIME_CAPTION_ALLSCRIPTS :totaI script GS/A +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script Game STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2758,6 +2821,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Rincian STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tidak ada informasi yang tersedia STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Timpa Berkas +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Yakin ingin menimpa berkas yang ada? STR_SAVELOAD_OSKTITLE :{BLACK}Masukkan nama dari permainan tersimpan @@ -2877,7 +2943,10 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet/warna: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standar (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standar (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Warisan (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :(tidak ada) STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Tidak ada informasi yang tersedia STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Berkas yang cocok tidak diketemukan @@ -2926,6 +2995,8 @@ STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Mewakili STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pindahkan sprite, mengubah offset X dan Y STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relatif STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset offset relatif saat ini +STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute) +STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset: {NUM}, Y offset: {NUM} (Relative) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Pilih sprite STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Pilih sebuah sprite di manapun pada layar @@ -2956,6 +3027,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Baca akhir spri STR_NEWGRF_ERROR_GRM_FAILED :Sumber GRF yang diminta tidak tersedia (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} dinonaktifkan oleh {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format sprite salah/tidak diketahui (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Terlalu banyak elemen dalam daftar nilai properti (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pemanggilan produksi industri tidak valid (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Peringatan! @@ -2987,6 +3060,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informasi muat ulang untuk '{1:ENGINE}' berbeda dengan daftar beli setelah konstruksi. Ini menyebabkan pembaruan otomatis gagal memuat ulang dengan benar STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' menyebabkan perulangan tanpa akhir di tingkat produksi STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} mengembalikan hasil tidak dikenal/salah {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' mengembalikan jenis kargo yang tidak valid dalam panggilan produksi {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3020,6 +3094,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Masukkan STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kota STR_TOWN_DIRECTORY_NONE :{ORANGE}- Tidak Ada - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Kota){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nama-nama kota - Klik pada nama untuk mengarahkan pandangan utama pada kota. Ctrl+Click akan membuka viewport baru pada lokasi kota STR_TOWN_POPULATION :{BLACK}Populasi Dunia: {COMMA} @@ -3052,6 +3127,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Ubah nama Kota # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Pemerintah Kota {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Tunjukkan zona batas otoritas lokal STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Peringkat Perusahaan Transportasi: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Tindakan yang tersedia: @@ -3080,6 +3157,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Kolusi # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Target STR_GOALS_SPECTATOR_CAPTION :{WHITE}Target Global +STR_GOALS_SPECTATOR :Target Global STR_GOALS_GLOBAL_TITLE :{BLACK}Target global: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Tidak ada - @@ -3319,9 +3397,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Tidak Ada - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% Terkirim){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} dan {NUM} banyak lagi... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nama-nama industri - klik di nama untuk mengarahkan pandangan utama pada industri. Ctrl+Click akan membuka viewport baru pada lokasi industri STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Muatan diterima: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Kargo yang diproduksi: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Semua jenis kargo +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Tidak ada # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3331,6 +3417,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Arahkan STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tingkat produksi: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industri akan segera ditutup! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produksi: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3390,6 +3479,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Kelompok STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik untuk membuat kelompok STR_GROUP_DELETE_TOOLTIP :{BLACK}Hapus kelompok terpilih STR_GROUP_RENAME_TOOLTIP :{BLACK}Ubah nama kelompok terpilih +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Mengubah livery dari grup yang dipilih STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik untuk memproteksi kelompok ini dari perintah penggantian otomatis STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Hapus Kelompok @@ -3412,14 +3502,17 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Monorel Baru STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Maglev Baru STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Kendaraan Baru +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Kendaraan Trem Baru ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Kereta Baru +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Kendaraan Baru STR_BUY_VEHICLE_SHIP_CAPTION :Kapal Baru STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Buat Pesawat ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} Berat: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} (Biaya karoseri: {GOLD}{CURRENCY_LONG}{BLACK}) Beban: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Kecepatan: {GOLD}{VELOCITY}{BLACK} Daya: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Kecepatan: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Kecepatan di laut: {GOLD}{VELOCITY} @@ -3430,6 +3523,7 @@ STR_PURCHASE_INFO_REFITTABLE :(kargo dapat di STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Desain: {GOLD}{NUM}{BLACK} Usia: {GOLD}{COMMA} tahun STR_PURCHASE_INFO_RELIABILITY :{BLACK}Kehandalan Maks.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Biaya: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} (Biaya Karoseri: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Berat: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} Kecepatan: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} (Biaya Karoseri: {GOLD}{CURRENCY_LONG}{BLACK}) Kecepatan: {GOLD}{VELOCITY} @@ -3437,6 +3531,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Daya Mua STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Daya Gerbong: {GOLD}+{POWER}{BLACK} Berat: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Kargo dapat di ganti untuk: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Semua jenis kargo +STR_PURCHASE_INFO_NONE :Tidak Ada STR_PURCHASE_INFO_ALL_BUT :Semua tapi tidak untuk {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Traksi Maks.: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Jangkauan: {GOLD}{COMMA} kotak @@ -3452,14 +3547,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Beli Ken STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Beli Kapal STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Beli Pesawat +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli lalu karoseri kendaraan +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli lalu karoseri kendaraan +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli lalu karoseri kapal yang dipilih +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli dan ubah kargo pesawat STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kereta yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kendaraan yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kapal yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Beli pesawat yang dipilih. Shift untuk menampilkan perkiraan biaya +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri kereta yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri kendaraan yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri kapal yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri Pesawat yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ubah Nama STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Ganti Nama @@ -3618,6 +3719,7 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Pindah t STR_REPLACE_ENGINES :Lokomotif STR_REPLACE_WAGONS :Gerbong STR_REPLACE_ALL_RAILTYPE :Semua kereta +STR_REPLACE_ALL_ROADTYPE :Semua kendaraan jalan raya STR_REPLACE_HELP_RAILTYPE :{BLACK}Pilih jenis kereta yang anda inginkan untuk diganti STR_REPLACE_HELP_ROADTYPE :{BLACK}Pilih jenis jalan yang anda inginkan untuk diganti @@ -3627,6 +3729,8 @@ STR_REPLACE_ELRAIL_VEHICLES :Kereta Listrik STR_REPLACE_MONORAIL_VEHICLES :Kereta Monorel STR_REPLACE_MAGLEV_VEHICLES :Kereta Maglev +STR_REPLACE_ROAD_VEHICLES :Kendaraan Jalan Raya +STR_REPLACE_TRAM_VEHICLES :Kendaraan Jalan Trem STR_REPLACE_REMOVE_WAGON :{BLACK}Membuang gerbong: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Membuat panjang kereta tetap sama saat penggantian secara otomatis dengan cara membuang gerbong(dihitung dari bagian depan), jika penggantian lokomotif membuat kereta lebih panjang @@ -3847,6 +3951,7 @@ STR_ORDER_CONDITIONAL_AGE :Usia (thn) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Waktunya perbaikan STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Selalu STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Sisa masa pakai (tahun) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Keandalan Maximal STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Jenis perbandingan kondisi dengan nilai yang diberikan STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :sama dengan @@ -4077,7 +4182,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pilih sk STR_AI_LIST_CANCEL :{BLACK}Batal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Jangan mengubah skrip AI +STR_SCREENSHOT_CAPTION :{WHITE}Ambil tangkapan layar +STR_SCREENSHOT_SCREENSHOT :{BLACK}Tangkapan layar normal +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Sepenuhnya diperbesar di cuplikan layar +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Tangkapan layar zoom default +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK} Tangkapan layar seluruh peta STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Tangkapan layar Peta Ketinggian +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Tangkapan layar minimap # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4351,6 +4462,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tidak te STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Harus membongkar rel terlebih dahulu STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Jalannya satu arah atau terhalang STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Perlintasan tingkat tidak diperbolehkan pada tipe rel ini +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Perlintasan tingkat tidak diperbolehkan untuk jenis jalan ini STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Tidak dapat membangun sinyal disini STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Tidak dapat membangun jalur rel disini STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Tidak dapat menghapus jalur rel dari sini @@ -4370,7 +4482,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Tidak da STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Tidak dapat membongkar jalur trem disini... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... tidak ada jalan STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tidak ada jalur trem +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Tidak dapat mengubah tipe jalan disini... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Tidak dapat mengubah tipe tram disini... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Tidak ada jalan yang cocok STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Jalur Tram tidak ada yang cocok +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... Rel trem yang tidak kompatibel # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tidak dapat membangun kanal disini... @@ -4423,6 +4539,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Tidak da STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Tidak dapat menghapus kelompok ini... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Tidak dapat mengganti nama kelompok... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Tidak dapat menetapkan kelompok induk... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}perulangan dalam grup hierarki tidak diperbolehkan STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Tidak dapat memindahkan semua kendaraan dari kelompok ini... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Tidak dapat menambah Kendaraan dalam kelompok ini... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Tidak dapat menambah Kendaraan yang dapat dipakai bersama ke dalam grup... From 521f41fc10999a2c0538dba6407de3661f5f7dd9 Mon Sep 17 00:00:00 2001 From: Tyler Trahan <55058389+2TallTyler@users.noreply.github.com> Date: Mon, 16 Nov 2020 08:16:21 -0500 Subject: [PATCH 299/601] Fix: update links to new OpenTTD wiki (#8341) --- CONTRIBUTING.md | 14 +++++++------- README.md | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c532957e21..1ad85d0918 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ In return, they should reciprocate that respect in addressing your issue or asse The [issue tracker](https://github.com/OpenTTD/OpenTTD/issues) is the preferred channel for [bug reports](#bug-reports), but please respect the following restrictions: * Please **do not** use the issue tracker for help playing or using OpenTTD. -Please try [irc](https://wiki.openttd.org/IRC_channel), or the [forums](https://www.tt-forums.net/) +Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel), or the [forums](https://www.tt-forums.net/) * Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. @@ -23,7 +23,7 @@ Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to We reserve the right to delete comments which violate this rule. * Please **do not** open issues or pull requests regarding add-on content in NewGRF, GameScripts, AIs, etc. -These are created by third-parties. Please try [irc](https://wiki.openttd.org/IRC_channel) or the [forums](https://www.tt-forums.net/) to discuss these. +These are created by third-parties. Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel) or the [forums](https://www.tt-forums.net/) to discuss these. * Please use [the web translator](https://translator.openttd.org/) to submit corrections and improvements to translations of the game. @@ -94,7 +94,7 @@ Although we really appreciate feedback and ideas, we will close feature requests Many of those ideas etc do have a place on the [forums](https://www.tt-forums.net); and if enough people like it, someone will stand up and make it. -It's usually best discuss in [irc](https://wiki.openttd.org/IRC_channel) before opening a feature request or working on a large feature in a fork. +It's usually best discuss in [irc](https://wiki.openttd.org/en/Development/IRC%20channel) before opening a feature request or working on a large feature in a fork. Discussion in irc can take time, but it can be productive and avoid disappointment :) @@ -108,7 +108,7 @@ Pull requests should fit with the [goals of the project](./CONTRIBUTING.md#proje Every pull request should have a clear scope, with no unrelated commits. -[Code style](https://wiki.openttd.org/Coding_style) must be complied with for pull requests to be accepted; this also includes [commit message format](https://wiki.openttd.org/Coding_style#Commit_message). +[Code style](https://wiki.openttd.org/en/Development/Coding%20style) must be complied with for pull requests to be accepted; this also includes [commit message format](https://wiki.openttd.org/en/Development/Coding%20style#commit-message). Adhering to the following process is the best way to get your work included in the project: @@ -136,7 +136,7 @@ contain your feature, change, or fix: git checkout upstream/master -b ``` -4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/Commit_style#Commit_message) or your code is unlikely to be merged into the main project. +4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/en/Development/Coding%20style#commit-message) or your code is unlikely to be merged into the main project. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. 5. Locally rebase the upstream development branch into your topic branch: @@ -172,14 +172,14 @@ The results of the CI tests will show on your pull request. By clicking on Details you can further zoom in; in case of a failure it will show you why it failed. In case of success it will report how awesome you were. -Tip: [commit message format](https://wiki.openttd.org/Coding_style#Commit_message) is a common reason for pull requests to fail validation. +Tip: [commit message format](https://wiki.openttd.org/en/Development/Coding%20style#commit-message) is a common reason for pull requests to fail validation. ### Are there any development docs? There is no single source for OpenTTD development docs. It's a complex project with a long history, and multiple APIs. -A good entry point is [Development](https://wiki.openttd.org/Development) on the OpenTTD wiki; this provides links to wiki documentation and other sources. +A good entry point is [Development](https://wiki.openttd.org/en/Development/) on the OpenTTD wiki; this provides links to wiki documentation and other sources. The GitHub repo also includes some non-comprehensive documentation in [/docs](./docs). diff --git a/README.md b/README.md index 4ca83e9b6a..2c16855e0a 100644 --- a/README.md +++ b/README.md @@ -65,13 +65,13 @@ Please report a bug if you find a save that doesn't load. ## 1.4) Installing and running OpenTTD -OpenTTD is usually straightforward to install, but for more help the wiki [includes an installation guide](https://wiki.openttd.org/Installation). +OpenTTD is usually straightforward to install, but for more help the wiki [includes an installation guide](https://wiki.openttd.org/en/Manual/Installation). OpenTTD needs some additional graphics and sound files to run. For some platforms these will be downloaded during the installation process if required. -For some platforms, you will need to refer to [the installation guide](https://wiki.openttd.org/Installation). +For some platforms, you will need to refer to [the installation guide](https://wiki.openttd.org/en/Manual/Installation). ### 1.4.1) Free graphics and sound files @@ -116,7 +116,7 @@ OpenTTD features multiple types of add-on content, which modify gameplay in diff Most types of add-on content can be downloaded within OpenTTD via the 'Check Online Content' button in the main menu. -Add-on content can also be installed manually, but that's more complicated; the [OpenTTD wiki](https://wiki.openttd.org/OpenTTD) may offer help with that, or the [OpenTTD directory structure guide](./docs/directory_structure.md). +Add-on content can also be installed manually, but that's more complicated; the [OpenTTD wiki](https://wiki.openttd.org/) may offer help with that, or the [OpenTTD directory structure guide](./docs/directory_structure.md). ### 1.5.1) AI opponents @@ -138,7 +138,7 @@ A wide range of add-content is available as NewGRFs, including vehicles, industr NewGRFs can be added via the 'Check Online Content' button in the main menu. -See also the wiki [guide to NewGRFs](https://wiki.openttd.org/NewGRF) and [the forum graphics development section](https://www.tt-forums.net/viewforum.php?f=66). +See also the wiki [guide to NewGRFs](https://wiki.openttd.org/en/Manual/NewGRF) and [the forum graphics development section](https://www.tt-forums.net/viewforum.php?f=66). ### 1.5.4) Game scripts @@ -146,7 +146,7 @@ Game scripts can provide additional challenges or changes to the standard OpenTT Game scripts can be added via the 'Check Online Content' button in the main menu. -See also the wiki [guide to game scripts](https://wiki.openttd.org/Game_script) and [the forum graphics game script section](https://www.tt-forums.net/viewforum.php?f=65). +See also the wiki [guide to game scripts](https://wiki.openttd.org/en/Manual/Game%20script) and [the forum graphics game script section](https://www.tt-forums.net/viewforum.php?f=65). ### 1.6) OpenTTD directories @@ -164,14 +164,14 @@ If you want to compile OpenTTD from source, instructions can be found in [COMPIL 'Official' channels - [OpenTTD website](https://www.openttd.org) -- IRC chat using #openttd on irc.oftc.net [more info about our irc channel](https://wiki.openttd.org/Irc) +- IRC chat using #openttd on irc.oftc.net [more info about our irc channel](https://wiki.openttd.org/en/Development/IRC%20channel) - [OpenTTD on Github](https://github.com/openTTD/) for code repositories and for reporting issues - [forum.openttd.org](https://forum.openttd.org/) - the primary community forum site for discussing OpenTTD and related games - [OpenTTD wiki](https://wiki.openttd.org/) community-maintained wiki, including topics like gameplay guide, detailed explanation of some game mechanics, how to use add-on content (mods) and much more 'Unofficial' channels -- the OpenTTD wiki has a [page listing OpenTTD communities](https://wiki.openttd.org/Community) including some in languages other than English +- the OpenTTD wiki has a [page listing OpenTTD communities](https://wiki.openttd.org/en/Community/Community) including some in languages other than English ### 2.1) Contributing to OpenTTD From 821592ddeb315bdfed7651b0ef7ecc322f7539bf Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 25 Nov 2020 17:51:48 +0000 Subject: [PATCH 300/601] Update: Translations from eints norwegian (bokmal): 10 changes by buzzCraft --- src/lang/norwegian_bokmal.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d282e1e541..9c6b77e924 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.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{G "" "" tt} {STRING} er nå tilgjengelig! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis gruppe- og kjøretøyliste basert på kjøretøyets gruppe STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} godtar ikke lenger {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} godtar ikke lenger {STRING} eller {STRING} @@ -1548,6 +1549,8 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Fullt STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Farge i avisen kommer i: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Året der avisannonseringene bli vist i farger. Før dette året blir alle annonseringer vist i svart/hvitt, STR_CONFIG_SETTING_STARTING_YEAR :Start spillet i år: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Poengsum ved slutten av året: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter med tanke på poeng. På slutten av dette året, vil firmaets poengsum bli lagret og tavlen med høyeste poengsummer vil vises. Spilleren kan fortsette å spille etter dette.{}Hvis dette er før start året, vil tavlen med høyeste poengsummer aldri vises. STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jevn økonomi (flere, mindre endringer): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når denne er aktivert, endrer industriproduksjonen seg oftere, og i mindre trinn. Denne innstillingen har vanligvis ingen effekt hvis industriene er fra en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillat aksjekjøp i andre firmaer: {STRING} @@ -3119,6 +3122,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Endre bynavnet # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}s bystyre +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Område STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Handlinger tilgjengelig: @@ -3389,6 +3393,10 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ingen - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Godtatte varer:{SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produserte varer: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Alle varetyper +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Ingen # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4164,6 +4172,8 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Velg det STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikke endre skriptet +STR_SCREENSHOT_CAPTION :WHITE}Ta skjermbilde +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Skjermbilde med maksimal zoom # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre From 6ef1eaf1f596c2d034043ea032f6a22ebcff0e2d Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 26 Nov 2020 17:51:49 +0000 Subject: [PATCH 301/601] Update: Translations from eints norwegian (bokmal): 9 changes by buzzCraft --- src/lang/norwegian_bokmal.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 9c6b77e924..ed3192deef 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -937,6 +937,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk peso STR_GAME_OPTIONS_CURRENCY_NTD :Ny Taiwan Dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupi (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kjøretøy @@ -1312,6 +1313,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Vis byers innby STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Vis inbyggertallet i byer i tittelfeltet på kartet STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Graflinjenes tykkelse: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjebredde i grafene. En tynn linje er mer presis å lese av, mens en tykkere linje er lettere å se, og farger er lettere å skille +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Legg til en linje i bygg kjøretøy vinduet, som viser hvilken NewGRF det valgte kjøretøyet kommer fra. STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definerer grunnleggende spill-scenarier med forskjellige laster og byers vekstkrav. NewGRF og spill-skript tillater imidlertid finere kontroll @@ -1551,6 +1553,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Året der avisa STR_CONFIG_SETTING_STARTING_YEAR :Start spillet i år: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Poengsum ved slutten av året: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter med tanke på poeng. På slutten av dette året, vil firmaets poengsum bli lagret og tavlen med høyeste poengsummer vil vises. Spilleren kan fortsette å spille etter dette.{}Hvis dette er før start året, vil tavlen med høyeste poengsummer aldri vises. +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldri STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jevn økonomi (flere, mindre endringer): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når denne er aktivert, endrer industriproduksjonen seg oftere, og i mindre trinn. Denne innstillingen har vanligvis ingen effekt hvis industriene er fra en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillat aksjekjøp i andre firmaer: {STRING} @@ -3391,7 +3394,10 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrier STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ingen - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportert){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} og {NUM} flere... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Godtatte varer:{SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produserte varer: {SILVER}{STRING} @@ -4173,7 +4179,10 @@ STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikke endre skriptet STR_SCREENSHOT_CAPTION :WHITE}Ta skjermbilde +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalt skjermbilde STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Skjermbilde med maksimal zoom +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skjermbilde av hele kartat +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Høydekart skjermbilde # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre From b8ec88f6afcceb01cc8ce10ae3d91a986923baff Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 25 Nov 2020 23:36:50 +0000 Subject: [PATCH 302/601] Codechange: Suppress compiler warning about signed/unsigned printf values --- src/sound/xaudio2_s.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp index e89e28a78f..bd47b2065a 100644 --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -130,7 +130,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) if (FAILED(hr)) { - DEBUG(driver, 0, "xaudio2_s: CoInitializeEx failed (%08x)", hr); + DEBUG(driver, 0, "xaudio2_s: CoInitializeEx failed (%08x)", (uint)hr); return "Failed to initialise COM"; } @@ -164,7 +164,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) FreeLibrary(_xaudio_dll_handle); CoUninitialize(); - DEBUG(driver, 0, "xaudio2_s: XAudio2Create failed (%08x)", hr); + DEBUG(driver, 0, "xaudio2_s: XAudio2Create failed (%08x)", (uint)hr); return "Failed to inititialise the XAudio2 engine"; } @@ -177,7 +177,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) FreeLibrary(_xaudio_dll_handle); CoUninitialize(); - DEBUG(driver, 0, "xaudio2_s: CreateMasteringVoice failed (%08x)", hr); + DEBUG(driver, 0, "xaudio2_s: CreateMasteringVoice failed (%08x)", (uint)hr); return "Failed to create a mastering voice"; } @@ -216,7 +216,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) FreeLibrary(_xaudio_dll_handle); CoUninitialize(); - DEBUG(driver, 0, "xaudio2_s: CreateSourceVoice failed (%08x)", hr); + DEBUG(driver, 0, "xaudio2_s: CreateSourceVoice failed (%08x)", (uint)hr); return "Failed to create a source voice"; } @@ -225,7 +225,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) if (FAILED(hr)) { - DEBUG(driver, 0, "xaudio2_s: _source_voice->Start failed (%08x)", hr); + DEBUG(driver, 0, "xaudio2_s: _source_voice->Start failed (%08x)", (uint)hr); Stop(); return "Failed to start the source voice"; @@ -238,7 +238,7 @@ const char *SoundDriver_XAudio2::Start(const StringList &parm) if (FAILED(hr)) { - DEBUG(driver, 0, "xaudio2_s: _voice_context->SubmitBuffer failed (%08x)", hr); + DEBUG(driver, 0, "xaudio2_s: _voice_context->SubmitBuffer failed (%08x)", (uint)hr); Stop(); return "Failed to submit the first audio buffer"; From 0a9aed052295a98f1c1438cf1fa05b9a7e6b6607 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 25 Nov 2020 23:37:21 +0000 Subject: [PATCH 303/601] Fix: [CMake] Don't detect XAudio2 if defines are missing --- cmake/FindXaudio2.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/FindXaudio2.cmake b/cmake/FindXaudio2.cmake index 065e2d3589..477dfea728 100644 --- a/cmake/FindXaudio2.cmake +++ b/cmake/FindXaudio2.cmake @@ -4,6 +4,7 @@ include(CheckCXXSourceCompiles) set(CMAKE_REQUIRED_FLAGS "") check_cxx_source_compiles(" + #include #include #undef NTDDI_VERSION @@ -13,6 +14,6 @@ check_cxx_source_compiles(" #define _WIN32_WINNT _WIN32_WINNT_WIN8 #include - int main() { return 0; }" + int main() { printf(\"%s\\\\n\", XAUDIO2_DLL_A); return 0; }" XAUDIO2_FOUND ) From d19f7b94fbb544b88b4ad3b36f06152b75b09398 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 28 Nov 2020 17:51:55 +0000 Subject: [PATCH 304/601] Update: Translations from eints norwegian (bokmal): 8 changes by buzzCraft lithuanian: 5 changes by devastatorius --- src/lang/lithuanian.txt | 5 +++++ src/lang/norwegian_bokmal.txt | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 9300880716..4fb65486fd 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -837,6 +837,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Nėra muzikos STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}„{STRING}“ STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Takelis STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Pavadinimas @@ -2793,6 +2794,7 @@ STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Krovinys STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Geležinkelių greičio limitas: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Kelio greičio limitas: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tramvajaus greičio limitas: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Akmenys @@ -2920,6 +2922,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Žaidimo STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nėra informacijos STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Plėtiniai: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Perrašyti bylą STR_SAVELOAD_OSKTITLE :{BLACK}Įveskite išsaugomo žaidimo vardą @@ -3241,6 +3244,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Paperka # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Tikslai STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globalūs tikslai +STR_GOALS_SPECTATOR :Visuotiniai tikslai STR_GOALS_GLOBAL_TITLE :{BLACK}Visuotiniai tikslai: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nieko - @@ -3554,6 +3558,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Iškelti visas STR_GROUP_RENAME_CAPTION :{BLACK}Pervadinti grupę +STR_GROUP_PROFIT_THIS_YEAR :Šio mėnesio pelnas: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nauji lokomotyvai diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index ed3192deef..ea51d4ccd9 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1553,11 +1553,13 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Året der avisa STR_CONFIG_SETTING_STARTING_YEAR :Start spillet i år: {STRING} STR_CONFIG_SETTING_ENDING_YEAR :Poengsum ved slutten av året: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter med tanke på poeng. På slutten av dette året, vil firmaets poengsum bli lagret og tavlen med høyeste poengsummer vil vises. Spilleren kan fortsette å spille etter dette.{}Hvis dette er før start året, vil tavlen med høyeste poengsummer aldri vises. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldri STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jevn økonomi (flere, mindre endringer): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når denne er aktivert, endrer industriproduksjonen seg oftere, og i mindre trinn. Denne innstillingen har vanligvis ingen effekt hvis industriene er fra en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillat aksjekjøp i andre firmaer: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Når aktivert, tillates kjøp og salg av selskapers aksjer. Aksjer vil kun være tilgjengelig selskaper som når en viss alder +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Sett minimum levetid for et selskap, før andre kan kjøpe og selge aksjer fra dem. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentandel av etappe-overskudd som skal betales i innmatingssystem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Andel av inntekten gitt til de mellomliggende etapper i et overføringssystem, noe som gir mer kontroll over inntektene STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Når du drar en linje, plasser signaler hver: {STRING} @@ -2169,6 +2171,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Feil pas STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Tjeneren er full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bannlyst fra denne tjeneren STR_NETWORK_ERROR_KICKED :{WHITE}Du ble kastet ut av spillet +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Grunn: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Juksing er ikke tillatt på denne tjeneren STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du brukte for lang tid på å skrive inn passordet @@ -3126,6 +3129,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Endre bynavnet # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}s bystyre STR_LOCAL_AUTHORITY_ZONE :{BLACK}Område +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Vis zonene innenfor de lokale myndigheters grenser STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Handlinger tilgjengelig: @@ -3396,6 +3400,8 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ingen - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportert){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} og {NUM} flere... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrinavn - klikk på navn for å gå til industri. Ctrl+klikk åpner et nytt tilleggsvindu over industrien @@ -4181,8 +4187,10 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikke end STR_SCREENSHOT_CAPTION :WHITE}Ta skjermbilde STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalt skjermbilde STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Skjermbilde med maksimal zoom +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Standard zoomet skjermbilde STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skjermbilde av hele kartat STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Høydekart skjermbilde +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Oversiktskart skjermbilde # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre From 06adb9ace308eebed3aaddd4c91cbcfac90de5b1 Mon Sep 17 00:00:00 2001 From: Tocho Tochev Date: Tue, 24 Nov 2020 14:33:31 +0200 Subject: [PATCH 305/601] Fix: Spelling --- docs/landscape.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/landscape.html b/docs/landscape.html index 4eac0926e7..ab4ad989e3 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -802,7 +802,7 @@ 4  - on snow with rough land underneed + on snow with rough land underneath From 0b2dd2c5cd39833945fcea3a39811898bf40c6b5 Mon Sep 17 00:00:00 2001 From: Rasmus Jonsson Date: Sun, 18 Oct 2020 10:46:24 +0200 Subject: [PATCH 306/601] Fix: [NoAI] don't notify caught exceptions --- src/script/squirrel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index 2bd2c9c744..f97896eb93 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -478,7 +478,7 @@ void Squirrel::Initialize() /* Handle compile-errors ourself, so we can display it nicely */ sq_setcompilererrorhandler(this->vm, &Squirrel::CompileError); - sq_notifyallexceptions(this->vm, SQTrue); + sq_notifyallexceptions(this->vm, _debug_script_level > 5); /* Set a good print-function */ sq_setprintfunc(this->vm, &Squirrel::PrintFunc); /* Handle runtime-errors ourself, so we can display it nicely */ From a06fe8e8a7d749f1fbd08102a9516acd51171b24 Mon Sep 17 00:00:00 2001 From: glx22 Date: Wed, 1 Jul 2020 02:52:32 +0200 Subject: [PATCH 307/601] Fix: [CMake] cross-compiling requires native tools --- CMakeLists.txt | 3 +++ cmake/Options.cmake | 2 ++ src/lang/CMakeLists.txt | 4 ++++ src/settingsgen/CMakeLists.txt | 25 +++++++++++++++---------- src/strgen/CMakeLists.txt | 30 +++++++++++++++++------------- src/table/CMakeLists.txt | 4 ++++ 6 files changed, 45 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c7131df08..5194e2be4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,6 +127,9 @@ add_custom_target(find_version BYPRODUCTS ${GENERATED_SOURCE_FILES} ) +# An empty target for the tools +add_custom_target(tools) + include(SourceList) include(Endian) add_endian_definition() diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 0167ad0a6c..005bb19cae 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -35,6 +35,8 @@ function(set_directory_options) set(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory") message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}") endif() + + set(HOST_BINARY_DIR "" CACHE PATH "Full path to native cmake build directory") endfunction() # Set some generic options that influence what is being build. diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt index d9243b5311..75d06f530a 100644 --- a/src/lang/CMakeLists.txt +++ b/src/lang/CMakeLists.txt @@ -59,6 +59,10 @@ set(LANG_SOURCE_FILES set(LANG_BINARY_DIR ${CMAKE_BINARY_DIR}/lang) +if (HOST_BINARY_DIR) + include(${HOST_BINARY_DIR}/strgen.cmake) +endif() + # Walk over all the (finished) language files, and generate a command to compile them foreach(LANG_SOURCE_FILE IN LISTS LANG_SOURCE_FILES) get_filename_component(LANG_SOURCE_FILE_NAME_WE ${LANG_SOURCE_FILE} NAME_WE) diff --git a/src/settingsgen/CMakeLists.txt b/src/settingsgen/CMakeLists.txt index e17b8ad6bf..69b2092017 100644 --- a/src/settingsgen/CMakeLists.txt +++ b/src/settingsgen/CMakeLists.txt @@ -1,13 +1,18 @@ cmake_minimum_required(VERSION 3.5) -project(settingsgen) +if (NOT HOST_BINARY_DIR) + project(settingsgen) -set(sourcefiles - settingsgen.cpp - ../core/alloc_func.cpp - ../misc/getoptdata.cpp - ../ini_load.cpp - ../string.cpp -) -add_definitions(-DSETTINGSGEN) -add_executable(settingsgen ${sourcefiles}) + set(sourcefiles + settingsgen.cpp + ../core/alloc_func.cpp + ../misc/getoptdata.cpp + ../ini_load.cpp + ../string.cpp + ) + add_definitions(-DSETTINGSGEN) + add_executable(settingsgen ${sourcefiles}) + + export(TARGETS settingsgen FILE ${CMAKE_BINARY_DIR}/settingsgen.cmake) + add_dependencies(tools settingsgen) +endif() diff --git a/src/strgen/CMakeLists.txt b/src/strgen/CMakeLists.txt index b8f61cde3b..c638b5c6e7 100644 --- a/src/strgen/CMakeLists.txt +++ b/src/strgen/CMakeLists.txt @@ -1,22 +1,26 @@ cmake_minimum_required(VERSION 3.5) -project(strgen) +if (NOT HOST_BINARY_DIR) + project(strgen) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") -set(sourcefiles - strgen.cpp - strgen_base.cpp - ../core/alloc_func.cpp - ../misc/getoptdata.cpp - ../string.cpp -) -add_definitions(-DSTRGEN) -add_executable(strgen ${sourcefiles}) + set(sourcefiles + strgen.cpp + strgen_base.cpp + ../core/alloc_func.cpp + ../misc/getoptdata.cpp + ../string.cpp + ) + add_definitions(-DSTRGEN) + add_executable(strgen ${sourcefiles}) -include(Endian) -add_endian_definition() + include(Endian) + add_endian_definition() + export(TARGETS strgen FILE ${CMAKE_BINARY_DIR}/strgen.cmake) + add_dependencies(tools strgen) +endif() # Source Files add_files(strgen_base.cpp) diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt index 23b4724e33..e63337b8ab 100644 --- a/src/table/CMakeLists.txt +++ b/src/table/CMakeLists.txt @@ -11,6 +11,10 @@ set(TABLE_INI_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/window_settings.ini ) +if (HOST_BINARY_DIR) + include(${HOST_BINARY_DIR}/settingsgen.cmake) +endif() + # Generate a command and target to create the settings table add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/settings.h COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} From 6ad3cca4caff8f1a45f96c69e1193a97dc072cc3 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 5 Dec 2020 15:03:16 +0100 Subject: [PATCH 308/601] Fix a49fdb7ebb: bootstrap crash when trying to load new baseset (#8353) Using nullptr as "name" crashes on "name.empty()". Use an empty string instead. --- src/bootstrap_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index d2445c23a4..a0f040d1aa 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -253,7 +253,7 @@ bool HandleBootstrap() if (_exit_game) return false; /* Try to probe the graphics. Should work this time. */ - if (!BaseGraphics::SetSet(nullptr)) goto failure; + if (!BaseGraphics::SetSet({})) goto failure; /* Finally we can continue heading for the menu. */ _game_mode = GM_MENU; From c558936ec3223f95677e182da1325717f8163ef6 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 00:29:27 +0100 Subject: [PATCH 309/601] Fix 63ccb36ef3: Crash trying to load TTO/TTD savegames. (#8356) --- src/saveload/oldloader_sl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 402c1c5cc4..fa76857311 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -445,7 +445,7 @@ static bool FixTTOEngines() e->preview_company = INVALID_COMPANY; e->preview_asked = (CompanyMask)-1; e->preview_wait = 0; - e->name = nullptr; + e->name = std::string{}; } return true; From c98717cb4518d80ccccb2ae1677d0a394542f129 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 4 Dec 2020 22:12:39 +0100 Subject: [PATCH 310/601] Fix: do not add an offset to a nullptr This is, by specs, undefined behaviour. See https://reviews.llvm.org/D67122 In cases where this is done, optimizations done by LLVM can generate code that causes crashes. GetVariableAddress() had two (legit) ways this could happen: - For SaveLoad set to global - For SaveLoad set to SLE_VAR_NULL, where sld->address is always a nullptr, and object could or could not be a nullptr. --- src/saveload/saveload.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index abd58ea04e..3581a55947 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -873,7 +873,18 @@ static inline bool IsNumericType(VarType conv) */ static inline void *GetVariableAddress(const void *object, const SaveLoad *sld) { - return const_cast((const byte*)(sld->global ? nullptr : object) + (ptrdiff_t)sld->address); + /* Entry is a global address. */ + if (sld->global) return sld->address; + + /* Entry is a null-variable, mostly used to read old savegames etc. */ + if (GetVarMemType(sld->conv) == SLE_VAR_NULL) { + assert(sld->address == nullptr); + return nullptr; + } + + /* Everything else should be a non-null pointer. */ + assert(object != nullptr); + return const_cast((const byte *)object + (ptrdiff_t)sld->address); } int64 ReadValue(const void *ptr, VarType conv); From 731af1f1f3246720cc262e3f84fdef83114337bc Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 5 Dec 2020 11:33:42 +0100 Subject: [PATCH 311/601] Codechange: don't do work GetVariableAddress() is already doing --- src/saveload/saveload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 8cf6a39238..999a381d71 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1619,7 +1619,7 @@ void SlObject(void *object, const SaveLoad *sld) } for (; sld->cmd != SL_END; sld++) { - void *ptr = sld->global ? sld->address : GetVariableAddress(object, sld); + void *ptr = GetVariableAddress(object, sld); SlObjectMember(ptr, sld); } } From ad47ebc1a8cb2a7d678b80a388890f5b61eb0302 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 6 Dec 2020 20:13:00 +0100 Subject: [PATCH 312/601] Change: don't encourage the use of LZO LZO was used before the first version we track in our version control system, which dates back to Aug 2004. Somewhere before that time a few savegames / scenarios exist which use LZO. No other savegame / scenario does since then. Let's not encourage people to install something that ancient. There are no scenarios on BaNaNaS that require LZO. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5194e2be4c..2cee0a4fb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,7 +179,7 @@ include(LinkPackage) link_package(PNG TARGET PNG::PNG ENCOURAGED) link_package(ZLIB TARGET ZLIB::ZLIB ENCOURAGED) link_package(LIBLZMA TARGET LibLZMA::LibLZMA ENCOURAGED) -link_package(LZO ENCOURAGED) +link_package(LZO) link_package(XDG_basedir) if(NOT OPTION_DEDICATED) From cfa1b1e006b45780355a67d228124b8542c6335d Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Fri, 25 Sep 2020 12:22:48 +0100 Subject: [PATCH 313/601] Fix: Compile warnings when asserts are disabled --- src/gfxinit.cpp | 1 + src/settings.cpp | 2 ++ src/window.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index ba80690254..d1d05f4bd0 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -105,6 +105,7 @@ static void LoadGrfFileIndexed(const char *filename, const SpriteID *index_tbl, do { bool b = LoadNextSprite(start, file_index, sprite_id, container_ver); + (void)b; // Unused without asserts assert(b); sprite_id++; } while (++start <= end); diff --git a/src/settings.cpp b/src/settings.cpp index 505638e94e..2966a3e22f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2053,6 +2053,7 @@ uint GetCompanySettingIndex(const char *name) { uint i; const SettingDesc *sd = GetSettingFromName(name, &i); + (void)sd; // Unused without asserts assert(sd != nullptr && (sd->desc.flags & SGF_PER_COMPANY) != 0); return i; } @@ -2159,6 +2160,7 @@ void IConsoleSetSetting(const char *name, int value) { uint index; const SettingDesc *sd = GetSettingFromName(name, &index); + (void)sd; // Unused without asserts assert(sd != nullptr); SetSettingValue(index, value); } diff --git a/src/window.cpp b/src/window.cpp index 3281e9f56e..6fd4d0d0b6 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1386,6 +1386,7 @@ static void AddWindowToZOrdering(Window *w) /* Search down the z-ordering for its location. */ Window *v = _z_front_window; uint last_z_priority = UINT_MAX; + (void)last_z_priority; // Unused without asserts while (v != nullptr && (v->window_class == WC_INVALID || GetWindowZPriority(v->window_class) > GetWindowZPriority(w->window_class))) { if (v->window_class != WC_INVALID) { /* Sanity check z-ordering, while we're at it. */ From 6198a4776b520cb433709aaa3a37cdeccbedbec0 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 29 Nov 2020 20:38:13 +0100 Subject: [PATCH 314/601] Change: [NewGRF] Use aircraft property 12 also for helicopters. Due to keeping compatibility we can only do this for NewGRF-defined sound effects. --- src/aircraft_cmd.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index eec375d756..447615e3b2 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -908,7 +908,11 @@ static bool AircraftController(Aircraft *v) v->cur_speed = 0; if (--u->cur_speed == 32) { if (!PlayVehicleSound(v, VSE_START)) { - SndPlayVehicleFx(SND_18_HELICOPTER, v); + SoundID sfx = AircraftVehInfo(v->engine_type)->sfx; + /* For compatibility with old NewGRF we ignore the sfx property, unless a NewGRF-defined sound is used. + * The baseset has only one helicopter sound, so this only limits using plane or cow sounds. */ + if (sfx < ORIGINAL_SAMPLE_COUNT) sfx = SND_18_HELICOPTER; + SndPlayVehicleFx(sfx, v); } } } else { From dddf885fb400d3ae0a24429d5cdd88f5dd921693 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 7 Dec 2020 14:48:13 +0100 Subject: [PATCH 315/601] Remove: console command "content select all" (#8363) The intention of this function was that you could download everything after a filter was applied; but this never really took off. Instead, a select few people used this functionality to download every available package on BaNaNaS. This is not in the spirit of this service. Additionally, these few people were good for 70% of the consumed bandwidth of BaNaNaS. --- src/console_cmds.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 857dc61ad9..2f678b2fc7 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1761,10 +1761,10 @@ DEF_CONSOLE_CMD(ConContent) } if (argc <= 1) { - IConsoleHelp("Query, select and download content. Usage: 'content update|upgrade|select [all|id]|unselect [all|id]|state [filter]|download'"); + IConsoleHelp("Query, select and download content. Usage: 'content update|upgrade|select [id]|unselect [all|id]|state [filter]|download'"); IConsoleHelp(" update: get a new list of downloadable content; must be run first"); IConsoleHelp(" upgrade: select all items that are upgrades"); - IConsoleHelp(" select: select a specific item given by its id or 'all' to select all. If no parameter is given, all selected content will be listed"); + IConsoleHelp(" select: select a specific item given by its id. If no parameter is given, all selected content will be listed"); IConsoleHelp(" unselect: unselect a specific item given by its id or 'all' to unselect all"); IConsoleHelp(" state: show the download/select state of all downloadable content. Optionally give a filter string"); IConsoleHelp(" download: download all content you've selected"); @@ -1790,7 +1790,13 @@ DEF_CONSOLE_CMD(ConContent) OutputContentState(*iter); } } else if (strcasecmp(argv[2], "all") == 0) { - _network_content_client.SelectAll(); + /* The intention of this function was that you could download + * everything after a filter was applied; but this never really + * took off. Instead, a select few people used this functionality + * to download every available package on BaNaNaS. This is not in + * the spirit of this service. Additionally, these few people were + * good for 70% of the consumed bandwidth of BaNaNaS. */ + IConsolePrintF(CC_ERROR, "'select all' is no longer supported since 1.11"); } else { _network_content_client.Select((ContentID)atoi(argv[2])); } From 6e689e2038f7e34cc66b04b64e46f76206c1804e Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Mon, 7 Dec 2020 22:39:22 +0000 Subject: [PATCH 316/601] Fix: FreeType is still required on macOS --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cee0a4fb2..39cfffc019 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,13 +44,13 @@ find_package(PNG) if(NOT WIN32) find_package(Allegro) + find_package(Freetype) if(NOT APPLE) find_package(SDL2) if(NOT SDL2_FOUND) find_package(SDL) endif() find_package(Fluidsynth) - find_package(Freetype) find_package(Fontconfig) find_package(ICU OPTIONAL_COMPONENTS i18n lx) find_package(XDG_basedir) From 2864d019f05b8c8bb3159f2c8913ed834e487698 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 8 Dec 2020 10:24:59 +0100 Subject: [PATCH 317/601] Fix: useless warning with -snull and no BaseSounds available (#8361) If I explicitly tell the system I do not want sound, I still get presented a nice message I do not have any BaseSounds available on my system, and that I should download one to enjoy sound. Well, let me tell you, with "-snull" that is really really not going to help. So please, be quiet, and let me enjoy the game without "boooooo" and "DING DING DING". Thank you. --- src/openttd.cpp | 2 +- src/sound/null_s.h | 1 + src/sound/sound_driver.hpp | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 337bcda4da..d20e88cd86 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1111,7 +1111,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_MENU: // Switch to game intro menu LoadIntroGame(); - if (BaseSounds::ini_set.empty() && BaseSounds::GetUsedSet()->fallback) { + if (BaseSounds::ini_set.empty() && BaseSounds::GetUsedSet()->fallback && SoundDriver::GetInstance()->HasOutput()) { ShowErrorMessage(STR_WARNING_FALLBACK_SOUNDSET, INVALID_STRING_ID, WL_CRITICAL); BaseSounds::ini_set = BaseSounds::GetUsedSet()->name; } diff --git a/src/sound/null_s.h b/src/sound/null_s.h index c01eae32a6..9bc660b92d 100644 --- a/src/sound/null_s.h +++ b/src/sound/null_s.h @@ -19,6 +19,7 @@ public: void Stop() override { } const char *GetName() const override { return "null"; } + bool HasOutput() const override { return false; } }; /** Factory for the null sound driver. */ diff --git a/src/sound/sound_driver.hpp b/src/sound/sound_driver.hpp index 6de66d74e9..062e7704d5 100644 --- a/src/sound/sound_driver.hpp +++ b/src/sound/sound_driver.hpp @@ -18,6 +18,17 @@ public: /** Called once every tick */ virtual void MainLoop() {} + /** + * Whether the driver has an output from which the user can hear sound. + * Or in other words, whether we should warn the user if no soundset is + * loaded and that loading one would fix the sound problems. + * @return True for all drivers except null. + */ + virtual bool HasOutput() const + { + return true; + } + /** * Get the currently active instance of the sound driver. */ From 535e18b54ecdae164b761c3146a50d5820bc6b36 Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Tue, 8 Dec 2020 21:07:08 +0000 Subject: [PATCH 318/601] Change: Don't display OS name when the user is exiting the game --- src/intro_gui.cpp | 13 ------------- src/lang/english.txt | 10 +--------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 1fea69ea5b..7b02448f95 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -285,19 +285,6 @@ static void AskExitGameCallback(Window *w, bool confirmed) void AskExitGame() { -#if defined(_WIN32) - SetDParam(0, STR_OSNAME_WINDOWS); -#elif defined(__APPLE__) - SetDParam(0, STR_OSNAME_OSX); -#elif defined(__HAIKU__) - SetDParam(0, STR_OSNAME_HAIKU); -#elif defined(__OS2__) - SetDParam(0, STR_OSNAME_OS2); -#elif defined(SUNOS) - SetDParam(0, STR_OSNAME_SUNOS); -#else - SetDParam(0, STR_OSNAME_UNIX); -#endif ShowQuery( STR_QUIT_CAPTION, STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD, diff --git a/src/lang/english.txt b/src/lang/english.txt index c055f54a05..510e29279b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1807,18 +1807,10 @@ STR_INTRO_TRANSLATION :{BLACK}This tra # Quit window STR_QUIT_CAPTION :{WHITE}Exit -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD and return to {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandon Game STR_ABANDON_GAME_QUERY :{YELLOW}Are you sure you want to abandon this game? From 819ce1bf4961c39ee97c98a4e0c890692842166a Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 9 Dec 2020 13:42:08 +0000 Subject: [PATCH 319/601] Update: Translations from eints slovak: 30 changes by FuryPapaya lithuanian: 37 changes by devastatorius --- src/lang/afrikaans.txt | 9 ---- src/lang/arabic_egypt.txt | 9 ---- src/lang/basque.txt | 9 ---- src/lang/belarusian.txt | 9 ---- src/lang/brazilian_portuguese.txt | 9 ---- src/lang/bulgarian.txt | 9 ---- src/lang/catalan.txt | 9 ---- src/lang/croatian.txt | 9 ---- src/lang/czech.txt | 9 ---- src/lang/danish.txt | 9 ---- src/lang/dutch.txt | 9 ---- src/lang/english_AU.txt | 9 ---- src/lang/english_US.txt | 9 ---- src/lang/esperanto.txt | 9 ---- src/lang/estonian.txt | 9 ---- src/lang/faroese.txt | 9 ---- src/lang/finnish.txt | 9 ---- src/lang/french.txt | 9 ---- src/lang/gaelic.txt | 9 ---- src/lang/galician.txt | 9 ---- src/lang/german.txt | 9 ---- src/lang/greek.txt | 9 ---- src/lang/hebrew.txt | 9 ---- src/lang/hungarian.txt | 9 ---- src/lang/icelandic.txt | 9 ---- src/lang/indonesian.txt | 9 ---- src/lang/irish.txt | 9 ---- src/lang/italian.txt | 9 ---- src/lang/japanese.txt | 9 ---- src/lang/korean.txt | 9 ---- src/lang/latin.txt | 9 ---- src/lang/latvian.txt | 9 ---- src/lang/lithuanian.txt | 46 ++++++++++++++++---- src/lang/luxembourgish.txt | 9 ---- src/lang/malay.txt | 9 ---- src/lang/norwegian_bokmal.txt | 9 ---- src/lang/norwegian_nynorsk.txt | 9 ---- src/lang/polish.txt | 9 ---- src/lang/portuguese.txt | 9 ---- src/lang/romanian.txt | 9 ---- src/lang/russian.txt | 9 ---- src/lang/serbian.txt | 9 ---- src/lang/simplified_chinese.txt | 9 ---- src/lang/slovak.txt | 69 +++++++++++++----------------- src/lang/slovenian.txt | 9 ---- src/lang/spanish.txt | 9 ---- src/lang/spanish_MX.txt | 9 ---- src/lang/swedish.txt | 9 ---- src/lang/tamil.txt | 8 ---- src/lang/thai.txt | 9 ---- src/lang/traditional_chinese.txt | 9 ---- src/lang/turkish.txt | 9 ---- src/lang/ukrainian.txt | 9 ---- src/lang/unfinished/chuvash.txt | 8 ---- src/lang/unfinished/frisian.txt | 9 ---- src/lang/unfinished/ido.txt | 3 -- src/lang/unfinished/macedonian.txt | 8 ---- src/lang/unfinished/maltese.txt | 2 - src/lang/unfinished/marathi.txt | 2 - src/lang/unfinished/persian.txt | 9 ---- src/lang/unfinished/urdu.txt | 9 ---- src/lang/vietnamese.txt | 9 ---- src/lang/welsh.txt | 9 ---- 63 files changed, 67 insertions(+), 574 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 3bb4a680b1..215c4dfcba 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1798,18 +1798,9 @@ STR_INTRO_TRANSLATION :{BLACK}Die vert # Quit window STR_QUIT_CAPTION :{WHITE}Verlaat -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Is u seker u wil OpenTTD verlaat en terug keer na {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nee -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Verlaat Spel STR_ABANDON_GAME_QUERY :{YELLOW}Is jy seker jy wil die speletjie verlaat? diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 64d0491380..36d0fcd69a 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1426,18 +1426,9 @@ STR_INTRO_TRANSLATION :{BLACK}هذة # Quit window STR_QUIT_CAPTION :{WHITE}انهاء -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}هل تود اغلاق النسخة المفتوحة و العودة لـ {STRING}? STR_QUIT_YES :{BLACK}نعم STR_QUIT_NO :{BLACK}لا -# Supported OSes -STR_OSNAME_WINDOWS :ويندوز -STR_OSNAME_UNIX :يونكس -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :هايكو -STR_OSNAME_OS2 :او اس/2 -STR_OSNAME_SUNOS :صن - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}إغلاق اللعبه STR_ABANDON_GAME_QUERY :{YELLOW}أمتأكد من رغبتك فى إغلاق اللعبه؟ diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 4850567875..d42ff546a4 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1674,18 +1674,9 @@ STR_INTRO_TRANSLATION :{BLACK}Itzultze # Quit window STR_QUIT_CAPTION :{WHITE}Irten -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Zihur zaude OpenTTD-tik irten nahi duzula eta {STRING}-ra itzuli? STR_QUIT_YES :{BLACK}Bai STR_QUIT_NO :{BLACK}Ez -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Jokoa Utzi STR_ABANDON_GAME_QUERY :{YELLOW}Ziur zaude joko hau utzi nahi duzula? diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 19f88d555e..1230e327c9 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2108,18 +2108,9 @@ STR_INTRO_TRANSLATION :{BLACK}На г # Quit window STR_QUIT_CAPTION :{WHITE}Выхад -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы ўпэўнены, што жадаеце перапыніць гульню й вярнуцца ў {STRING}? STR_QUIT_YES :{BLACK}Так STR_QUIT_NO :{BLACK}Не -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}У галоўнае мэню STR_ABANDON_GAME_QUERY :{YELLOW}Вы сапраўды жадаеце пакінуць гульню? diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 27ea2d1a1e..ee695d2385 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}Faltam { # Quit window STR_QUIT_CAPTION :{WHITE}Sair -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem a certeza que deseja abandonar este jogo e voltar ao {STRING}? STR_QUIT_YES :{BLACK}Sim STR_QUIT_NO :{BLACK}Não -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar jogo STR_ABANDON_GAME_QUERY :{YELLOW}Você tem certeza que deseja abandonar este jogo? diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 5196ae47ef..9987253fc4 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1720,18 +1720,9 @@ STR_INTRO_TRANSLATION :{BLACK}На т # Quit window STR_QUIT_CAPTION :{WHITE}Изход -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Желаете ли да прекъснете играта и да се върнете към {STRING}? STR_QUIT_YES :{BLACK}Да STR_QUIT_NO :{BLACK}Не -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Прекъсване на играта STR_ABANDON_GAME_QUERY :{YELLOW}Искате ли да прекъснете играта? diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index d068164d7d..0d9aa9bece 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}A aquest # Quit window STR_QUIT_CAPTION :{WHITE}Surt -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Esteu segur que voleu abandonar aquesta partida i tornar a {STRING}? STR_QUIT_YES :{BLACK}Sí STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandona la partida STR_ABANDON_GAME_QUERY :{YELLOW}Esteu segur que voleu abandonar la partida? diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 1a81252d4a..42734c289f 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1903,18 +1903,9 @@ STR_INTRO_TRANSLATION :{BLACK}Ovom pri # Quit window STR_QUIT_CAPTION :{WHITE}Izlaz -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Jesi li siguran da želiš napustiti OpenTTD i vratiti se u {STRING}e? STR_QUIT_YES :{BLACK}Da STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Napusti igru STR_ABANDON_GAME_QUERY :{YELLOW}Doista želiš napustiti ovu igru? diff --git a/src/lang/czech.txt b/src/lang/czech.txt index c00ccfbac6..8b55d4db7e 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1894,18 +1894,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tento p # Quit window STR_QUIT_CAPTION :{WHITE}Konec -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Opravdu chceš opustit tuto hru a odejít do {STRING}? STR_QUIT_YES :{BLACK}Ano STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unixu -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Konec hry STR_ABANDON_GAME_QUERY :{YELLOW}Opravdu chceš ukončit tuto hru? diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c9de1ecefe..eadbe1b088 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}Denne ov # Quit window STR_QUIT_CAPTION :{WHITE}Afslut -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Er du sikker på, at du vil forlade dette spil og returnere til {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nej -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Forlad spillet STR_ABANDON_GAME_QUERY :{YELLOW}Er du sikker på du vil forlade dette spil ? diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index c1e3acc5d7..b2fcf6260d 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}Deze ver # Quit window STR_QUIT_CAPTION :{WHITE}Afsluiten -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Weet je zeker dat je OpenTTD wilt verlaten en terug wilt keren naar {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nee -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Spel sluiten STR_ABANDON_GAME_QUERY :{YELLOW}Weet je zeker dat je dit spel wilt sluiten? diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 17a9659fbe..3b1f923fc4 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1730,18 +1730,9 @@ STR_INTRO_TRANSLATION :{BLACK}This tra # Quit window STR_QUIT_CAPTION :{WHITE}Exit -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD and return to {STRING}? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandon Game STR_ABANDON_GAME_QUERY :{YELLOW}Are you sure you want to abandon this game? diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 4eeb8b8fb9..e9ac45f263 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1805,18 +1805,9 @@ STR_INTRO_TRANSLATION :{BLACK}This tra # Quit window STR_QUIT_CAPTION :{WHITE}Quit -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to quit OpenTTD and return to {STRING}? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandon Game STR_ABANDON_GAME_QUERY :{YELLOW}Are you sure you want to abandon this game? diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index a515912d3f..cb2bb5a3d2 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1413,18 +1413,9 @@ STR_INTRO_TRANSLATION :{BLACK}Ĉi tiu # Quit window STR_QUIT_CAPTION :{WHITE}Forlasi -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ĉu vi vere volas fermi la ludon kaj reiri al {STRING}? STR_QUIT_YES :{BLACK}Jes STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Vindozo -STR_OSNAME_UNIX :Unikso -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Foriri de la ludo STR_ABANDON_GAME_QUERY :{YELLOW}Ĉu vi certas ke vi volas foriri? diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index c74293382a..6fd55dc426 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1821,18 +1821,9 @@ STR_INTRO_TRANSLATION :{BLACK}{NUM} t # Quit window STR_QUIT_CAPTION :{WHITE}Mängust väljumine -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Kas soovite OpenTTD sulgeda ja minna tagasi süsteemi {STRING}? STR_QUIT_YES :{BLACK}Jah STR_QUIT_NO :{BLACK}Ei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Mängu lõpetamine STR_ABANDON_GAME_QUERY :{YELLOW}Kas lõpetada mäng? diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 6ee2502fba..80805b1301 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1577,18 +1577,9 @@ STR_INTRO_TRANSLATION :{BLACK}Hesi ums # Quit window STR_QUIT_CAPTION :{WHITE}Gevst -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Er tú vís/vísur í at tú vil gevast at spæla OpenTTD og fara aftur til {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Far frá spæli STR_ABANDON_GAME_QUERY :{YELLOW}Er tú vís/vísur í at tú vil fara frá hesum spæli? diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ebf5765400..f85a203b1c 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tästä # Quit window STR_QUIT_CAPTION :{WHITE}Sulje -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Suljetaanko peli ja palataan {STRING}-järjestelmään? STR_QUIT_YES :{BLACK}Kyllä STR_QUIT_NO :{BLACK}Ei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Pelin lopetus STR_ABANDON_GAME_QUERY :{YELLOW}Lopetetaanko peli? diff --git a/src/lang/french.txt b/src/lang/french.txt index 226e28b9e1..4efbe83b31 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}Il manqu # Quit window STR_QUIT_CAPTION :{WHITE}Quitter -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Êtes-vous sûr de vouloir quitter OpenTTD et retourner à {STRING}{NBSP}? STR_QUIT_YES :{BLACK}Oui STR_QUIT_NO :{BLACK}Non -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonner la partie STR_ABANDON_GAME_QUERY :{YELLOW}Êtes-vous sûr de vouloir abandonner cette partie{NBSP}? diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 0c47be5d26..f00a366680 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1964,18 +1964,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tha {NUM # Quit window STR_QUIT_CAPTION :{WHITE}Fàg an-seo -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}A bheil thu cinnteach gu bheil thu airson OpenTTD fhàgail is tilleadh dha {STRING}? STR_QUIT_YES :{BLACK}Tha STR_QUIT_NO :{BLACK}Chan eil -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Fàg an geama STR_ABANDON_GAME_QUERY :{YELLOW}A bheil thu cinnteach gu bheil thu airson an geama seo fhàgail? diff --git a/src/lang/galician.txt b/src/lang/galician.txt index f4b6779ed9..4ee552731e 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1800,18 +1800,9 @@ STR_INTRO_TRANSLATION :{BLACK}A ista t # Quit window STR_QUIT_CAPTION :{WHITE}Saír -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Estás seguro de que queres saír e voltar a {STRING}? STR_QUIT_YES :{BLACK}Si STR_QUIT_NO :{BLACK}Non -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Saír da partida STR_ABANDON_GAME_QUERY :{YELLOW}Estás seguro de que queres saír desta partida? diff --git a/src/lang/german.txt b/src/lang/german.txt index 46d3afcf8c..1660f010ef 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1793,18 +1793,9 @@ STR_INTRO_TRANSLATION :{BLACK}Dieser # Quit window STR_QUIT_CAPTION :{WHITE}Verlassen -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}OpenTTD wirklich beenden und zu{}{STRING} zurückkehren? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nein -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Spiel beenden STR_ABANDON_GAME_QUERY :{YELLOW}Das Spiel wirklich beenden? diff --git a/src/lang/greek.txt b/src/lang/greek.txt index ba8956b94d..9f567b9c50 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1893,18 +1893,9 @@ STR_INTRO_TRANSLATION :{BLACK}Λείπ # Quit window STR_QUIT_CAPTION :{WHITE}Έξοδος -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το OpenTTD και να επιστρέψετε στο λειτουργικό {STRING}; STR_QUIT_YES :{BLACK}Ναι STR_QUIT_NO :{BLACK}Όχι -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Εγκατάλειψη Παιχνιδιού STR_ABANDON_GAME_QUERY :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το παιχνίδι; diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 2f47bf3d67..eebb7d78a9 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1779,18 +1779,9 @@ STR_INTRO_TRANSLATION :{BLACK}בתרג # Quit window STR_QUIT_CAPTION :{WHITE}צא -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}אתה בטוח שברצונך לצאת ולחזור ל{STRING}? STR_QUIT_YES :{BLACK}כן STR_QUIT_NO :{BLACK}לא -# Supported OSes -STR_OSNAME_WINDOWS :חלונות -STR_OSNAME_UNIX :יוניקס -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :הייקו -STR_OSNAME_OS2 :מערכת הפעלה או.אס שתיים -STR_OSNAME_SUNOS :סולריס - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}עזיבת משחק STR_ABANDON_GAME_QUERY :{YELLOW}?האם אתה בטוח שברצונך לעזוב את המשחק diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index c3ea4dec4d..4dbbbf8e9b 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1871,18 +1871,9 @@ STR_INTRO_TRANSLATION :{BLACK}Ebből a # Quit window STR_QUIT_CAPTION :{WHITE}Kilépés -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Biztosan bezárod ezt a programot és kilépsz a {STRING}ba? STR_QUIT_YES :{BLACK}Igen STR_QUIT_NO :{BLACK}Nem -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Kilépés a játékból STR_ABANDON_GAME_QUERY :{YELLOW}Biztosan kilépsz ebből a játékból? diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 02ce073089..1cdc2c3c9d 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1618,18 +1618,9 @@ STR_INTRO_TRANSLATION :{BLACK}Það va # Quit window STR_QUIT_CAPTION :{WHITE}Hætta -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ertu viss um að þú viljir hætta í OpenTTD og fara aftur í {STRING}? STR_QUIT_YES :{BLACK}Já STR_QUIT_NO :{BLACK}Nei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Hætta leik STR_ABANDON_GAME_QUERY :{YELLOW}Ertu viss um að þú viljir hætta í þessum leik ? diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 3c285aa980..e5e1fae79b 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}Terjemah # Quit window STR_QUIT_CAPTION :{WHITE}Keluar -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Anda yakin ingin keluar dari OpenTTD dan kembali ke {STRING}? STR_QUIT_YES :{BLACK}Ya STR_QUIT_NO :{BLACK}Tidak -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Batalkan Permainan STR_ABANDON_GAME_QUERY :{YELLOW}Apakah anda yakin untuk meninggalkan permainan? diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 1729a3fcb8..63de2d9172 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1753,18 +1753,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tá {NUM # Quit window STR_QUIT_CAPTION :{WHITE}Scoir -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}An bhfuil tú cinnte gur mhaith leat dul amach as OpenTTD agus filleadh ar {STRING}? STR_QUIT_YES :{BLACK}Tá STR_QUIT_NO :{BLACK}Níl -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Fág an Cluiche STR_ABANDON_GAME_QUERY :{YELLOW}An bhfuil tú cinnte gur mhaith leat an cluiche seo a fhágáil? diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 9855a0150a..04d9da9b22 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1831,18 +1831,9 @@ STR_INTRO_TRANSLATION :{BLACK}A questa # Quit window STR_QUIT_CAPTION :{WHITE}Esci -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Si è sicuri di voler uscire da OpenTTD e tornare a {STRING}? STR_QUIT_YES :{BLACK}Sì STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abbandona partita STR_ABANDON_GAME_QUERY :{YELLOW}Si è sicuri di voler abbandonare la partita in corso? diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index b2e28bc669..9a1a148e21 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1753,18 +1753,9 @@ STR_INTRO_TRANSLATION :{BLACK}この # Quit window STR_QUIT_CAPTION :{WHITE}終了 -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}このゲームを終了し、{}{STRING}に戻ってもよろしいですか? STR_QUIT_YES :{BLACK}はい STR_QUIT_NO :{BLACK}いいえ -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}ゲームを放棄 STR_ABANDON_GAME_QUERY :{YELLOW}このゲームを終了してもよろしいですか? diff --git a/src/lang/korean.txt b/src/lang/korean.txt index f050da5b0e..e4236da6d7 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}이 버 # Quit window STR_QUIT_CAPTION :{WHITE}종료 -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}정말 이 게임을 끝내고 {STRING}{G 0 "으" ""}로 돌아가시겠습니까? STR_QUIT_YES :{BLACK}예 STR_QUIT_NO :{BLACK}아니요 -# Supported OSes -STR_OSNAME_WINDOWS :{G=f}Windows -STR_OSNAME_UNIX :{G=f}Unix -STR_OSNAME_OSX :{G=f}OS{NBSP}X -STR_OSNAME_HAIKU :{G=f}Haiku -STR_OSNAME_OS2 :{G=f}OS/2 -STR_OSNAME_SUNOS :{G=f}SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}게임 그만하기 STR_ABANDON_GAME_QUERY :{YELLOW}정말 이 게임을 종료하고 메인으로 이동하시겠습니까? diff --git a/src/lang/latin.txt b/src/lang/latin.txt index e1b73679cf..fc0aa1e5f1 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1971,18 +1971,9 @@ STR_INTRO_TRANSLATION :{BLACK}In hac i # Quit window STR_QUIT_CAPTION :{WHITE}Exire -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Esne certus te velle exire OpenTTD et redire ad {STRING}? STR_QUIT_YES :{BLACK}Ita STR_QUIT_NO :{BLACK}Non -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Relinquere Ludum STR_ABANDON_GAME_QUERY :{YELLOW}Esne certus te velle ludum relinquere? diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index bb7ee967d0..fc0d6b3bcd 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1811,18 +1811,9 @@ STR_INTRO_TRANSLATION :{BLACK}Šim tul # Quit window STR_QUIT_CAPTION :{WHITE}Iziet -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Vai jūs tiešām vēlaties iziet no OpenTTD un atgriezties uz {STRING}? STR_QUIT_YES :{BLACK}Jā STR_QUIT_NO :{BLACK}Nē -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Pamest spēli STR_ABANDON_GAME_QUERY :{YELLOW}Vai tiešām vēlaties pamest šo spēli? diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 4fb65486fd..0a5619885b 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -382,6 +382,7 @@ STR_COLOUR_ORANGE :Oranžinė STR_COLOUR_BROWN :Ruda STR_COLOUR_GREY :Pilka STR_COLOUR_WHITE :Balta +STR_COLOUR_DEFAULT :Numatytas # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -863,6 +864,7 @@ STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLA STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - „{STRING}“ STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Išvalyti STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Panaikinti esamą programą (tik „Speciali 1“ arba „Speciali 2“) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Pakeiskite muzikos pasirinkimą į kitą įdiegtą rinkinį STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Paspauskite ant garso takelio, norėdami įtraukti į sąrašą (tik „Speciali 1“ arba „Speciali 2“) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Spragtelėjus takelį, jis pašalinamas iš dabartinės programos (tik „Speciali 1“ ir „Speciali 2“) @@ -1121,6 +1123,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Pietų Afrikos STR_GAME_OPTIONS_CURRENCY_CUSTOM :Kita... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijos Laris (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Irano Rialas (IRR) +STR_GAME_OPTIONS_CURRENCY_CNY :Kinų renminbi (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Honkongo doleris (HKD) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automobilių eismas @@ -1184,6 +1188,9 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvigubas STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Trigubas +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normalus +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvigubas dydis +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Keturių dydžių STR_GAME_OPTIONS_BASE_GRF :{BLACK}Bazinis grafikos rinkinys STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pasirinkti naudojimui bazinę grafikos rinkinį @@ -1536,6 +1543,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Reljefo spalva STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Žalia STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tamsiai žalia STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violetinė +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Perkelkite peržiūros sritį su RMB, pelės padėtis užrakinta STR_CONFIG_SETTING_SMOOTH_SCROLLING :Tolydi vaizdo slinktis: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Įjungus šią nuostatą ir pakeitus pagrindinio lango rodomą vietą (pvz., spragtelėjus žemėlapyje), vaizdas slinksis tolydžiai. Priešingu atveju vaizdas pasikeis akimirksniu, šuoliškai. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Rodyti matavimo pastabą, kai naudojami įvairūs statybų įrankiai: {STRING} @@ -1567,6 +1575,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Click STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Click STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Išjungta +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Uždaro langą dešiniuoju pelės klavišu spustelėdami jo vidų. Išjungia patarimą dešiniuoju pelės mygtuku spustelėjimu! STR_CONFIG_SETTING_AUTOSAVE :Automatinis saugojimas: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Laiko tarpsnis tarp automatinių žaidimo išsaugojimų @@ -1973,18 +1982,9 @@ STR_INTRO_TRANSLATION :{BLACK}Šiam ve # Quit window STR_QUIT_CAPTION :{WHITE}Baigti -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ar jūs tikrai norite sustabdyti žaidimą ir grįžti į {STRING}? STR_QUIT_YES :{BLACK}Taip STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Palikti Žaidimą STR_ABANDON_GAME_QUERY :{YELLOW}Ar tikrai norite išeiti iš žaidimo? @@ -2609,6 +2609,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Statyti STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Aktyvinti automobilių kelių ir stotelių šalinimo veikseną STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Aktyvinti tramvajaus bėgių ir stotelių šalinimo veikseną +STR_ROAD_NAME_TRAM :Tramvajus # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Pasirinkite garažo kryptį @@ -2792,6 +2793,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Oro uost STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}Plėtinys: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Krovinys priimtas: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Kelio tipas: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Geležinkelių greičio limitas: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Kelio greičio limitas: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tramvajaus greičio limitas: {LTBLUE}{VELOCITY} @@ -2894,9 +2896,18 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD komanda # Framerate display window +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK} Per sekundę pateiktų vaizdo kadrų skaičius. +STR_FRAMERATE_MEMORYUSE :{WHITE}Atmintis +STR_FRAMERATE_DATA_POINTS :{BLACK} Duomenys pagrįsti {COMMA} matavimais +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} ############ Leave those lines in this order!! +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Nuorodos grafiko vėlavimas: +STR_FRAMERATE_VIDEO :{BLACK}Vaizdo išvestis +STR_FRAMERATE_GAMESCRIPT :{BLACK} Žaidimo skriptas: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Nuorodos grafiko vėlavimas +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI Iš viso skriptų ############ End of leave-in-this-order @@ -2922,6 +2933,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Žaidimo STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nėra informacijos STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Plėtiniai: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK} Filtro eilutė: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Perrašyti bylą STR_SAVELOAD_OSKTITLE :{BLACK}Įveskite išsaugomo žaidimo vardą @@ -3185,6 +3197,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Įrašyk STR_TOWN_DIRECTORY_CAPTION :{WHITE}Miestai STR_TOWN_DIRECTORY_NONE :{ORANGE}Nėra STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Miestas){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Spragtelėjus ant pavadinimo, miestas bus parodytas ekrano centre. Spragtelėjus laikant nuspaudus „Ctrl“ klavišą, bus atvertas papildomas peržiūros langas į pasirinktą miestą STR_TOWN_POPULATION :{BLACK}Pasaulio populiacija: {COMMA} @@ -3216,6 +3229,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Pervardinti mie # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} vietinė valdžia +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Rodyti zoną vietos valdžios ribose STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Transporto kompanijų reitingai: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Galimi veiksmai: @@ -3559,6 +3573,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Iškelti visas STR_GROUP_RENAME_CAPTION :{BLACK}Pervadinti grupę STR_GROUP_PROFIT_THIS_YEAR :Šio mėnesio pelnas: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nauji lokomotyvai @@ -3570,6 +3585,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nauji automobil ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nauji lokomotyvai +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Naujos kelių transporto priemonės STR_BUY_VEHICLE_SHIP_CAPTION :Nauji laivai STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nauji lėktuvai ############ range for vehicle availability ends @@ -3611,6 +3627,8 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti p STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą laivą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą lėktuvą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK} Pirkti ir paruošti pažymėtą laivą. Shift+paspaudimas rodo numatomą kainą be pirkimo +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkti ir paruošti pažymėtą lėktuvą. Shift+paspaudimas rodo numatomą kainą be pirkimo STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pervardinti STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Pervardinti @@ -3728,6 +3746,7 @@ STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE.kam :lokomotyvui STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE.ka :lokomotyvą STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE.kuo :lokomotyvu STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE.kur :lokomotyve +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :elektrinis geležinkelio lokomotyvas STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :vienbėgis lokomotyvas STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE.kas :vienbėgis lokomotyvas STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE.ko :vienbėgio lokomotyvo @@ -3750,6 +3769,7 @@ STR_ENGINE_PREVIEW_ROAD_VEHICLE.kam :automobiliui STR_ENGINE_PREVIEW_ROAD_VEHICLE.ka :automobilį STR_ENGINE_PREVIEW_ROAD_VEHICLE.kuo :automobiliu STR_ENGINE_PREVIEW_ROAD_VEHICLE.kur :automobilyje +STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramvajaus transporto priemonė STR_ENGINE_PREVIEW_AIRCRAFT :lėktuvas STR_ENGINE_PREVIEW_AIRCRAFT.kas :lėktuvas @@ -3769,6 +3789,7 @@ STR_ENGINE_PREVIEW_SHIP.kur :laive STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Kaina: {CURRENCY_LONG} Svoris: {WEIGHT_SHORT}{}Greitis: {VELOCITY} Galia: {POWER}{}Eksploatavimo išlaidos: {CURRENCY_LONG} per metus{}Talpa: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Kaina: {CURRENCY_LONG} Svoris: {WEIGHT_SHORT}{}Greitis: {VELOCITY} Galia: {POWER} Maks. T.E.: {6:FORCE}{}Einamosios išlaidos: {4:CURRENCY_LONG}/yr{}Talpa: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Kaina: {CURRENCY_LONG} Didž. Greitis: {VELOCITY}{}Talpa: {CARGO_LONG}{}Eksploatacijos išlaidos: {CURRENCY_LONG}/metams +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Kaina: {CURRENCY_LONG} Didž. greitis: {VELOCITY}{}Lėktuvo tipas: {STRING} Nuotolis: {COMMA} tiles{}Talpa: {CARGO_LONG}, {CARGO_LONG}{}Eksploatacijos išlaidos: {CURRENCY_LONG}/metams # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Keisti tr. priemones {STRING} - {STRING} @@ -3802,6 +3823,7 @@ STR_REPLACE_ENGINES :Varikliai STR_REPLACE_WAGONS :Vagonai STR_REPLACE_HELP_RAILTYPE :{BLACK}Pasirinkite bėgio tipą, kur dėl variklio norėtumėte pakeisti +STR_REPLACE_HELP_ROADTYPE :{BLACK}Pasirinkite kelio tipą, kurio automobilius norite pakeisti STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Kaireje lango dalyje pazymeta tr. priemone bus pakeista tr. priemone, kuri yra pazymeta desineje lango puseje STR_REPLACE_RAIL_VEHICLES :Paprasti traukiniai STR_REPLACE_ELRAIL_VEHICLES :Elektrifikuoti Traukiniai @@ -3893,6 +3915,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} met{P a STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} met{P ai ai ų} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Didž. greitis: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY} {BLACK}Lėktuvo tipas: {LTBLUE}{STRING} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Svoris: {LTBLUE}{WEIGHT_SHORT} {BLACK}Galia: {LTBLUE}{POWER}{BLACK} Didž. greitis: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Svoris: {LTBLUE}{WEIGHT_SHORT} {BLACK}Galia: {LTBLUE}{POWER}{BLACK} Didž. greitis: {LTBLUE}{VELOCITY} {BLACK}Didž. traukos jėga: {LTBLUE}{FORCE} @@ -4274,6 +4297,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pasirink STR_AI_LIST_CANCEL :{BLACK}Atšaukti STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nekeisti skripto +STR_SCREENSHOT_CAPTION :{WHITE}Padaryti ekrano nuotrauką +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Aukščių žemėlapio ekrano nuotrauka +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Mini žemėlapio ekrano kopija # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrai @@ -4566,6 +4592,8 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Šio kel STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Neįmanoma pašalinti tramvajaus... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... nėra kelio STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... nėra kelio tramvajui +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Čia negalima konvertuoti tramvajaus tipo... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE} Nėra tinkamo kelio # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Neimanoma cia iskasti kanalu... diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index b465025b57..638e1b49b4 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1806,18 +1806,9 @@ STR_INTRO_TRANSLATION :{BLACK}Dës Iww # Quit window STR_QUIT_CAPTION :{WHITE}Eraus -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Bass du sécher, dass du aus OpenTTD eraus wëlls, an an den {STRING} zeréck? STR_QUIT_YES :{BLACK}Jo STR_QUIT_NO :{BLACK}Nee -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -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? diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 8c8cf0746d..4358dfdaf8 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1514,18 +1514,9 @@ STR_INTRO_TRANSLATION :{BLACK}Terjemah # Quit window STR_QUIT_CAPTION :{WHITE}Keluar -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Adakah anda pasti untuk keluar dari OpenTTD dan kembali ke {STRING}? STR_QUIT_YES :{BLACK}Ya STR_QUIT_NO :{BLACK}Tidak -# Supported OSes -STR_OSNAME_WINDOWS :Tetingkap -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Tinggalkan Permainan STR_ABANDON_GAME_QUERY :{YELLOW}Pastikah anda mahu keluar dari permainan ini? diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index ea51d4ccd9..f8e19bcef2 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}Denne ov # Quit window STR_QUIT_CAPTION :{WHITE}Avslutt -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Er du sikker på at du vil avslutte OpenTTD og gå tilbake til {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Avslutt spill STR_ABANDON_GAME_QUERY :{YELLOW}Er du sikker på at du vil avslutte dette spillet? diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 5eb0d5b8a7..5845a10491 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1676,18 +1676,9 @@ STR_INTRO_TRANSLATION :{BLACK}Denne ny # Quit window STR_QUIT_CAPTION :{WHITE}Avslutt -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Er du sikker på at du vil avslutte OpenTTD og gå attende til {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Avslutt spel STR_ABANDON_GAME_QUERY :{YELLOW}Er du sikker på at du vil forlata spelet? diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f92c600731..aeab9e3058 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2187,18 +2187,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tej wers # Quit window STR_QUIT_CAPTION :{WHITE}Wyjście -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Czy jesteś pewien, że chcesz zakończyć tę grę i wrócić do {STRING}? STR_QUIT_YES :{BLACK}Tak STR_QUIT_NO :{BLACK}Nie -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Wyjście STR_ABANDON_GAME_QUERY :{YELLOW}Czy jesteś pewien, że chcesz skończyć tę grę? diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d39767aa49..6af854ea69 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1795,18 +1795,9 @@ STR_INTRO_TRANSLATION :{BLACK}Faltam { # Quit window STR_QUIT_CAPTION :{WHITE}Sair -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem a certeza que deseja abandonar este jogo e voltar ao {STRING}? STR_QUIT_YES :{BLACK}Sim STR_QUIT_NO :{BLACK}Não -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar jogo STR_ABANDON_GAME_QUERY :{YELLOW}Tem a certeza que deseja abandonar este jogo? diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index f4372d3311..79c3a4706c 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1745,18 +1745,9 @@ STR_INTRO_TRANSLATION :{BLACK}Acestei # Quit window STR_QUIT_CAPTION :{WHITE}Ieşire din joc -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Eşti sigur că vrei să abandonezi jocul curent şi să revii în {STRING}? STR_QUIT_YES :{BLACK}Da STR_QUIT_NO :{BLACK}Nu -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Ieşire din joc STR_ABANDON_GAME_QUERY :{YELLOW}Eşti sigur că vrei să renunţi la acest joc? diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 266fdad22f..e7d922855b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1959,18 +1959,9 @@ STR_INTRO_TRANSLATION :{BLACK}На э # Quit window STR_QUIT_CAPTION :{WHITE}Выход -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы уверены, что хотите прервать игру и вернуться в {STRING}? STR_QUIT_YES :{BLACK}Да STR_QUIT_NO :{BLACK}Нет -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}В главное меню STR_ABANDON_GAME_QUERY :{YELLOW}Вы действительно хотите выйти из игры? diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 839269d696..dc7bf9cb7b 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1960,18 +1960,9 @@ STR_INTRO_TRANSLATION :{BLACK}Ovom pre # Quit window STR_QUIT_CAPTION :{WHITE}Izlaz -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Da li ste sigurni da želite da napustite OpenTTD i vratite se u {STRING}? STR_QUIT_YES :{BLACK}Da STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Napuštanje partije STR_ABANDON_GAME_QUERY :{YELLOW}Da li stvarno želite da napustite ovu partiju? diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index d3aa2d98b9..3977294b37 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}中文 # Quit window STR_QUIT_CAPTION :{WHITE}退出 -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}你确定要放弃当前游戏并{}退出到 {STRING} 吗? STR_QUIT_YES :{BLACK}是 STR_QUIT_NO :{BLACK}否 -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}放弃游戏 STR_ABANDON_GAME_QUERY :{YELLOW}你确定要放弃当前的游戏吗? diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index c2a65d874e..09a3afa042 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1180,30 +1180,30 @@ STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrova STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Rozbaliť všetko STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Zabaliť všetko STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(nie je dostupné vysvetlenie) -STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Pôvodná hodnota: {ORANGE}{STRING} +STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Predvolená hodnota: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Nastavenie typu: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Nastavenia klienta (neuchovávané v uložených hrách; ovplyvní všetky hry) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Nastavenia hry (uložia sa; ovplyvní iba nové hry) -STR_CONFIG_SETTING_TYPE_GAME_INGAME :Nastavenia hry (uložia sa; ovplyvní iba aktuálnu hru) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Nastavenia spoločnosti (uložia sa; ovplyvní iba nové hry) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Nastavenia spoločnosti (uložia sa; ovplyvní iba aktuálnu firmu) +STR_CONFIG_SETTING_TYPE_CLIENT :Nastavenie klienta (neukladané v uložených hrách; ovplyvní všetky hry) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Nastavenie hry (ukladané v uložených hrách; ovplyvní iba nové hry) +STR_CONFIG_SETTING_TYPE_GAME_INGAME :Nastavenie hry (ukladané v uložených hrách; ovplyvní iba aktuálnu hru) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Nastavenie spoločnosti (ukladané v uložených hrách; ovplyvní iba nové hry) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Nastavenie spoločnosti (ukladané v uložených hrách; ovplyvní iba aktuálnu spoločnosť) STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategória: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Typ: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Obmedzuje zoznam nižšie podľa definovaných nastavení STR_CONFIG_SETTING_RESTRICT_BASIC :Základné (zobrazí iba dôležité nastavenia) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Pokročilé (zobrazí väčšinu nastavení) -STR_CONFIG_SETTING_RESTRICT_ALL :Odborné (zobrazí všetky nastavenia, vrátane tých podivných) +STR_CONFIG_SETTING_RESTRICT_ALL :Odborné (zobrazí všetky nastavenia, vrátane podivných) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Nastavenia s odlišnou hodnotou ako je predvolená STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Nastavenia s odlišnou hodnotou než aké má tvoja nová hra STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Obmedzuje zoznam nižšie na niektoré typy nastavení STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Všetky typy nastavení -STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Nastavenia klienta (nieje uložené; ovplyvní všetky hry) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Nastavenia hry (uložené v uložených hrách; ovplyvní iba nové hry) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Nastavenia hry (uložené v uložených hrách; ovplyvní iba aktuálnu hru) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Nastavenia spoločnosti (uložené v uložených hrách; ovplyvní iba nové hry) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Nastavenia spoločnosti (uchované v uloženej hre; ovplyvnia iba aktuálnu spoločnosť) +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Nastavenia klienta (neukladané v uložených hrách; ovplyvnia všetky hry) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Nastavenia hry (ukladané v uložených hrách; ovplyvnia iba nové hry) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Nastavenia hry (ukladané v uložených hrách; ovplyvnia iba aktuálnu hru) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Nastavenia spoločnosti (ukladané v uložených hrách; ovplyvnia iba nové hry) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Nastavenia spoločnosti (ukladané v uložených hrách; ovplyvnia iba aktuálnu spoločnosť) STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}kategórie {BLACK}na {WHITE}{STRING} STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}typu {BLACK}na {WHITE}Všetky typy nastavenia STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Zobrazenie všetkých výsledkov vyhľadávania nastavením{}{SILVER}kategórie {BLACK}na {WHITE}{STRING} {BLACK}a {SILVER}typu {BLACK}na {WHITE}Všetky typy nastavenia @@ -1377,7 +1377,7 @@ STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Klik pravým tl STR_CONFIG_SETTING_POPULATION_IN_LABEL :Zobraziť počet obyvateľov mesta v jeho názve: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Zobrazí populáciu mesta v jeho názve. STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Hrúbka čiar v grafe: {STRING} -STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Hrúbka čiar v grafe. Tenké čiary sú presnejšie, hrubšie zase lepšie viditeľné. +STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Hrúbka čiar v grafe. Tenké čiary sú presnejšie, hrubšie zasa lepšie viditeľné STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobraziť názov NewGRF v okne vozidiel: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Pridá riadok do zoznamu vozidiel, ktorý ukazuje z akého NewGRF vozidlo pochádza. @@ -1425,8 +1425,8 @@ STR_CONFIG_SETTING_SERVICEATHELIPAD :Automatické op STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Servisovať helikoptéry po každom dosadnutí aj ked nie je na letisku žiadny hangár. STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Otvárať panel úprav terénu s panelmi výstavby: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Otvoriť panel na úpravu terénu spolu s panelom na stavbu (cesty, železnice...) -STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Farba krajiny použitá na malej mape: {STRING} -STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farby terénu na minimape +STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Farba krajiny použitá na minimape: {STRING} +STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farba terénu na minimape STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Zelená STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tmavozelená STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fialová @@ -1510,17 +1510,17 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Zoskupiť výda STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definujte rozloženie okna s financiami. STR_CONFIG_SETTING_SOUND_TICKER :Oznamovač správ: {STRING} -STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Prehrať zvuk pre zhrnuté novinové správy +STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Prehrať zvuk pri zhrnutých správach STR_CONFIG_SETTING_SOUND_NEWS :Noviny: {STRING} STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Prehrať zvuk pri zobrazení novín STR_CONFIG_SETTING_SOUND_NEW_YEAR :Koniec roka: {STRING} -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Prehrávať zvukové efekty na konci roku zhŕňajúce výkon spoločnosti počas roku v porovnaní s minulým rokom -STR_CONFIG_SETTING_SOUND_CONFIRM :Stavba: {STRING} -STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Hrať zvukovú správu pri úspešnej stavbe alebo pri iných akciách +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Prehrať zvuk na konci roku pri zobrazení zhrnutia výkonu spoločnosti počas roka v porovnaní s minulým rokom +STR_CONFIG_SETTING_SOUND_CONFIRM :Výstavba: {STRING} +STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Prehrať zvuk pri úspešnej výstavbe alebo pri iných akciách STR_CONFIG_SETTING_SOUND_CLICK :Kliknutia na tlačidlá: {STRING} -STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Pípať pri kliknutí na tlačidlá -STR_CONFIG_SETTING_SOUND_DISASTER :Havárie/zrážky: {STRING} -STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Prehrávať zvukové efekty nehôd a katastrôf +STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Pípať pri klikaní na tlačidlá +STR_CONFIG_SETTING_SOUND_DISASTER :Katastrofy/nehody: {STRING} +STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Prehrávať zvukové efekty nehôd a katastrof STR_CONFIG_SETTING_SOUND_VEHICLE :Vozidlá: {STRING} STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Prehrávať zvukové efekty vozidiel STR_CONFIG_SETTING_SOUND_AMBIENT :Prostredie: {STRING} @@ -1691,15 +1691,15 @@ STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Počet otvoren STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :vypnuté STR_CONFIG_SETTING_ZOOM_MIN :Maximálna úroveň priblíženia: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maximálna úroveň priblíženia pre pozorovanie. Uvedomte si že čím vyššie je možné priblíženie, tým rastie požiadavka na pamäť. +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maximálna úroveň priblíženia pohľadu. Vyššie úrovne priblíženia zvyšujú požiadavky na pamäť STR_CONFIG_SETTING_ZOOM_MAX :Maximálna úroveň oddialenia: {STRING} -STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Maximálna úroveň oddialenia pre pozorovanie. Uvedomte si že čím vyššie je možné oddialenie, tým rastie požiadavka na pamäť. -STR_CONFIG_SETTING_ZOOM_LVL_MIN :4krát -STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :Dvojnásobný -STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normálny -STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :Dvojnásobný -STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4krát -STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8krát +STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Maximálna úroveň oddialenia pohľadu. Vyššie úrovne oddialenia môžu pri používaní spôsobovať oneskorenie +STR_CONFIG_SETTING_ZOOM_LVL_MIN :4-krát +STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2-krát +STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normálna +STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2-krát +STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4-krát +STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8-krát STR_CONFIG_SETTING_TOWN_GROWTH :Rozvoj miest: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Rýchlosť rastu miest STR_CONFIG_SETTING_TOWN_GROWTH_NONE :žiadny @@ -1875,18 +1875,9 @@ STR_INTRO_TRANSLATION :{BLACK}V prekla # Quit window STR_QUIT_CAPTION :{WHITE}Koniec -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ste si istý, že chcete ukončiť hru a vrátiť sa do {STRING}? STR_QUIT_YES :{BLACK}Áno STR_QUIT_NO :{BLACK}Nie -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Opustiť hru STR_ABANDON_GAME_QUERY :{YELLOW}Ste si istý, že chcete opustiť túto hru? diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index f07f071ff8..a8b288f5a8 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1908,18 +1908,9 @@ STR_INTRO_TRANSLATION :{BLACK}Temu pre # Quit window STR_QUIT_CAPTION :{WHITE}Izhod -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Zagotovo želiš zapustiti igro in se vrniti v {STRING}? STR_QUIT_YES :{BLACK}Da STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Zapusti igro STR_ABANDON_GAME_QUERY :{YELLOW}Zagotovo želiš zapustiti igro? diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index efe012ed15..12acd9a383 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}A esta t # Quit window STR_QUIT_CAPTION :{WHITE}Salir -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}¿Está seguro de abandonar OpenTTD y regresar a {STRING}? STR_QUIT_YES :{BLACK}Sí STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar Juego STR_ABANDON_GAME_QUERY :{YELLOW}¿Está seguro de que desea abandonar este juego? diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 5571c32f5f..64344f42ef 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}A esta t # Quit window STR_QUIT_CAPTION :{WHITE}Salir -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}¿Estás seguro de salir de OpenTTD y regresar a {STRING}? STR_QUIT_YES :{BLACK}Sí STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Salir de la partida STR_ABANDON_GAME_QUERY :{YELLOW}¿Estás seguro de que deseas salir de esta partida? diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 23f557ec07..65b1ee1ec2 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}Den här # Quit window STR_QUIT_CAPTION :{WHITE}Avsluta -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Är du säker på att du vill avsluta OpenTTD och återvända till {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nej -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Avsluta spelet STR_ABANDON_GAME_QUERY :{YELLOW}Är du säker på att du vill avsluta spelet? diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 0b6a8a396c..4bad1f00b1 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1607,14 +1607,6 @@ STR_QUIT_CAPTION :{WHITE}வெ STR_QUIT_YES :{BLACK}ஆமாம் STR_QUIT_NO :{BLACK}இல்லை -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}ஆட்டத்தை கைவிடு STR_ABANDON_GAME_QUERY :{YELLOW}நீங்கள் இந்த ஆட்டத்தினை விட்டு வெளியேறுவதில் உறுதியா? diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 258be30a15..cb00ecdd59 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1704,18 +1704,9 @@ STR_INTRO_TRANSLATION :{BLACK} กา # Quit window STR_QUIT_CAPTION :{WHITE}ออกจากเกม -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}คุณแน่ใจว่าจะออกจากเกม OpenTTD แล้วกลับสู่ {STRING}? STR_QUIT_YES :{BLACK}ใช่ STR_QUIT_NO :{BLACK}ไม่ -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :ระบบปฏิบัติการ Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}ออกไปสู่เมนูหลัก STR_ABANDON_GAME_QUERY :{YELLOW}เกมยังดำเนินอยู่แน่ใจหรือไม่ว่าจะกลับไปสู่เมนูหลัก? diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index d530adbad3..6b6dc6b87d 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1755,18 +1755,9 @@ STR_INTRO_TRANSLATION :{BLACK}此段 # Quit window STR_QUIT_CAPTION :{WHITE}離開 -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}您確定要放棄進行中的遊戲{}返回 {STRING}? STR_QUIT_YES :{BLACK}是 STR_QUIT_NO :{BLACK}否 -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}放棄遊戲 STR_ABANDON_GAME_QUERY :{YELLOW}你要放棄這個遊戲嗎? diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 9d5129571a..240b3041d8 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1808,18 +1808,9 @@ STR_INTRO_TRANSLATION :{BLACK}Bu çevi # Quit window STR_QUIT_CAPTION :{WHITE}Çıkış -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Oyundan çıkıp {STRING} sisteminize dönmek istediğinizden emin misiniz? STR_QUIT_YES :{BLACK}Evet STR_QUIT_NO :{BLACK}Hayır -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Ana Menüye Dön STR_ABANDON_GAME_QUERY :{YELLOW}Oyunu bitirmek istediğinizden emin misiniz? diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 012a569f9a..6b9545d1a9 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1935,18 +1935,9 @@ STR_INTRO_TRANSLATION :{BLACK}Пере # Quit window STR_QUIT_CAPTION :{WHITE}Вийти -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ви дійсно бажаєте вийти до {STRING}? STR_QUIT_YES :{BLACK}Так STR_QUIT_NO :{BLACK}Ні -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Покинути гру STR_ABANDON_GAME_QUERY :{YELLOW}Ви дійсно хочете покинути гру? diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 44deeae30f..e0608c3e3d 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -655,14 +655,6 @@ STR_QUIT_CAPTION :{WHITE}Вӗҫл STR_QUIT_YES :{BLACK}Ийя STR_QUIT_NO :{BLACK}Ҫук -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Вӑййи ан килӗш diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 8f41c2ff22..fd8b8e1e64 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1687,18 +1687,9 @@ STR_INTRO_TOOLTIP_QUIT :{BLACK}Slút 'O # Quit window STR_QUIT_CAPTION :{WHITE}Ôfslúte -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Witte jo seker dat jo dit spul ôfslúte wolle en werom gean wolle nei {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nee -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Ferlit Spul STR_ABANDON_GAME_QUERY :{YELLOW}Wolsto echt dit lânskip slúte? diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index b48ddf424b..8807e62bb6 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -583,12 +583,9 @@ STR_INTRO_GAME_OPTIONS :{BLACK}Ludo Sel # Quit window STR_QUIT_CAPTION :{WHITE}Livas -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Kad tu esas certa ke tu volas livar OpenTTD ed rivenar a {STRING}? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}Ne -# Supported OSes - # Abandon game # Cheat window diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 5f182a1007..340bb0818c 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -938,17 +938,9 @@ STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Пока # Quit window STR_QUIT_CAPTION :{WHITE}Напушти -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Дали сте сигурни дека сакате да ја напуштите OpenTTD и да се вратите во {STRING}? STR_QUIT_YES :{BLACK}Да STR_QUIT_NO :{BLACK}Не -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Напушти ја Играта STR_ABANDON_GAME_QUERY :{YELLOW}Дали сте сигурни дека сакате да ја напуштите играта? diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index 2728fd297f..ea06945bb1 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -510,8 +510,6 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD # Quit window -# Supported OSes - # Abandon game # Cheat window diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index 6ef399f161..25cae04d3e 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -840,8 +840,6 @@ STR_INTRO_CAPTION :{WHITE}ओप # Quit window -# Supported OSes - # Abandon game # Cheat window diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 2865d4e461..30af9b9364 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1470,18 +1470,9 @@ STR_INTRO_TRANSLATION :{BLACK}این # Quit window STR_QUIT_CAPTION :{WHITE}خروج -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}آیا می‌خواهید از بازی خارج شوید و برگردید به{STRING}? STR_QUIT_YES :{BLACK}بله STR_QUIT_NO :{BLACK}خیر -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :هایکو -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}رها کردن بازی STR_ABANDON_GAME_QUERY :{YELLOW}آیا مطمئن هستی که میخواهی این بازی را از بین ببری؟ diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 9d5e65753c..61ed5a2d93 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1367,18 +1367,9 @@ STR_INTRO_TRANSLATION :{BLACK}اس ت # Quit window STR_QUIT_CAPTION :{WHITE}باہر نکلو -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}کیا آپ واقعی OpenTTD کو چھوڑ کر واپس {STRING} میں جانا چاہتے ہیں؟ STR_QUIT_YES :{BLACK}ہاں STR_QUIT_NO :{BLACK}نہیں -# Supported OSes -STR_OSNAME_WINDOWS :ونڈوز -STR_OSNAME_UNIX :یونیکس -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}کھیل چھوڑ دو STR_ABANDON_GAME_QUERY :{YELLOW}کیا آپ کو یقین ہے کہ آپ اس کھیل کو چھوڑنا چاہ رہے ہیں؟ diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 45b00a0361..0211530fef 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1807,18 +1807,9 @@ STR_INTRO_TRANSLATION :{BLACK}Bản d # Quit window STR_QUIT_CAPTION :{WHITE}Thoát -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Bạn có chắc chắn muốn thoát khỏi OpenTTD và trở lại {STRING}? STR_QUIT_YES :{BLACK}Đồng ý STR_QUIT_NO :{BLACK}Không đồng ý -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Thoát STR_ABANDON_GAME_QUERY :{YELLOW}Bạn có chắc chắn muốn thoát khỏi trò chơi không? diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index cd5a116d35..e905391461 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1760,18 +1760,9 @@ STR_INTRO_TRANSLATION :{BLACK}Mae'r cy # Quit window STR_QUIT_CAPTION :{WHITE}Gadael -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ydych chi eisiau gadael y gêm a dychwelyd i {STRING}? STR_QUIT_YES :{BLACK}Iawn STR_QUIT_NO :{BLACK}Na -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Rhoi'r gorau i Gêm STR_ABANDON_GAME_QUERY :{YELLOW}Ydych chi'n siwr eich bod chi eisiau rhoi'r gorau i'r gêm? From 20151e41ea0b504f94fab44f729c7c1e6cf88928 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 9 Dec 2020 17:50:24 +0000 Subject: [PATCH 320/601] Update: Translations from eints korean: 1 change by telk5093 french: 1 change by glx22 --- src/lang/french.txt | 1 + src/lang/korean.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index 4efbe83b31..2c025c586e 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1808,6 +1808,7 @@ STR_INTRO_TRANSLATION :{BLACK}Il manqu # Quit window STR_QUIT_CAPTION :{WHITE}Quitter +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Êtes-vous sûr de vouloir quitter OpenTTD{NBSP}? STR_QUIT_YES :{BLACK}Oui STR_QUIT_NO :{BLACK}Non diff --git a/src/lang/korean.txt b/src/lang/korean.txt index e4236da6d7..aaee99eae3 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1808,6 +1808,7 @@ STR_INTRO_TRANSLATION :{BLACK}이 버 # Quit window STR_QUIT_CAPTION :{WHITE}종료 +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}정말 게임을 종료하시겠습니까? STR_QUIT_YES :{BLACK}예 STR_QUIT_NO :{BLACK}아니요 From e2eafd86de01abe0aac06f369c09808c758e025c Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 10 Dec 2020 00:31:03 +0100 Subject: [PATCH 321/601] Fix: Prevent infinite recursion in commit checker --- .github/workflows/commit-checker.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/commit-checker.yml b/.github/workflows/commit-checker.yml index d2546ab30b..d83183a467 100644 --- a/.github/workflows/commit-checker.yml +++ b/.github/workflows/commit-checker.yml @@ -24,6 +24,12 @@ jobs: # the log between HEAD^ and HEAD^2 will be the commits in the pull-request. DEPTH=4 while [ -z "$(git merge-base HEAD^ HEAD^2)" ]; do + # Prevent infinite recursion + if [ ${DEPTH} -gt 256 ]; then + echo "No common parent between '${GITHUB_HEAD_REF}' and '${GITHUB_BASE_REF}'." >&2 + exit 1 + fi + git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --deepen=${DEPTH} origin HEAD DEPTH=$(( ${DEPTH} * 4 )) done From 7f5afbfdf5ac288da188276430c30b3ed0af99f8 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 10 Dec 2020 17:53:08 +0000 Subject: [PATCH 322/601] Update: Translations from eints slovak: 2 changes by FuryPapaya --- src/lang/slovak.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 09a3afa042..b1b3bf1cde 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1874,7 +1874,8 @@ STR_INTRO_BASESET :{BLACK}Vo vybra STR_INTRO_TRANSLATION :{BLACK}V preklade chýba {NUM} reťaz{P ec ce cov}. Prosím pomôžte urobiť OpenTTD lepším a prihláste sa ako prekladateľ. Viac detailov v readme.txt # Quit window -STR_QUIT_CAPTION :{WHITE}Koniec +STR_QUIT_CAPTION :{WHITE}Ukončiť +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ste si istý, že chcete ukončiť OpenTTD? STR_QUIT_YES :{BLACK}Áno STR_QUIT_NO :{BLACK}Nie From 6fae0b83d9f0ddc28d6f1cadf3c8aef126004429 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 10 Dec 2020 23:57:27 +0100 Subject: [PATCH 323/601] Add: [CMake] targets to generate documentation --- CMakeLists.txt | 21 +++++++++++++++++++ Doxyfile => Doxyfile.in | 8 +++---- cmake/scripts/FindVersion.cmake | 12 +++++++++++ src/script/api/CMakeLists.txt | 17 +++++++++++++++ .../api/{Doxyfile_AI => Doxyfile_AI.in} | 14 ++++--------- .../api/{Doxyfile_Game => Doxyfile_GS.in} | 14 ++++--------- 6 files changed, 61 insertions(+), 25 deletions(-) rename Doxyfile => Doxyfile.in (98%) rename src/script/api/{Doxyfile_AI => Doxyfile_AI.in} (96%) rename src/script/api/{Doxyfile_Game => Doxyfile_GS.in} (96%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 39cfffc019..a8f7aa071a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,10 @@ find_package(Xaudio2) find_package(Grfcodec) +if(UNIX) + find_package(Doxygen) +endif() + # IPO is only properly supported from CMake 3.9. Despite the fact we are # CMake 3.5, still enable IPO if we detect we are 3.9+. if(POLICY CMP0069) @@ -130,6 +134,23 @@ add_custom_target(find_version # An empty target for the tools add_custom_target(tools) +# Documentation +if(DOXYGEN_EXECUTABLE) + add_custom_target(docs) + add_custom_target(docs_source + ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/docs + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating documentation for source" + ) + add_dependencies(docs_source + find_version + ) + add_dependencies(docs + docs_source + ) +endif() + include(SourceList) include(Endian) add_endian_definition() diff --git a/Doxyfile b/Doxyfile.in similarity index 98% rename from Doxyfile rename to Doxyfile.in index e288ffbd87..8727594771 100644 --- a/Doxyfile +++ b/Doxyfile.in @@ -8,10 +8,10 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "OpenTTD Source" -PROJECT_NUMBER = $(VERSION) +PROJECT_NUMBER = ${REV_VERSION} PROJECT_BRIEF = PROJECT_LOGO = -OUTPUT_DIRECTORY = docs/source/ +OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/source/ CREATE_SUBDIRS = YES ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English @@ -306,16 +306,14 @@ SKIP_FUNCTION_MACROS = YES # Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = -GENERATE_TAGFILE = objs/openttd.tag +GENERATE_TAGFILE = ${CPACK_BINARY_DIR}/docs/openttd.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES -MSCGEN_PATH = DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index bb754fc5b3..c920e6b8c7 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -137,4 +137,16 @@ else() message(STATUS "Generating CPackProperties.cmake") configure_file("${CMAKE_SOURCE_DIR}/CPackProperties.cmake.in" "${CPACK_BINARY_DIR}/CPackProperties.cmake" @ONLY) + + message(STATUS "Generating Doxyfile") + configure_file("${CMAKE_SOURCE_DIR}/Doxyfile.in" + "${CPACK_BINARY_DIR}/Doxyfile") + + message(STATUS "Generating Doxyfile_AI") + configure_file("${CMAKE_SOURCE_DIR}/src/script/api/Doxyfile_AI.in" + "${CPACK_BINARY_DIR}/Doxyfile_AI") + + message(STATUS "Generating Doxyfile_GS") + configure_file("${CMAKE_SOURCE_DIR}/src/script/api/Doxyfile_GS.in" + "${CPACK_BINARY_DIR}/Doxyfile_GS") endif() diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index e294cfd05c..9bc4183f19 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -100,6 +100,23 @@ foreach(API "ai;AI" "game;GS" "template;Template") add_dependencies(script_api script_${APILC}_includes ) + + # Documentation + if(DOXYGEN_EXECUTABLE) + add_custom_target(docs_${APILC} + ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/docs + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile_${APIUC} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Generating documentation for ${APILC} API" + ) + add_dependencies(docs_${APILC} + find_version + script_window + ) + add_dependencies(docs + docs_${APILC} + ) + endif() else() add_dependencies(script_api script_${APILC} diff --git a/src/script/api/Doxyfile_AI b/src/script/api/Doxyfile_AI.in similarity index 96% rename from src/script/api/Doxyfile_AI rename to src/script/api/Doxyfile_AI.in index fb0abc0567..f0707e0d86 100644 --- a/src/script/api/Doxyfile_AI +++ b/src/script/api/Doxyfile_AI.in @@ -10,8 +10,8 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "OpenTTD AI API" -PROJECT_NUMBER = $(VERSION) -OUTPUT_DIRECTORY = ../../../docs/aidocs/ +PROJECT_NUMBER = ${REV_VERSION} +OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/ai-api/ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES @@ -76,7 +76,6 @@ GENERATE_DEPRECATEDLIST= NO ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = NO -SHOW_DIRECTORIES = NO FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -91,7 +90,7 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = . $(GENERATED_API_DIR) +INPUT = . ${FIND_VERSION_BINARY_DIR}/script/api INPUT_ENCODING = UTF-8 FILE_PATTERNS = script_*.hpp \ ai_*.hpp @@ -133,7 +132,6 @@ HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO HTML_DYNAMIC_SECTIONS = NO CHM_FILE = @@ -181,8 +179,6 @@ MAN_LINKS = NO #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output @@ -211,15 +207,13 @@ SKIP_FUNCTION_MACROS = YES # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = -GENERATE_TAGFILE = ../../../objs/openttd_noai.tag +GENERATE_TAGFILE = ${CPACK_BINARY_DIR}/docs/openttd_ai_api.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES -MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES diff --git a/src/script/api/Doxyfile_Game b/src/script/api/Doxyfile_GS.in similarity index 96% rename from src/script/api/Doxyfile_Game rename to src/script/api/Doxyfile_GS.in index 83f8ad0e87..7dae7aad66 100644 --- a/src/script/api/Doxyfile_Game +++ b/src/script/api/Doxyfile_GS.in @@ -10,8 +10,8 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "OpenTTD GameScript API" -PROJECT_NUMBER = $(VERSION) -OUTPUT_DIRECTORY = ../../../docs/gamedocs/ +PROJECT_NUMBER = ${REV_VERSION} +OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/gs-api/ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES @@ -76,7 +76,6 @@ GENERATE_DEPRECATEDLIST= NO ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = NO -SHOW_DIRECTORIES = NO FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -91,7 +90,7 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = . $(GENERATED_API_DIR) +INPUT = . ${FIND_VERSION_BINARY_DIR}/script/api INPUT_ENCODING = UTF-8 FILE_PATTERNS = script_*.hpp \ game_*.hpp @@ -133,7 +132,6 @@ HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO HTML_DYNAMIC_SECTIONS = NO CHM_FILE = @@ -181,8 +179,6 @@ MAN_LINKS = NO #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output @@ -211,15 +207,13 @@ SKIP_FUNCTION_MACROS = YES # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = -GENERATE_TAGFILE = ../../../objs/openttd_nogo.tag +GENERATE_TAGFILE = ${CPACK_BINARY_DIR}/docs/openttd_gs_api.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES -MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES From 40edc2863ccec78eac80ee2918188f1e1d605ce0 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 12 Dec 2020 17:52:42 +0000 Subject: [PATCH 324/601] Update: Translations from eints finnish: 1 change by hpiirai --- src/lang/finnish.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index f85a203b1c..dd1670ccb2 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1807,6 +1807,7 @@ STR_INTRO_TRANSLATION :{BLACK}Tästä # Quit window STR_QUIT_CAPTION :{WHITE}Sulje +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Haluatko varmasti poistua OpenTTD:stä? STR_QUIT_YES :{BLACK}Kyllä STR_QUIT_NO :{BLACK}Ei From c66bd18a1087d4b34d79faf68afb9ff8fea89be4 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 13 Dec 2020 16:28:06 +0100 Subject: [PATCH 325/601] Add: save openttd.cfg immediately on changing a setting (#8358) Formally it was only done on exit. This means that if it crashes changes in settings were not stored. This is often rather frustrating. Additionally, targets (like emscripten) where people are unlike to use "Exit Game", will never see their configuration stored. The drawback is that on every setting change there is some minor I/O of writing the ini file to disk again. --- src/openttd.cpp | 18 +++++++----------- src/openttd.h | 1 + src/settings.cpp | 6 ++++++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index d20e88cd86..6db4ce8d7d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -84,6 +84,7 @@ bool HandleBootstrap(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); extern void ShowOSErrorBox(const char *buf, bool system); extern char *_config_file; +extern bool _save_config = false; /** * Error handling for fatal user errors. @@ -178,7 +179,7 @@ static void ShowHelp() " -S sounds_set = Force the sounds set (see below)\n" " -M music_set = Force the music set (see below)\n" " -c config_file = Use 'config_file' instead of 'openttd.cfg'\n" - " -x = Do not automatically save to config file on exit\n" + " -x = Never save configuration changes to disk\n" " -q savegame = Write some information about the savegame and exit\n" "\n", lastof(buf) @@ -395,19 +396,16 @@ struct AfterNewGRFScan : NewGRFScanCallback { char *network_conn; ///< Information about the server to connect to, or nullptr. const char *join_server_password; ///< The password to join the server with. const char *join_company_password; ///< The password to join the company with. - bool *save_config_ptr; ///< The pointer to the save config setting. bool save_config; ///< The save config setting. /** * Create a new callback. - * @param save_config_ptr Pointer to the save_config local variable which - * decides whether to save of exit or not. */ - AfterNewGRFScan(bool *save_config_ptr) : + AfterNewGRFScan() : startyear(INVALID_YEAR), generation_seed(GENERATE_NEW_SEED), dedicated_host(nullptr), dedicated_port(0), network_conn(nullptr), join_server_password(nullptr), join_company_password(nullptr), - save_config_ptr(save_config_ptr), save_config(true) + save_config(true) { /* Visual C++ 2015 fails compiling this line (AfterNewGRFScan::generation_seed undefined symbol) * if it's placed outside a member function, directly in the struct body. */ @@ -438,7 +436,7 @@ struct AfterNewGRFScan : NewGRFScanCallback { WindowDesc::LoadFromConfig(); /* We have loaded the config, so we may possibly save it. */ - *save_config_ptr = save_config; + _save_config = save_config; /* restore saved music volume */ MusicDriver::GetInstance()->SetVolume(_settings_client.music.music_vol); @@ -541,9 +539,7 @@ int openttd_main(int argc, char *argv[]) std::string sounds_set; std::string music_set; Dimension resolution = {0, 0}; - /* AfterNewGRFScan sets save_config to true after scanning completed. */ - bool save_config = false; - std::unique_ptr scanner(new AfterNewGRFScan(&save_config)); + std::unique_ptr scanner(new AfterNewGRFScan()); bool dedicated = false; char *debuglog_conn = nullptr; @@ -847,7 +843,7 @@ int openttd_main(int argc, char *argv[]) WaitTillGeneratedWorld(); // Make sure any generate world threads have been joined. /* only save config if we have to */ - if (save_config) { + if (_save_config) { SaveToConfig(); SaveHotkeysToConfig(); WindowDesc::SaveToConfig(); diff --git a/src/openttd.h b/src/openttd.h index 664963a5da..61cff24564 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -51,6 +51,7 @@ enum DisplayOptions { extern GameMode _game_mode; extern SwitchMode _switch_mode; extern bool _exit_game; +extern bool _save_config; /** Modes of pausing we've got */ enum PauseMode : byte { diff --git a/src/settings.cpp b/src/settings.cpp index 2966a3e22f..02cd520049 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1913,6 +1913,8 @@ CommandCost CmdChangeSetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } SetWindowClassesDirty(WC_GAME_OPTIONS); + + if (_save_config) SaveToConfig(); } return CommandCost(); @@ -1981,12 +1983,15 @@ bool SetSettingValue(uint index, int32 value, bool force_newgame) SetWindowClassesDirty(WC_GAME_OPTIONS); + if (_save_config) SaveToConfig(); return true; } if (force_newgame) { void *var2 = GetVariableAddress(&_settings_newgame, &sd->save); Write_ValidateSetting(var2, sd, value); + + if (_save_config) SaveToConfig(); return true; } @@ -2080,6 +2085,7 @@ bool SetSettingValue(uint index, const char *value, bool force_newgame) } if (sd->desc.proc != nullptr) sd->desc.proc(0); + if (_save_config) SaveToConfig(); return true; } From 4e12aac9c0609f7a42d397106d102ad3367598bd Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 8 Dec 2020 23:11:47 +0100 Subject: [PATCH 326/601] Codechange: to create or not to create a folder, that is the question This was just weird. With XDG _personal_dir was created already, but later on it was checked if it was different from config_dir, and the creation was skipped. All this checking and validation makes my head spin .. let's make it a bit more simple. --- src/fileio.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index d40ca2136c..cc6cb30de2 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1234,7 +1234,6 @@ void DeterminePaths(const char *exe) /* We are using the XDG configuration home for the config file, * then store the rest in the XDG data home folder. */ _personal_dir = _searchpaths[SP_PERSONAL_DIR_XDG]; - FioCreateDirectory(_personal_dir); } else #endif { @@ -1242,9 +1241,9 @@ void DeterminePaths(const char *exe) } /* Make the necessary folders */ -#if defined(WITH_PERSONAL_DIR) FioCreateDirectory(config_dir); - if (config_dir != _personal_dir) FioCreateDirectory(_personal_dir); +#if defined(WITH_PERSONAL_DIR) + FioCreateDirectory(_personal_dir); #endif DEBUG(misc, 3, "%s found as personal directory", _personal_dir); From da7c74ba7e8a89ca4e099522a8ab3564a2f1f3df Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 9 Dec 2020 00:02:39 +0100 Subject: [PATCH 327/601] Fix: change the working-dir searchpath when using '-c' Basically, with '-c' you now create a sandbox. It will still use your personal-dir and global-dir to find files you installed there, but all new files are stored with a base folder identical to the folder the configuration is in. This is a bit of an old bug, that we many have tried to solve in various of different ways. The code has grown sufficiently complex that it is hard to see what consequences of actions are. This is in my opinion the most harmless solution, while increasing the usefulness of the '-c' flag. In essence, the problem was that empty folders were always created in the directory where the configuration was, but as that directory wasn't added to any searchpath, files weren't stored there, unless by accident it was a folder already on the searchpath. For example, if you do './openttd -c local.cfg', it did work as expected. But in the more generic variant, it did not. With this patch, you can run './openttd -c /new/folder/local.cfg', and it will create and prepare that folder to receive new files. 'content_download' is also stored in the directory the configuration is in; this was already the case. Important to note that there is only one search-path for 'content_download'. In other words, when using '-c', it will not look in '~/.openttd' inside the 'content_download' folder. --- src/fileio.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/fileio.cpp b/src/fileio.cpp index cc6cb30de2..254074ef9e 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1192,6 +1192,15 @@ void DeterminePaths(const char *exe) } else { end[1] = '\0'; } + + /* When using '-c', which sets _config_file, change the first search + * path to the folder the configuration file is in. This folder is + * also prepared to store autosaves and content you download. This + * means that by using '-c', you create an sandboxed OpenTTD + * installation as far as writing goes. For reading it still uses the + * other search paths to find files, except for content_download. + * Anything else in your personal-dir will be used if possible. */ + _searchpaths[SP_WORKING_DIR] = config_dir; } else { char personal_dir[MAX_PATH]; if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) { From 5d0331ecdc406b964219a2f7abdb465679ec7f53 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 13 Dec 2020 16:56:33 +0100 Subject: [PATCH 328/601] Fix 8bef06a2: don't use "extern" when you want to implement a global (#8373) --- src/openttd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 6db4ce8d7d..4aeed39282 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -84,7 +84,8 @@ bool HandleBootstrap(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); extern void ShowOSErrorBox(const char *buf, bool system); extern char *_config_file; -extern bool _save_config = false; + +bool _save_config = false; /** * Error handling for fatal user errors. From abb746fae3c47c81b5e259072ed4cbe95516b2ae Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 13 Dec 2020 22:32:44 +0100 Subject: [PATCH 329/601] Fix: [Actions] cleanup ci-build workflow to be up-to-date (#8375) Also, while at it, make it more like the upcoming release-workflow, so they look a lot more similar. Functional it should be the same, except that Windows should now also output when a test fails. --- .github/workflows/ci-build.yml | 198 ++++++++++++++++++++++----------- 1 file changed, 135 insertions(+), 63 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 8786c079be..31d0b511da 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -6,29 +6,38 @@ on: branches: - master +env: + CTEST_OUTPUT_ON_FAILURE: 1 + jobs: linux: name: Linux - runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: - compiler: [clang, gcc] include: - compiler: clang cxxcompiler: clang++ - compiler: gcc cxxcompiler: g++ + + runs-on: ubuntu-20.04 env: - CTEST_OUTPUT_ON_FAILURE: 1 CC: ${{ matrix.compiler }} CXX: ${{ matrix.cxxcompiler }} steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install dependencies run: | + echo "::group::Update apt" sudo apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" sudo apt-get install -y --no-install-recommends \ libfontconfig-dev \ libicu-dev \ @@ -39,104 +48,167 @@ jobs: libxdg-basedir-dev \ zlib1g-dev \ # EOF - - - name: Checkout - uses: actions/checkout@v2 + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive - name: Get OpenGFX run: | mkdir -p ~/.local/share/openttd/baseset cd ~/.local/share/openttd/baseset + + echo "::group::Download OpenGFX" curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" unzip opengfx-all.zip + echo "::endgroup::" + rm -f opengfx-all.zip - - name: CMake - run: mkdir build && cd build && cmake .. + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master - - uses: ammaraskar/gcc-problem-matcher@master - name: Build - run: cd build && make -j2 - - - name: Test - run: cd build && make -j2 test - - windows: - name: Windows - - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - arch: [x86, x64] - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Prepare vcpkg (with cache) - uses: lukka/run-vcpkg@v4 - with: - vcpkgDirectory: 'c:/vcpkg' - doNotUpdateVcpkg: true - vcpkgArguments: 'liblzma libpng lzo zlib' - vcpkgTriplet: '${{ matrix.arch }}-windows-static' - - - uses: ammaraskar/msvc-problem-matcher@master - - name: 'Build' - uses: lukka/run-cmake@v3 - with: - cmakeListsOrSettingsJson: CMakeListsTxtBasic - useVcpkgToolchainFile: true - buildDirectory: '${{ runner.workspace }}/build' - - - name: Install OpenGFX run: | - mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" - cd "C:/Users/Public/Documents/OpenTTD/baseset" - curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip - unzip opengfx-all.zip - rm -f opengfx-all.zip - shell: bash + mkdir build + cd build + + echo "::group::CMake" + cmake .. + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) + echo "::endgroup::" - name: Test run: | - cd ${{ runner.workspace }}/build - ctest -C Debug + cd build + make -j$(nproc) test macos: name: Mac OS - runs-on: macos-latest strategy: fail-fast: false + matrix: + include: + - arch: x64 + full_arch: x86_64 + + runs-on: macos-latest env: - CTEST_OUTPUT_ON_FAILURE: 1 MACOSX_DEPLOYMENT_TARGET: 10.9 steps: - name: Checkout uses: actions/checkout@v2 - - name: Install dependencies - run: brew install pkg-config lzo xz libpng freetype - env: - HOMEBREW_NO_AUTO_UPDATE: 1 + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: '/usr/local/share/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'freetype liblzma lzo' + vcpkgTriplet: '${{ matrix.arch }}-osx' - name: Install OpenGFX run: | mkdir -p ~/Documents/OpenTTD/baseset cd ~/Documents//OpenTTD/baseset + + echo "::group::Download OpenGFX" curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" unzip opengfx-all.zip + echo "::endgroup::" + rm -f opengfx-all.zip - - name: CMake - run: mkdir build && cd build && cmake .. + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master - - uses: ammaraskar/gcc-problem-matcher@master - name: Build - run: cd build && make -j2 + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ + -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + make -j$(sysctl -n hw.logicalcpu) + echo "::endgroup::" - name: Test - run: cd build && make -j2 test + run: | + cd build + make -j$(sysctl -n hw.logicalcpu) test + + windows: + name: Windows + + strategy: + fail-fast: false + matrix: + include: + - arch: x86 + - arch: x64 + + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: 'c:/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'liblzma libpng lzo zlib' + vcpkgTriplet: '${{ matrix.arch }}-windows-static' + + - name: Install OpenGFX + shell: bash + run: | + mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" + cd "C:/Users/Public/Documents/OpenTTD/baseset" + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Build + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: true + buildDirectory: '${{ github.workspace }}/build' + cmakeAppendedArgs: ' -GNinja' + + - name: Test + shell: bash + run: | + cd ${GITHUB_WORKSPACE}/build + ctest -C Debug From a660dce295d448ce6ef9911ee1cbd6e63af6618b Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 13 Dec 2020 19:00:25 +0100 Subject: [PATCH 330/601] Fix: [CMake, MSVC] Don't copy regression exe's into a subfolder as they need have their lang files next to them. --- cmake/scripts/Regression.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/scripts/Regression.cmake b/cmake/scripts/Regression.cmake index af473ea9f0..b38caed5c6 100644 --- a/cmake/scripts/Regression.cmake +++ b/cmake/scripts/Regression.cmake @@ -19,8 +19,8 @@ endif() # subsystem to console. The copy is needed as multiple regressions can run # at the same time. if(EDITBIN_EXECUTABLE) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OPENTTD_EXECUTABLE} regression/${REGRESSION_TEST}.exe) - set(OPENTTD_EXECUTABLE "regression/${REGRESSION_TEST}.exe") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OPENTTD_EXECUTABLE} regression_${REGRESSION_TEST}.exe) + set(OPENTTD_EXECUTABLE "regression_${REGRESSION_TEST}.exe") execute_process(COMMAND ${EDITBIN_EXECUTABLE} /nologo /subsystem:console ${OPENTTD_EXECUTABLE}) endif() From b7851e51adf0fb0d39ed34a579cf6fe68d8949be Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 13 Dec 2020 20:54:20 +0100 Subject: [PATCH 331/601] Fix: set SP_WORKING_DIR earlier with '-c' On Windows, relative folders don't work so well. So we need to lookup the full path. This is best done in DetermineBasePaths() and as a bonus that only sets SP_WORKING_DIR once. --- src/fileio.cpp | 52 ++++++++++++++++++++++------------------ src/os/windows/win32.cpp | 24 +++++++++++++++---- 2 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 254074ef9e..eb529632cd 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1116,11 +1116,32 @@ void DetermineBasePaths(const char *exe) _searchpaths[SP_SHARED_DIR] = nullptr; #endif - if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + char cwd[MAX_PATH]; + if (getcwd(cwd, MAX_PATH) == nullptr) *cwd = '\0'; - _do_scan_working_directory = DoScanWorkingDirectory(); + if (_config_file == nullptr) { + /* Get the path to working directory of OpenTTD. */ + if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; + AppendPathSeparator(tmp, lastof(tmp)); + _searchpaths[SP_WORKING_DIR] = stredup(tmp); + + _do_scan_working_directory = DoScanWorkingDirectory(); + } else { + /* Use the folder of the config file as working directory. */ + char *config_dir = stredup(_config_file); + char *end = strrchr(config_dir, PATHSEPCHAR); + if (end == nullptr) { + free(config_dir); + + /* _config_file is not in a folder, so use current directory. */ + if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; + AppendPathSeparator(tmp, lastof(tmp)); + _searchpaths[SP_WORKING_DIR] = stredup(tmp); + } else { + end[1] = '\0'; + _searchpaths[SP_WORKING_DIR] = config_dir; + } + } /* Change the working directory to that one of the executable */ if (ChangeWorkingDirectoryToExecutable(exe)) { @@ -1131,9 +1152,9 @@ void DetermineBasePaths(const char *exe) _searchpaths[SP_BINARY_DIR] = nullptr; } - if (_searchpaths[SP_WORKING_DIR] != nullptr) { + if (cwd[0] != '\0') { /* Go back to the current working directory. */ - if (chdir(_searchpaths[SP_WORKING_DIR]) != 0) { + if (chdir(cwd) != 0) { DEBUG(misc, 0, "Failed to return to working directory!"); } } @@ -1183,24 +1204,9 @@ void DeterminePaths(const char *exe) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]); } - char *config_dir; + const char *config_dir; if (_config_file != nullptr) { - config_dir = stredup(_config_file); - char *end = strrchr(config_dir, PATHSEPCHAR); - if (end == nullptr) { - config_dir[0] = '\0'; - } else { - end[1] = '\0'; - } - - /* When using '-c', which sets _config_file, change the first search - * path to the folder the configuration file is in. This folder is - * also prepared to store autosaves and content you download. This - * means that by using '-c', you create an sandboxed OpenTTD - * installation as far as writing goes. For reading it still uses the - * other search paths to find files, except for content_download. - * Anything else in your personal-dir will be used if possible. */ - _searchpaths[SP_WORKING_DIR] = config_dir; + config_dir = _searchpaths[SP_WORKING_DIR]; } else { char personal_dir[MAX_PATH]; if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) { diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 1bdbc3c2a8..468234391c 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -451,6 +451,7 @@ char *getcwd(char *buf, size_t size) return buf; } +extern char *_config_file; void DetermineBasePaths(const char *exe) { @@ -481,10 +482,25 @@ void DetermineBasePaths(const char *exe) _searchpaths[SP_SHARED_DIR] = nullptr; #endif - /* Get the path to working directory of OpenTTD */ - getcwd(tmp, lengthof(tmp)); - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + if (_config_file == nullptr) { + /* Get the path to working directory of OpenTTD. */ + getcwd(tmp, lengthof(tmp)); + AppendPathSeparator(tmp, lastof(tmp)); + _searchpaths[SP_WORKING_DIR] = stredup(tmp); + } else { + /* Use the folder of the config file as working directory. */ + TCHAR config_dir[MAX_PATH]; + _tcsncpy(path, convert_to_fs(_config_file, path, lengthof(path)), lengthof(path)); + if (!GetFullPathName(path, lengthof(config_dir), config_dir, nullptr)) { + DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); + _searchpaths[SP_WORKING_DIR] = nullptr; + } else { + strecpy(tmp, convert_from_fs(config_dir, tmp, lengthof(tmp)), lastof(tmp)); + char *s = strrchr(tmp, PATHSEPCHAR); + *(s + 1) = '\0'; + _searchpaths[SP_WORKING_DIR] = stredup(tmp); + } + } if (!GetModuleFileName(nullptr, path, lengthof(path))) { DEBUG(misc, 0, "GetModuleFileName failed (%lu)\n", GetLastError()); From d1fa6b129c94b7c4ae6e45184a25962d49d074b8 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 13 Dec 2020 00:24:55 +0100 Subject: [PATCH 332/601] Add: [CMake] Option to only build tools/docs --- CMakeLists.txt | 134 ++++++++++++++++++---------------- cmake/Options.cmake | 6 ++ src/CMakeLists.txt | 11 ++- src/script/CMakeLists.txt | 4 + src/script/api/CMakeLists.txt | 4 + src/strgen/CMakeLists.txt | 4 + 6 files changed, 98 insertions(+), 65 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8f7aa071a..1a0dd5b759 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,78 @@ set_directory_options() include(Static) set_static_if_needed() +if(MSVC) + # C++17 for MSVC + set(CMAKE_CXX_STANDARD 17) +else() + # C++11 for all other targets + set(CMAKE_CXX_STANDARD 11) +endif() + +set(CMAKE_CXX_STANDARD_REQUIRED YES) +set(CMAKE_CXX_EXTENSIONS NO) + +set(CMAKE_EXPORT_COMPILE_COMMANDS YES) + +# An empty target for the tools +add_custom_target(tools) + +include(Endian) +add_endian_definition() + +include(CompileFlags) +compile_flags() + +if(APPLE OR UNIX) + add_definitions(-DUNIX) +endif() + +if(UNIX) + find_package(Doxygen) +endif() + +list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp") +if(WIN32) + list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") +endif() + +# Generate a target to determine version, which is execute every 'make' run +add_custom_target(find_version + ${CMAKE_COMMAND} + -DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated + -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + BYPRODUCTS ${GENERATED_SOURCE_FILES} +) + +# Documentation +if(DOXYGEN_EXECUTABLE) + add_custom_target(docs) + add_custom_target(docs_source + ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/docs + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating documentation for source" + ) + add_dependencies(docs_source + find_version + ) + add_dependencies(docs + docs_source + ) +endif() + +include(AddCustomXXXTimestamp) + +if(OPTION_TOOLS_ONLY) + if(HOST_BINARY_DIR) + unset(HOST_BINARY_DIR CACHE) + endif() + add_subdirectory(${CMAKE_SOURCE_DIR}/src) + return() +endif() + # Prefer -pthread over -lpthread, which is often the better option of the two. set(CMAKE_THREAD_PREFER_PTHREAD YES) # Make sure we have Threads available. @@ -72,10 +144,6 @@ find_package(Xaudio2) find_package(Grfcodec) -if(UNIX) - find_package(Doxygen) -endif() - # IPO is only properly supported from CMake 3.9. Despite the fact we are # CMake 3.5, still enable IPO if we detect we are 3.9+. if(POLICY CMP0069) @@ -103,57 +171,7 @@ if(APPLE) endif() endif() -if(MSVC) - # C++17 for MSVC - set(CMAKE_CXX_STANDARD 17) -else() - # C++11 for all other targets - set(CMAKE_CXX_STANDARD 11) -endif() - -set(CMAKE_CXX_STANDARD_REQUIRED YES) -set(CMAKE_CXX_EXTENSIONS NO) - -set(CMAKE_EXPORT_COMPILE_COMMANDS YES) - -list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp") -if(WIN32) - list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") -endif() - -# Generate a target to determine version, which is execute every 'make' run -add_custom_target(find_version - ${CMAKE_COMMAND} - -DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated - -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR} - -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - BYPRODUCTS ${GENERATED_SOURCE_FILES} -) - -# An empty target for the tools -add_custom_target(tools) - -# Documentation -if(DOXYGEN_EXECUTABLE) - add_custom_target(docs) - add_custom_target(docs_source - ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/docs - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating documentation for source" - ) - add_dependencies(docs_source - find_version - ) - add_dependencies(docs - docs_source - ) -endif() - include(SourceList) -include(Endian) -add_endian_definition() # Needed by rev.cpp include_directories(${CMAKE_SOURCE_DIR}/src) @@ -162,14 +180,10 @@ include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/squirrel/include) include(MSVCFilters) -include(CompileFlags) -compile_flags() - add_executable(openttd WIN32 ${GENERATED_SOURCE_FILES}) set_target_properties(openttd PROPERTIES OUTPUT_NAME "${BINARY_NAME}") # All other files are added via target_sources() -include(AddCustomXXXTimestamp) add_subdirectory(${CMAKE_SOURCE_DIR}/src) add_subdirectory(${CMAKE_SOURCE_DIR}/media/baseset) @@ -192,10 +206,6 @@ endif() set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin") process_compile_flags() -if(APPLE OR UNIX) - add_definitions(-DUNIX) -endif() - include(LinkPackage) link_package(PNG TARGET PNG::PNG ENCOURAGED) link_package(ZLIB TARGET ZLIB::ZLIB ENCOURAGED) diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 005bb19cae..977d54f061 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -57,6 +57,12 @@ function(set_options) option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) option(OPTION_USE_THREADS "Use threads" ON) option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF) + option(OPTION_TOOLS_ONLY "Build only tools target" OFF) + option(OPTION_DOCS_ONLY "Build only docs target" OFF) + + if (OPTION_DOCS_ONLY) + set(OPTION_TOOLS_ONLY ON PARENT_SCOPE) + endif() endfunction() # Show the values of the generic options. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0a0ac406a3..bbe66b7645 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,11 @@ +add_subdirectory(script) +add_subdirectory(settingsgen) +add_subdirectory(strgen) + +if(OPTION_TOOLS_ONLY) + return() +endif() + add_subdirectory(3rdparty) add_subdirectory(ai) add_subdirectory(blitter) @@ -11,11 +19,8 @@ add_subdirectory(network) add_subdirectory(os) add_subdirectory(pathfinder) add_subdirectory(saveload) -add_subdirectory(script) -add_subdirectory(settingsgen) add_subdirectory(sound) add_subdirectory(spriteloader) -add_subdirectory(strgen) add_subdirectory(table) add_subdirectory(video) add_subdirectory(widgets) diff --git a/src/script/CMakeLists.txt b/src/script/CMakeLists.txt index e5915332c4..f4b87dc3b8 100644 --- a/src/script/CMakeLists.txt +++ b/src/script/CMakeLists.txt @@ -1,5 +1,9 @@ add_subdirectory(api) +if(OPTION_TOOLS_ONLY) + return() +endif() + add_files( script_config.cpp script_config.hpp diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index 9bc4183f19..c21707d431 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -131,6 +131,10 @@ foreach(API "ai;AI" "game;GS" "template;Template") ) endforeach() +if(OPTION_TOOLS_ONLY) + return() +endif() + add_library(openttd::script_api ALIAS script_api) diff --git a/src/strgen/CMakeLists.txt b/src/strgen/CMakeLists.txt index c638b5c6e7..08c1223350 100644 --- a/src/strgen/CMakeLists.txt +++ b/src/strgen/CMakeLists.txt @@ -22,6 +22,10 @@ if (NOT HOST_BINARY_DIR) add_dependencies(tools strgen) endif() +if(OPTION_TOOLS_ONLY) + return() +endif() + # Source Files add_files(strgen_base.cpp) From b14e3b9b9df2294e1f0b7fab8b2c23381e32ade7 Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Sun, 13 Dec 2020 22:43:37 +0000 Subject: [PATCH 333/601] Feature: Switch to bzip2 compression for DMG files (supported by OS X 10.4+) --- cmake/PackageBundle.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/PackageBundle.cmake b/cmake/PackageBundle.cmake index a443da3c4b..7f96e05fa8 100644 --- a/cmake/PackageBundle.cmake +++ b/cmake/PackageBundle.cmake @@ -5,6 +5,7 @@ set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/os/macosx/openttd.icns") set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/os/macosx/launch.sh") set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/os/macosx/splash.png") +set(CPACK_DMG_FORMAT "UDBZ") # Create a temporary Info.plist.in, where we will fill in the version via # CPackProperties.cmake.in. This because at this point in time the version From 68f9925cd4c8b29dbdac301e86bd9fc6f5a7fb27 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 14 Dec 2020 20:25:01 +0100 Subject: [PATCH 334/601] Codechange: use \u to indicate unicode chars in strings (#8379) With \x, we sometimes had to do the "" trick, as the length is not predefined. With C++11 bringing \u to the specs, which has a preset length, we no longer need the "" trick. We set the strings to u8, to ensure all compilers use UTF-8 encoding for the \u characters. This was triggered by newer CLangs, which start to warn if you use "" in the middle of a string, wondering if that was your intention. It is a good question. And this is our answer :) --- src/currency.cpp | 16 +- src/misc_gui.cpp | 126 ++--- src/string_type.h | 4 +- src/table/townname.h | 1150 +++++++++++++++++++++--------------------- src/textfile_gui.cpp | 2 +- src/townname.cpp | 2 +- 6 files changed, 650 insertions(+), 650 deletions(-) diff --git a/src/currency.cpp b/src/currency.cpp index b68584f015..5c758c48df 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -26,14 +26,14 @@ * | | | | | | | */ /** The original currency specifications. */ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { - { 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pound + { 1, "", CF_NOEURO, u8"\u00a3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pound { 2, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_USD }, ///< american dollar - { 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< euro - { 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_JPY }, ///< japanese yen + { 2, "", CF_ISEURO, u8"\u20ac", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< euro + { 220, "", CF_NOEURO, u8"\u00a5", "", 0, STR_GAME_OPTIONS_CURRENCY_JPY }, ///< japanese yen { 27, "", 2002, "", NBSP "S.", 1, STR_GAME_OPTIONS_CURRENCY_ATS }, ///< austrian schilling { 81, "", 2002, "BEF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BEF }, ///< belgian franc { 2, "", CF_NOEURO, "CHF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_CHF }, ///< swiss franc - { 41, "", CF_NOEURO, "", NBSP "K\xC4\x8D", 1, STR_GAME_OPTIONS_CURRENCY_CZK }, ///< czech koruna + { 41, "", CF_NOEURO, "", NBSP u8"K\u010d", 1, STR_GAME_OPTIONS_CURRENCY_CZK }, ///< czech koruna { 4, "", 2002, "DM" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_DEM }, ///< deutsche mark { 11, "", CF_NOEURO, "", NBSP "kr", 1, STR_GAME_OPTIONS_CURRENCY_DKK }, ///< danish krone { 333, "", 2002, "Pts" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ESP }, ///< spanish peseta @@ -45,7 +45,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 3873, "", 2002, "", NBSP "L.", 1, STR_GAME_OPTIONS_CURRENCY_ITL }, ///< italian lira { 4, "", 2002, "NLG" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NLG }, ///< dutch gulden { 12, "", CF_NOEURO, "", NBSP "Kr", 1, STR_GAME_OPTIONS_CURRENCY_NOK }, ///< norwegian krone - { 6, "", CF_NOEURO, "", NBSP "z\xC5\x82", 1, STR_GAME_OPTIONS_CURRENCY_PLN }, ///< polish zloty + { 6, "", CF_NOEURO, "", NBSP u8"z\u0142", 1, STR_GAME_OPTIONS_CURRENCY_PLN }, ///< polish zloty { 5, "", CF_NOEURO, "", NBSP "Lei", 1, STR_GAME_OPTIONS_CURRENCY_RON }, ///< romanian leu { 50, "", CF_NOEURO, "", NBSP "p", 1, STR_GAME_OPTIONS_CURRENCY_RUR }, ///< russian rouble { 479, "", 2007, "", NBSP "SIT", 1, STR_GAME_OPTIONS_CURRENCY_SIT }, ///< slovenian tolar @@ -55,7 +55,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 4, "", CF_NOEURO, "R$" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BRL }, ///< brazil real { 31, "", 2011, "", NBSP "EEK", 1, STR_GAME_OPTIONS_CURRENCY_EEK }, ///< estonian krooni { 4, "", 2015, "", NBSP "Lt", 1, STR_GAME_OPTIONS_CURRENCY_LTL }, ///< lithuanian litas - { 1850, "", CF_NOEURO, "\xE2\x82\xA9", "", 0, STR_GAME_OPTIONS_CURRENCY_KRW }, ///< south korean won + { 1850, "", CF_NOEURO, u8"\u20a9", "", 0, STR_GAME_OPTIONS_CURRENCY_KRW }, ///< south korean won { 13, "", CF_NOEURO, "R" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ZAR }, ///< south african rand { 1, "", CF_NOEURO, "", "", 2, STR_GAME_OPTIONS_CURRENCY_CUSTOM }, ///< custom currency (add further languages below) { 3, "", CF_NOEURO, "", NBSP "GEL", 1, STR_GAME_OPTIONS_CURRENCY_GEL }, ///< Georgian Lari @@ -63,9 +63,9 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 80, "", CF_NOEURO, "", NBSP "rub", 1, STR_GAME_OPTIONS_CURRENCY_RUB }, ///< New Russian Ruble { 24, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_MXN }, ///< Mexican peso { 40, "", CF_NOEURO, "NTD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NTD }, ///< new taiwan dollar - { 8, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_CNY }, ///< chinese renminbi + { 8, "", CF_NOEURO, u8"\u00a5", "", 0, STR_GAME_OPTIONS_CURRENCY_CNY }, ///< chinese renminbi { 10, "", CF_NOEURO, "HKD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_HKD }, ///< hong kong dollar - { 90, "", CF_NOEURO, "\xE2\x82\xB9", "", 0, STR_GAME_OPTIONS_CURRENCY_INR }, ///< Indian Rupee + { 90, "", CF_NOEURO, u8"\u20b9", "", 0, STR_GAME_OPTIONS_CURRENCY_INR }, ///< Indian Rupee }; /** Array of currencies used by the system */ diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index ff2fc3a23c..f7345416c1 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -412,69 +412,69 @@ static WindowDesc _about_desc( ); static const char * const _credits[] = { - "Original design by Chris Sawyer", - "Original graphics by Simon Foster", - "", - "The OpenTTD team (in alphabetical order):", - " Grzegorz Duczy\xC5\x84ski (adf88) - General coding (since 1.7.2)", - " Albert Hofkamp (Alberth) - GUI expert (since 0.7)", - " Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3)", - " Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3)", - " Christoph Elsenhans (frosch) - General coding (since 0.6)", - " Lo\xC3\xAF""c Guilloux (glx) - General / Windows Expert (since 0.4.5)", - " Charles Pigott (LordAro) - General / Correctness police (since 1.9)", - " Michael Lutz (michi_cc) - Path based signals (since 0.7)", - " Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9)", - " Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1)", - " Peter Nelson (peter1138) - Spiritual descendant from NewGRF gods (since 0.4.5)", - " Ingo von Borstel (planetmaker) - General, Support (since 1.1)", - " Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5)", - " Jos\xC3\xA9 Soler (Terkhen) - General coding (since 1.0)", - " Leif Linse (Zuu) - AI/Game Script (since 1.2)", - "", - "Inactive Developers:", - " Jean-Fran\xC3\xA7ois Claeys (Belugas) - GUI, NewGRF and more (0.4.5 - 1.0)", - " Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles (0.3 - 0.7)", - " Victor Fischer (Celestar) - Programming everywhere you need him to (0.3 - 0.6)", - " Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;) (0.4.5 - 0.6)", - " Jonathan Coome (Maedhros) - High priest of the NewGRF Temple (0.5 - 0.6)", - " Attila B\xC3\xA1n (MiHaMiX) - Developer WebTranslator 1 and 2 (0.3 - 0.5)", - " Zden\xC4\x9Bk Sojka (SmatZ) - Bug finder and fixer (0.6 - 1.3)", - " Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5)", - " Patric Stout (TrueBrain) - NoAI, NoGo, Network (0.3 - 1.2), sys op (active)", - " Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3)", - "", - "Retired Developers:", - " Tam\xC3\xA1s Farag\xC3\xB3 (Darkvater) - Ex-Lead coder (0.3 - 0.5)", - " Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3 - 0.3)", - " Emil Djupfeld (egladil) - MacOSX (0.4.5 - 0.6)", - " Simon Sasburg (HackyKid) - Many bugfixes (0.4 - 0.4.5)", - " Ludvig Strigeus (ludde) - Original author of OpenTTD, main coder (0.1 - 0.3)", - " Cian Duffy (MYOB) - BeOS port / manual writing (0.1 - 0.3)", - " Petr Baudi\xC5\xA1 (pasky) - Many patches, NewGRF support (0.3 - 0.3)", - " Benedikt Br\xC3\xBCggemeier (skidd13) - Bug fixer and code reworker (0.6 - 0.7)", - " Serge Paquet (vurlix) - 2nd contributor after ludde (0.1 - 0.3)", - "", - "Special thanks go out to:", - " Josef Drexler - For his great work on TTDPatch", - " Marcin Grzegorczyk - Track foundations and for describing TTD internals", - " Stefan Mei\xC3\x9Fner (sign_de) - For his work on the console", - " Mike Ragsdale - OpenTTD installer", - " Christian Rosentreter (tokai) - MorphOS / AmigaOS port", - " Richard Kempton (richK) - additional airports, initial TGP implementation", - "", - " Alberto Demichelis - Squirrel scripting language \xC2\xA9 2003-2008", - " L. Peter Deutsch - MD5 implementation \xC2\xA9 1999, 2000, 2002", - " Michael Blunck - Pre-signals and semaphores \xC2\xA9 2003", - " George - Canal/Lock graphics \xC2\xA9 2003-2004", - " Andrew Parkhouse (andythenorth) - River graphics", - " David Dallaston (Pikka) - Tram tracks", - " All Translators - Who made OpenTTD a truly international game", - " Bug Reporters - Without whom OpenTTD would still be full of bugs!", - "", - "", - "And last but not least:", - " Chris Sawyer - For an amazing game!" + u8"Original design by Chris Sawyer", + u8"Original graphics by Simon Foster", + u8"", + u8"The OpenTTD team (in alphabetical order):", + u8" Grzegorz Duczy\u0144ski (adf88) - General coding (since 1.7.2)", + u8" Albert Hofkamp (Alberth) - GUI expert (since 0.7)", + u8" Matthijs Kooijman (blathijs) - Pathfinder-guru, Debian port (since 0.3)", + u8" Ulf Hermann (fonsinchen) - Cargo Distribution (since 1.3)", + u8" Christoph Elsenhans (frosch) - General coding (since 0.6)", + u8" Lo\u00efc Guilloux (glx) - General / Windows Expert (since 0.4.5)", + u8" Charles Pigott (LordAro) - General / Correctness police (since 1.9)", + u8" Michael Lutz (michi_cc) - Path based signals (since 0.7)", + u8" Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9)", + u8" Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1)", + u8" Peter Nelson (peter1138) - Spiritual descendant from NewGRF gods (since 0.4.5)", + u8" Ingo von Borstel (planetmaker) - General, Support (since 1.1)", + u8" Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5)", + u8" Jos\u00e9 Soler (Terkhen) - General coding (since 1.0)", + u8" Leif Linse (Zuu) - AI/Game Script (since 1.2)", + u8"", + u8"Inactive Developers:", + u8" Jean-Fran\u00e7ois Claeys (Belugas) - GUI, NewGRF and more (0.4.5 - 1.0)", + u8" Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles (0.3 - 0.7)", + u8" Victor Fischer (Celestar) - Programming everywhere you need him to (0.3 - 0.6)", + u8" Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;) (0.4.5 - 0.6)", + u8" Jonathan Coome (Maedhros) - High priest of the NewGRF Temple (0.5 - 0.6)", + u8" Attila B\u00e1n (MiHaMiX) - Developer WebTranslator 1 and 2 (0.3 - 0.5)", + u8" Zden\u011bk Sojka (SmatZ) - Bug finder and fixer (0.6 - 1.3)", + u8" Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5)", + u8" Patric Stout (TrueBrain) - NoAI, NoGo, Network (0.3 - 1.2), sys op (active)", + u8" Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3)", + u8"", + u8"Retired Developers:", + u8" Tam\u00e1s Farag\u00f3 (Darkvater) - Ex-Lead coder (0.3 - 0.5)", + u8" Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3 - 0.3)", + u8" Emil Djupfeld (egladil) - MacOSX (0.4.5 - 0.6)", + u8" Simon Sasburg (HackyKid) - Many bugfixes (0.4 - 0.4.5)", + u8" Ludvig Strigeus (ludde) - Original author of OpenTTD, main coder (0.1 - 0.3)", + u8" Cian Duffy (MYOB) - BeOS port / manual writing (0.1 - 0.3)", + u8" Petr Baudi\u0161 (pasky) - Many patches, NewGRF support (0.3 - 0.3)", + u8" Benedikt Br\u00fcggemeier (skidd13) - Bug fixer and code reworker (0.6 - 0.7)", + u8" Serge Paquet (vurlix) - 2nd contributor after ludde (0.1 - 0.3)", + u8"", + u8"Special thanks go out to:", + u8" Josef Drexler - For his great work on TTDPatch", + u8" Marcin Grzegorczyk - Track foundations and for describing TTD internals", + u8" Stefan Mei\u00dfner (sign_de) - For his work on the console", + u8" Mike Ragsdale - OpenTTD installer", + u8" Christian Rosentreter (tokai) - MorphOS / AmigaOS port", + u8" Richard Kempton (richK) - additional airports, initial TGP implementation", + u8"", + u8" Alberto Demichelis - Squirrel scripting language \u00a9 2003-2008", + u8" L. Peter Deutsch - MD5 implementation \u00a9 1999, 2000, 2002", + u8" Michael Blunck - Pre-signals and semaphores \u00a9 2003", + u8" George - Canal/Lock graphics \u00a9 2003-2004", + u8" Andrew Parkhouse (andythenorth) - River graphics", + u8" David Dallaston (Pikka) - Tram tracks", + u8" All Translators - Who made OpenTTD a truly international game", + u8" Bug Reporters - Without whom OpenTTD would still be full of bugs!", + u8"", + u8"", + u8"And last but not least:", + u8" Chris Sawyer - For an amazing game!" }; struct AboutWindow : public Window { diff --git a/src/string_type.h b/src/string_type.h index 623d74661c..25ea65598e 100644 --- a/src/string_type.h +++ b/src/string_type.h @@ -15,10 +15,10 @@ #include /** A non-breaking space. */ -#define NBSP "\xC2\xA0" +#define NBSP u8"\u00a0" /** A left-to-right marker, marks the next character as left-to-right. */ -#define LRM "\xE2\x80\x8E" +#define LRM u8"\u200e" /** * Valid filter types for IsValidChar. diff --git a/src/table/townname.h b/src/table/townname.h index 4a7da93e9a..086fc4f116 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -310,7 +310,7 @@ static const char * const _name_austrian_a2[] = { "Aus", "Alten", "Braun", - "V\xC3\xB6sl", + u8"V\u00f6sl", "Mittern", "Nuss", "Neu", @@ -332,9 +332,9 @@ static const char * const _name_austrian_a2[] = { "Frauen", "Herren", "Hof", - "H\xC3\xBCtt", + u8"H\u00fctt", "Kaisers", - "K\xC3\xB6nigs", + u8"K\u00f6nigs", "Knittel", "Lang", "Ober", @@ -346,7 +346,7 @@ static const char * const _name_austrian_a2[] = { "Stocker", "Unter", "Utten", - "V\xC3\xB6sen", + u8"V\u00f6sen", "Vill", "Weissen", }; @@ -392,7 +392,7 @@ static const char * const _name_austrian_a5[] = { static const char * const _name_austrian_a6[] = { "Aegyd", - "Andr\xC3\xA4", + u8"Andr\u00e4", "Georgen", "Jakob", "Johann", @@ -405,7 +405,7 @@ static const char * const _name_austrian_a6[] = { "Nikolai", "Oswald", "Peter", - "P\xC3\xB6lten", + u8"P\u00f6lten", "Stefan", "Stephan", "Thomas", @@ -466,10 +466,10 @@ static const char * const _name_german_real[] = { "Gera", "Kassel", "Kiel", - "K\xC3\xB6ln", - "L\xC3\xBC""beck", + u8"K\u00f6ln", + u8"L\u00fcbeck", "Magdeburg", - "M\xC3\xBCnchen", + u8"M\u00fcnchen", "Potsdam", "Stuttgart", "Wiesbaden", @@ -492,7 +492,7 @@ static const char * const _name_german_1[] = { "Cloppen", "Co", "Duis", - "D\xC3\xBCssel", + u8"D\u00fcssel", "Dannen", "Elb", "Els", @@ -506,7 +506,7 @@ static const char * const _name_german_1[] = { "Frei", "Freuden", "Fried", - "F\xC3\xBCrsten", + u8"F\u00fcrsten", "Hahn", "Ham", "Harz", @@ -527,10 +527,10 @@ static const char * const _name_german_1[] = { "Langen", "Lim", "Lohr", - "L\xC3\xBCne", + u8"L\u00fcne", "Mel", "Michels", - "M\xC3\xBChl", + u8"M\u00fchl", "Naum", "Nest", "Nord", @@ -538,7 +538,7 @@ static const char * const _name_german_1[] = { "Nien", "Nidda", "Nieder", - "N\xC3\xBCrn", + u8"N\u00fcrn", "Ober", "Offen", "Osna", @@ -552,18 +552,18 @@ static const char * const _name_german_1[] = { "Regens", "Rott", "Ros", - "R\xC3\xBCssels", + u8"R\u00fcssels", "Saal", "Saar", "Salz", - "Sch\xC3\xB6ne", + u8"Sch\u00f6ne", "Schwein", "Sonder", "Sonnen", "Stein", "Strals", "Straus", - "S\xC3\xBC""d", + u8"S\u00fcd", "Ton", "Unter", "Ur", @@ -574,14 +574,14 @@ static const char * const _name_german_1[] = { "Wester", "Witten", "Wolfs", - "W\xC3\xBCrz", + u8"W\u00fcrz", }; static const char * const _name_german_2[] = { "bach", "berg", - "br\xC3\xBC""ck", - "br\xC3\xBC""cken", + u8"br\u00fcck", + u8"br\u00fccken", "burg", "dorf", "feld", @@ -591,7 +591,7 @@ static const char * const _name_german_2[] = { "heim", "horst", "mund", - "m\xC3\xBCnster", + u8"m\u00fcnster", "stadt", "wald", }; @@ -625,9 +625,9 @@ static const char * const _name_spanish_real[] = { "Morrocoy", "Cata", "Cataito", - "Ciudad Bol\xC3\xADvar", + u8"Ciudad Bol\u00edvar", "Barquisimeto", - "M\xC3\xA9rida", + u8"M\u00e9rida", "Puerto Ordaz", "Santa Elena", "San Juan", @@ -636,58 +636,58 @@ static const char * const _name_spanish_real[] = { "Santiago", "Barcelona", "Barinas", - "San Crist\xC3\xB3""bal", + u8"San Crist\u00f3bal", "San Francisco", - "San Mart\xC3\xADn", + u8"San Mart\u00edn", "Guayana", "San Carlos", - "El Lim\xC3\xB3n", + u8"El Lim\u00f3n", "Coro", "Coro Coro", "Puerto Ayacucho", "Elorza", "Arismendi", "Trujillo", - "Car\xC3\xBApano", + u8"Car\u00fapano", "Anaco", "Lima", "Cuzco", "Iquitos", "Callao", "Huacho", - "Caman\xC3\xA1", + u8"Caman\u00e1", "Puerto Chala", "Santa Cruz", "Quito", "Cuenca", - "Medell\xC3\xADn", - "Tulc\xC3\xA1n", + u8"Medell\u00edn", + u8"Tulc\u00e1n", "Esmeraldas", "Ibarra", "San Lorenzo", "Macas", - "Mora\xC3\xB1""a", + u8"Mora\u00f1a", "Machala", "Zamora", "Latacunga", "Tena", "Cochabamba", - "Ascensi\xC3\xB3n", + u8"Ascensi\u00f3n", "Magdalena", "Santa Ana", "Manoa", "Sucre", "Oruro", "Uyuni", - "Potos\xC3\xAD", + u8"Potos\u00ed", "Tupiza", "La Quiaca", - "Yacu\xC3\xAD""ba", + u8"Yacu\u00edba", "San Borja", "Fuerte Olimpo", - "Fort\xC3\xADn Esteros", + u8"Fort\u00edn Esteros", "Campo Grande", - "Bogot\xC3\xA1", + u8"Bogot\u00e1", "El Banco", "Zaragoza", "Neiva", @@ -715,7 +715,7 @@ static const char * const _name_french_real[] = { "Bordeaux", "Bayonne", "Montpellier", - "Mont\xC3\xA9limar", + u8"Mont\u00e9limar", "Valence", "Digne", "Nice", @@ -723,16 +723,16 @@ static const char * const _name_french_real[] = { "St. Tropez", "Marseille", "Narbonne", - "S\xC3\xA8te", + u8"S\u00e8te", "Aurillac", - "Gu\xC3\xA9ret", + u8"Gu\u00e9ret", "Le Creusot", "Nevers", "Auxerre", "Versailles", "Meaux", - "Ch\xC3\xA2lons", - "Compi\xC3\xA8gne", + u8"Ch\u00e2lons", + u8"Compi\u00e8gne", "Metz", "Chaumont", "Langres", @@ -745,8 +745,8 @@ static const char * const _name_french_real[] = { "Le Mans", "Angers", "Nantes", - "Ch\xC3\xA2teauroux", - "Orl\xC3\xA9""ans", + u8"Ch\u00e2teauroux", + u8"Orl\u00e9ans", "Lisieux", "Cherbourg", "Morlaix", @@ -757,7 +757,7 @@ static const char * const _name_french_real[] = { "Troyes", "Charolles", "Toulouse", - "Chamb\xC3\xA9ry", + u8"Chamb\u00e9ry", "Tours", "St. Brieuc", "St. Malo", @@ -771,11 +771,11 @@ static const char * const _name_french_real[] = { "Albi", "Paris", "Biarritz", - "B\xC3\xA9ziers", - "N\xC3\xAEmes", + u8"B\u00e9ziers", + u8"N\u00eemes", "Chamonix", - "Angoul\xC3\xA8me", - "Alen\xC3\xA7on", + u8"Angoul\u00e8me", + u8"Alen\u00e7on", }; static const char * const _name_silly_1[] = { @@ -903,7 +903,7 @@ static const char * const _name_swedish_2[] = { "Es", "Fin", "Fisk", - "Gr\xC3\xB6n", + u8"Gr\u00f6n", "Hag", "Halm", "Karl", @@ -922,17 +922,17 @@ static const char * const _name_swedish_2[] = { "Skog", "Stock", "Stor", - "Str\xC3\xB6m", + u8"Str\u00f6m", "Sund", - "S\xC3\xB6""der", + u8"S\u00f6der", "Tall", "Tratt", "Troll", "Upp", "Var", - "V\xC3\xA4ster", - "\xC3\x84ngel", - "\xC3\x96ster", + u8"V\u00e4ster", + u8"\u00c4ngel", + u8"\u00d6ster", }; static const char * const _name_swedish_2a[] = { @@ -987,9 +987,9 @@ static const char * const _name_swedish_2b[] = { "o", "u", "y", - "\xC3\xA5", - "\xC3\xA4", - "\xC3\xB6", + u8"\u00e5", + u8"\u00e4", + u8"\u00f6", }; static const char * const _name_swedish_2c[] = { @@ -1035,25 +1035,25 @@ static const char * const _name_swedish_3[] = { "hamn", "holm", "hus", - "h\xC3\xA4ttan", + u8"h\u00e4ttan", "kulle", - "k\xC3\xB6ping", + u8"k\u00f6ping", "lund", - "l\xC3\xB6v", + u8"l\u00f6v", "sala", "skrona", - "sl\xC3\xA4tt", - "sp\xC3\xA5ng", + u8"sl\u00e4tt", + u8"sp\u00e5ng", "stad", "sund", "svall", "svik", - "s\xC3\xA5ker", + u8"s\u00e5ker", "udde", "valla", "viken", - "\xC3\xA4lv", - "\xC3\xA5s", + u8"\u00e4lv", + u8"\u00e5s", }; static const char * const _name_dutch_1[] = { @@ -1220,7 +1220,7 @@ static const char * const _name_finnish_real[] = { "Espoo", "Helsinki", "Tapiola", - "J\xC3\xA4rvel\xC3\xA4", + u8"J\u00e4rvel\u00e4", "Lahti", "Kotka", "Hamina", @@ -1255,26 +1255,26 @@ static const char * const _name_finnish_1[] = { "Sauna", "Uusi", "Vanha", - "Kes\xC3\xA4", + u8"Kes\u00e4", "Kuusi", "Pelto", "Tuomi", "Terva", "Olki", - "Hein\xC3\xA4", - "Sein\xC3\xA4", + u8"Hein\u00e4", + u8"Sein\u00e4", "Rova", "Koivu", "Kokko", - "M\xC3\xA4nty", + u8"M\u00e4nty", "Pihlaja", - "Pet\xC3\xA4j\xC3\xA4", + u8"Pet\u00e4j\u00e4", "Kielo", "Kauha", "Viita", "Kivi", "Riihi", - "\xC3\x84\xC3\xA4ne", + u8"\u00c4\u00e4ne", "Niini", }; @@ -1283,27 +1283,27 @@ static const char * const _name_finnish_2[] = { "Lohjan", "Savon", "Lapin", - "Pit\xC3\xA4j\xC3\xA4n", + u8"Pit\u00e4j\u00e4n", "Martin", "Kuusan", "Kemi", "Keri", - "H\xC3\xA4meen", + u8"H\u00e4meen", "Kangas", }; static const char * const _name_finnish_3[] = { "harju", "linna", - "j\xC3\xA4rvi", + u8"j\u00e4rvi", "kallio", - "m\xC3\xA4ki", + u8"m\u00e4ki", "nummi", "joki", - "kyl\xC3\xA4", + u8"kyl\u00e4", "lampi", "lahti", - "mets\xC3\xA4", + u8"mets\u00e4", "suo", "laakso", "niitty", @@ -1316,56 +1316,56 @@ static const char * const _name_finnish_3[] = { static const char * const _name_polish_1_m[] = { "Wielki ", - "Ma\xC5\x82y ", - "Z\xC5\x82y ", + u8"Ma\u0142y ", + u8"Z\u0142y ", "Dobry ", "Nowy ", "Stary ", - "Z\xC5\x82oty ", + u8"Z\u0142oty ", "Zielony ", - "Bia\xC5\x82y ", + u8"Bia\u0142y ", "Modry ", - "D\xC4\x99""bowy ", + u8"D\u0119bowy ", }; static const char * const _name_polish_1_f[] = { "Wielka ", - "Ma\xC5\x82""a ", - "Z\xC5\x82""a ", + u8"Ma\u0142a ", + u8"Z\u0142a ", "Dobra ", "Nowa ", "Stara ", - "Z\xC5\x82ota ", + u8"Z\u0142ota ", "Zielona ", - "Bia\xC5\x82""a ", + u8"Bia\u0142a ", "Modra ", - "D\xC4\x99""bowa ", + u8"D\u0119bowa ", }; static const char * const _name_polish_1_n[] = { "Wielkie ", - "Ma\xC5\x82""e ", - "Z\xC5\x82""e ", + u8"Ma\u0142e ", + u8"Z\u0142e ", "Dobre ", "Nowe ", "Stare ", - "Z\xC5\x82ote ", + u8"Z\u0142ote ", "Zielone ", - "Bia\xC5\x82""e ", + u8"Bia\u0142e ", "Modre ", - "D\xC4\x99""bowe ", + u8"D\u0119bowe ", }; static const char * const _name_polish_2_o[] = { "Frombork", "Gniezno", "Olsztyn", - "Toru\xC5\x84", + u8"Toru\u0144", "Bydgoszcz", "Terespol", - "Krak\xC3\xB3w", - "Pozna\xC5\x84", - "Wroc\xC5\x82""aw", + u8"Krak\u00f3w", + u8"Pozna\u0144", + u8"Wroc\u0142aw", "Katowice", "Cieszyn", "Bytom", @@ -1376,7 +1376,7 @@ static const char * const _name_polish_2_o[] = { "Malbork", "Sopot", "Sosnowiec", - "Gda\xC5\x84sk", + u8"Gda\u0144sk", "Gdynia", "Sieradz", "Sandomierz", @@ -1384,7 +1384,7 @@ static const char * const _name_polish_2_o[] = { "Szczytno", "Szczecin", "Zakopane", - "Szklarska Por\xC4\x99""ba", + u8"Szklarska Por\u0119ba", "Bochnia", "Golub-Dobrzyn", "Chojnice", @@ -1396,13 +1396,13 @@ static const char * const _name_polish_2_o[] = { static const char * const _name_polish_2_m[] = { "Jarocin", "Gogolin", - "Tomasz\xC3\xB3w", - "Piotrk\xC3\xB3w", + u8"Tomasz\u00f3w", + u8"Piotrk\u00f3w", "Lidzbark", "Rypin", "Radzymin", - "Wo\xC5\x82omin", - "Pruszk\xC3\xB3w", + u8"Wo\u0142omin", + u8"Pruszk\u00f3w", "Olsztynek", "Rypin", "Cisek", @@ -1412,7 +1412,7 @@ static const char * const _name_polish_2_m[] = { "Lubicz", "Milicz", "Targ", - "Ostr\xC3\xB3w", + u8"Ostr\u00f3w", "Ozimek", "Puck", "Rzepin", @@ -1425,7 +1425,7 @@ static const char * const _name_polish_2_m[] = { "Strzepcz", "Strzebielin", "Sochaczew", - "Gr\xC4\x99""bocin", + u8"Gr\u0119bocin", "Gniew", "Lubliniec", "Lubasz", @@ -1447,7 +1447,7 @@ static const char * const _name_polish_2_m[] = { static const char * const _name_polish_2_f[] = { "Szprotawa", "Pogorzelica", - "Mot\xC5\x82""awa", + u8"Mot\u0142awa", "Lubawa", "Nidzica", "Kruszwica", @@ -1501,7 +1501,7 @@ static const char * const _name_polish_2_n[] = { "Braniewo", "Sulinowo", "Chmielno", - "Jastrz\xC4\x99""bie", + u8"Jastrz\u0119bie", "Gryfino", "Koronowo", "Lubichowo", @@ -1510,182 +1510,182 @@ static const char * const _name_polish_2_n[] = { static const char * const _name_polish_3_m[] = { " Wybudowanie", - " \xC5\x9Awi\xC4\x99tokrzyski", - " G\xC3\xB3rski", + u8" \u015awi\u0119tokrzyski", + u8" G\u00f3rski", " Morski", - " Zdr\xC3\xB3j", + u8" Zdr\u00f3j", " Wody", " Bajoro", - " Kraje\xC5\x84ski", - " \xC5\x9Al\xC4\x85ski", + u8" Kraje\u0144ski", + u8" \u015al\u0105ski", " Mazowiecki", " Pomorski", " Wielki", " Maly", - " Warmi\xC5\x84ski", + u8" Warmi\u0144ski", " Mazurski", " Mniejszy", - " Wi\xC4\x99kszy", - " G\xC3\xB3rny", + u8" Wi\u0119kszy", + u8" G\u00f3rny", " Dolny", " Wielki", " Stary", " Nowy", " Wielkopolski", - " Wzg\xC3\xB3rze", + u8" Wzg\u00f3rze", " Mosty", " Kujawski", - " Ma\xC5\x82opolski", + u8" Ma\u0142opolski", " Podlaski", " Lesny", }; static const char * const _name_polish_3_f[] = { " Wybudowanie", - " \xC5\x9Awi\xC4\x99tokrzyska", - " G\xC3\xB3rska", + u8" \u015awi\u0119tokrzyska", + u8" G\u00f3rska", " Morska", - " Zdr\xC3\xB3j", + u8" Zdr\u00f3j", " Woda", " Bajoro", - " Kraje\xC5\x84ska", - " \xC5\x9Al\xC4\x85ska", + u8" Kraje\u0144ska", + u8" \u015al\u0105ska", " Mazowiecka", " Pomorska", " Wielka", - " Ma\xC5\x82""a", - " Warmi\xC5\x84ska", + u8" Ma\u0142a", + u8" Warmi\u0144ska", " Mazurska", " Mniejsza", - " Wi\xC4\x99ksza", - " G\xC3\xB3rna", + u8" Wi\u0119ksza", + u8" G\u00f3rna", " Dolna", " Wielka", " Stara", " Nowa", " Wielkopolska", - " Wzg\xC3\xB3rza", + u8" Wzg\u00f3rza", " Mosty", " Kujawska", " Malopolska", " Podlaska", - " Le\xC5\x9Bna", + u8" Le\u015bna", }; static const char * const _name_polish_3_n[] = { " Wybudowanie", - " \xC5\x9Awietokrzyskie", - " G\xC3\xB3rskie", + u8" \u015awietokrzyskie", + u8" G\u00f3rskie", " Morskie", - " Zdr\xC3\xB3j", + u8" Zdr\u00f3j", " Wody", " Bajoro", - " Kraje\xC5\x84skie", - " \xC5\x9Al\xC4\x85skie", + u8" Kraje\u0144skie", + u8" \u015al\u0105skie", " Mazowieckie", " Pomorskie", " Wielkie", - " Ma\xC5\x82""e", - " Warmi\xC5\x84skie ", + u8" Ma\u0142e", + u8" Warmi\u0144skie ", " Mazurskie ", " Mniejsze", - " Wi\xC4\x99ksze", - " G\xC3\xB3rne", + u8" Wi\u0119ksze", + u8" G\u00f3rne", " Dolne", " Wielkie", " Stare", " Nowe", " Wielkopolskie", - " Wzg\xC3\xB3rze", + u8" Wzg\u00f3rze", " Mosty", " Kujawskie", - " Ma\xC5\x82opolskie", + u8" Ma\u0142opolskie", " Podlaskie", - " Le\xC5\x9Bne", + u8" Le\u015bne", }; static const char * const _name_czech_real[] = { - "A\xC5\xA1", - "Bene\xC5\xA1ov", + u8"A\u0161", + u8"Bene\u0161ov", "Beroun", - "Bezdru\xC5\xBEice", + u8"Bezdru\u017eice", "Blansko", - "B\xC5\x99""eclav", + u8"B\u0159eclav", "Brno", - "Brunt\xC3\xA1l", - "\xC4\x8C""esk\xC3\xA1 L\xC3\xADpa", - "\xC4\x8C""esk\xC3\xA9 Bud\xC4\x9Bjovice", - "\xC4\x8C""esk\xC3\xBD Krumlov", - "D\xC4\x9B\xC4\x8D\xC3\xADn", - "Doma\xC5\xBElice", - "Dub\xC3\xAD", - "Fr\xC3\xBD""dek-M\xC3\xADstek", - "Havl\xC3\xAD\xC4\x8Dk\xC5\xAFv Brod", - "Hodon\xC3\xADn", - "Hradec Kr\xC3\xA1lov\xC3\xA9", + u8"Brunt\u00e1l", + u8"\u010cesk\u00e1 L\u00edpa", + u8"\u010cesk\u00e9 Bud\u011bjovice", + u8"\u010cesk\u00fd Krumlov", + u8"D\u011b\u010d\u00edn", + u8"Doma\u017elice", + u8"Dub\u00ed", + u8"Fr\u00fddek-M\u00edstek", + u8"Havl\u00ed\u010dk\u016fv Brod", + u8"Hodon\u00edn", + u8"Hradec Kr\u00e1lov\u00e9", "Humpolec", "Cheb", "Chomutov", "Chrudim", "Jablonec nad Nisou", - "Jesen\xC3\xADk", - "Ji\xC4\x8D\xC3\xADn", + u8"Jesen\u00edk", + u8"Ji\u010d\u00edn", "Jihlava", - "Jind\xC5\x99ich\xC5\xAFv Hradec", + u8"Jind\u0159ich\u016fv Hradec", "Karlovy Vary", - "Karvin\xC3\xA1", + u8"Karvin\u00e1", "Kladno", "Klatovy", - "Kol\xC3\xADn", + u8"Kol\u00edn", "Kosmonosy", - "Krom\xC4\x9B\xC5\x99\xC3\xAD\xC5\xBE", - "Kutn\xC3\xA1 Hora", + u8"Krom\u011b\u0159\u00ed\u017e", + u8"Kutn\u00e1 Hora", "Liberec", - "Litom\xC4\x9B\xC5\x99ice", + u8"Litom\u011b\u0159ice", "Louny", - "Man\xC4\x9Bt\xC3\xADn", - "M\xC4\x9Bln\xC3\xADk", - "Mlad\xC3\xA1 Boleslav", + u8"Man\u011bt\u00edn", + u8"M\u011bln\u00edk", + u8"Mlad\u00e1 Boleslav", "Most", - "N\xC3\xA1""chod", - "Nov\xC3\xBD Ji\xC4\x8D\xC3\xADn", + u8"N\u00e1chod", + u8"Nov\u00fd Ji\u010d\u00edn", "Nymburk", "Olomouc", "Opava", - "Or\xC3\xA1\xC4\x8Dov", + u8"Or\u00e1\u010dov", "Ostrava", "Pardubice", - "Pelh\xC5\x99imov", - "Pol\xC5\xBEice", - "P\xC3\xADsek", - "Plze\xC5\x88", + u8"Pelh\u0159imov", + u8"Pol\u017eice", + u8"P\u00edsek", + u8"Plze\u0148", "Praha", "Prachatice", - "P\xC5\x99""erov", - "P\xC5\x99\xC3\xAD""bram", - "Prost\xC4\x9Bjov", - "Rakovn\xC3\xADk", + u8"P\u0159erov", + u8"P\u0159\u00edbram", + u8"Prost\u011bjov", + u8"Rakovn\u00edk", "Rokycany", - "Rudn\xC3\xA1", - "Rychnov nad Kn\xC4\x9B\xC5\xBEnou", + u8"Rudn\u00e1", + u8"Rychnov nad Kn\u011b\u017enou", "Semily", "Sokolov", "Strakonice", - "St\xC5\x99""edokluky", - "\xC5\xA0umperk", + u8"St\u0159edokluky", + u8"\u0160umperk", "Svitavy", - "T\xC3\xA1""bor", + u8"T\u00e1bor", "Tachov", "Teplice", - "T\xC5\x99""eb\xC3\xAD\xC4\x8D", + u8"T\u0159eb\u00ed\u010d", "Trutnov", - "Uhersk\xC3\xA9 Hradi\xC5\xA1t\xC4\x9B", - "\xC3\x9Ast\xC3\xAD nad Labem", - "\xC3\x9Ast\xC3\xAD nad Orlic\xC3\xAD", - "Vset\xC3\xADn", - "Vy\xC5\xA1kov", - "\xC5\xBD\xC4\x8F\xC3\xA1r nad S\xC3\xA1zavou", - "Zl\xC3\xADn", + u8"Uhersk\u00e9 Hradi\u0161t\u011b", + u8"\u00dast\u00ed nad Labem", + u8"\u00dast\u00ed nad Orlic\u00ed", + u8"Vset\u00edn", + u8"Vy\u0161kov", + u8"\u017d\u010f\u00e1r nad S\u00e1zavou", + u8"Zl\u00edn", "Znojmo", }; @@ -1719,12 +1719,12 @@ enum CzechPattern { * by this. * XXX: [CZG_SMASC][CZP_PRIVL] needs special handling: -ovX -> -uv. */ static const char * const _name_czech_patmod[][3] = { - /* CZG_SMASC */ { "\xC3\xAD", "\xC3\xBD", "X" }, - /* CZG_SFEM */ { "\xC3\xAD", "\xC3\xA1", "a" }, - /* CZG_SNEUT */ { "\xC3\xAD", "\xC3\xA9", "o" }, - /* CZG_PMASC */ { "\xC3\xAD", "\xC3\xA9", "y" }, - /* CZG_PFEM */ { "\xC3\xAD", "\xC3\xA9", "y" }, - /* CZG_PNEUT */ { "\xC3\xAD", "\xC3\xA1", "a" } + /* CZG_SMASC */ { u8"\u00ed", u8"\u00fd", "X" }, + /* CZG_SFEM */ { u8"\u00ed", u8"\u00e1", "a" }, + /* CZG_SNEUT */ { u8"\u00ed", u8"\u00e9", "o" }, + /* CZG_PMASC */ { u8"\u00ed", u8"\u00e9", "y" }, + /* CZG_PFEM */ { u8"\u00ed", u8"\u00e9", "y" }, + /* CZG_PNEUT */ { u8"\u00ed", u8"\u00e1", "a" } }; /* This way the substantive can choose only some adjectives/endings: @@ -1764,52 +1764,52 @@ struct CzechNameAdj { /* Some of items which should be common are doubled. */ static const CzechNameAdj _name_czech_adj[] = { - { CZP_JARNI, CZC_ANY, "Horn\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Horn\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Doln\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Doln\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "P\xC5\x99""edn\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Zadn\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Kosteln\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Havran\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "\xC5\x98\xC3\xAD\xC4\x8Dn\xC3\xAD" }, - { CZP_JARNI, CZC_ANY, "Jezern\xC3\xAD" }, - { CZP_MLADY, CZC_ANY, "Velk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Velk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Mal\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Mal\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Vysok\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "\xC4\x8C""esk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Moravsk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Slov\xC3\xA1""ck\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Slezsk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Uhersk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Star\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Star\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Nov\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Nov\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Mlad\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Kr\xC3\xA1lovsk\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Kamenn\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Cihlov\xC3\xBD" }, - { CZP_MLADY, CZC_ANY, "Divn\xC3\xBD" }, - { CZP_MLADY, CZC_COLOR, "\xC4\x8C""erven\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "\xC4\x8C""erven\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "\xC4\x8C""erven\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "Zelen\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "\xC5\xBDlut\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "Siv\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "\xC5\xA0""ed\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "B\xC3\xADl\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "B\xC3\xADl\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "Modr\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "R\xC5\xAF\xC5\xBEov\xC3\xA1" }, - { CZP_MLADY, CZC_COLOR, "\xC4\x8C""ern\xC3\xA1" }, - { CZP_PRIVL, CZC_ANY, "Kr\xC3\xA1lova" }, + { CZP_JARNI, CZC_ANY, u8"Horn\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Horn\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Doln\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Doln\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"P\u0159edn\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Zadn\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Kosteln\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Havran\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"\u0158\u00ed\u010dn\u00ed" }, + { CZP_JARNI, CZC_ANY, u8"Jezern\u00ed" }, + { CZP_MLADY, CZC_ANY, u8"Velk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Velk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Mal\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Mal\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Vysok\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"\u010cesk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Moravsk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Slov\u00e1ck\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Slezsk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Uhersk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Star\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Star\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Nov\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Nov\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Mlad\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Kr\u00e1lovsk\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Kamenn\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Cihlov\u00fd" }, + { CZP_MLADY, CZC_ANY, u8"Divn\u00fd" }, + { CZP_MLADY, CZC_COLOR, u8"\u010cerven\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"\u010cerven\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"\u010cerven\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"Zelen\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"\u017dlut\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"Siv\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"\u0160ed\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"B\u00edl\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"B\u00edl\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"Modr\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"R\u016f\u017eov\u00e1" }, + { CZP_MLADY, CZC_COLOR, u8"\u010cern\u00e1" }, + { CZP_PRIVL, CZC_ANY, u8"Kr\u00e1lova" }, { CZP_PRIVL, CZC_ANY, "Janova" }, { CZP_PRIVL, CZC_ANY, "Karlova" }, - { CZP_PRIVL, CZC_ANY, "Kry\xC5\xA1tofova" }, - { CZP_PRIVL, CZC_ANY, "Ji\xC5\x99\xC3\xADkova" }, + { CZP_PRIVL, CZC_ANY, u8"Kry\u0161tofova" }, + { CZP_PRIVL, CZC_ANY, u8"Ji\u0159\u00edkova" }, { CZP_PRIVL, CZC_ANY, "Petrova" }, { CZP_PRIVL, CZC_ANY, "Sudovo" }, }; @@ -1819,17 +1819,17 @@ static const CzechNameSubst _name_czech_subst_full[] = { { CZG_SMASC, CZA_ALL, CZC_COLOR, "Sedlec" }, { CZG_SMASC, CZA_ALL, CZC_COLOR, "Brod" }, { CZG_SMASC, CZA_ALL, CZC_COLOR, "Brod" }, - { CZG_SMASC, CZA_ALL, CZC_NONE, "\xC3\x9Aval" }, - { CZG_SMASC, CZA_ALL, CZC_COLOR, "\xC5\xBD\xC4\x8F\xC3\xA1r" }, + { CZG_SMASC, CZA_ALL, CZC_NONE, u8"\u00daval" }, + { CZG_SMASC, CZA_ALL, CZC_COLOR, u8"\u017d\u010f\u00e1r" }, { CZG_SMASC, CZA_ALL, CZC_COLOR, "Smrk" }, { CZG_SFEM, CZA_ALL, CZC_COLOR, "Hora" }, { CZG_SFEM, CZA_ALL, CZC_COLOR, "Lhota" }, { CZG_SFEM, CZA_ALL, CZC_COLOR, "Lhota" }, { CZG_SFEM, CZA_ALL, CZC_COLOR, "Hlava" }, - { CZG_SFEM, CZA_ALL, CZC_COLOR, "L\xC3\xADpa" }, + { CZG_SFEM, CZA_ALL, CZC_COLOR, u8"L\u00edpa" }, { CZG_SNEUT, CZA_ALL, CZC_COLOR, "Pole" }, - { CZG_SNEUT, CZA_ALL, CZC_COLOR, "\xC3\x9A""dol\xC3\xAD" }, - { CZG_PMASC, CZA_ALL, CZC_NONE, "\xC3\x9Avaly" }, + { CZG_SNEUT, CZA_ALL, CZC_COLOR, u8"\u00dadol\u00ed" }, + { CZG_PMASC, CZA_ALL, CZC_NONE, u8"\u00davaly" }, { CZG_PFEM, CZA_ALL, CZC_COLOR, "Luka" }, { CZG_PNEUT, CZA_ALL, CZC_COLOR, "Pole" }, }; @@ -1837,46 +1837,46 @@ static const CzechNameSubst _name_czech_subst_full[] = { /* TODO: More stems needed. --pasky */ static const CzechNameSubst _name_czech_subst_stem[] = { { CZG_SMASC, CZA_MIDDLE, CZC_COLOR, "Kostel" }, - { CZG_SMASC, CZA_MIDDLE, CZC_COLOR, "Kl\xC3\xA1\xC5\xA1ter" }, + { CZG_SMASC, CZA_MIDDLE, CZC_COLOR, u8"Kl\u00e1\u0161ter" }, { CZG_SMASC, CZA_SHORT, CZC_COLOR, "Lhot" }, { CZG_SFEM, CZA_SHORT, CZC_COLOR, "Lhot" }, { CZG_SFEM, CZA_SHORT, CZC_COLOR, "Hur" }, { CZG_FREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Sedl" }, { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_COLOR, "Hrad" }, { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Pras" }, - { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Ba\xC5\xBE" }, + { CZG_NFREE, CZA_MIDDLE, CZC_NONE, u8"Ba\u017e" }, { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Tes" }, - { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "U\xC5\xBE" }, - { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_POSTFIX, "B\xC5\x99" }, + { CZG_NFREE, CZA_MIDDLE, CZC_NONE, u8"U\u017e" }, + { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_POSTFIX, u8"B\u0159" }, { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Vod" }, { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Jan" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Prach" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Kunr" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Strak" }, - { CZG_NFREE, CZA_LONG, CZC_NONE, "V\xC3\xADt" }, - { CZG_NFREE, CZA_LONG, CZC_NONE, "Vy\xC5\xA1" }, - { CZG_NFREE, CZA_LONG, CZC_NONE, "\xC5\xBD""at" }, - { CZG_NFREE, CZA_LONG, CZC_NONE, "\xC5\xBD""er" }, - { CZG_NFREE, CZA_LONG, CZC_NONE, "St\xC5\x99""ed" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, u8"V\u00edt" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, u8"Vy\u0161" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, u8"\u017dat" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, u8"\u017der" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, u8"St\u0159ed" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Harv" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Pruh" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Tach" }, - { CZG_NFREE, CZA_LONG, CZC_NONE, "P\xC3\xADsn" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, u8"P\u00edsn" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Jin" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Jes" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Jar" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Sok" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Hod" }, { CZG_NFREE, CZA_LONG, CZC_NONE, "Net" }, - { CZG_FREE, CZA_LONG, CZC_NONE, "Pra\xC5\xBE" }, + { CZG_FREE, CZA_LONG, CZC_NONE, u8"Pra\u017e" }, { CZG_FREE, CZA_LONG, CZC_NONE, "Nerat" }, { CZG_FREE, CZA_LONG, CZC_NONE, "Kral" }, { CZG_FREE, CZA_LONG, CZC_NONE, "Hut" }, { CZG_FREE, CZA_LONG, CZC_NOPOSTFIX, "Pan" }, - { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NOPOSTFIX, "Odst\xC5\x99""ed" }, + { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NOPOSTFIX, u8"Odst\u0159ed" }, { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_COLOR, "Mrat" }, { CZG_FREE, CZA_LONG, CZC_COLOR, "Hlav" }, - { CZG_FREE, CZA_SHORT | CZA_MIDDLE, CZC_NONE, "M\xC4\x9B\xC5\x99" }, + { CZG_FREE, CZA_SHORT | CZA_MIDDLE, CZC_NONE, u8"M\u011b\u0159" }, { CZG_FREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Lip" }, }; @@ -1890,47 +1890,47 @@ static const char * const _name_czech_subst_postfix[] = { /* This array must have the both neutral genders at the end! */ static const CzechNameSubst _name_czech_subst_ending[] = { { CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "ec" }, - { CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "\xC3\xADn" }, + { CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, u8"\u00edn" }, { CZG_SMASC, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ov" }, { CZG_SMASC, CZA_SHORT | CZA_LONG, CZC_ANY, "kov" }, - { CZG_SMASC, CZA_LONG, CZC_POSTFIX, "\xC3\xADn" }, - { CZG_SMASC, CZA_LONG, CZC_POSTFIX, "n\xC3\xADk" }, + { CZG_SMASC, CZA_LONG, CZC_POSTFIX, u8"\u00edn" }, + { CZG_SMASC, CZA_LONG, CZC_POSTFIX, u8"n\u00edk" }, { CZG_SMASC, CZA_LONG, CZC_ANY, "burk" }, { CZG_SFEM, CZA_SHORT, CZC_ANY, "ka" }, { CZG_SFEM, CZA_MIDDLE, CZC_ANY, "inka" }, - { CZG_SFEM, CZA_MIDDLE, CZC_ANY, "n\xC3\xA1" }, + { CZG_SFEM, CZA_MIDDLE, CZC_ANY, u8"n\u00e1" }, { CZG_SFEM, CZA_LONG, CZC_ANY, "ava" }, - { CZG_PMASC, CZA_LONG, CZC_POSTFIX, "\xC3\xADky" }, + { CZG_PMASC, CZA_LONG, CZC_POSTFIX, u8"\u00edky" }, { CZG_PMASC, CZA_LONG, CZC_ANY, "upy" }, { CZG_PMASC, CZA_LONG, CZC_ANY, "olupy" }, { CZG_PFEM, CZA_LONG, CZC_ANY, "avy" }, { CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ice" }, - { CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "i\xC4\x8Dky" }, + { CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, u8"i\u010dky" }, { CZG_PNEUT, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "na" }, { CZG_SNEUT, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "no" }, - { CZG_SNEUT, CZA_LONG, CZC_ANY, "i\xC5\xA1t\xC4\x9B" }, + { CZG_SNEUT, CZA_LONG, CZC_ANY, u8"i\u0161t\u011b" }, }; static const char * const _name_czech_suffix[] = { "nad Cidlinou", - "nad Dyj\xC3\xAD", + u8"nad Dyj\u00ed", "nad Jihlavou", "nad Labem", "nad Lesy", "nad Moravou", "nad Nisou", "nad Odrou", - "nad Ostravic\xC3\xAD", - "nad S\xC3\xA1zavou", + u8"nad Ostravic\u00ed", + u8"nad S\u00e1zavou", "nad Vltavou", - "pod Prad\xC4\x9B""dem", - "pod Radho\xC5\xA1t\xC4\x9Bm", - "pod \xC5\x98\xC3\xADpem", - "pod Sn\xC4\x9B\xC5\xBEkou", - "pod \xC5\xA0pi\xC4\x8D\xC3\xA1kem", + u8"pod Prad\u011bdem", + u8"pod Radho\u0161t\u011bm", + u8"pod \u0158\u00edpem", + u8"pod Sn\u011b\u017ekou", + u8"pod \u0160pi\u010d\u00e1kem", "pod Sedlem", - "v \xC4\x8C""ech\xC3\xA1""ch", - "na Morav\xC4\x9B", + u8"v \u010cech\u00e1ch", + u8"na Morav\u011b", }; @@ -1940,197 +1940,197 @@ static const char * const _name_romanian_real[] = { "Alba Iulia", "Alexandria", "Babadag", - "Bac\xC4\x83u", + u8"Bac\u0103u", "Baia Mare", - "B\xC4\x83ile Herculane", - "B\xC4\x83ilesti", - "B\xC3\xA2rlad", + u8"B\u0103ile Herculane", + u8"B\u0103ilesti", + u8"B\u00e2rlad", "Bicaz", - "Bistri\xC8\x9B""a", + u8"Bistri\u021ba", "Blaj", "Borsec", - "Boto\xC8\x99""ani", - "Br\xC4\x83ila", - "Bra\xC8\x9Bov", - "Bucure\xC8\x99ti", + u8"Boto\u0219ani", + u8"Br\u0103ila", + u8"Bra\u021bov", + u8"Bucure\u0219ti", "Buftea", - "Buz\xC4\x83u", - "C\xC4\x83l\xC4\x83rasi", - "Caransebe\xC8\x99", - "Cernavod\xC4\x83", + u8"Buz\u0103u", + u8"C\u0103l\u0103rasi", + u8"Caransebe\u0219", + u8"Cernavod\u0103", "Cluj-Napoca", - "Constan\xC8\x9B""a", + u8"Constan\u021ba", "Covasna", "Craiova", "Dej", "Deva", "Dorohoi", "Drobeta-Turnu Severin", - "Dr\xC4\x83g\xC4\x83sani", - "F\xC4\x83g\xC4\x83ras", - "F\xC4\x83lticeni", - "Fete\xC8\x99ti", - "Foc\xC8\x99""ani", - "Gala\xC8\x99i", + u8"Dr\u0103g\u0103sani", + u8"F\u0103g\u0103ras", + u8"F\u0103lticeni", + u8"Fete\u0219ti", + u8"Foc\u0219ani", + u8"Gala\u0219i", "Gheorgheni", "Giurgiu", - "H\xC3\xA2r\xC8\x99ova", + u8"H\u00e2r\u0219ova", "Hunedoara", - "Hu\xC8\x99i", - "Ia\xC8\x99i", + u8"Hu\u0219i", + u8"Ia\u0219i", "Isaccea", "Lugoj", - "M\xC4\x83""cin", + u8"M\u0103cin", "Mangalia", "Medgidia", - "Media\xC8\x99", + u8"Media\u0219", "Miercurea Ciuc", "Mizil", "Motru", - "N\xC4\x83s\xC4\x83ud", - "N\xC4\x83vodari", - "Odobe\xC8\x99ti", - "Olteni\xC8\x9B""a", - "One\xC8\x99ti", + u8"N\u0103s\u0103ud", + u8"N\u0103vodari", + u8"Odobe\u0219ti", + u8"Olteni\u021ba", + u8"One\u0219ti", "Oradea", - "Or\xC8\x99ova", - "Petro\xC8\x99""ani", - "Piatra Neam\xC8\x9B", - "Pite\xC8\x99ti", - "Ploie\xC8\x99ti", + u8"Or\u0219ova", + u8"Petro\u0219ani", + u8"Piatra Neam\u021b", + u8"Pite\u0219ti", + u8"Ploie\u0219ti", "Predeal", - "R\xC3\xA2mnicu V\xC3\xA2lcea", + u8"R\u00e2mnicu V\u00e2lcea", "Reghin", - "Re\xC8\x99i\xC8\x9B""a", + u8"Re\u0219i\u021ba", "Roman", - "Ro\xC8\x99iorii de Vede", + u8"Ro\u0219iorii de Vede", "Satu Mare", - "Sebe\xC8\x99", - "Sf\xC3\xA2ntu Gheorghe", + u8"Sebe\u0219", + u8"Sf\u00e2ntu Gheorghe", "Sibiu", - "Sighi\xC8\x99oara", + u8"Sighi\u0219oara", "Sinaia", "Slatina", "Slobozia", "Sovata", "Suceava", "Sulina", - "T\xC4\x83nd\xC4\x83rei", - "T\xC3\xA2rgoviste", - "T\xC3\xA2rgu Jiu", - "T\xC3\xA2rgu Mures", + u8"T\u0103nd\u0103rei", + u8"T\u00e2rgoviste", + u8"T\u00e2rgu Jiu", + u8"T\u00e2rgu Mures", "Tecuci", - "Timi\xC8\x99oara", + u8"Timi\u0219oara", "Tulcea", "Turda", - "Turnu M\xC4\x83gurele", + u8"Turnu M\u0103gurele", "Urziceni", "Vaslui", "Vatra Dornei", "Victoria", "Videle", - "Zal\xC4\x83u", + u8"Zal\u0103u", }; static const char * const _name_slovak_real[] = { "Bratislava", - "B\xC3\xA1novce nad Bebravou", - "Bansk\xC3\xA1 Bystrica", - "Bansk\xC3\xA1 \xC5\xA0tiavnica", + u8"B\u00e1novce nad Bebravou", + u8"Bansk\u00e1 Bystrica", + u8"Bansk\u00e1 \u0160tiavnica", "Bardejov", "Brezno", "Brezova pod Bradlom", - "Byt\xC4\x8D""a", - "\xC4\x8C""adca", - "\xC4\x8Cierna nad Tisou", + u8"Byt\u010da", + u8"\u010cadca", + u8"\u010cierna nad Tisou", "Detva", - "Pre\xC5\xA1ov", + u8"Pre\u0161ov", "Dolny Kubin", - "Spi\xC5\xA1sk\xC3\xA1 Nov\xC3\xA1 Ves", - "Dunajsk\xC3\xA1 Streda", - "Gab\xC4\x8D\xC3\xADikovo", + u8"Spi\u0161sk\u00e1 Nov\u00e1 Ves", + u8"Dunajsk\u00e1 Streda", + u8"Gab\u010d\u00edikovo", "Galanta", "Gbely", "Gelnica", - "Handlov\xC3\xA1", + u8"Handlov\u00e1", "Hlohovec", - "Hol\xC3\xAD\xC4\x8D", - "Humenn\xC3\xA9", + u8"Hol\u00ed\u010d", + u8"Humenn\u00e9", "Hurbanovo", "Kezmarok", - "Kom\xC3\xA1rno", - "Ko\xC5\xA1ice", + u8"Kom\u00e1rno", + u8"Ko\u0161ice", "Kremnica", "Krompachy", "Kuty", "Leopoldov", - "Levo\xC4\x8D""a", - "Liptovsk\xC3\xBD Mikul\xC3\xA1\xC5\xA1", - "Lu\xC4\x8D""enec", + u8"Levo\u010da", + u8"Liptovsk\u00fd Mikul\u00e1\u0161", + u8"Lu\u010denec", "Malacky", "Martin", "Medzilaborce", "Michalovce", "Modra", "Myjava", - "N\xC3\xA1mestovo", + u8"N\u00e1mestovo", "Nitra", - "Nov\xC3\xA1 Ba\xC5\x88""a", - "Nov\xC3\xA9"" Mesto nad V\xC3\xA1hom", - "Nov\xC3\xA9"" Z\xC3\xA1""mky", - "Partiz\xC3\xA1nske", + u8"Nov\u00e1 Ba\u0148a", + u8"Nov\u00e9 Mesto nad V\u00e1hom", + u8"Nov\u00e9 Z\u00e1mky", + u8"Partiz\u00e1nske", "Pezinok", - "Pie\xC5\xA1\xC5\xA5""any", - "Polt\xC3\xA1r", + u8"Pie\u0161\u0165any", + u8"Polt\u00e1r", "Poprad", - "Pova\xC5\xBEsk\xC3\xA1 Bystrica", + u8"Pova\u017esk\u00e1 Bystrica", "Prievidza", - "P\xC3\xBA""chov", - "Rev\xC3\xBA""ca", - "Rimavsk\xC3\xA1 Sobota", - "Ro\xC5\xBE\xC5\x88""ava", - "Ru\xC5\xBEomberok", + u8"P\u00fachov", + u8"Rev\u00faca", + u8"Rimavsk\u00e1 Sobota", + u8"Ro\u017e\u0148ava", + u8"Ru\u017eomberok", "Sabinov", - "\xC5\xA0""a\xC4\xBE""a", + u8"\u0160a\u013ea", "Senec", "Senica", - "Sere\xC4\x8F", + u8"Sere\u010f", "Skalica", - "Sl\xC3\xA1""dkovi\xC3\x8Dovo", + u8"Sl\u00e1dkovi\u00cdovo", "Smolenice", "Snina", - "Star\xC3\xA1 \xC4\xBDubov\xC5\x88""a", - "Star\xC3\xA1 Tur\xC3\xA1", - "Str\xC3\xA1\xC5\xBEske", + u8"Star\u00e1 \u013dubov\u0148a", + u8"Star\u00e1 Tur\u00e1", + u8"Str\u00e1\u017eske", "Stropkov", "Stupava", - "\xC5\xA0t\xC3\xBArovo", - "\xC4\xA0ulekovo", - "Topo\xC4\xBE\xC4\x8D""any", - "Trebi\xC5\xA1ov", - "Tren\xC4\x8D\xC3\xADn", + u8"\u0160t\u00farovo", + u8"\u0120ulekovo", + u8"Topo\u013e\u010dany", + u8"Trebi\u0161ov", + u8"Tren\u010d\u00edn", "Trnava", - "Tur\xC4\x8Dianske Teplice", - "Tvrdo\xC5\xA1\xC3\xADn", - "Vr\xC3\xA1""ble", - "Vranov nad Top\xC4\xBEou", - "Z\xC3\xA1horsk\xC3\xA1 Bystrica", - "\xC5\xBD""diar", - "\xC4\xBDiar nad Hronom", - "\xC5\xBDilina", - "Zlat\xC3\xA9 Moravce", + u8"Tur\u010dianske Teplice", + u8"Tvrdo\u0161\u00edn", + u8"Vr\u00e1ble", + u8"Vranov nad Top\u013eou", + u8"Z\u00e1horsk\u00e1 Bystrica", + u8"\u017ddiar", + u8"\u013diar nad Hronom", + u8"\u017dilina", + u8"Zlat\u00e9 Moravce", "Zvolen", }; static const char * const _name_norwegian_1[] = { "Arna", "Aust", - "Bj\xC3\xB8rk", - "Bj\xC3\xB8rn", + u8"Bj\u00f8rk", + u8"Bj\u00f8rn", "Brand", - "B\xC3\xB8ver", + u8"B\u00f8ver", "Drag", - "Dr\xC3\xB8", + u8"Dr\u00f8", "Eids", "Egge", "Fager", @@ -2143,12 +2143,12 @@ static const char * const _name_norwegian_1[] = { "Gaus", "Galte", "Geir", - "Gl\xC3\xB8s", + u8"Gl\u00f8s", "Gran", "Grind", "Grims", - "Gr\xC3\xB8n", - "Gr\xC3\xB8t", + u8"Gr\u00f8n", + u8"Gr\u00f8t", "Gulle", "Haka", "Hammer", @@ -2163,7 +2163,7 @@ static const char * const _name_norwegian_1[] = { "Kjerring", "Knatte", "Krok", - "K\xC3\xB8y", + u8"K\u00f8y", "Lang", "Lauv", "Leir", @@ -2171,7 +2171,7 @@ static const char * const _name_norwegian_1[] = { "Logn", "Lo", "Lyng", - "L\xC3\xB8n", + u8"L\u00f8n", "Mesna", "Mel", "Mo", @@ -2191,9 +2191,9 @@ static const char * const _name_norwegian_1[] = { "Sel", "Sol", "Sjur", - "Sk\xC3\xA5r", - "Sl\xC3\xA5tt", - "Stj\xC3\xB8r", + u8"Sk\u00e5r", + u8"Sl\u00e5tt", + u8"Stj\u00f8r", "Stor", "Svart", "Svens", @@ -2206,7 +2206,7 @@ static const char * const _name_norwegian_1[] = { "Vest", "Vesle", "Vik", - "V\xC3\xA5g", + u8"V\u00e5g", }; static const char * const _name_norwegian_2[] = { @@ -2221,7 +2221,7 @@ static const char * const _name_norwegian_2[] = { "bugen", "by", "bygd", - "b\xC3\xB8", + u8"b\u00f8", "dal", "egga", "eid", @@ -2239,10 +2239,10 @@ static const char * const _name_norwegian_2[] = { "heim", "hella", "hovda", - "h\xC3\xB8""a", - "h\xC3\xB8gda", + u8"h\u00f8a", + u8"h\u00f8gda", "kampen", - "kj\xC3\xB8len", + u8"kj\u00f8len", "kollen", "kroken", "land", @@ -2257,7 +2257,7 @@ static const char * const _name_norwegian_2[] = { "rud", "sand", "set", - "sj\xC3\xB8""en", + u8"sj\u00f8en", "skogen", "slette", "snipa", @@ -2266,7 +2266,7 @@ static const char * const _name_norwegian_2[] = { "stulen", "sund", "svingen", - "s\xC3\xA6tra", + u8"s\u00e6tra", "tinden", "tun", "vang", @@ -2274,9 +2274,9 @@ static const char * const _name_norwegian_2[] = { "veid", "vik", "voll", - "v\xC3\xA5g", + u8"v\u00e5g", "um", - "\xC3\xA5sen", + u8"\u00e5sen", }; static const char * const _name_norwegian_real[] = { @@ -2284,12 +2284,12 @@ static const char * const _name_norwegian_real[] = { "Arendal", "Askim", "Bergen", - "Bod\xC3\xB8", + u8"Bod\u00f8", "Brevik", "Bryne", - "Br\xC3\xB8nn\xC3\xB8ysund", + u8"Br\u00f8nn\u00f8ysund", "Drammen", - "Dr\xC3\xB8""bak", + u8"Dr\u00f8bak", "Egersund", "Elverum", "Farsund", @@ -2297,10 +2297,10 @@ static const char * const _name_norwegian_real[] = { "Finnsnes", "Flekkefjord", "Flora", - "Fosnav\xC3\xA5g", + u8"Fosnav\u00e5g", "Fredrikstad", - "F\xC3\xB8rde", - "Gj\xC3\xB8vik", + u8"F\u00f8rde", + u8"Gj\u00f8vik", "Grimstad", "Halden", "Hamar", @@ -2309,13 +2309,13 @@ static const char * const _name_norwegian_real[] = { "Haugesund", "Holmestrand", "Horten", - "J\xC3\xB8rpeland", + u8"J\u00f8rpeland", "Kirkenes", "Kolvereid", "Kongsberg", "Kongsvinger", "Kopervik", - "Krager\xC3\xB8", + u8"Krager\u00f8", "Kristiansand", "Kristiansund", "Langesund", @@ -2325,16 +2325,16 @@ static const char * const _name_norwegian_real[] = { "Levanger", "Lillehammer", "Lillesand", - "Lillestr\xC3\xB8m", + u8"Lillestr\u00f8m", "Lyngdal", - "L\xC3\xB8renskog", + u8"L\u00f8renskog", "Mandal", "Mo i Rana", "Molde", - "Mosj\xC3\xB8""en", + u8"Mosj\u00f8en", "Moss", "Mysen", - "M\xC3\xA5l\xC3\xB8y", + u8"M\u00e5l\u00f8y", "Namsos", "Narvik", "Notodden", @@ -2343,11 +2343,11 @@ static const char * const _name_norwegian_real[] = { "Otta", "Porsgrunn", "Ringerike", - "Ris\xC3\xB8r", + u8"Ris\u00f8r", "Rjukan", "Sandefjord", "Sandnes", - "Sandnessj\xC3\xB8""en", + u8"Sandnessj\u00f8en", "Sandvika", "Sarpsborg", "Sauda", @@ -2358,152 +2358,152 @@ static const char * const _name_norwegian_real[] = { "Stathelle", "Stavanger", "Steinkjer", - "Stj\xC3\xB8rdal", + u8"Stj\u00f8rdal", "Stokmarknes", "Stord", "Svelvik", - "Svolv\xC3\xA6r", - "Troms\xC3\xB8", + u8"Svolv\u00e6r", + u8"Troms\u00f8", "Trondheim", "Tvedestrand", - "T\xC3\xB8nsberg", + u8"T\u00f8nsberg", "Ulsteinvik", - "Vads\xC3\xB8", - "Vard\xC3\xB8", - "Verdals\xC3\xB8ra", - "\xC3\x85krehamn", - "\xC3\x85lesund", - "\xC3\x85ndalsnes", + u8"Vads\u00f8", + u8"Vard\u00f8", + u8"Verdals\u00f8ra", + u8"\u00c5krehamn", + u8"\u00c5lesund", + u8"\u00c5ndalsnes", }; static const char * const _name_hungarian_1[] = { "Nagy-", "Kis-", - "Fels\xC5\x91-", - "Als\xC3\xB3-", - "\xC3\x9Aj-", + u8"Fels\u0151-", + u8"Als\u00f3-", + u8"\u00daj-", }; static const char * const _name_hungarian_2[] = { "Bodrog", - "Dr\xC3\xA1va", + u8"Dr\u00e1va", "Duna", - "Hej\xC5\x91", - "Hern\xC3\xA1""d", - "R\xC3\xA1""ba", - "Saj\xC3\xB3", + u8"Hej\u0151", + u8"Hern\u00e1d", + u8"R\u00e1ba", + u8"Saj\u00f3", "Szamos", "Tisza", "Zala", "Balaton", - "Fert\xC5\x91", + u8"Fert\u0151", "Bakony", - "Cserh\xC3\xA1t", + u8"Cserh\u00e1t", "Bihar", - "Hajd\xC3\xBA", - "J\xC3\xA1sz", + u8"Hajd\u00fa", + u8"J\u00e1sz", "Kun", "Magyar", - "N\xC3\xB3gr\xC3\xA1""d", - "Ny\xC3\xADr", + u8"N\u00f3gr\u00e1d", + u8"Ny\u00edr", "Somogy", - "Sz\xC3\xA9kely", + u8"Sz\u00e9kely", "Buda", - "Gy\xC5\x91r", + u8"Gy\u0151r", "Pest", - "Feh\xC3\xA9r", - "Cser\xC3\xA9p", - "Erd\xC5\x91", + u8"Feh\u00e9r", + u8"Cser\u00e9p", + u8"Erd\u0151", "Hegy", "Homok", - "Mez\xC5\x91", + u8"Mez\u0151", "Puszta", - "S\xC3\xA1r", - "Cs\xC3\xA1sz\xC3\xA1r", + u8"S\u00e1r", + u8"Cs\u00e1sz\u00e1r", "Herceg", - "Kir\xC3\xA1ly", + u8"Kir\u00e1ly", "Nemes", - "P\xC3\xBCsp\xC3\xB6k", + u8"P\u00fcsp\u00f6k", "Szent", - "Alm\xC3\xA1s", - "Szilv\xC3\xA1s", + u8"Alm\u00e1s", + u8"Szilv\u00e1s", "Agg", "Aranyos", - "B\xC3\xA9k\xC3\xA9s", - "Egyh\xC3\xA1zas", + u8"B\u00e9k\u00e9s", + u8"Egyh\u00e1zas", "Gagy", "Heves", "Kapos", - "T\xC3\xA1pi\xC3\xB3", + u8"T\u00e1pi\u00f3", "Torna", "Vas", - "V\xC3\xA1mos", - "V\xC3\xA1s\xC3\xA1ros", + u8"V\u00e1mos", + u8"V\u00e1s\u00e1ros", }; static const char * const _name_hungarian_3[] = { - "ap\xC3\xA1ti", - "b\xC3\xA1""ba", + u8"ap\u00e1ti", + u8"b\u00e1ba", "bikk", "dob", "fa", - "f\xC3\xB6ld", + u8"f\u00f6ld", "hegyes", "kak", "kereszt", - "k\xC3\xBCrt", - "lad\xC3\xA1ny", - "m\xC3\xA9rges", + u8"k\u00fcrt", + u8"lad\u00e1ny", + u8"m\u00e9rges", "szalonta", "telek", "vas", - "v\xC3\xB6lgy", + u8"v\u00f6lgy", }; static const char * const _name_hungarian_4[] = { "alja", - "egyh\xC3\xA1za", - "h\xC3\xA1za", - "\xC3\xBAr", - "v\xC3\xA1r", + u8"egyh\u00e1za", + u8"h\u00e1za", + u8"\u00far", + u8"v\u00e1r", }; static const char * const _name_hungarian_real[] = { "Ajka", - "Asz\xC3\xB3""d", + u8"Asz\u00f3d", "Badacsony", "Baja", "Budapest", "Debrecen", "Eger", - "Fony\xC3\xB3""d", - "G\xC3\xB6""d\xC3\xB6ll\xC5\x91", - "Gy\xC5\x91r", + u8"Fony\u00f3d", + u8"G\u00f6d\u00f6ll\u0151", + u8"Gy\u0151r", "Gyula", "Karcag", - "Kecskem\xC3\xA9t", + u8"Kecskem\u00e9t", "Keszthely", - "Kisk\xC3\xB6re", + u8"Kisk\u00f6re", "Kocsord", - "Kom\xC3\xA1rom", - "K\xC5\x91szeg", - "Mak\xC3\xB3", - "Moh\xC3\xA1""cs", + u8"Kom\u00e1rom", + u8"K\u0151szeg", + u8"Mak\u00f3", + u8"Moh\u00e1cs", "Miskolc", - "\xC3\x93zd", + u8"\u00d3zd", "Paks", - "P\xC3\xA1pa", - "P\xC3\xA9""cs", - "Polg\xC3\xA1r", + u8"P\u00e1pa", + u8"P\u00e9cs", + u8"Polg\u00e1r", "Sarkad", - "Si\xC3\xB3""fok", + u8"Si\u00f3fok", "Szeged", "Szentes", "Szolnok", "Tihany", "Tokaj", - "V\xC3\xA1""c", - "Z\xC3\xA1hony", + u8"V\u00e1c", + u8"Z\u00e1hony", "Zirc", }; @@ -2514,7 +2514,7 @@ static const char * const _name_swiss_real[] = { "Arosa", "Appenzell", "Arbon", - "Altst\xC3\xA4tten", + u8"Altst\u00e4tten", "Baar", "Baden", "Bellinzona", @@ -2525,20 +2525,20 @@ static const char * const _name_swiss_real[] = { "Burgdorf", "Bern", "Basel", - "B\xC3\xBClach", + u8"B\u00fclach", "Carouge", "Cham", "Chiasso", "Chur", "Davos", - "Del\xC3\xA9mont", + u8"Del\u00e9mont", "Dietikon", - "D\xC3\xBC""bendorf", + u8"D\u00fcbendorf", "Emmen", - "Freienbach-Pf\xC3\xA4""ffikon", + u8"Freienbach-Pf\u00e4ffikon", "Fribourg", "Frauenfeld", - "Gen\xC3\xA8ve", + u8"Gen\u00e8ve", "Glarus", "Gossau", "Grenchen", @@ -2550,9 +2550,9 @@ static const char * const _name_swiss_real[] = { "Jona", "Kriens", "Kloten", - "K\xC3\xB6niz", + u8"K\u00f6niz", "Kreuzlingen", - "K\xC3\xBCsnacht", + u8"K\u00fcsnacht", "Agen", "Lancy", "La Chaux-de-Fonds", @@ -2569,7 +2569,7 @@ static const char * const _name_swiss_real[] = { "Lyss", "Luzern", "Martigny", - "M\xC3\xBCnchenstein", + u8"M\u00fcnchenstein", "Meyrin", "Montreux", "Monthey", @@ -2577,7 +2577,7 @@ static const char * const _name_swiss_real[] = { "Murten", "Moutier", "Muttenz", - "Neuch\xC3\xA2tel", + u8"Neuch\u00e2tel", "Neuhausen am Rheinfall", "Nyon", "Olten", @@ -2606,11 +2606,11 @@ static const char * const _name_swiss_real[] = { "St. Moritz", "Sion", "Spiez", - "St\xC3\xA4""fa", + u8"St\u00e4fa", "Sursee", "Schwyz", "Thalwil", - "Th\xC3\xB4nex", + u8"Th\u00f4nex", "Thun", "Uster", "Uzwil", @@ -2618,7 +2618,7 @@ static const char * const _name_swiss_real[] = { "Volketswil", "Versoix", "Vevey", - "W\xC3\xA4""denswil", + u8"W\u00e4denswil", "Wettingen", "Wil", "Wallisellen", @@ -2629,7 +2629,7 @@ static const char * const _name_swiss_real[] = { "Yverdon-les-Bains", "Zollikon", "Zofingen", - "Z\xC3\xBCrich", + u8"Z\u00fcrich", "Zug", }; @@ -2639,12 +2639,12 @@ static const char * const _name_danish_1[] = { "Nye ", "Store ", "Kirke ", - "N\xC3\xB8rre ", + u8"N\u00f8rre ", "Vester ", - "S\xC3\xB8nder ", - "\xC3\x98ster ", + u8"S\u00f8nder ", + u8"\u00d8ster ", "Hvide ", - "H\xC3\xB8je ", + u8"H\u00f8je ", "Kongens ", }; @@ -2656,7 +2656,7 @@ static const char * const _name_danish_2[] = { "Bede", "Birke", "Bjerring", - "Bj\xC3\xA6ver", + u8"Bj\u00e6ver", "Blommens", "Blok", "Bolder", @@ -2669,7 +2669,7 @@ static const char * const _name_danish_2[] = { "Fredens", "Frederiks", "Fugle", - "F\xC3\xA5re", + u8"F\u00e5re", "Gille", "Gis", "Givs", @@ -2686,11 +2686,11 @@ static const char * const _name_danish_2[] = { "Hol", "Horn", "Humle", - "H\xC3\xB8j", - "H\xC3\xB8r", + u8"H\u00f8j", + u8"H\u00f8r", "Is", "Jyde", - "J\xC3\xA6gers", + u8"J\u00e6gers", "Karls", "Klov", "Kokke", @@ -2702,24 +2702,24 @@ static const char * const _name_danish_2[] = { "Ny", "Oks", "Ring", - "R\xC3\xB8""de", + u8"R\u00f8de", "Rung", - "R\xC3\xB8r", + u8"R\u00f8r", "Rud", "Saks", "Salt", "Skam", "Silke", "Skod", - "Sk\xC3\xA6l", - "Sk\xC3\xA6r", + u8"Sk\u00e6l", + u8"Sk\u00e6r", "Sol", "Svend", "Svine", "Strand", "Stubbe", "Ting", - "Tj\xC3\xA6re", + u8"Tj\u00e6re", "Tore", "Uger", "Ulf", @@ -2727,9 +2727,9 @@ static const char * const _name_danish_2[] = { "Vand", "Vej", "Vor", - "V\xC3\xA6r", - "\xC3\x98r", - "\xC3\x85l", + u8"V\u00e6r", + u8"\u00d8r", + u8"\u00c5l", }; static const char * const _name_danish_3[] = { @@ -2742,21 +2742,21 @@ static const char * const _name_danish_3[] = { "strup", "holm", "hus", - "k\xC3\xB8""bing", + u8"k\u00f8bing", "lund", "lunde", "sund", "ovre", - "h\xC3\xB8j", + u8"h\u00f8j", "dal", "sted", "sten", - "l\xC3\xB8se", - "r\xC3\xB8""d", + u8"l\u00f8se", + u8"r\u00f8d", "magle", - "s\xC3\xB8", + u8"s\u00f8", "bjerg", - "b\xC3\xA6k", + u8"b\u00e6k", "drup", "lev", "bo", @@ -2766,32 +2766,32 @@ static const char * const _name_danish_3[] = { }; static const char * const _name_turkish_prefix[] = { - "Ak\xC3\xA7""a", - "Alt\xC4\xB1n", - "Bah\xC3\xA7""e", + u8"Ak\u00e7a", + u8"Alt\u0131n", + u8"Bah\u00e7e", "Boz", - "B\xC3\xBCy\xC3\xBCk", - "\xC3\x87""ay", - "Do\xC4\x9Fu", + u8"B\u00fcy\u00fck", + u8"\u00c7ay", + u8"Do\u011fu", "Eski", - "G\xC3\xBCzel", - "K\xC4\xB1z\xC4\xB1l", - "K\xC3\xBC\xC3\xA7\xC3\xBCk", + u8"G\u00fczel", + u8"K\u0131z\u0131l", + u8"K\u00fc\u00e7\u00fck", "Orta", - "Sar\xC4\xB1", + u8"Sar\u0131", "Sultan", "Ulu", "Yeni", }; static const char * const _name_turkish_middle[] = { - "aga\xC3\xA7", + u8"aga\u00e7", "ayva", - "\xC3\xA7""am", + u8"\u00e7am", "elma", "kurt", "pazar", - "yal\xC4\xB1", + u8"yal\u0131", }; static const char * const _name_turkish_suffix[] = { @@ -2800,10 +2800,10 @@ static const char * const _name_turkish_suffix[] = { "kale", "kaya", "kent", - "k\xC3\xB6y", + u8"k\u00f6y", "ova", - "\xC3\xB6z\xC3\xBC", - "\xC3\xB6ren", + u8"\u00f6z\u00fc", + u8"\u00f6ren", "pazar", "saray", "tepe", @@ -2813,48 +2813,48 @@ static const char * const _name_turkish_suffix[] = { static const char * const _name_turkish_real[] = { "Adana", - "Ad\xC4\xB1yaman", + u8"Ad\u0131yaman", "Afyon", - "A\xC4\x9Fr\xC4\xB1", + u8"A\u011fr\u0131", "Amasya", "Antalya", "Artvin", - "Bal\xC4\xB1kesir", + u8"Bal\u0131kesir", "Bilecik", "Bitlis", "Bolu", "Burdur", "Bursa", - "\xC3\x87""anakkale", - "\xC3\x87""ank\xC4\xB1r\xC4\xB1", + u8"\u00c7anakkale", + u8"\u00c7ank\u0131r\u0131", "Denizli", - "Diyarbak\xC4\xB1r", + u8"Diyarbak\u0131r", "Edirne", - "Elaz\xC4\xB1\xC4\x9F", + u8"Elaz\u0131\u011f", "Erzurum", - "Eski\xC5\x9F""ehir", + u8"Eski\u015fehir", "Giresun", - "G\xC3\xBCm\xC3\xBC\xC5\x9Fhane", + u8"G\u00fcm\u00fc\u015fhane", "Hatay", "Isparta", - "\xC4\xB0\xC3\xA7""el", - "\xC4\xB0stanbul", - "\xC4\xB0zmir", + u8"\u0130\u00e7el", + u8"\u0130stanbul", + u8"\u0130zmir", "Kars", "Kastamonu", "Kayseri", "Kirklareli", "Kocaeli", "Konya", - "K\xC3\xBCtahya", + u8"K\u00fctahya", "Malatya", "Manisa", - "Kahramanmara\xC5\x9F", + u8"Kahramanmara\u015f", "Mardin", - "Mu\xC4\x9Fla", - "Mu\xC5\x9F", - "Nev\xC5\x9F""ehir", - "Ni\xC4\x9F""de", + u8"Mu\u011fla", + u8"Mu\u015f", + u8"Nev\u015fehir", + u8"Ni\u011fde", "Rize", "Sakarya", "Samsun", @@ -2862,21 +2862,21 @@ static const char * const _name_turkish_real[] = { "Sinop", "Sivas", "Trabzon", - "\xC5\x9E""anl\xC4\xB1urfa", + u8"\u015eanl\u0131urfa", "Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt", "Karaman", - "\xC5\x9E\xC4\xB1rnak", - "Bart\xC4\xB1n", + u8"\u015e\u0131rnak", + u8"Bart\u0131n", "Ardahan", - "I\xC4\x9F""d\xC4\xB1r", + u8"I\u011fd\u0131r", "Yalova", - "Karab\xC3\xBCk", + u8"Karab\u00fck", "Osmaniye", - "D\xC3\xBCzce", + u8"D\u00fczce", }; static const char * const _name_italian_real[] = { @@ -3168,7 +3168,7 @@ static const char * const _name_catalan_real[] = { "Banyoles", "Figueres", "Balaguer", - "Vilafranca del Pened\xC3\xA8s", + u8"Vilafranca del Pened\u00e8s", "La Seu d'Urgell", "El Pont de Suert", "Igualada", @@ -3184,21 +3184,21 @@ static const char * const _name_catalan_real[] = { "Ripoll", "Cervera", "Gandesa", - "Matar\xC3\xB3", + u8"Matar\u00f3", "Montblanc", - "Vilanova i la Geltr\xC3\xBA", - "T\xC3\xA0rrega", + u8"Vilanova i la Geltr\u00fa", + u8"T\u00e0rrega", "Camprodon", - "Campdev\xC3\xA0nol", + u8"Campdev\u00e0nol", "Cambrils", "Begur", "Setcases", "Palafrugell", "Begues", "El Bruc", - "Cadaqu\xC3\xA9s", - "Collbat\xC3\xB3", - "Cervell\xC3\xB3", + u8"Cadaqu\u00e9s", + u8"Collbat\u00f3", + u8"Cervell\u00f3", "Esparreguera", "Abrera", "Alp", @@ -3209,7 +3209,7 @@ static const char * const _name_catalan_real[] = { "Molins de Rei", "Monistrol", "Rocallaura", - "Rub\xC3\xAD", + u8"Rub\u00ed", "Ripollet", "Sitges", "Roses", @@ -3239,14 +3239,14 @@ static const char * const _name_catalan_pref[] = { "Sant Joan de ", "Sant Feliu de ", "Sant Quirze de ", - "Sant Sadurn\xC3\xAD de ", + u8"Sant Sadurn\u00ed de ", "Santa Coloma de ", "Santa Margarida de ", "Santa Maria de ", - "Sant Mart\xC3\xAD de ", + u8"Sant Mart\u00ed de ", "Sant Pere de ", - "Sant Juli\xC3\xA0 de ", - "Sant Vicen\xC3\xA7 de ", + u8"Sant Juli\u00e0 de ", + u8"Sant Vicen\u00e7 de ", }; @@ -3275,10 +3275,10 @@ static const char * const _name_catalan_2m[] = { "baix", "fosc", "pelat", - "vent\xC3\xB3s", + u8"vent\u00f3s", "negre", "roig", - "gr\xC3\xADs", + u8"gr\u00eds", }; static const char * const _name_catalan_2f[] = { @@ -3293,14 +3293,14 @@ static const char * const _name_catalan_2f[] = { }; static const char * const _name_catalan_3[] = { - " Desp\xC3\xAD", + u8" Desp\u00ed", " Desvern", - " del Cam\xC3\xAD", + u8" del Cam\u00ed", " de Mar", " de Dalt", " de Baix", - " del Vall\xC3\xA8s", - " de Bergued\xC3\xA0", + u8" del Vall\u00e8s", + u8" de Bergued\u00e0", " de Conflent", " de la Plana", }; @@ -3311,5 +3311,5 @@ static const char * const _name_catalan_river1[] = { " de Llobregat", " d'Ebre", " de Segre", - " de Francol\xC3\xAD", + u8" de Francol\u00ed", }; diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index e44d9178d9..3519c27508 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -359,7 +359,7 @@ static void Xunzip(byte **bufp, size_t *sizep) } /* Check for the byte-order-mark, and skip it if needed. */ - char *p = this->text + (strncmp("\xEF\xBB\xBF", this->text, 3) == 0 ? 3 : 0); + char *p = this->text + (strncmp(u8"\ufeff", this->text, 3) == 0 ? 3 : 0); /* Make sure the string is a valid UTF-8 sequence. */ str_validate(p, this->text + filesize, SVS_REPLACE_WITH_QUESTION_MARK | SVS_ALLOW_NEWLINE); diff --git a/src/townname.cpp b/src/townname.cpp index 77dfb448b2..e7999f9a53 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -505,7 +505,7 @@ static char *MakeFinnishTownName(char *buf, const char *last, uint32 seed) strstr(orig, "A") != nullptr || strstr(orig, "O") != nullptr || strstr(orig, "U") != nullptr) { buf = strecpy(buf, "la", last); } else { - buf = strecpy(buf, "l\xC3\xA4", last); + buf = strecpy(buf, u8"l\u00e4", last); } return buf; } From c9fd85528a804060473364c54248149e96da0508 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Tue, 15 Dec 2020 01:35:07 +0300 Subject: [PATCH 335/601] Add: new economy "frozen" that stops production changes and industry closures (#8282) --- src/economy_type.h | 9 ++++++++ src/industry_cmd.cpp | 47 +++++++++++++++++++++--------------------- src/industry_gui.cpp | 4 ++-- src/industrytype.h | 2 +- src/lang/english.txt | 7 +++++-- src/settings_gui.cpp | 2 +- src/settings_type.h | 3 ++- src/table/settings.ini | 15 +++++++++----- 8 files changed, 54 insertions(+), 35 deletions(-) diff --git a/src/economy_type.h b/src/economy_type.h index 87e4482672..842e2711c3 100644 --- a/src/economy_type.h +++ b/src/economy_type.h @@ -15,6 +15,15 @@ typedef OverflowSafeInt64 Money; +/** Type of the game economy. */ +enum EconomyType : uint8 { + ET_BEGIN = 0, + ET_ORIGINAL = 0, + ET_SMOOTH = 1, + ET_FROZEN = 2, + ET_END = 3, +}; + /** Data of the economy. */ struct Economy { Money max_loan; ///< NOSAVE: Maximum possible loan diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 443702993e..b8b92e5bf9 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1736,8 +1736,8 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, MemSetT(i->incoming_cargo_waiting, 0, lengthof(i->incoming_cargo_waiting)); MemSetT(i->last_cargo_accepted_at, 0, lengthof(i->last_cargo_accepted_at)); - /* don't use smooth economy for industries using production related callbacks */ - if (indspec->UsesSmoothEconomy()) { + /* Randomize inital production if non-original economy is used and there are no production related callbacks. */ + if (!indspec->UsesOriginalEconomy()) { for (size_t ci = 0; ci < lengthof(i->production_rate); ci++) { i->production_rate[ci] = min((RandomRange(256) + 128) * i->production_rate[ci] >> 8, 255); } @@ -2304,7 +2304,7 @@ static void UpdateIndustryStatistics(Industry *i) void Industry::RecomputeProductionMultipliers() { const IndustrySpec *indspec = GetIndustrySpec(this->type); - assert(!indspec->UsesSmoothEconomy()); + assert(indspec->UsesOriginalEconomy()); /* Rates are rounded up, so e.g. oilrig always produces some passengers */ for (size_t i = 0; i < lengthof(this->production_rate); i++) { @@ -2604,8 +2604,8 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) bool standard = false; bool suppress_message = false; bool recalculate_multipliers = false; ///< reinitialize production_rate to match prod_level - /* don't use smooth economy for industries using production related callbacks */ - bool smooth_economy = indspec->UsesSmoothEconomy(); + /* use original economy for industries using production related callbacks */ + bool original_economy = indspec->UsesOriginalEconomy(); byte div = 0; byte mul = 0; int8 increment = 0; @@ -2640,7 +2640,8 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) } } } else { - if (monthly != smooth_economy) return; + if (monthly == original_economy) return; + if (!original_economy && _settings_game.economy.type == ET_FROZEN) return; if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return; } @@ -2648,7 +2649,16 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) /* decrease or increase */ bool only_decrease = (indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _settings_game.game_creation.landscape == LT_TEMPERATE; - if (smooth_economy) { + if (original_economy) { + if (only_decrease || Chance16(1, 3)) { + /* If more than 60% transported, 66% chance of increase, else 33% chance of increase */ + if (!only_decrease && (i->last_month_pct_transported[0] > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) { + mul = 1; // Increase production + } else { + div = 1; // Decrease production + } + } + } else if (_settings_game.economy.type == ET_SMOOTH) { closeit = true; for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] == CT_INVALID) continue; @@ -2698,20 +2708,11 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) ReportNewsProductionChangeIndustry(i, i->produced_cargo[j], percent); } } - } else { - if (only_decrease || Chance16(1, 3)) { - /* If more than 60% transported, 66% chance of increase, else 33% chance of increase */ - if (!only_decrease && (i->last_month_pct_transported[0] > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) { - mul = 1; // Increase production - } else { - div = 1; // Decrease production - } - } } } if (!callback_enabled && (indspec->life_type & INDUSTRYLIFE_PROCESSING)) { - if ( (byte)(_cur_year - i->last_prod_year) >= 5 && Chance16(1, smooth_economy ? 180 : 2)) { + if ( (byte)(_cur_year - i->last_prod_year) >= 5 && Chance16(1, original_economy ? 2 : 180)) { closeit = true; } } @@ -2934,14 +2935,14 @@ Money IndustrySpec::GetRemovalCost() const } /** - * Determines whether this industrytype uses smooth economy or whether it uses standard/newgrf production changes. - * @return true if smooth economy is used. + * Determines whether this industrytype uses standard/newgrf production changes. + * @return true if original economy is used. */ -bool IndustrySpec::UsesSmoothEconomy() const +bool IndustrySpec::UsesOriginalEconomy() const { - return _settings_game.economy.smooth_economy && - !(HasBit(this->callback_mask, CBM_IND_PRODUCTION_256_TICKS) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL)) && // production callbacks - !(HasBit(this->callback_mask, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CHANGE) || HasBit(this->callback_mask, CBM_IND_PROD_CHANGE_BUILD)); // production change callbacks + return _settings_game.economy.type == ET_ORIGINAL || + HasBit(this->callback_mask, CBM_IND_PRODUCTION_256_TICKS) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || // production callbacks + HasBit(this->callback_mask, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CHANGE) || HasBit(this->callback_mask, CBM_IND_PROD_CHANGE_BUILD); // production change callbacks } IndustrySpec::~IndustrySpec() diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index a795b6a0ed..e54b1b2a4b 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1080,7 +1080,7 @@ public: const Industry *i = Industry::Get(this->window_number); if (IsProductionAlterable(i)) { const IndustrySpec *ind = GetIndustrySpec(i->type); - this->editable = ind->UsesSmoothEconomy() ? EA_RATE : EA_MULTIPLIER; + this->editable = ind->UsesOriginalEconomy() ? EA_MULTIPLIER : EA_RATE; } else { this->editable = EA_NONE; } @@ -1100,7 +1100,7 @@ public: static void UpdateIndustryProduction(Industry *i) { const IndustrySpec *indspec = GetIndustrySpec(i->type); - if (!indspec->UsesSmoothEconomy()) i->RecomputeProductionMultipliers(); + if (indspec->UsesOriginalEconomy()) i->RecomputeProductionMultipliers(); for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] != CT_INVALID) { diff --git a/src/industrytype.h b/src/industrytype.h index 8af486c210..937ff62cb9 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -144,7 +144,7 @@ struct IndustrySpec { bool IsProcessingIndustry() const; Money GetConstructionCost() const; Money GetRemovalCost() const; - bool UsesSmoothEconomy() const; + bool UsesOriginalEconomy() const; ~IndustrySpec(); }; diff --git a/src/lang/english.txt b/src/lang/english.txt index 510e29279b..142cc83f97 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1553,8 +1553,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Scoring end yea 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_ECONOMY_TYPE :Economy type: {STRING2} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Frozen STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying shares from other companies: {STRING2} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING2} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index a124d69894..cfb6bc5b81 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1729,7 +1729,7 @@ static SettingsContainer &GetSettingsTree() industries->Add(new SettingEntry("construction.industry_platform")); industries->Add(new SettingEntry("economy.multiple_industry_per_town")); industries->Add(new SettingEntry("game_creation.oil_refinery_limit")); - industries->Add(new SettingEntry("economy.smooth_economy")); + industries->Add(new SettingEntry("economy.type")); industries->Add(new SettingEntry("station.serve_neutral_industries")); } diff --git a/src/settings_type.h b/src/settings_type.h index fdb2b0f862..2dbca59d82 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -11,6 +11,7 @@ #define SETTINGS_TYPE_H #include "date_type.h" +#include "economy_type.h" #include "town_type.h" #include "transport_type.h" #include "network/core/config.h" @@ -470,7 +471,7 @@ struct VehicleSettings { struct EconomySettings { bool inflation; ///< disable inflation bool bribe; ///< enable bribing the local authority - bool smooth_economy; ///< smooth economy + EconomyType type; ///< economy type (original/smooth/frozen) bool allow_shares; ///< allow the buying/selling of shares uint8 min_years_for_shares; ///< minimum age of a company for it to trade shares uint8 feeder_payment_share; ///< percentage of leg payment to virtually pay in feeder systems diff --git a/src/table/settings.ini b/src/table/settings.ini index c7dbd2128b..bba7d61e82 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1429,12 +1429,17 @@ strhelp = STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT strval = STR_CONFIG_SETTING_ENDING_YEAR_VALUE cat = SC_ADVANCED -[SDT_BOOL] +[SDT_VAR] base = GameSettings -var = economy.smooth_economy -def = true -str = STR_CONFIG_SETTING_SMOOTH_ECONOMY -strhelp = STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT +var = economy.type +type = SLE_UINT8 +guiflags = SGF_MULTISTRING +def = ET_SMOOTH +min = ET_BEGIN +max = ET_END - 1 +str = STR_CONFIG_SETTING_ECONOMY_TYPE +strhelp = STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT +strval = STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL proc = InvalidateIndustryViewWindow cat = SC_BASIC From 5d278b62ccdacbf16b482c1d10247def85ceb71c Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 13 Dec 2020 22:24:36 +0100 Subject: [PATCH 336/601] Codechange: switch to C++17 on all platforms. --- CMakeLists.txt | 9 +-------- COMPILING.md | 4 ++-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a0dd5b759..15c6e03c0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,14 +32,7 @@ set_directory_options() include(Static) set_static_if_needed() -if(MSVC) - # C++17 for MSVC - set(CMAKE_CXX_STANDARD 17) -else() - # C++11 for all other targets - set(CMAKE_CXX_STANDARD 11) -endif() - +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) diff --git a/COMPILING.md b/COMPILING.md index 64f25f9c22..759dd2e9c4 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -83,9 +83,9 @@ make ## Supported compilers -Every compiler that is supported by CMake and supports C++11, should be +Every compiler that is supported by CMake and supports C++17, should be able to compile OpenTTD. As the exact list of compilers changes constantly, -we refer to the compiler manual to see if it supports C++11, and to CMake +we refer to the compiler manual to see if it supports C++17, and to CMake to see if it supports your compiler. ## Compilation of base sets From 484ea62a62d7e09ea550a40ea3ded24dcab8a6d0 Mon Sep 17 00:00:00 2001 From: frosch Date: Mon, 14 Dec 2020 21:46:35 +0100 Subject: [PATCH 337/601] Cleanup: use std::optional instead of custom implementation. --- src/3rdparty/optional/LICENSE_1_0.txt | 23 - src/3rdparty/optional/optional.hpp | 1066 ------------------------- src/3rdparty/optional/ottd_optional.h | 33 - src/ini_type.h | 4 +- 4 files changed, 2 insertions(+), 1124 deletions(-) delete mode 100644 src/3rdparty/optional/LICENSE_1_0.txt delete mode 100644 src/3rdparty/optional/optional.hpp delete mode 100644 src/3rdparty/optional/ottd_optional.h diff --git a/src/3rdparty/optional/LICENSE_1_0.txt b/src/3rdparty/optional/LICENSE_1_0.txt deleted file mode 100644 index 36b7cd93cd..0000000000 --- a/src/3rdparty/optional/LICENSE_1_0.txt +++ /dev/null @@ -1,23 +0,0 @@ -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/src/3rdparty/optional/optional.hpp b/src/3rdparty/optional/optional.hpp deleted file mode 100644 index fe1832b2ae..0000000000 --- a/src/3rdparty/optional/optional.hpp +++ /dev/null @@ -1,1066 +0,0 @@ -// Copyright (C) 2011 - 2012 Andrzej Krzemienski. -// -// Use, modification, and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// The idea and interface is based on Boost.Optional library -// authored by Fernando Luis Cacciola Carballal - -# ifndef ___OPTIONAL_HPP___ -# define ___OPTIONAL_HPP___ - -# include -# include -# include -# include -# include -# include -# include - -# define TR2_OPTIONAL_REQUIRES(...) typename enable_if<__VA_ARGS__::value, bool>::type = false - -# if defined __GNUC__ // NOTE: GNUC is also defined for Clang -# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8) -# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ -# elif (__GNUC__ > 4) -# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ -# endif -# -# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7) -# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___ -# elif (__GNUC__ > 4) -# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___ -# endif -# -# if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) && (__GNUC_PATCHLEVEL__ >= 1) -# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ -# elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9) -# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ -# elif (__GNUC__ > 4) -# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ -# endif -# endif -# -# if defined __clang_major__ -# if (__clang_major__ == 3 && __clang_minor__ >= 5) -# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ -# elif (__clang_major__ > 3) -# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ -# endif -# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ -# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ -# elif (__clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ >= 2) -# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ -# endif -# endif -# -# if defined _MSC_VER -# if (_MSC_VER >= 1900) -# define TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ -# endif -# endif - -# if defined __clang__ -# if (__clang_major__ > 2) || (__clang_major__ == 2) && (__clang_minor__ >= 9) -# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 -# else -# define OPTIONAL_HAS_THIS_RVALUE_REFS 0 -# endif -# elif defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ -# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 -# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ -# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 -# else -# define OPTIONAL_HAS_THIS_RVALUE_REFS 0 -# endif - - -# if defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___ -# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 1 -# define OPTIONAL_CONSTEXPR_INIT_LIST constexpr -# else -# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 0 -# define OPTIONAL_CONSTEXPR_INIT_LIST -# endif - -# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ && (defined __cplusplus) && (__cplusplus != 201103L) -# define OPTIONAL_HAS_MOVE_ACCESSORS 1 -# else -# define OPTIONAL_HAS_MOVE_ACCESSORS 0 -# endif - -# // In C++11 constexpr implies const, so we need to make non-const members also non-constexpr -# if (defined __cplusplus) && (__cplusplus == 201103L) -# define OPTIONAL_MUTABLE_CONSTEXPR -# else -# define OPTIONAL_MUTABLE_CONSTEXPR constexpr -# endif - -namespace std{ - -namespace experimental{ - -// BEGIN workaround for missing is_trivially_destructible -# if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ - // leave it: it is already there -# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ - // leave it: it is already there -# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ - // leave it: it is already there -# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS - // leave it: the user doesn't want it -# else - template - using is_trivially_destructible = std::has_trivial_destructor; -# endif -// END workaround for missing is_trivially_destructible - -# if (defined TR2_OPTIONAL_GCC_4_7_AND_HIGHER___) - // leave it; our metafunctions are already defined. -# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_ - // leave it; our metafunctions are already defined. -# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___ - // leave it: it is already there -# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS - // leave it: the user doesn't want it -# else - - -// workaround for missing traits in GCC and CLANG -template -struct is_nothrow_move_constructible -{ - constexpr static bool value = std::is_nothrow_constructible::value; -}; - - -template -struct is_assignable -{ - template - constexpr static bool has_assign(...) { return false; } - - template () = std::declval(), true)) > - // the comma operator is necessary for the cases where operator= returns void - constexpr static bool has_assign(bool) { return true; } - - constexpr static bool value = has_assign(true); -}; - - -template -struct is_nothrow_move_assignable -{ - template - struct has_nothrow_move_assign { - constexpr static bool value = false; - }; - - template - struct has_nothrow_move_assign { - constexpr static bool value = noexcept( std::declval() = std::declval() ); - }; - - constexpr static bool value = has_nothrow_move_assign::value>::value; -}; -// end workaround - - -# endif - - - -// 20.5.4, optional for object types -template class optional; - -// 20.5.5, optional for lvalue reference types -template class optional; - - -// workaround: std utility functions aren't constexpr yet -template inline constexpr T&& constexpr_forward(typename std::remove_reference::type& t) noexcept -{ - return static_cast(t); -} - -template inline constexpr T&& constexpr_forward(typename std::remove_reference::type&& t) noexcept -{ - static_assert(!std::is_lvalue_reference::value, "!!"); - return static_cast(t); -} - -template inline constexpr typename std::remove_reference::type&& constexpr_move(T&& t) noexcept -{ - return static_cast::type&&>(t); -} - - -#if defined NDEBUG -# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR) -#else -# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) ((CHECK) ? (EXPR) : ([]{assert(!#CHECK);}(), (EXPR))) -#endif - - -namespace detail_ -{ - -// static_addressof: a constexpr version of addressof -template -struct has_overloaded_addressof -{ - template - constexpr static bool has_overload(...) { return false; } - - template ().operator&()) > - constexpr static bool has_overload(bool) { return true; } - - constexpr static bool value = has_overload(true); -}; - -template )> -constexpr T* static_addressof(T& ref) -{ - return &ref; -} - -template )> -T* static_addressof(T& ref) -{ - return std::addressof(ref); -} - - -// the call to convert(b) has return type A and converts b to type A iff b decltype(b) is implicitly convertible to A -template -constexpr U convert(U v) { return v; } - - -namespace swap_ns -{ - using std::swap; - - template - void adl_swap(T& t, T& u) noexcept(noexcept(swap(t, u))) - { - swap(t, u); - } - -} // namespace swap_ns - -} // namespace detail - - -constexpr struct trivial_init_t{} trivial_init{}; - - -// 20.5.6, In-place construction -constexpr struct in_place_t{} in_place{}; - - -// 20.5.7, Disengaged state indicator -struct nullopt_t -{ - struct init{}; - constexpr explicit nullopt_t(init){} -}; -constexpr nullopt_t nullopt{nullopt_t::init()}; - - -// 20.5.8, class bad_optional_access -class bad_optional_access : public logic_error { -public: - explicit bad_optional_access(const string& what_arg) : logic_error{what_arg} {} - explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {} -}; - - -template -union storage_t -{ - unsigned char dummy_; - T value_; - - constexpr storage_t( trivial_init_t ) noexcept : dummy_() {}; - - template - constexpr storage_t( Args&&... args ) : value_(constexpr_forward(args)...) {} - - ~storage_t(){} -}; - - -template -union constexpr_storage_t -{ - unsigned char dummy_; - T value_; - - constexpr constexpr_storage_t( trivial_init_t ) noexcept : dummy_() {}; - - template - constexpr constexpr_storage_t( Args&&... args ) : value_(constexpr_forward(args)...) {} - - ~constexpr_storage_t() = default; -}; - - -template -struct optional_base -{ - bool init_; - storage_t storage_; - - constexpr optional_base() noexcept : init_(false), storage_(trivial_init) {}; - - explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {} - - explicit constexpr optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {} - - template explicit optional_base(in_place_t, Args&&... args) - : init_(true), storage_(constexpr_forward(args)...) {} - - template >)> - explicit optional_base(in_place_t, std::initializer_list il, Args&&... args) - : init_(true), storage_(il, std::forward(args)...) {} - - ~optional_base() { if (init_) storage_.value_.T::~T(); } -}; - - -template -struct constexpr_optional_base -{ - bool init_; - constexpr_storage_t storage_; - - constexpr constexpr_optional_base() noexcept : init_(false), storage_(trivial_init) {}; - - explicit constexpr constexpr_optional_base(const T& v) : init_(true), storage_(v) {} - - explicit constexpr constexpr_optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {} - - template explicit constexpr constexpr_optional_base(in_place_t, Args&&... args) - : init_(true), storage_(constexpr_forward(args)...) {} - - template >)> - OPTIONAL_CONSTEXPR_INIT_LIST explicit constexpr_optional_base(in_place_t, std::initializer_list il, Args&&... args) - : init_(true), storage_(il, std::forward(args)...) {} - - ~constexpr_optional_base() = default; -}; - -template -using OptionalBase = typename std::conditional< - is_trivially_destructible::value, // if possible - constexpr_optional_base::type>, // use base with trivial destructor - optional_base::type> ->::type; - - - -template -class optional : private OptionalBase -{ - static_assert( !std::is_same::type, nullopt_t>::value, "bad T" ); - static_assert( !std::is_same::type, in_place_t>::value, "bad T" ); - - - constexpr bool initialized() const noexcept { return OptionalBase::init_; } - typename std::remove_const::type* dataptr() { return std::addressof(OptionalBase::storage_.value_); } - constexpr const T* dataptr() const { return detail_::static_addressof(OptionalBase::storage_.value_); } - -# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1 - constexpr const T& contained_val() const& { return OptionalBase::storage_.value_; } -# if OPTIONAL_HAS_MOVE_ACCESSORS == 1 - OPTIONAL_MUTABLE_CONSTEXPR T&& contained_val() && { return std::move(OptionalBase::storage_.value_); } - OPTIONAL_MUTABLE_CONSTEXPR T& contained_val() & { return OptionalBase::storage_.value_; } -# else - T& contained_val() & { return OptionalBase::storage_.value_; } - T&& contained_val() && { return std::move(OptionalBase::storage_.value_); } -# endif -# else - constexpr const T& contained_val() const { return OptionalBase::storage_.value_; } - T& contained_val() { return OptionalBase::storage_.value_; } -# endif - - void clear() noexcept { - if (initialized()) dataptr()->T::~T(); - OptionalBase::init_ = false; - } - - template - void initialize(Args&&... args) noexcept(noexcept(T(std::forward(args)...))) - { - assert(!OptionalBase::init_); - ::new (static_cast(dataptr())) T(std::forward(args)...); - OptionalBase::init_ = true; - } - - template - void initialize(std::initializer_list il, Args&&... args) noexcept(noexcept(T(il, std::forward(args)...))) - { - assert(!OptionalBase::init_); - ::new (static_cast(dataptr())) T(il, std::forward(args)...); - OptionalBase::init_ = true; - } - -public: - typedef T value_type; - - // 20.5.5.1, constructors - constexpr optional() noexcept : OptionalBase() {}; - constexpr optional(nullopt_t) noexcept : OptionalBase() {}; - - optional(const optional& rhs) - : OptionalBase() - { - if (rhs.initialized()) { - ::new (static_cast(dataptr())) T(*rhs); - OptionalBase::init_ = true; - } - } - - optional(optional&& rhs) noexcept(is_nothrow_move_constructible::value) - : OptionalBase() - { - if (rhs.initialized()) { - ::new (static_cast(dataptr())) T(std::move(*rhs)); - OptionalBase::init_ = true; - } - } - - constexpr optional(const T& v) : OptionalBase(v) {} - - constexpr optional(T&& v) : OptionalBase(constexpr_move(v)) {} - - template - explicit constexpr optional(in_place_t, Args&&... args) - : OptionalBase(in_place_t{}, constexpr_forward(args)...) {} - - template >)> - OPTIONAL_CONSTEXPR_INIT_LIST explicit optional(in_place_t, std::initializer_list il, Args&&... args) - : OptionalBase(in_place_t{}, il, constexpr_forward(args)...) {} - - // 20.5.4.2, Destructor - ~optional() = default; - - // 20.5.4.3, assignment - optional& operator=(nullopt_t) noexcept - { - clear(); - return *this; - } - - optional& operator=(const optional& rhs) - { - if (initialized() == true && rhs.initialized() == false) clear(); - else if (initialized() == false && rhs.initialized() == true) initialize(*rhs); - else if (initialized() == true && rhs.initialized() == true) contained_val() = *rhs; - return *this; - } - - optional& operator=(optional&& rhs) - noexcept(is_nothrow_move_assignable::value && is_nothrow_move_constructible::value) - { - if (initialized() == true && rhs.initialized() == false) clear(); - else if (initialized() == false && rhs.initialized() == true) initialize(std::move(*rhs)); - else if (initialized() == true && rhs.initialized() == true) contained_val() = std::move(*rhs); - return *this; - } - - template - auto operator=(U&& v) - -> typename enable_if - < - is_same::type, T>::value, - optional& - >::type - { - if (initialized()) { contained_val() = std::forward(v); } - else { initialize(std::forward(v)); } - return *this; - } - - - template - void emplace(Args&&... args) - { - clear(); - initialize(std::forward(args)...); - } - - template - void emplace(initializer_list il, Args&&... args) - { - clear(); - initialize(il, std::forward(args)...); - } - - // 20.5.4.4, Swap - void swap(optional& rhs) noexcept(is_nothrow_move_constructible::value - && noexcept(detail_::swap_ns::adl_swap(declval(), declval()))) - { - if (initialized() == true && rhs.initialized() == false) { rhs.initialize(std::move(**this)); clear(); } - else if (initialized() == false && rhs.initialized() == true) { initialize(std::move(*rhs)); rhs.clear(); } - else if (initialized() == true && rhs.initialized() == true) { using std::swap; swap(**this, *rhs); } - } - - // 20.5.4.5, Observers - - explicit constexpr operator bool() const noexcept { return initialized(); } - constexpr bool has_value() const noexcept { return initialized(); } - - constexpr T const* operator ->() const { - return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr()); - } - -# if OPTIONAL_HAS_MOVE_ACCESSORS == 1 - - OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() { - assert (initialized()); - return dataptr(); - } - - constexpr T const& operator *() const& { - return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val()); - } - - OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & { - assert (initialized()); - return contained_val(); - } - - OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && { - assert (initialized()); - return constexpr_move(contained_val()); - } - - constexpr T const& value() const& { - return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); - } - - OPTIONAL_MUTABLE_CONSTEXPR T& value() & { - return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); - } - - OPTIONAL_MUTABLE_CONSTEXPR T&& value() && { - if (!initialized()) throw bad_optional_access("bad optional access"); - return std::move(contained_val()); - } - -# else - - T* operator ->() { - assert (initialized()); - return dataptr(); - } - - constexpr T const& operator *() const { - return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val()); - } - - T& operator *() { - assert (initialized()); - return contained_val(); - } - - constexpr T const& value() const { - return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); - } - - T& value() { - return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); - } - -# endif - -# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1 - - template - constexpr T value_or(V&& v) const& - { - return *this ? **this : detail_::convert(constexpr_forward(v)); - } - -# if OPTIONAL_HAS_MOVE_ACCESSORS == 1 - - template - OPTIONAL_MUTABLE_CONSTEXPR T value_or(V&& v) && - { - return *this ? constexpr_move(const_cast&>(*this).contained_val()) : detail_::convert(constexpr_forward(v)); - } - -# else - - template - T value_or(V&& v) && - { - return *this ? constexpr_move(const_cast&>(*this).contained_val()) : detail_::convert(constexpr_forward(v)); - } - -# endif - -# else - - template - constexpr T value_or(V&& v) const - { - return *this ? **this : detail_::convert(constexpr_forward(v)); - } - -# endif - - // 20.6.3.6, modifiers - void reset() noexcept { clear(); } -}; - - -template -class optional -{ - static_assert( !std::is_same::value, "bad T" ); - static_assert( !std::is_same::value, "bad T" ); - T* ref; - -public: - - // 20.5.5.1, construction/destruction - constexpr optional() noexcept : ref(nullptr) {} - - constexpr optional(nullopt_t) noexcept : ref(nullptr) {} - - constexpr optional(T& v) noexcept : ref(detail_::static_addressof(v)) {} - - optional(T&&) = delete; - - constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {} - - explicit constexpr optional(in_place_t, T& v) noexcept : ref(detail_::static_addressof(v)) {} - - explicit optional(in_place_t, T&&) = delete; - - ~optional() = default; - - // 20.5.5.2, mutation - optional& operator=(nullopt_t) noexcept { - ref = nullptr; - return *this; - } - - // optional& operator=(const optional& rhs) noexcept { - // ref = rhs.ref; - // return *this; - // } - - // optional& operator=(optional&& rhs) noexcept { - // ref = rhs.ref; - // return *this; - // } - - template - auto operator=(U&& rhs) noexcept - -> typename enable_if - < - is_same::type, optional>::value, - optional& - >::type - { - ref = rhs.ref; - return *this; - } - - template - auto operator=(U&& rhs) noexcept - -> typename enable_if - < - !is_same::type, optional>::value, - optional& - >::type - = delete; - - void emplace(T& v) noexcept { - ref = detail_::static_addressof(v); - } - - void emplace(T&&) = delete; - - - void swap(optional& rhs) noexcept - { - std::swap(ref, rhs.ref); - } - - // 20.5.5.3, observers - constexpr T* operator->() const { - return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, ref); - } - - constexpr T& operator*() const { - return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, *ref); - } - - constexpr T& value() const { - return ref ? *ref : (throw bad_optional_access("bad optional access"), *ref); - } - - explicit constexpr operator bool() const noexcept { - return ref != nullptr; - } - - constexpr bool has_value() const noexcept { - return ref != nullptr; - } - - template - constexpr typename decay::type value_or(V&& v) const - { - return *this ? **this : detail_::convert::type>(constexpr_forward(v)); - } - - // x.x.x.x, modifiers - void reset() noexcept { ref = nullptr; } -}; - - -template -class optional -{ - static_assert( sizeof(T) == 0, "optional rvalue references disallowed" ); -}; - - -// 20.5.8, Relational operators -template constexpr bool operator==(const optional& x, const optional& y) -{ - return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y; -} - -template constexpr bool operator!=(const optional& x, const optional& y) -{ - return !(x == y); -} - -template constexpr bool operator<(const optional& x, const optional& y) -{ - return (!y) ? false : (!x) ? true : *x < *y; -} - -template constexpr bool operator>(const optional& x, const optional& y) -{ - return (y < x); -} - -template constexpr bool operator<=(const optional& x, const optional& y) -{ - return !(y < x); -} - -template constexpr bool operator>=(const optional& x, const optional& y) -{ - return !(x < y); -} - - -// 20.5.9, Comparison with nullopt -template constexpr bool operator==(const optional& x, nullopt_t) noexcept -{ - return (!x); -} - -template constexpr bool operator==(nullopt_t, const optional& x) noexcept -{ - return (!x); -} - -template constexpr bool operator!=(const optional& x, nullopt_t) noexcept -{ - return bool(x); -} - -template constexpr bool operator!=(nullopt_t, const optional& x) noexcept -{ - return bool(x); -} - -template constexpr bool operator<(const optional&, nullopt_t) noexcept -{ - return false; -} - -template constexpr bool operator<(nullopt_t, const optional& x) noexcept -{ - return bool(x); -} - -template constexpr bool operator<=(const optional& x, nullopt_t) noexcept -{ - return (!x); -} - -template constexpr bool operator<=(nullopt_t, const optional&) noexcept -{ - return true; -} - -template constexpr bool operator>(const optional& x, nullopt_t) noexcept -{ - return bool(x); -} - -template constexpr bool operator>(nullopt_t, const optional&) noexcept -{ - return false; -} - -template constexpr bool operator>=(const optional&, nullopt_t) noexcept -{ - return true; -} - -template constexpr bool operator>=(nullopt_t, const optional& x) noexcept -{ - return (!x); -} - - - -// 20.5.10, Comparison with T -template constexpr bool operator==(const optional& x, const T& v) -{ - return bool(x) ? *x == v : false; -} - -template constexpr bool operator==(const T& v, const optional& x) -{ - return bool(x) ? v == *x : false; -} - -template constexpr bool operator!=(const optional& x, const T& v) -{ - return bool(x) ? *x != v : true; -} - -template constexpr bool operator!=(const T& v, const optional& x) -{ - return bool(x) ? v != *x : true; -} - -template constexpr bool operator<(const optional& x, const T& v) -{ - return bool(x) ? *x < v : true; -} - -template constexpr bool operator>(const T& v, const optional& x) -{ - return bool(x) ? v > *x : true; -} - -template constexpr bool operator>(const optional& x, const T& v) -{ - return bool(x) ? *x > v : false; -} - -template constexpr bool operator<(const T& v, const optional& x) -{ - return bool(x) ? v < *x : false; -} - -template constexpr bool operator>=(const optional& x, const T& v) -{ - return bool(x) ? *x >= v : false; -} - -template constexpr bool operator<=(const T& v, const optional& x) -{ - return bool(x) ? v <= *x : false; -} - -template constexpr bool operator<=(const optional& x, const T& v) -{ - return bool(x) ? *x <= v : true; -} - -template constexpr bool operator>=(const T& v, const optional& x) -{ - return bool(x) ? v >= *x : true; -} - - -// Comparison of optional with T -template constexpr bool operator==(const optional& x, const T& v) -{ - return bool(x) ? *x == v : false; -} - -template constexpr bool operator==(const T& v, const optional& x) -{ - return bool(x) ? v == *x : false; -} - -template constexpr bool operator!=(const optional& x, const T& v) -{ - return bool(x) ? *x != v : true; -} - -template constexpr bool operator!=(const T& v, const optional& x) -{ - return bool(x) ? v != *x : true; -} - -template constexpr bool operator<(const optional& x, const T& v) -{ - return bool(x) ? *x < v : true; -} - -template constexpr bool operator>(const T& v, const optional& x) -{ - return bool(x) ? v > *x : true; -} - -template constexpr bool operator>(const optional& x, const T& v) -{ - return bool(x) ? *x > v : false; -} - -template constexpr bool operator<(const T& v, const optional& x) -{ - return bool(x) ? v < *x : false; -} - -template constexpr bool operator>=(const optional& x, const T& v) -{ - return bool(x) ? *x >= v : false; -} - -template constexpr bool operator<=(const T& v, const optional& x) -{ - return bool(x) ? v <= *x : false; -} - -template constexpr bool operator<=(const optional& x, const T& v) -{ - return bool(x) ? *x <= v : true; -} - -template constexpr bool operator>=(const T& v, const optional& x) -{ - return bool(x) ? v >= *x : true; -} - -// Comparison of optional with T -template constexpr bool operator==(const optional& x, const T& v) -{ - return bool(x) ? *x == v : false; -} - -template constexpr bool operator==(const T& v, const optional& x) -{ - return bool(x) ? v == *x : false; -} - -template constexpr bool operator!=(const optional& x, const T& v) -{ - return bool(x) ? *x != v : true; -} - -template constexpr bool operator!=(const T& v, const optional& x) -{ - return bool(x) ? v != *x : true; -} - -template constexpr bool operator<(const optional& x, const T& v) -{ - return bool(x) ? *x < v : true; -} - -template constexpr bool operator>(const T& v, const optional& x) -{ - return bool(x) ? v > *x : true; -} - -template constexpr bool operator>(const optional& x, const T& v) -{ - return bool(x) ? *x > v : false; -} - -template constexpr bool operator<(const T& v, const optional& x) -{ - return bool(x) ? v < *x : false; -} - -template constexpr bool operator>=(const optional& x, const T& v) -{ - return bool(x) ? *x >= v : false; -} - -template constexpr bool operator<=(const T& v, const optional& x) -{ - return bool(x) ? v <= *x : false; -} - -template constexpr bool operator<=(const optional& x, const T& v) -{ - return bool(x) ? *x <= v : true; -} - -template constexpr bool operator>=(const T& v, const optional& x) -{ - return bool(x) ? v >= *x : true; -} - - -// 20.5.12, Specialized algorithms -template -void swap(optional& x, optional& y) noexcept(noexcept(x.swap(y))) -{ - x.swap(y); -} - - -template -constexpr optional::type> make_optional(T&& v) -{ - return optional::type>(constexpr_forward(v)); -} - -template -constexpr optional make_optional(reference_wrapper v) -{ - return optional(v.get()); -} - - -} // namespace experimental -} // namespace std - -namespace std -{ - template - struct hash> - { - typedef typename hash::result_type result_type; - typedef std::experimental::optional argument_type; - - constexpr result_type operator()(argument_type const& arg) const { - return arg ? std::hash{}(*arg) : result_type{}; - } - }; - - template - struct hash> - { - typedef typename hash::result_type result_type; - typedef std::experimental::optional argument_type; - - constexpr result_type operator()(argument_type const& arg) const { - return arg ? std::hash{}(*arg) : result_type{}; - } - }; -} - -# undef TR2_OPTIONAL_REQUIRES -# undef TR2_OPTIONAL_ASSERTED_EXPRESSION - -# endif //___OPTIONAL_HPP___ diff --git a/src/3rdparty/optional/ottd_optional.h b/src/3rdparty/optional/ottd_optional.h deleted file mode 100644 index 19b44c5055..0000000000 --- a/src/3rdparty/optional/ottd_optional.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file ottd_optional.h Header to select between native. */ - -#ifndef OTTD_OPTIONAL_H -#define OTTD_OPTIONAL_H - -#if defined(__has_include) -# if __has_include() -# include -# endif -#endif - -#if (__cplusplus >= 201703L) || (defined(__cpp_lib_optional) && __cpp_lib_optional >= 201606L) - -/* Native std::optional. */ -#include -namespace opt = std; - -#else - -/* No std::optional, use local copy instead. */ -#include "optional.hpp" -namespace opt = std::experimental; - -#endif - -#endif /* OTTD_OPTIONAL_H */ diff --git a/src/ini_type.h b/src/ini_type.h index f98b6395b9..b5f8398d97 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -12,7 +12,7 @@ #include "fileio_type.h" #include -#include "3rdparty/optional/ottd_optional.h" +#include /** Types of groups */ enum IniGroupType { @@ -25,7 +25,7 @@ enum IniGroupType { struct IniItem { IniItem *next; ///< The next item in this group std::string name; ///< The name of this item - opt::optional value; ///< The value of this item + std::optional value; ///< The value of this item std::string comment; ///< The comment associated with this item IniItem(struct IniGroup *parent, const std::string &name); From cc1679e3171bf6982164c4072a773fdd687ea885 Mon Sep 17 00:00:00 2001 From: frosch Date: Mon, 14 Dec 2020 22:25:07 +0100 Subject: [PATCH 338/601] Codechange: Apple LLVM fails to implement std::optional::value() also on pretty recent version. Use operator* instead. --- src/base_media_func.h | 6 +++--- src/gfxinit.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/base_media_func.h b/src/base_media_func.h index 02c445c21a..c5e2a6da23 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -55,15 +55,15 @@ bool BaseSet::FillSetDetails(IniFile *ini, const } fetch_metadata("shortname"); - for (uint i = 0; item->value.value()[i] != '\0' && i < 4; i++) { - this->shortname |= ((uint8)item->value.value()[i]) << (i * 8); + for (uint i = 0; (*item->value)[i] != '\0' && i < 4; i++) { + this->shortname |= ((uint8)(*item->value)[i]) << (i * 8); } fetch_metadata("version"); this->version = atoi(item->value->c_str()); item = metadata->GetItem("fallback", false); - this->fallback = (item != nullptr && item->value && item->value.value() != "0" && item->value.value() != "false"); + this->fallback = (item != nullptr && item->value && *item->value != "0" && *item->value != "false"); /* For each of the file types we want to find the file, MD5 checksums and warning messages. */ IniGroup *files = ini->GetGroup("files"); diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index d1d05f4bd0..95c9540959 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -357,11 +357,11 @@ bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *ful IniItem *item; fetch_metadata("palette"); - this->palette = (item->value.value()[0] == 'D' || item->value.value()[0] == 'd') ? PAL_DOS : PAL_WINDOWS; + this->palette = ((*item->value)[0] == 'D' || (*item->value)[0] == 'd') ? PAL_DOS : PAL_WINDOWS; /* Get optional blitter information. */ item = metadata->GetItem("blitter", false); - this->blitter = (item != nullptr && item->value.value()[0] == '3') ? BLT_32BPP : BLT_8BPP; + this->blitter = (item != nullptr && (*item->value)[0] == '3') ? BLT_32BPP : BLT_8BPP; } return ret; } From 79240eab1ee4abb2882a40c7ac18e4915b4dc820 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Tue, 15 Dec 2020 00:22:04 +0100 Subject: [PATCH 339/601] Codechange: Make use of the improved C++17 emplace_back function. --- src/bridge_gui.cpp | 3 +-- src/core/smallmap_type.hpp | 3 +-- src/engine.cpp | 3 +-- src/fios.h | 3 +-- src/industry_gui.cpp | 12 ++++-------- src/newgrf.cpp | 6 ++---- src/newgrf_commons.cpp | 6 ++---- src/saveload/afterload.cpp | 3 +-- src/saveload/engine_sl.cpp | 3 +-- src/saveload/waypoint_sl.cpp | 3 +-- src/settingsgen/settingsgen.cpp | 3 +-- src/stringfilter.cpp | 3 +-- src/tunnelbridge_cmd.cpp | 3 +-- src/viewport.cpp | 12 ++++-------- 14 files changed, 22 insertions(+), 44 deletions(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 44cc99ba3e..a69ed74489 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -433,8 +433,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo type_check = CheckBridgeAvailability(brd_type, bridge_len); if (type_check.Succeeded()) { /* bridge is accepted, add to list */ - /*C++17: BuildBridgeData &item = */ bl->emplace_back(); - BuildBridgeData &item = bl->back(); + BuildBridgeData &item = bl->emplace_back(); item.index = brd_type; item.spec = GetBridgeSpec(brd_type); /* Add to terraforming & bulldozing costs the cost of the diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 931a4848b3..744f9fd265 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -142,8 +142,7 @@ struct SmallMap : std::vector > { for (uint i = 0; i < std::vector::size(); i++) { if (key == std::vector::operator[](i).first) return std::vector::operator[](i).second; } - /*C++17: Pair &n = */ std::vector::emplace_back(); - Pair &n = std::vector::back(); + Pair &n = std::vector::emplace_back(); n.first = key; return n.second; } diff --git a/src/engine.cpp b/src/engine.cpp index 41849b8a21..311a936ed4 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -486,8 +486,7 @@ void EngineOverrideManager::ResetToDefaultMapping() this->clear(); for (VehicleType type = VEH_TRAIN; type <= VEH_AIRCRAFT; type++) { for (uint internal_id = 0; internal_id < _engine_counts[type]; internal_id++) { - /*C++17: EngineIDMapping &eid = */ this->emplace_back(); - EngineIDMapping &eid = this->back(); + EngineIDMapping &eid = this->emplace_back(); eid.type = type; eid.grfid = INVALID_GRFID; eid.internal_id = internal_id; diff --git a/src/fios.h b/src/fios.h index 6a7b6bf01f..259e493b24 100644 --- a/src/fios.h +++ b/src/fios.h @@ -119,8 +119,7 @@ public: */ inline FiosItem *Append() { - /*C++17: return &*/ this->files.emplace_back(); - return &this->files.back(); + return &this->files.emplace_back(); } /** diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index e54b1b2a4b..caa18c8e3e 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2625,8 +2625,7 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.set(it); this->fields.clear(); - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); row.columns[1].MakeEmpty(CFT_SMALL_EMPTY); row.columns[2].MakeEmpty(CFT_SMALL_EMPTY); @@ -2641,8 +2640,7 @@ struct IndustryCargoesWindow : public Window { int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)) + houses_accept; int num_indrows = max(3, max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels. for (int i = 0; i < num_indrows; i++) { - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeEmpty(CFT_EMPTY); row.columns[1].MakeCargo(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); row.columns[2].MakeEmpty(CFT_EMPTY); @@ -2705,8 +2703,7 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.reset(); this->fields.clear(); - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); row.columns[1].MakeEmpty(CFT_SMALL_EMPTY); row.columns[2].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); @@ -2719,8 +2716,7 @@ struct IndustryCargoesWindow : public Window { int num_cust = CountMatchingAcceptingIndustries(&cid, 1) + houses_accept; int num_indrows = max(num_supp, num_cust); for (int i = 0; i < num_indrows; i++) { - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeEmpty(CFT_EMPTY); row.columns[1].MakeCargo(&cid, 1); row.columns[2].MakeEmpty(CFT_EMPTY); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4abbcb3b72..21dc9ffb4e 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1916,8 +1916,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte tmp_layout.clear(); for (;;) { /* no relative bounding box support */ - /*C++17: DrawTileSeqStruct &dtss = */ tmp_layout.emplace_back(); - DrawTileSeqStruct &dtss = tmp_layout.back(); + DrawTileSeqStruct &dtss = tmp_layout.emplace_back(); MemSetT(&dtss, 0); dtss.delta_x = buf->ReadByte(); @@ -5020,8 +5019,7 @@ static void NewSpriteGroup(ByteReader *buf) /* Loop through the var adjusts. Unfortunately we don't know how many we have * from the outset, so we shall have to keep reallocing. */ do { - /*C++17: DeterministicSpriteGroupAdjust &adjust = */ adjusts.emplace_back(); - DeterministicSpriteGroupAdjust &adjust = adjusts.back(); + DeterministicSpriteGroupAdjust &adjust = adjusts.emplace_back(); /* The first var adjust doesn't have an operation specified, so we set it to add. */ adjust.operation = adjusts.size() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index 8209d675cd..64eed8139a 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -664,8 +664,7 @@ uint32 NewGRFSpriteLayout::PrepareLayout(uint32 orig_offset, uint32 newgrf_groun /* Create a copy of the spritelayout, so we can modify some values. * Also include the groundsprite into the sequence for easier processing. */ - /*C++17: DrawTileSeqStruct *result = &*/ result_seq.emplace_back(); - DrawTileSeqStruct *result = &result_seq.back(); + DrawTileSeqStruct *result = &result_seq.emplace_back(); result->image = ground; result->delta_x = 0; result->delta_y = 0; @@ -675,8 +674,7 @@ uint32 NewGRFSpriteLayout::PrepareLayout(uint32 orig_offset, uint32 newgrf_groun foreach_draw_tile_seq(dtss, this->seq) { result_seq.push_back(*dtss); } - result_seq.emplace_back() /*C++17: .MakeTerminator()*/; - result_seq.back().MakeTerminator(); + result_seq.emplace_back().MakeTerminator(); /* Determine the var10 values the action-1-2-3 chains needs to be resolved for, * and apply the default sprite offsets (unless disabled). */ const TileLayoutRegisters *regs = this->registers; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 163ded73cd..7d1e70212a 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2924,8 +2924,7 @@ bool AfterLoadGame() cur_skip = prev_tile_skip; } - /*C++17: uint &this_skip = */ skip_frames.push_back(prev_tile_skip); - uint &this_skip = skip_frames.back(); + uint &this_skip = skip_frames.emplace_back(prev_tile_skip); /* The following 3 curves now take longer than before */ switch (u->state) { diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 863aabff07..b0b9d02d4d 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -191,8 +191,7 @@ static void Load_EIDS() _engine_mngr.clear(); while (SlIterateArray() != -1) { - /*C++17: EngineIDMapping *eid = &*/ _engine_mngr.emplace_back(); - EngineIDMapping *eid = &_engine_mngr.back(); + EngineIDMapping *eid = &_engine_mngr.emplace_back(); SlObject(eid, _engine_id_mapping_desc); } } diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 4117a591ee..663c61f6a8 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -192,8 +192,7 @@ static void Load_WAYP() int index; while ((index = SlIterateArray()) != -1) { - /*C++17: OldWaypoint *wp = &*/ _old_waypoints.emplace_back(); - OldWaypoint *wp = &_old_waypoints.back(); + OldWaypoint *wp = &_old_waypoints.emplace_back(); wp->index = index; SlObject(wp, _old_waypoint_desc); diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 764f370bde..b2a3c76f64 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -118,8 +118,7 @@ public: text += stored_size; } while (length > 0) { - /*C++17: OutputBuffer &block =*/ this->output_buffer.emplace_back(); - OutputBuffer &block = this->output_buffer.back(); + OutputBuffer &block = this->output_buffer.emplace_back(); block.Clear(); // Initialize the new block. size_t stored_size = block.Add(text, length); length -= stored_size; diff --git a/src/stringfilter.cpp b/src/stringfilter.cpp index 30876a82d8..4765a880e1 100644 --- a/src/stringfilter.cpp +++ b/src/stringfilter.cpp @@ -74,8 +74,7 @@ void StringFilter::SetFilterTerm(const char *str) /* Add to word */ if (word == nullptr) { - /*C++17: word = &*/ this->word_index.push_back({dest, false}); - word = &this->word_index.back(); + word = &this->word_index.emplace_back(WordState{ dest, false }); } memcpy(dest, pos, len); diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 1a66d530f0..47bb34f194 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -710,8 +710,7 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, DoCommandFlag flags, uint32 p1, * Do this for all tiles (like trees), not only objects. */ ClearedObjectArea *coa = FindClearedObject(end_tile); if (coa == nullptr) { - /*C++17: coa = &*/ _cleared_object_areas.push_back({end_tile, TileArea(end_tile, 1, 1)}); - coa = &_cleared_object_areas.back(); + coa = &_cleared_object_areas.emplace_back(ClearedObjectArea{ end_tile, TileArea(end_tile, 1, 1) }); } /* Hide the tile from the terraforming command */ diff --git a/src/viewport.cpp b/src/viewport.cpp index e28a2e606e..bf1f34acd6 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -498,8 +498,7 @@ static void AddTileSpriteToDraw(SpriteID image, PaletteID pal, int32 x, int32 y, { assert((image & SPRITE_MASK) < MAX_SPRITES); - /*C++17: TileSpriteToDraw &ts = */ _vd.tile_sprites_to_draw.emplace_back(); - TileSpriteToDraw &ts = _vd.tile_sprites_to_draw.back(); + TileSpriteToDraw &ts = _vd.tile_sprites_to_draw.emplace_back(); ts.image = image; ts.pal = pal; ts.sub = sub; @@ -708,8 +707,7 @@ void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, return; } - /*C++17: ParentSpriteToDraw &ps = */ _vd.parent_sprites_to_draw.emplace_back(); - ParentSpriteToDraw &ps = _vd.parent_sprites_to_draw.back(); + ParentSpriteToDraw &ps = _vd.parent_sprites_to_draw.emplace_back(); ps.x = tmp_x; ps.y = tmp_y; @@ -827,8 +825,7 @@ void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool tran *_vd.last_child = (uint)_vd.child_screen_sprites_to_draw.size(); - /*C++17: ChildScreenSpriteToDraw &cs = */ _vd.child_screen_sprites_to_draw.emplace_back(); - ChildScreenSpriteToDraw &cs = _vd.child_screen_sprites_to_draw.back(); + ChildScreenSpriteToDraw &cs = _vd.child_screen_sprites_to_draw.emplace_back(); cs.image = image; cs.pal = pal; cs.sub = sub; @@ -847,8 +844,7 @@ void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool tran static void AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2, Colours colour, uint16 width) { assert(width != 0); - /*C++17: StringSpriteToDraw &ss = */ _vd.string_sprites_to_draw.emplace_back(); - StringSpriteToDraw &ss = _vd.string_sprites_to_draw.back(); + StringSpriteToDraw &ss = _vd.string_sprites_to_draw.emplace_back(); ss.string = string; ss.x = x; ss.y = y; From b1cf79da5b2c9b3a920d8489513f6995cc53e48c Mon Sep 17 00:00:00 2001 From: jostephd Date: Mon, 14 Dec 2020 23:39:57 +0000 Subject: [PATCH 340/601] Feature: new velocity unit "tiles/day" (#8278) --- src/lang/english.txt | 2 ++ src/strings.cpp | 31 +++++++++++++++++-------------- src/table/gameopt_settings.ini | 2 +- src/table/settings.ini | 2 +- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 142cc83f97..b8756049d2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Default STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}tiles/day STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp @@ -1678,6 +1679,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Whenever a spee STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Game units (tiles/day) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Vehicle power units: {STRING2} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Whenever a vehicle's power is shown in the user interface, show it in the selected units diff --git a/src/strings.cpp b/src/strings.cpp index f7ef999859..c2edf8e171 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -665,6 +665,7 @@ struct UnitConversion { struct Units { UnitConversion c; ///< Conversion StringID s; ///< String for the unit + unsigned int decimal_places; ///< Number of decimal places embedded in the value. For example, 1 if the value is in tenths, and 3 if the value is in thousandths. }; /** Information about a specific unit system with a long variant. */ @@ -676,16 +677,17 @@ struct UnitsLong { /** Unit conversions for velocity. */ static const Units _units_velocity[] = { - { { 1, 0}, STR_UNITS_VELOCITY_IMPERIAL }, - { { 103, 6}, STR_UNITS_VELOCITY_METRIC }, - { {1831, 12}, STR_UNITS_VELOCITY_SI }, + { { 1, 0}, STR_UNITS_VELOCITY_IMPERIAL, 0 }, + { { 103, 6}, STR_UNITS_VELOCITY_METRIC, 0 }, + { { 1831, 12}, STR_UNITS_VELOCITY_SI, 0 }, + { {37888, 16}, STR_UNITS_VELOCITY_GAMEUNITS, 1 }, }; /** Unit conversions for velocity. */ static const Units _units_power[] = { - { { 1, 0}, STR_UNITS_POWER_IMPERIAL }, - { {4153, 12}, STR_UNITS_POWER_METRIC }, - { {6109, 13}, STR_UNITS_POWER_SI }, + { { 1, 0}, STR_UNITS_POWER_IMPERIAL, 0 }, + { {4153, 12}, STR_UNITS_POWER_METRIC, 0 }, + { {6109, 13}, STR_UNITS_POWER_SI, 0 }, }; /** Unit conversions for weight. */ @@ -704,16 +706,16 @@ static const UnitsLong _units_volume[] = { /** Unit conversions for force. */ static const Units _units_force[] = { - { {3597, 4}, STR_UNITS_FORCE_IMPERIAL }, - { {3263, 5}, STR_UNITS_FORCE_METRIC }, - { { 1, 0}, STR_UNITS_FORCE_SI }, + { {3597, 4}, STR_UNITS_FORCE_IMPERIAL, 0 }, + { {3263, 5}, STR_UNITS_FORCE_METRIC, 0 }, + { { 1, 0}, STR_UNITS_FORCE_SI, 0 }, }; /** Unit conversions for height. */ static const Units _units_height[] = { - { { 3, 0}, STR_UNITS_HEIGHT_IMPERIAL }, // "Wrong" conversion factor for more nicer GUI values - { { 1, 0}, STR_UNITS_HEIGHT_METRIC }, - { { 1, 0}, STR_UNITS_HEIGHT_SI }, + { { 3, 0}, STR_UNITS_HEIGHT_IMPERIAL, 0 }, // "Wrong" conversion factor for more nicer GUI values + { { 1, 0}, STR_UNITS_HEIGHT_METRIC, 0 }, + { { 1, 0}, STR_UNITS_HEIGHT_SI, 0 }, }; /** @@ -1228,8 +1230,9 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_VELOCITY: { // {VELOCITY} assert(_settings_game.locale.units_velocity < lengthof(_units_velocity)); - int64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(args->GetInt64(SCC_VELOCITY))}; - StringParameters tmp_params(args_array); + unsigned int decimal_places = _units_velocity[_settings_game.locale.units_velocity].decimal_places; + uint64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(args->GetInt64(SCC_VELOCITY)), decimal_places}; + StringParameters tmp_params(args_array, decimal_places ? 2 : 1, nullptr); buff = FormatString(buff, GetStringPtr(_units_velocity[_settings_game.locale.units_velocity].s), &tmp_params, last); break; } diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini index d1634e349d..08253be93c 100644 --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -13,7 +13,7 @@ uint8 _old_units; ///< Old units from old s /* Most of these strings are used both for gameopt-backward compatibility * and the settings tables. The rest is here for consistency. */ static const char *_locale_currencies = "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|RON|RUR|SIT|SEK|YTL|SKK|BRL|EEK|custom"; -static const char *_locale_units = "imperial|metric|si"; +static const char *_locale_units = "imperial|metric|si|gameunits"; static const char *_town_names = "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovak|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan"; static const char *_climates = "temperate|arctic|tropic|toyland"; static const char *_autosave_interval = "off|monthly|quarterly|half year|yearly"; diff --git a/src/table/settings.ini b/src/table/settings.ini index bba7d61e82..b578d462b5 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2475,7 +2475,7 @@ from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 1 -max = 2 +max = 3 full = _locale_units proc = RedrawScreen cat = SC_BASIC From 8c42f3a8d4a93fc2c613fa76b6ea9eb7dc277af1 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 14 Dec 2020 23:45:41 +0000 Subject: [PATCH 341/601] Update: Translations from eints french: 1 change by glx22 --- src/lang/afrikaans.txt | 2 -- src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 2 -- src/lang/belarusian.txt | 2 -- src/lang/brazilian_portuguese.txt | 2 -- src/lang/bulgarian.txt | 2 -- src/lang/catalan.txt | 2 -- src/lang/croatian.txt | 2 -- src/lang/czech.txt | 2 -- src/lang/danish.txt | 2 -- src/lang/dutch.txt | 2 -- src/lang/english_AU.txt | 2 -- src/lang/english_US.txt | 2 -- src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 2 -- src/lang/faroese.txt | 2 -- src/lang/finnish.txt | 2 -- src/lang/french.txt | 3 +-- src/lang/gaelic.txt | 2 -- src/lang/galician.txt | 2 -- src/lang/german.txt | 2 -- src/lang/greek.txt | 2 -- src/lang/hebrew.txt | 2 -- src/lang/hungarian.txt | 2 -- src/lang/icelandic.txt | 2 -- src/lang/indonesian.txt | 2 -- src/lang/irish.txt | 2 -- src/lang/italian.txt | 2 -- src/lang/japanese.txt | 2 -- src/lang/korean.txt | 2 -- src/lang/latin.txt | 2 -- src/lang/latvian.txt | 2 -- src/lang/lithuanian.txt | 2 -- src/lang/luxembourgish.txt | 2 -- src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 2 -- src/lang/norwegian_nynorsk.txt | 1 - src/lang/polish.txt | 2 -- src/lang/portuguese.txt | 2 -- src/lang/romanian.txt | 2 -- src/lang/russian.txt | 2 -- src/lang/serbian.txt | 2 -- src/lang/simplified_chinese.txt | 2 -- src/lang/slovak.txt | 2 -- src/lang/slovenian.txt | 2 -- src/lang/spanish.txt | 2 -- src/lang/spanish_MX.txt | 2 -- src/lang/swedish.txt | 2 -- src/lang/tamil.txt | 1 - src/lang/thai.txt | 2 -- src/lang/traditional_chinese.txt | 2 -- src/lang/turkish.txt | 2 -- src/lang/ukrainian.txt | 2 -- src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/unfinished/urdu.txt | 1 - src/lang/vietnamese.txt | 2 -- src/lang/welsh.txt | 2 -- 58 files changed, 1 insertion(+), 108 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 215c4dfcba..abb65269a5 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1545,8 +1545,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Telling jaarein STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Die jaar wat die speletjie eindig vir telling doeleindes. Aan die einde van hierdie jaar word die maatskappy se telling aangeteken en die skerm met 'n hoogste telling word vertoon, maar die spelers kan daarna speel.{} As dit voor die beginjaar is, word die skerm met 'n hoogste telling nooit vertoon nie. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktiveer geleike ekonomie (meer, kleiner veranderings): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :As dit geaktiveer is sal nywerheidsvervaarding meer gereeld verander met kleiner veranderinge elke keer. Hierdie stelling het gewoonlik geen effek met nywerhede van NewGRFs nie. STR_CONFIG_SETTING_ALLOW_SHARES :Laat die koop van aandeele van ander maatskappye toe: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :As dit geaktiveer is, kan aandele in maatskappye gekoop en verkoop word. Aandele is net in maatskappye beskikbaar na 'n sekere aantal jaar. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum maatskappyouderdom om aandele te verhandel: {STRING} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 36d0fcd69a..c5df571ea2 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1281,7 +1281,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :ممتلئ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :الاخبار الملونة تظهر في: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :سنة البدايه: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :السماح بأقتصاد ثابت )تغيرات صغيرة اكثر): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :السماح باستخدام اشارات واجهة المستخدم الرسومية: {STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index d42ff546a4..088783db8a 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1452,8 +1452,6 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kolorezko albis STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Egunkarien mezuak kolorean imprimatuko diren urtea. Urte hau baino lehenago txuri/beltz monokromoa erabiliko da STR_CONFIG_SETTING_STARTING_YEAR :Hasierako urtea: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gaitu ekonomia leuna (aldaketa gehiago baina txikiagoak): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Gaitua dagoenean, industrien ekoizpena gehiagotan aldatuko da baina urrats txikiagotan. Aukera honek gehienetan ez du eraginik izango industriak NewGRF batek ezartzen baditu STR_CONFIG_SETTING_ALLOW_SHARES :Beste konpainien akzioak erostea baimendu: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Gaitua dagoenean, konpainiaren akzioak erostea eta saltzea baimendu. Konpainiak akzioak izateko gutxiengo adin batera iritsi beharko dira STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Elikadura sistemetan ordaindu beharreko irabazien ehunekoa: {STRING} diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 1230e327c9..29df4c3c2a 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1854,8 +1854,6 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Год, у як STR_CONFIG_SETTING_STARTING_YEAR :Год пачатку гульні: {STRING} 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} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Калі ўключана, дазваляецца купляць і прадаваць долі ў кампаніях. Акцыі даступны для кампаніяў, якія дасягнулі пэўнага ўзросту. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мін. узрост кампаніі для выпуску акцыяў: {STRING} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index ee695d2385..040a6e0499 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1554,8 +1554,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final deste ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{} Se isso for antes do ano inicial, a tela de pontuação máxima nunca será exibida. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Ativar economia regular (alterações menores): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quando ativado, a produção de indústrias muda com mais frequência, e mais sutilmente STR_CONFIG_SETTING_ALLOW_SHARES :Permite comprar ações de outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se ativado, permite a compra e venda de ações de companhias. Ações de outras empresas poderão serem compradas após um período de tempo após a fundação da empresa STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da companhia para trocar ações: {STRING} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 9987253fc4..37ead463bd 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1501,8 +1501,6 @@ 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_SMOOTH_ECONOMY :Разреши плавна икономика (повече по-малки промени): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ако тази опция бъде активирана, промишленото производство ще се променя по-често и по-плавно. Тази опция обикновено няма ефект, ако даденият вид промишленост е предоставен от NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Разреши купуване на акции от други компании: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ако тази опция бъде активирана, ще можете да купувате и продавате дялове на компании. Това ще бъде възможно единствено когато дадената компания достигне определена възраст STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от leg profit to pay in feeder systems: {STRING} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 0d9aa9bece..958632690b 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1554,8 +1554,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Any de puntuaci STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Estableix l'any en què finalitza la partida i es puntua les companyies. Al final d'aquest any, la puntuació de la companyia es guarda i es mostra a la llista de classificació, però els jugadors poden continuar jugant.{}Si l'any de finalització és anterior a l'any d'inici, no es guardaran les puntuacions ni es mostrarà la llista de classificació. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activa economia suau (més canvis però més petits): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quan està activat, els canvis de producció de la indústria són més habituals, i en passos més petits. Aquest paràmetre usualment no té efecte, si el tipus d'indústria estan proveïts per un NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permet comprar participacions d'altres companyies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Permet comprar i vendre accions de les companyies. Les accions només estan disponibles per companyies d'una certa edat. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edat mínima de la companyia per negociar participacions: {STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 42734c289f..8b44a0aea0 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1649,8 +1649,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Godina kraja bo STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Godina koje igra završava u smislu bodovanja. Na kraju ove godine, bilježe se bodovi kompanije i prikazuje se tablica najviših bodova ali igrači mogu nastaviti igru.{}Ako je ovo prije početne godine, tablica najviših bodova se nikada neće prikazati. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikada -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabilno gospodarstvo (više manjih izazova): {STRING} -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} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 8b55d4db7e..4f03a803d0 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1640,8 +1640,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Rok vyhodnocen STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok, kdy je ve hře uzavřeno hodnocení společností. Na konci tohoto roku je zaznamenáno skóre společností a je zobrazena tabulka nejlepších společností, ale ve hře je možné pokračovat i dál.{}Pokud je nastaven rok před rokem počátku hry, tabulka s hodnocením nebude zobrazena nikdy. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Plynulé změny ekonomiky (více menších změn): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Pokud je zapnuto, produkce průmyslu se mění častěji ale změny jsou menší. Toto nastavení většinou nemá vliv na průmysl, který je přidaný novou grafikou STR_CONFIG_SETTING_ALLOW_SHARES :Povolit kupování podílu z ostatních společností: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Pokud je zapnuto, umožní kupovaní akcií ve společnostech. Akcie jsou k dispozici pouze u společností od určitého stáří STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimální stáří společnosti pro obchod s akciemi: {STRING} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index eadbe1b088..10852b899f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Slutår for poi STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årstal hvor spillet slutter pointoptælling. Ved slutningen af dette år bliver selskabets point optaget, og topresultater-skærmen bliver vist. Spillerne kan fortsætte med at spille efter dette.{}Hvis dette er før spillets start år, bliver topresultater-skærmen aldrig vist. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktiver rolig økonomi (flere små ændringer): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når slået til, ændre industriproduktion oftere, og i små trin. Denne indstilling har normalt ingen effekt, hvis industrityper er fastsat af NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillad at købe aktier i andre selskaber: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Hvis aktiveret, tillades køb og salg af selskabsaktier. Aktier vil kun være tilgængelige for selskaber der er nået en hvis alder STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Mindste selskabsalder for aktiehandel: {STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index b2fcf6260d..e7d28ce112 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Eindjaar voor s STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jaar dat het spel eindigt ten behoeve van de score. Aan het einde van dit jaar wordt de score van het bedrijf vastgelegd en verschijnt het venster met topscores. De spelers kunnen echter doorgaan met spelen.{}Als dit voor het startjaar ligt, verschijnt het venster met topscores niet. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Vloeiende economie inschakelen (meer, kleinere veranderingen): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wanneer dit is ingeschakeld, verandert de productie van industrieën vaker en in kleinere stappen. Deze instelling heeft meestal geen effect als de industriesoorten worden geleverd door een NewGRF. STR_CONFIG_SETTING_ALLOW_SHARES :Kopen van aandelen in andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingeschakeld is het toegestaan om bedrijfsaandelen te kopen en te verkopen. Aandelen zullen alleen beschikbaar zijn voor bedrijven die een bepaalde leeftijd hebben bereikt STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimale leeftijd van bedrijf om aandelen te kunnen verhandelen: {STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 3b1f923fc4..177c9eb2b2 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1485,8 +1485,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Full STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Coloured news appears in: {STRING} 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: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Enable smooth economy (more, smaller changes): {STRING} -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: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of leg profit to pay in feeder systems: {STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index e9ac45f263..b633514294 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1551,8 +1551,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Scoring end yea 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): {STRING} -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: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index cb2bb5a3d2..6a03087e33 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1297,7 +1297,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Plene STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Koloraj novaĵoj aperas en: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :Komenca jaro: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktivigu glatan ekonomion (pliaj, etaj ŝanĝoj): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Permesu aĉetadon de dividaĵoj en aliaj kompanioj: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Aŭtomate konstruu semaforojn antaŭ: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Ebligu la signal-GUI-on: {STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 6fd55dc426..383357dbc2 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1574,8 +1574,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Täielik STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Värvilised uudised ilmuvad aastast {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Värviliste uudiste ilmumise algusaasta. Varasematel aastatel ilmuvad uudised must-valgelt STR_CONFIG_SETTING_STARTING_YEAR :Alustamise aeg: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Sujuv majandus (rohkem, kuid väikesed muutused): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Toodangumahtude muutused on väiksemad ja sagedasemad. Juhul kui tööstused tulevad NewGRF-ist ei oma see seade tavaliselt mõju STR_CONFIG_SETTING_ALLOW_SHARES :Aktsiatehingud teiste ettevõtetega: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kui on aktiveeritud siis on ettevõtte aktsiate ostmine ja müümine lubatud. Aktsiad on saadaval ainult ettevõtetel mille vanus on üle teatud piiri STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Protsent tuludest mis läheb 'kanna edasi' süsteemis alumistesse lülidesse: {STRING} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 80805b1301..4f9592eb60 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1441,8 +1441,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Fult STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Litaði tíðindir koma frám í: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ári har tíðindabløð verða prentaði í litum. Áðrenn hetta ári eru tíðindabløð svørt/hvít STR_CONFIG_SETTING_STARTING_YEAR :Byrjunar ár: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gilda mjúkan búskap (fleiri, smærri broytingar): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Um gilda, ídnaðar framleiðsla broytist títtari og í smærri stigum. Henda ásetanin hevur vanliga onga ávirkan um ídnaðinir koma frá einum NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Loyv keypi av partabrøvum frá øðrum fyritøkum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Um gilda, er loyvt at keypa og selja fyritøku partabrøv. Partabrøv verða einans tøk hjá fyritøkum ið hava rokki ein ávísan aldur STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentpartur av deilvinningi at gjalda í veitingar kervum: {STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index dd1670ccb2..2c19c6e80b 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Pistelaskun pä 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} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Mikäli käytössä, toisten yhtiöiden osakkeiden ostaminen ja myyminen on mahdollista. Osakkeet ovat saatavilla vain yhtiöille, jotka ovat saavuttaneet tietyn iän STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Yhtiön vähimmäisikä osakekaupoille: {STRING} diff --git a/src/lang/french.txt b/src/lang/french.txt index 2c025c586e..78ecd8dd0c 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1554,8 +1554,7 @@ STR_CONFIG_SETTING_ENDING_YEAR :Année de fin d 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_ECONOMY_TYPE :Type d'économie{NBSP}: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Permettre d'acheter des actions d'autres compagnies{NBSP}: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Lorsqu'il est activé, l'achat et la vente des parts de compagnie sont autorisées. Les parts ne seront disponibles que pour les compagnies ayant atteint un certain âge STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Âge minimum de la compagnie pour la vente d'actions{NBSP}: {STRING} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index f00a366680..37f180cce3 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1716,8 +1716,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Slàn STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Nochdaidh naidheachdan dathte ann an: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Am bliadhna a thèid pàipear-naidheachd dathte a chlò-bhualadh a' chiad turas. Bidh na pàipearan-naidheachd ann an dubh is geal roimhe seo STR_CONFIG_SETTING_STARTING_YEAR :Bliadhna tòiseachaidh: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Cuir eaconamaidh rèidh an comas (atharraichean nas trice is nas beaga): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ma tha seo air, atharraichidh saothrachadh nan gnìomhachasan nas trice is le ceuman nas lugha. Chan eil buaidh aig seo air seòrsaichean gnìomhachais a chaidh a sholar le NewGRF mar as trice STR_CONFIG_SETTING_ALLOW_SHARES :Ceadaich gun tèid stoca a cheannach bho chompanaidhean eile: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ma tha seo air, ’s urrainn dhut stocan chompanaidhean a cheannach is a reic. Cha bhi stoca ri làimh ach aig companaidhean aig a bheil aois shònraichte STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :A' cheudad dhen phrothaid a gheibh carbadan le tar-aiseag carago: {STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 4ee552731e..577789b6b3 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1546,8 +1546,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Data de aparición das novas en cor: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano no que os avisos dos xornais son impresos en cor. Antes deste ano, emprégase monocromo branco e negro STR_CONFIG_SETTING_STARTING_YEAR :Data de comezo: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Habilita-la economía "estable" (máis cambios, pero máis pequenos): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Cando se activa, as producións industriais cambian máis frecuentemente, e a pasos máis curtos STR_CONFIG_SETTING_ALLOW_SHARES :Permiti-la compra de accións de outras compañías: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cando se activa, permite comprar ou vender accións da compañía. As accións só estarán dispoñíbeis para compañías que acaden certa idade STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da compañía para compraventa de accións: {STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 1660f010ef..2d1ea45741 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1541,8 +1541,6 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jahr in dem die STR_CONFIG_SETTING_STARTING_YEAR :Startdatum: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Feinere Wirtschaft aktivieren (mehrere, kleinere Veränderungen): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wird diese Option ausgewählt, ändert sich die Produktionsmenge der Industrien häufiger, aber dafür in kleineren Schritten. Diese Einstellung hat gewöhnlicherweise KEINEN Effekt, wenn die Industrien von NewGRFs bereitgestellt werden STR_CONFIG_SETTING_ALLOW_SHARES :Handel mit Firmenanteilen erlauben: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Erlaube das Kaufen und Verkaufen von Firmenanteilen. Firmenanteile sind nur verfügbar für Firmen, die hinreichend lange existieren STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimales Alter einer Firma, um an der Börse gehandelt zu werden: {STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 9f567b9c50..65e565e3e8 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1641,8 +1641,6 @@ 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_SMOOTH_ECONOMY :Ενεργοποίηση ομαλής οικονομίας (περισσότερες, μικρότερες αλλαγές): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Όταν είναι ενεργοποιημένη, η παραγωγή των βιομηχανιών αλλάζει συχνότερα και σε μικρότερα βήματα. Αυτή η ρύθμιση συνήθως δεν έχει καμία επίδραση όταν οι τύποι των βιομηχανιών παρέχονται από NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Ενεργοποίηση της δυνατότητας αγοράς μετοχών από άλλες εταιρίες: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Όταν είναι ενεργοποιημένη, επιτρέπεται η αγοραπωλησία εταιρικών μετοχών. Οι μετοχές θα είναι διαθέσιμες μόνο όταν οι εταιρείες φτάνουν μια ορισμένη ηλικία STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Το ποσοστό κέρδους από το σκέλος μεταφοράς στα συστήματα τροφοδότησης: {STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index eebb7d78a9..2bdba01d9d 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1531,8 +1531,6 @@ 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_SMOOTH_ECONOMY :אפשר כלכלה עדינה (יותר, שינויים קטנים יותר): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :כאשר מאופשר, הייצור של תעשיה משתנה לעיתים קרובות יותר, ובצעדים קטנים יותר. להגדרה זו בדרך כלל אין שום השפעה אם סוגי תעשיות מסופקים ע"י NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :אפשר קניית מניות מחברות אחרות: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :כאשר מאופשר, מתיר קנייה ומכירה של מניות של חברות. מניות יהיו זמינות רק עבור חברות המגיעות לגיל מסוים STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :אחוז הרווח מקטע נסיעה לתשלום במערכות הזנה: {STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 4dbbbf8e9b..8520f8fead 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1617,8 +1617,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Játék végi p STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :A játék ebben az évben ér véget pontozás szempontjából. Ennek az évnek a végén a vállalat teljesítménypontszáma rögzítésre kerül, és adott esetben megjelenik a rekord táblán, de a játékosok ezután folytathatják a játékot.{}Ha ez a kezdő év elé van állítva, akkor a rekord tábla sosem jelenik meg. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Soha -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Egyenletes gazdaság (több, kisebb változás): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Bekapcsolva a gazdasági épületek termelése gyakrabban és kisebb lépésekben változik. Ennek a beállításnak általában nincs hatása, ha a gazdasági épületeket NewGRF nyújta STR_CONFIG_SETTING_ALLOW_SHARES :Más vállalatokból lehet részvényt vásárolni: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Bekapcsolva engedélyezi más vállalatok részvényeinek megvásárlását. A részvények csak akkor elérhetőek, ha a vállalat elért egy bizonyos kort STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Vállalatok minimális életkora részvénykibocsátáshoz: {STRING} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 1cdc2c3c9d..f25b2d3154 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1440,8 +1440,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Allt STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Fréttir byrja að birtast í lit árið: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Árið sem tilkynningar í dagblöðuðum byrja að vera í lit. Fram að þessum tíma eru blöð í svart/hvítu STR_CONFIG_SETTING_STARTING_YEAR :Upphafsár: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Virkja jafnan efnahag (fleiri og minni breytingar): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ef þessi stilling er virk breytist framleiðsla í iðnaði oftar og í smærri skrefum. Þessi stilling hefur yfirleitt engin áhrif ef tegund iðnaðar er ákveðinn með NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Leyfa hlutabréfakaup í öðrum fyrirtækjum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ef þessi stilling er virk er hægt að kaupa og selja hlutabréf í fyrirtækjum. Hlutabréf eru aðeins aðgengileg fyrir fyrirtæki sem hafa náð ákveðnum aldri STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Hlutfall hagnaðar sem greiðist til tengiþjónustu: {STRING} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index e5e1fae79b..70a240208e 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Penilaian akhir STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Tahun pertandingan berakhir untuk tujuan mencetak gol. Pada akhir tahun ini, skor perusahaan dicatat dan layar skor tertinggi ditampilkan, tetapi para pemain dapat terus bermain setelah itu.{} Jika ini sebelum tahun mulai, layar skor tinggi tidak pernah ditampilkan. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Tidak pernah -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktifkan pertumbuhan ekonomi yang stabil (jarang berubah): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ketika diaktifkan, produksi industri mengalami perubahan lebih sering, dalam gerakan kecil. Pengaturan tidak berpengaruh jika jenis industri disediakan oleh NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Ijinkan pembelian saham perusahaan lain: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Jika diaktifkan, pemain dibolehkan membeli saham suatu perusahaan. Saham hanya bisa dibeli saat perusahaan memasuki umur tertentu STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Usia minimum perusahaan untuk memperdagangkan saham: {STRING} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 63de2d9172..527daebf1b 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1506,8 +1506,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Iomlán STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Bíonn nuacht daite ann don chéad uair in: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :An bhliain a thosaítear ar fhógraí nuachtáin daite a chlóbhualadh. Roimh an bhliain sin, úsáidtear dubh/bán monacrómach STR_CONFIG_SETTING_STARTING_YEAR :Bliain tosaigh: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Cumasaigh geilleagar níos míne (tuilleadh athruithe, agus iad níos lú): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Má dhéantar é a chumasú, athraíonn táirgeadh na dtionscal níos minice, agus i gcéimeanna níos lú. Is iondúil nach mbíonn aon tionchar ag an socrú seo má chuirtear na cineálacha tioinscail ar fáil in NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Ceadaigh scaireanna a cheannach ó chuideachtaí eile: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Má tá sé cumasaithe, tá cead scaireanna i gcuideachta a cheannach agus a dhíol. Ní bheidh scaireanna ar fáil ach do chuideachtaí a bhfuil aois áirithe bainte amach acu STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :An céatadán den bhrabús a íocfar ar chuid den turas i gcórais fhriothálacha: {STRING} diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 04d9da9b22..94784dc454 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1577,8 +1577,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Punteggi a fine STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Anno in cui il gioco finisce per poter calcolare i punteggi. Alla fine di ques'tanno il punteggio della compagnia viene registrato e viene mostrata la schermata con i punteggi più alti, ma il giocatore può continuare a giocare anche dopo.{}Se quest'anno precede quello di inizio, la schermata dei punteggi non verrà mai mostrata. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Abilita economia fluida (cambiamenti piccoli e frequenti): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Se abilitata, la produzione industriale cambia più spesso e a passi più piccoli. Questa impostazione non ha in genere effetto per i tipi di industria aggiunti da un NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permetti l'acquisto di azioni di altre compagnie: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se abilitata, consente l'acquisto e la vendita di azioni delle compagnie. Le azioni sono disponibili solo per le compagnie che hanno raggiunto una certa età minima STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Età minima della compagnia per lo scambio delle sue azioni: {STRING} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 9a1a148e21..5a157e91df 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1506,8 +1506,6 @@ 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_SMOOTH_ECONOMY :緩やかな経済変動: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :有効にすると、一次産業での生産量はより小幅な変動がより頻繁に起こるようになります。この設定はNewGRFで提供されるような、デフォルト以外の産業に対してはほとんど効果がありません STR_CONFIG_SETTING_ALLOW_SHARES :他社株の取引許容: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :有効にすると、ライバル会社の株式を取引できるようになります。この設定を有効にしても、目的の社が設立から丸5年経過していない場合は取引できません STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :区間払いの割合: {STRING} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index aaee99eae3..ab2089ac48 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1554,8 +1554,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :게임 종료 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} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :이 설정을 켜면, 회사의 지분을 거래할 수 있게 됩니다. 회사의 지분을 거래하려면 해당 회사가 어느 정도 오래되어야 합니다. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index fc0aa1e5f1..3fe5a1129b 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1719,8 +1719,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completa STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Ephemeris colorata apparet anno: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Eligere annum in quo nuntia periodicorum colorata apparet. Antea, nuntia nigra albaque sunt STR_CONFIG_SETTING_STARTING_YEAR :Annus initii: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Sinere oeconomiam teretem esse (i.e. plures ac minores mutationes): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Electa, productio industriarum saepius mutat, et minores per gradus. Sed haec electio nihil affert si industriae apparatae sunt a NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Sinere mercari sortes societatum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Sinere mercari sortes a societatibus. Sortes societatum satis aetatis modo mercari licet STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Centesimae partes lucri pendenda in translatione: {STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index fc0d6b3bcd..5a9c86f247 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1555,8 +1555,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas b STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Spēles beigas gads (tiek izmantots rezultāta noteikšanai). Šī gada beigās uzņēmuma rezultāti tiek ierakstīti un uz ekrāna tiek parādīti labākie rezultāti, bet spēlētāji var turpināt spēlēt arī pēc šī datuma.{}Ja tas ir norādīts pirms spēles sākuma datuma, labākie rezultāti nekad netiek parādīti. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ja ieslēgts, ražošanas izmaiņas notiek biežāk un ar mazākiem soļiem. Šim iestatījumam parasti nav ietekmes, ja ražotņu veidi ir ieviesti ar NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Atļaut akciju pirkšanu no citiem uzņēmumiem: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, ir atļauts pirkt un pārdodot uzņēmumu akcijas. Akcijas būs pieejamas tikai atbilstošu vecumu sasniegušiem uzņēmumiem STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 0a5619885b..1e052710a1 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1721,8 +1721,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Pilnas STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Spalvotos naujienos atsiranda: {STRING} metais STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Metai, kai laikraščių antraštės tampa spalvotos. Iki tol jos būna monochominės STR_CONFIG_SETTING_STARTING_YEAR :Žaidimo pradžia: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Tolygi ekonomika (daug, bet nežymių pokyčių): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Įgalinus nuostatą pramonės įmonių gamybos pajėgumai kis dažniau ir mažesniais žingsniais. Ši nuostata greičiausiai neturės jokios įtakos, jei pramonės įmonė yra aprašyta papildomame plėtinyjeipai yra numatyti NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Leisti pirkti kitų kompanijų akcijas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Leisti pirkti bei parduoti kitų kompanijų akcijas. Akcijos yra platinamos tik įmonei sulaukus tam tikro amžiaus STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Grynojo pelno dalis, mokama tiekėjų sistemoms: {STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 638e1b49b4..d1fc27a6bc 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1552,8 +1552,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :End-Joer vum Sc 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} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 4358dfdaf8..051bb4f3b9 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1365,7 +1365,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Penuh STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Berita berwarna muncul pada tahun: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :Tahun permulaan: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gunakan ekonomi baik (perubahan yang lebih kecil): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Benarkan membeli saham syarikat lain: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Bina semafor secara automatik sebelum: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Tetapkan tahun apabila isyarat berjenis elektrik digunakan untuk landasan. Sebelum tahun ini, isyarat bukan elektrik akan digunakan (memiliki fungsi yang sama, tetapi berlainan reka bentuk) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index f8e19bcef2..474d6c2b64 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1555,8 +1555,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Poengsum ved sl STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Året spillet slutter med tanke på poeng. På slutten av dette året, vil firmaets poengsum bli lagret og tavlen med høyeste poengsummer vil vises. Spilleren kan fortsette å spille etter dette.{}Hvis dette er før start året, vil tavlen med høyeste poengsummer aldri vises. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldri -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jevn økonomi (flere, mindre endringer): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når denne er aktivert, endrer industriproduksjonen seg oftere, og i mindre trinn. Denne innstillingen har vanligvis ingen effekt hvis industriene er fra en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillat aksjekjøp i andre firmaer: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Når aktivert, tillates kjøp og salg av selskapers aksjer. Aksjer vil kun være tilgjengelig selskaper som når en viss alder STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Sett minimum levetid for et selskap, før andre kan kjøpe og selge aksjer fra dem. diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 5845a10491..36db98b654 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1452,7 +1452,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Fullt STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Avisa vert trykt i fargar i: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :Start spelet i år {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jamn økonomi (fleire, mindre endringar): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Tillet kjøp av aksjar i andre firma: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ved trekking, plasser signal kvar: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} ruter{P 0 "" s} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index aeab9e3058..3cb810848b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1933,8 +1933,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Punktacja na ko STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok, w którym gra się kończy na cel punktacji. Na koniec tego roku, punkty firmy są zarejestrowane i ekran wyników najwyższych jest pokazywany, ale gracze mogą po tym dalej grać.{}Jeżeli jest to przed rokiem startowym, ekran wyników najwyższych nie jest nigdy pokazywany. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nigdy -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Pozwól na łagodną ekonomię (więcej małych zmian): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kiedy włączone, produkcja zakładów zmienia się częściej, ale mniejszymi krokami. To ustawienie zazwyczaj nie daje żadnego efektu, jeśli typy zakładów są pobierane z NewGRFów STR_CONFIG_SETTING_ALLOW_SHARES :Pozwól kupować udziały w innych firmach: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kiedy włączone, pozwala na kupowanie i sprzedawanie udziałów w firmie. Udziały będą dostępne tylko dla firm z odpowiednim stażem STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimalny wiek firmy pozwalający na handel udziałami: {STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 6af854ea69..342aa839db 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1542,8 +1542,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias a cores aparecem em: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os anúncios de jornal começam a ser mostrados a cores. Antes deste ano, serão mostrados a preto e branco. STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activar economia regular (alterações menores): {STRING} -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. diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 79c3a4706c..eecd07d703 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1512,8 +1512,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Pe larg STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Ştirile color apar în: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Anul începând cu care anunțurile din ziar sunt tipărite color. Înainte de acest an, anunturile sunt monocrome (alb/negru) STR_CONFIG_SETTING_STARTING_YEAR :Anul de început al jocului: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Economie cu schimbări mai reduse, dar mai frecvente: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Dacă este activată, nivelul de producție al industriilor se schimbă mai des și în pași mai mici. Această opțiune de regulă nu are efect dacă tipul industriei este furnizat printr-un NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permite cumpărarea de acţiuni de la alte companii: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Dacă este activată, se permite cumpărarea și vânzarea de acțiuni ale companiilor. Acțiunile devin disponibile doar când compania depășește o anumită vârstă STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentul din profitul pe secţiune care să fie plătit pentru alimentare: {STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index e7d922855b..cbe8e523af 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1705,8 +1705,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Последн 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} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Разрешает торговлю акциями транспортных компаний. Акции выпускаются компаниями через некоторое время после основания. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мин. возраст компании для выпуска акций: {STRING} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index dc7bf9cb7b..4131acf754 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1713,8 +1713,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Potpuno STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Vesti u boji se objavljuju počev od godine: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Godina počev od koje se vesti objavljuju u boji. Pre ove godine se objavljuju u crno/beloj tehnici. STR_CONFIG_SETTING_STARTING_YEAR :Početna godina: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključena glatka ekonomija (više, manjih promena): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ako je omogućeno, industrijska proizvodnja se češće menja u manjim koracima. Ako se vrste industrija učitavaju preko NewGRF dodataka ovo podešavanje uglavnom nema efekta STR_CONFIG_SETTING_ALLOW_SHARES :Dozvoljena kupovina deonica drugih preduzeća: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ako je omogućeno, dozvoljava kupovinu i prodaju deonica preduzeća. Deonice su dostupne tek kad preduzeće dostigne određenu starost STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenat prihoda koji će biti predan srednjim dionicama prevoza u fider sustavima: {STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 3977294b37..971d405aa8 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :结束计分年 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} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :“打开”时,允许买卖其它公司股份。被入股公司必须经营一定年限 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :公司可发售股份的最小已存续年份数:{STRING} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index b1b3bf1cde..094a5969ad 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1621,8 +1621,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Rok ukončenia STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok v ktorom končí hra pre zaznamenanie skóre. Na konci tohto roku sa nahrá skóre spoločnosti a zobrazí sa tabuľka s najvyšším skóre, avšak hráči môžu v hre naďalej pokračovať.{}Ak je tento rok pred začiatkom hry, tabuľka sa nikdy nezobrazí. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Povoliť zmeny ekonomiky (viac menších zmien): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ak je zapnuté, zmeny v produkcii sa budú diať častejšie v malých krokoch. STR_CONFIG_SETTING_ALLOW_SHARES :Povoliť kupovanie podielov v ostatných spoločnostiach: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ak je zapnuté, povolí sa nákup a predaj podielov spoločností. Podiely budú prístupné len pre spoločnosti od urcitého veku. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimálny vek spoločnosti na obchodovanie s podielmi: {STRING} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index a8b288f5a8..6112a6a823 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1661,8 +1661,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Polno STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Barvni časopis se pojavi leta: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Leto začetka barvnega časopisa. Pred tem je črno-bel. STR_CONFIG_SETTING_STARTING_YEAR :Začetno leto: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Omogoči gladko ekonomijo (več manjših sprememb): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Če je omogočeno, se proizvodnja industrij večkrat spreminja in v manjših razlikah. Nima vpliva na industrije NewGRF. STR_CONFIG_SETTING_ALLOW_SHARES :Dovoli kupovanje delnic od drugih podjetij: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Če je omogočeno, se lahko trguje z delnicami podjetij. Na voljo samo po določeni starosti podjetja. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procent osnovnega dobička za plačilo v sklade: {STRING} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 12acd9a383..0fba4df700 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1554,8 +1554,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Año de clasifi STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Año en el que finaliza el juego para establecer la clasificación. Al final de este año se guarda la puntuación de las empresas y se muestra la pantalla de las puntuaciones más altas, aunque se puede continuar jugando la partida.{}Si este año es posterior al año de comienzo, la pantalla de puntuaciones más altas no se mostrará nunca. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activar economía suave (cambios más pequeños): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Si se activa, se producirán cambios de producción en las industrias más frecuentemente y en pasos menores. Si se usa un NewGRF para proveer industrias, esta opción generalmente no tiene efecto STR_CONFIG_SETTING_ALLOW_SHARES :Permitir comprar acciones de otras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cuando se activa, permite comprar y vender acciones de empresas. Las acciones de una empresa solamente estarán disponibles cuando la empresa cumpla una edad determinada STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edad mínima de una empresa para comerciar con sus acciones: {STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 64344f42ef..2c4fe437bc 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1554,8 +1554,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Año de fin de 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 en la producción industrial continuamente y en menor escala. Normalmente esta opción no afecta los NewGRF de industrias STR_CONFIG_SETTING_ALLOW_SHARES :Permitir comprar acciones de otras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Al activarse, se pueden comprar y vender acciones de otras empresas. Las acciones de una empresa solamente estarán disponibles cuando la empresa cumpla una edad determinada STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edad mínima de la empresa para intercambiar acciones: {STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 65b1ee1ec2..21c811345a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Slutår för po STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årtal då spelet slutar räkna poäng. Vid slutet av detta år sparas företagets poäng och listan med de bästa spelresultaten visas, men därefter kan spelarna fortsätta att spela.{}Om årtalet är satt till innan startåret visas aldrig de bästa spelresultaten. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Lugn ekonomi (flera små ändringar): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :När det är aktiverat ändras industriproduktionen oftare och i mindre steg. Den här inställningen har vanligtvis ingen effekt om de olika industrityperna kommer från en NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Tillåt köp av aktier från andra företag: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :När det är aktiverat blir det tillåtet att köpa och sälja andelar i företag. För att dess andelar ska bli tillgängliga måste ett företag ha uppnått en viss ålder STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Lägsta företagsålder för aktiehandel: {STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 4bad1f00b1..f4cdbe0586 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1404,7 +1404,6 @@ STR_CONFIG_SETTING_STARTING_YEAR :தொடங் STR_CONFIG_SETTING_ENDING_YEAR :மதிப்பீட்டிற்கான இறுதி ஆண்டு: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :என்றுமில்லை -STR_CONFIG_SETTING_SMOOTH_ECONOMY :இயல்பான பொருளாதாரத்தினைச் செயல்படுத்தவும் (அதிகமான, சிறிய மாற்றங்கள்): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :மற்ற நிறுவனங்களின் பங்குகளை வாங்குவதை அனுமதிக்கவும்: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :பங்குகள் பரிமாற்றத்திற்கு தேவையான குறைந்தபட்ச நிறுவன வயது: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :இழுத்தால், சிக்னல்களை இடவும், ஒவ்வொறு: {STRING} diff --git a/src/lang/thai.txt b/src/lang/thai.txt index cb00ecdd59..95b051e085 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1467,8 +1467,6 @@ 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_SMOOTH_ECONOMY :ยอมให้มีเศรษฐกิจที่ราบรื่น (มากขึ้น, เปลี่ยนแปลงเล็กน้อย): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :เมื่อเปิดใช้งาน อุดสาหกรรมจะมีการเปลี่ยนแปลงผลผลผลิต STR_CONFIG_SETTING_ALLOW_SHARES :อนุญาตให้ซื้อหุ้นจากบริษัทอื่นได้: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :เมื่อเปิดการใช้งาน จะสามารถซื้่อชขายหุ้นระหว่างบริษัท จะสามารถซื้อขายหุ้นได้ต่อเมื่อบริษัทเปิดตัวมานานแล้วเท่านั้น STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :เปอเซนต์ของผลกำไรที่จะส่งเข้าสู่ระบบกระจายรายได้: {STRING} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 6b6dc6b87d..eabbb03608 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1508,8 +1508,6 @@ 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_SMOOTH_ECONOMY :開啟平滑經濟模式 (更多、更小的變動):{STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :如啟用此選項,工業會較頻繁地更改其產量,但幅度則較輕微。此選項不會影響由 NewGRF 提供的工業種類 STR_CONFIG_SETTING_ALLOW_SHARES :允許購買其它公司的股票:{STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :啟用此選項以容許公司買賣股票。一所公司必須達到一定的年齡方能買賣股票 STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :轉運服務所得的收入百分比: {STRING} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 240b3041d8..6246e05b7e 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1554,8 +1554,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Yıl sonu puan STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Oyunun puan sonucuna göre bittiği yıl. Bu yılın sonunda, şirketin puanı kaydedilir ve yüksek puan ekranında gösterilir ama oyuncular oynamaya devam edebilir.{}Eğer bu başlama yılından önce ise, yüksek puan ekranı gösterilmez. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Asla -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Yüzeysel ekonomi (daha çok ve küçük çapta değişiklikler): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Etkinleştirildiğinde, endüstri üretim miktarı daha sık ve daha küçük adımlarla değişir. Eğer endüstriler bir NewGRF dosyası tarafından sağlanıyorsa bu özellik genellikle etkisiz kalır STR_CONFIG_SETTING_ALLOW_SHARES :Diğer şirketlerin hisseleri alınabilsin: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Etkinleştirildiğinde, şirketlerin hisse senetlerinin alınıp satılması mümkün olur. Hisse senetleri sadece belli bir yaşa ulaşan şirketler için geçerlidir STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Hisse satmak için gerekli minimum şirket yaşı: {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 6b9545d1a9..e0799eddae 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1681,8 +1681,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Рік закі 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} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :При включенні дозволяє придбання та продаж акцій команій. Акції компанії стають доступними після досягнення деякого віку. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мінімальний вік компанії для торгівлі акціями: {STRING} diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index fd8b8e1e64..97b3746b8f 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1495,7 +1495,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Folslein STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Krante verskient yn kleur yn: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :It jier wêrop kranteberjochten oergean op kleur. Foar dit jier oan binne sy swart/wyt STR_CONFIG_SETTING_STARTING_YEAR :Begjin jier: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Jou de ekonomy mear lytse veroarings: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Stea it keapjen fan oandielen ta: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :By slepe, pleats seinen eltse: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tegel{P 0 "" s} diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 30af9b9364..dde996e034 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1311,7 +1311,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :کامل STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :نمایش خبرهای رنگی در سال: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :سال شروع: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :فعال بودن اقتصاد ملایم (بیشتر،تغییرات کوچک انجام می‌شود): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :قابلیت خرید سهام بقیه شرکت‌ها: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :نصب علمک مکانیکی به جای چراغ راهنمایی قبل از سال: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :فعال کردن صفحه واسط کاربری برای نشانگر: {STRING} diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 61ed5a2d93..2e8266c230 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1238,7 +1238,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :مکمل STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :رنگین خبریں کون سے سال سے شروع ہوں: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :شروعاتی سال: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :مستحکم معیشت فعال کریں: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :دوسری کمپنیوں کے حصص خریدنے کی اجازت: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :پہلے خودکار طریقے سے semaphores بنائیں: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :اشاروں والی GUI فعال کریں: {STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 0211530fef..e317952ff1 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1553,8 +1553,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Năm kết thú STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Năm mà ván chơi sẽ kết thúc và tính điểm. Khi năm đó kết thúc, điểm số của công ty sẽ được lưu lại và hiển thị bảng điểm chơi cao nhất, sau đó người chơi vẫn có thể tiếp tục ván chơi.{} Nếu năm được đặt nhỏ hơn năm bắt đầu, bảng điểm chơi cao nhất sẽ không bao giờ được hiển thị. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Không bao giờ -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Nền kinh tế ít biến động: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Nếu bật, sản lượng của nhà máy sẽ thay đổi thường xuyên hơn, và thay đổi với mức độ nhỏ hơn. Thiết lập này sẽ không có tác dụng nếu kiểu nhà máy định nghĩa bởi NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Cho phép mua cổ phần của các công ty khác: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Nếu bật, cho phép mua và bán cổ phần công ty. Cổ phần chỉ có thể mua bán nếu công ty đã tồn tại một thời gian nhất định nào đó STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Tuổi công ty tối thiểu để bán cổ phần: {STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index e905391461..2f267f488b 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1512,8 +1512,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Llawn STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Bydd newyddion lliw yn ymddangos yn: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Y blwyddyn y caiff cyhoeddiadau newyddion eu hargraffu mewn lliw. Cyn y dyddiad yma rhai du a gwyn fyddent STR_CONFIG_SETTING_STARTING_YEAR :Blwyddyn dechreuol: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Galluogi economi llyfn (mwy o newidiadau llai): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Pan fe wedi'i alluogi, mae gweithgynhyrchiant diwydiant yn newid yn fwy aml, ac mewn cammau llai. Ni fydd y gosodiad yma yn cael effaith os y defnyddir diwydiannau NewGRF, fel rheol STR_CONFIG_SETTING_ALLOW_SHARES :Caniatáu prynu cyfranddaliadau mewn cwmnïau eraill: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Pan fo wedi'i alluogi, fe ganiateir prynnu a gwerthu cyfrandalaidau cwmni. Rhaid i gwmni gyrraedd oed penodol cyn y daw eu cyfrandaliadau ar gael STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Canran elw y cymal i'w dalu mewn systemau trosglwyddo: {STRING} From f2a93dba0d7c4e4f23d9d5cb36e1ede8c02eeeca Mon Sep 17 00:00:00 2001 From: Tyler Trahan <55058389+2TallTyler@users.noreply.github.com> Date: Tue, 15 Dec 2020 03:58:37 -0500 Subject: [PATCH 342/601] Change: set the default setting for autorenew to on for new games (#8352) --- regression/regression/main.nut | 1 + regression/regression/result.txt | 3 ++- src/table/company_settings.ini | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/regression/regression/main.nut b/regression/regression/main.nut index 65742d71b3..0434524d2c 100644 --- a/regression/regression/main.nut +++ b/regression/regression/main.nut @@ -433,6 +433,7 @@ function Regression::Company() print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); print(" SetAutoRenewStatus(false); " + AICompany.SetAutoRenewStatus(false)); + print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 4cb74aaa54..ab441256d5 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -615,11 +615,12 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCompanyHQ(): 33153 BuildCompanyHQ(): false GetLastErrorString(): ERR_AREA_NOT_CLEAR - GetAutoRenewStatus(); false + GetAutoRenewStatus(); true SetAutoRenewStatus(true); true GetAutoRenewStatus(); true SetAutoRenewStatus(true); true SetAutoRenewStatus(false); true + GetAutoRenewStatus(); false GetAutoRenewMonths(); 6 SetAutoRenewMonths(-12); true GetAutoRenewMonths(); -12 diff --git a/src/table/company_settings.ini b/src/table/company_settings.ini index 86035b9d77..8f9bee3bfe 100644 --- a/src/table/company_settings.ini +++ b/src/table/company_settings.ini @@ -38,7 +38,7 @@ cat = SC_ADVANCED [SDT_BOOL] base = CompanySettings var = engine_renew -def = false +def = true str = STR_CONFIG_SETTING_AUTORENEW_VEHICLE strhelp = STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT cat = SC_BASIC From 2da07f76154d841bcfe9aaff4833144550186deb Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 6 Dec 2020 20:38:34 +0100 Subject: [PATCH 343/601] Codechange: unroll the SDL2 main loop This commit prepares for the next commit, as Emscripten needs to have a way to trigger a single iteration of the main loop. To keep the real changes more clear, this commit only unrolls the loop, and makes no changes to the logic itself. --- src/video/sdl2_v.cpp | 161 +++++++++++++++++++++++-------------------- src/video/sdl2_v.h | 9 +++ 2 files changed, 94 insertions(+), 76 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index c599de65e2..09d0e8a0bc 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -664,19 +664,90 @@ void VideoDriver_SDL::Stop() } } -void VideoDriver_SDL::MainLoop() +void VideoDriver_SDL::LoopOnce() { - uint32 cur_ticks = SDL_GetTicks(); - uint32 last_cur_ticks = cur_ticks; - uint32 next_tick = cur_ticks + MILLISECONDS_PER_TICK; uint32 mod; int numkeys; const Uint8 *keys; + uint32 prev_cur_ticks = cur_ticks; // to check for wrapping + InteractiveRandom(); // randomness + + while (PollEvent() == -1) {} + if (_exit_game) return; + + mod = SDL_GetModState(); + keys = SDL_GetKeyboardState(&numkeys); + +#if defined(_DEBUG) + if (_shift_pressed) +#else + /* Speedup when pressing tab, except when using ALT+TAB + * to switch to another application */ + if (keys[SDL_SCANCODE_TAB] && (mod & KMOD_ALT) == 0) +#endif /* defined(_DEBUG) */ + { + if (!_networking && _game_mode != GM_MENU) _fast_forward |= 2; + } else if (_fast_forward & 2) { + _fast_forward = 0; + } + + cur_ticks = SDL_GetTicks(); + if (SDL_TICKS_PASSED(cur_ticks, next_tick) || (_fast_forward && !_pause_mode) || cur_ticks < prev_cur_ticks) { + _realtime_tick += cur_ticks - last_cur_ticks; + last_cur_ticks = cur_ticks; + next_tick = cur_ticks + MILLISECONDS_PER_TICK; + + bool old_ctrl_pressed = _ctrl_pressed; + + _ctrl_pressed = !!(mod & KMOD_CTRL); + _shift_pressed = !!(mod & KMOD_SHIFT); + + /* determine which directional keys are down */ + _dirkeys = + (keys[SDL_SCANCODE_LEFT] ? 1 : 0) | + (keys[SDL_SCANCODE_UP] ? 2 : 0) | + (keys[SDL_SCANCODE_RIGHT] ? 4 : 0) | + (keys[SDL_SCANCODE_DOWN] ? 8 : 0); + if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged(); + + /* The gameloop is the part that can run asynchronously. The rest + * except sleeping can't. */ + if (_draw_mutex != nullptr) draw_lock.unlock(); + + GameLoop(); + + if (_draw_mutex != nullptr) draw_lock.lock(); + + UpdateWindows(); + _local_palette = _cur_palette; + } else { + /* Release the thread while sleeping */ + if (_draw_mutex != nullptr) draw_lock.unlock(); + CSleep(1); + if (_draw_mutex != nullptr) draw_lock.lock(); + + NetworkDrawChatMessage(); + DrawMouseCursor(); + } + + /* End of the critical part. */ + if (_draw_mutex != nullptr && !HasModalProgress()) { + _draw_signal->notify_one(); + } else { + /* Oh, we didn't have threads, then just draw unthreaded */ + CheckPaletteAnim(); + DrawSurfaceToScreen(); + } +} + +void VideoDriver_SDL::MainLoop() +{ + cur_ticks = SDL_GetTicks(); + last_cur_ticks = cur_ticks; + next_tick = cur_ticks + MILLISECONDS_PER_TICK; CheckPaletteAnim(); - std::thread draw_thread; - std::unique_lock draw_lock; if (_draw_threaded) { /* Initialise the mutex first, because that's the thing we *need* * directly in the newly created thread. */ @@ -707,78 +778,16 @@ void VideoDriver_SDL::MainLoop() DEBUG(driver, 1, "SDL2: using %sthreads", _draw_threaded ? "" : "no "); - for (;;) { - uint32 prev_cur_ticks = cur_ticks; // to check for wrapping - InteractiveRandom(); // randomness - - while (PollEvent() == -1) {} - if (_exit_game) break; - - mod = SDL_GetModState(); - keys = SDL_GetKeyboardState(&numkeys); - -#if defined(_DEBUG) - if (_shift_pressed) -#else - /* Speedup when pressing tab, except when using ALT+TAB - * to switch to another application */ - if (keys[SDL_SCANCODE_TAB] && (mod & KMOD_ALT) == 0) -#endif /* defined(_DEBUG) */ - { - if (!_networking && _game_mode != GM_MENU) _fast_forward |= 2; - } else if (_fast_forward & 2) { - _fast_forward = 0; - } - - cur_ticks = SDL_GetTicks(); - if (SDL_TICKS_PASSED(cur_ticks, next_tick) || (_fast_forward && !_pause_mode) || cur_ticks < prev_cur_ticks) { - _realtime_tick += cur_ticks - last_cur_ticks; - last_cur_ticks = cur_ticks; - next_tick = cur_ticks + MILLISECONDS_PER_TICK; - - bool old_ctrl_pressed = _ctrl_pressed; - - _ctrl_pressed = !!(mod & KMOD_CTRL); - _shift_pressed = !!(mod & KMOD_SHIFT); - - /* determine which directional keys are down */ - _dirkeys = - (keys[SDL_SCANCODE_LEFT] ? 1 : 0) | - (keys[SDL_SCANCODE_UP] ? 2 : 0) | - (keys[SDL_SCANCODE_RIGHT] ? 4 : 0) | - (keys[SDL_SCANCODE_DOWN] ? 8 : 0); - if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged(); - - /* The gameloop is the part that can run asynchronously. The rest - * except sleeping can't. */ - if (_draw_mutex != nullptr) draw_lock.unlock(); - - GameLoop(); - - if (_draw_mutex != nullptr) draw_lock.lock(); - - UpdateWindows(); - _local_palette = _cur_palette; - } else { - /* Release the thread while sleeping */ - if (_draw_mutex != nullptr) draw_lock.unlock(); - CSleep(1); - if (_draw_mutex != nullptr) draw_lock.lock(); - - NetworkDrawChatMessage(); - DrawMouseCursor(); - } - - /* End of the critical part. */ - if (_draw_mutex != nullptr && !HasModalProgress()) { - _draw_signal->notify_one(); - } else { - /* Oh, we didn't have threads, then just draw unthreaded */ - CheckPaletteAnim(); - DrawSurfaceToScreen(); - } + while (!_exit_game) { + LoopOnce(); } + MainLoopCleanup(); +#endif +} + +void VideoDriver_SDL::MainLoopCleanup() +{ if (_draw_mutex != nullptr) { _draw_continue = false; /* Sending signal if there is no thread blocked diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h index 80d4018a77..6318c403f7 100644 --- a/src/video/sdl2_v.h +++ b/src/video/sdl2_v.h @@ -42,12 +42,21 @@ public: const char *GetName() const override { return "sdl"; } private: int PollEvent(); + void LoopOnce(); + void MainLoopCleanup(); bool CreateMainSurface(uint w, uint h, bool resize); /** * This is true to indicate that keyboard input is in text input mode, and SDL_TEXTINPUT events are enabled. */ bool edit_box_focused; + + uint32 cur_ticks; + uint32 last_cur_ticks; + uint32 next_tick; + + std::thread draw_thread; + std::unique_lock draw_lock; }; /** Factory for the SDL video driver. */ From d15dc9f40f5a20bff452547a2dcb15231f9f969d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 5 Dec 2020 21:57:47 +0100 Subject: [PATCH 344/601] Add: support for emscripten (play-OpenTTD-in-the-browser) Emscripten compiles to WASM, which can be loaded via HTML / JavaScript. This allows you to play OpenTTD inside a browser. Co-authored-by: milek7 --- .github/workflows/ci-build.yml | 49 ++++++ CMakeLists.txt | 37 +++++ cmake/Options.cmake | 8 +- os/emscripten/Dockerfile | 4 + os/emscripten/README.md | 40 +++++ os/emscripten/cmake/FindLibLZMA.cmake | 20 +++ os/emscripten/cmake/FindPNG.cmake | 7 + os/emscripten/cmake/FindSDL2.cmake | 7 + os/emscripten/cmake/FindZLIB.cmake | 7 + os/emscripten/emsdk-liblzma.patch | 213 ++++++++++++++++++++++++++ os/emscripten/loading.png | Bin 0 -> 4824 bytes os/emscripten/pre.js | 93 +++++++++++ os/emscripten/shell.html | 205 +++++++++++++++++++++++++ src/fontcache.cpp | 3 +- src/gfx_type.h | 8 +- src/ini.cpp | 7 + src/network/core/address.cpp | 10 +- src/network/core/os_abstraction.h | 24 ++- src/network/network.cpp | 11 ++ src/network/network_content.cpp | 15 ++ src/network/network_gui.cpp | 17 ++ src/openttd.cpp | 14 ++ src/saveload/saveload.cpp | 7 + src/video/sdl2_v.cpp | 45 +++++- src/video/sdl2_v.h | 5 + 25 files changed, 844 insertions(+), 12 deletions(-) create mode 100644 os/emscripten/Dockerfile create mode 100644 os/emscripten/README.md create mode 100644 os/emscripten/cmake/FindLibLZMA.cmake create mode 100644 os/emscripten/cmake/FindPNG.cmake create mode 100644 os/emscripten/cmake/FindSDL2.cmake create mode 100644 os/emscripten/cmake/FindZLIB.cmake create mode 100644 os/emscripten/emsdk-liblzma.patch create mode 100755 os/emscripten/loading.png create mode 100644 os/emscripten/pre.js create mode 100644 os/emscripten/shell.html diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 31d0b511da..8794b79dae 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -10,6 +10,55 @@ env: CTEST_OUTPUT_ON_FAILURE: 1 jobs: + emscripten: + name: Emscripten + + runs-on: ubuntu-20.04 + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:2.0.10 + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup cache + uses: actions/cache@v2 + with: + path: /emsdk/upstream/emscripten/cache + key: 2.0.10-${{ runner.os }} + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. -DHOST_BINARY_DIR=../build-host + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + emmake make -j$(nproc) + echo "::endgroup::" + linux: name: Linux diff --git a/CMakeLists.txt b/CMakeLists.txt index 15c6e03c0d..ca2284ffc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,10 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() +if (EMSCRIPTEN) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/os/emscripten/cmake") +endif() + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) @@ -232,6 +236,39 @@ if(APPLE) ) endif() +if(EMSCRIPTEN) + add_library(WASM::WASM INTERFACE IMPORTED) + + # Allow heap-growth, and start with a bigger memory size. + target_link_libraries(WASM::WASM INTERFACE "-s ALLOW_MEMORY_GROWTH=1") + target_link_libraries(WASM::WASM INTERFACE "-s INITIAL_MEMORY=33554432") + + # Export functions to Javascript. + target_link_libraries(WASM::WASM INTERFACE "-s EXPORTED_FUNCTIONS='[\"_main\", \"_em_openttd_add_server\"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") + + # Preload all the files we generate during build. + # As we do not compile with FreeType / FontConfig, we also have no way to + # render several languages (like Chinese, ..), so where do you draw the + # line what languages to include and which not? In the end, especially as + # the more languages you add the slower downloading becomes, we decided to + # only ship the English language. + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_BINARY_DIR}/baseset@/baseset") + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_BINARY_DIR}/lang/english.lng@/lang/english.lng") + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_SOURCE_DIR}/bin/ai@/ai") + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_SOURCE_DIR}/bin/game@/game") + + # We use IDBFS for persistent storage. + target_link_libraries(WASM::WASM INTERFACE "-lidbfs.js") + + # Use custom pre-js and shell.html. + target_link_libraries(WASM::WASM INTERFACE "--pre-js ${CMAKE_SOURCE_DIR}/os/emscripten/pre.js") + target_link_libraries(WASM::WASM INTERFACE "--shell-file ${CMAKE_SOURCE_DIR}/os/emscripten/shell.html") + + # Build the .html (which builds the .js, .wasm, and .data too). + set_target_properties(openttd PROPERTIES SUFFIX ".html") + target_link_libraries(openttd WASM::WASM) +endif() + if(NOT PERSONAL_DIR STREQUAL "(not set)") add_definitions( -DWITH_PERSONAL_DIR diff --git a/cmake/Options.cmake b/cmake/Options.cmake index 977d54f061..c94a193b32 100644 --- a/cmake/Options.cmake +++ b/cmake/Options.cmake @@ -55,7 +55,13 @@ function(set_options) option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) option(OPTION_INSTALL_FHS "Install with Filesystem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON) - option(OPTION_USE_THREADS "Use threads" ON) + if(EMSCRIPTEN) + # Although pthreads is supported, it is not in a way yet that is + # useful for us. + option(OPTION_USE_THREADS "Use threads" OFF) + else() + option(OPTION_USE_THREADS "Use threads" ON) + endif() option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF) option(OPTION_TOOLS_ONLY "Build only tools target" OFF) option(OPTION_DOCS_ONLY "Build only docs target" OFF) diff --git a/os/emscripten/Dockerfile b/os/emscripten/Dockerfile new file mode 100644 index 0000000000..1278a088ff --- /dev/null +++ b/os/emscripten/Dockerfile @@ -0,0 +1,4 @@ +FROM emscripten/emsdk + +COPY emsdk-liblzma.patch / +RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch diff --git a/os/emscripten/README.md b/os/emscripten/README.md new file mode 100644 index 0000000000..4c5d7508cc --- /dev/null +++ b/os/emscripten/README.md @@ -0,0 +1,40 @@ +## How to build with Emscripten + +Building with Emscripten works with emsdk 2.0.10 and above. + +Currently there is no LibLZMA support upstream; for this we suggest to apply +the provided patch in this folder to your emsdk installation. + +For convenience, a Dockerfile is supplied that does this patches for you +against upstream emsdk docker. Best way to use it: + +Build the docker image: +``` + docker build -t emsdk-lzma . +``` + +Build the host tools first: +``` + mkdir build-host + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma cmake .. -DOPTION_TOOLS_ONLY=ON + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma make -j5 tools +``` + +Next, build the game with emscripten: + +``` + mkdir build + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emcmake cmake .. -DHOST_BINARY_DIR=$(pwd)/build-host -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPTION_USE_ASSERTS=OFF + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emmake make -j5 +``` + +And now you have in your build folder files like "openttd.html". + +To run it locally, you would have to start a local webserver, like: + +``` + cd build + python3 -m http.server +```` + +Now you can play the game via http://127.0.0.1:8000/openttd.html . diff --git a/os/emscripten/cmake/FindLibLZMA.cmake b/os/emscripten/cmake/FindLibLZMA.cmake new file mode 100644 index 0000000000..99d1ca640a --- /dev/null +++ b/os/emscripten/cmake/FindLibLZMA.cmake @@ -0,0 +1,20 @@ +# LibLZMA is a recent addition to the emscripten SDK, so it is possible +# someone hasn't updated his SDK yet. Test out if the SDK supports LibLZMA. +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_FLAGS "-sUSE_LIBLZMA=1") + +check_cxx_source_compiles(" + #include + int main() { return 0; }" + LIBLZMA_FOUND +) + +if (LIBLZMA_FOUND) + add_library(LibLZMA::LibLZMA INTERFACE IMPORTED) + set_target_properties(LibLZMA::LibLZMA PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_LIBLZMA=1" + INTERFACE_LINK_LIBRARIES "-sUSE_LIBLZMA=1" + ) +else() + message(WARNING "You are using an emscripten SDK without LibLZMA support. Many savegames won't be able to load in OpenTTD. Please apply 'emsdk-liblzma.patch' to your local emsdk installation.") +endif() diff --git a/os/emscripten/cmake/FindPNG.cmake b/os/emscripten/cmake/FindPNG.cmake new file mode 100644 index 0000000000..2616af33d9 --- /dev/null +++ b/os/emscripten/cmake/FindPNG.cmake @@ -0,0 +1,7 @@ +add_library(PNG::PNG INTERFACE IMPORTED) +set_target_properties(PNG::PNG PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_LIBPNG=1" + INTERFACE_LINK_LIBRARIES "-sUSE_LIBPNG=1" +) + +set(PNG_FOUND on) diff --git a/os/emscripten/cmake/FindSDL2.cmake b/os/emscripten/cmake/FindSDL2.cmake new file mode 100644 index 0000000000..54553958b6 --- /dev/null +++ b/os/emscripten/cmake/FindSDL2.cmake @@ -0,0 +1,7 @@ +add_library(SDL2::SDL2 INTERFACE IMPORTED) +set_target_properties(SDL2::SDL2 PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_SDL=2" + INTERFACE_LINK_LIBRARIES "-sUSE_SDL=2" +) + +set(SDL2_FOUND on) diff --git a/os/emscripten/cmake/FindZLIB.cmake b/os/emscripten/cmake/FindZLIB.cmake new file mode 100644 index 0000000000..2ade2ba1b0 --- /dev/null +++ b/os/emscripten/cmake/FindZLIB.cmake @@ -0,0 +1,7 @@ +add_library(ZLIB::ZLIB INTERFACE IMPORTED) +set_target_properties(ZLIB::ZLIB PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_ZLIB=1" + INTERFACE_LINK_LIBRARIES "-sUSE_ZLIB=1" +) + +set(ZLIB_FOUND on) diff --git a/os/emscripten/emsdk-liblzma.patch b/os/emscripten/emsdk-liblzma.patch new file mode 100644 index 0000000000..103adae0cc --- /dev/null +++ b/os/emscripten/emsdk-liblzma.patch @@ -0,0 +1,213 @@ +From 90dd4d4c6b1cedec338ff5b375fffca93700f7bc Mon Sep 17 00:00:00 2001 +From: milek7 +Date: Tue, 8 Dec 2020 01:03:31 +0100 +Subject: [PATCH] Add liblzma port + +--- +Source: https://github.com/emscripten-core/emscripten/pull/12990 + +Modifed by OpenTTD to have the bare minimum needed to work. Otherwise there +are constantly conflicts when trying to apply this patch to different versions +of emsdk. + +diff --git a/embuilder.py b/embuilder.py +index 818262190ed..ab7d5adb7b2 100755 +--- a/embuilder.py ++++ b/embuilder.py +@@ -60,6 +60,7 @@ + 'harfbuzz', + 'icu', + 'libjpeg', ++ 'liblzma', + 'libpng', + 'ogg', + 'regal', +@@ -197,6 +198,8 @@ def main(): + build_port('ogg', libname('libogg')) + elif what == 'libjpeg': + build_port('libjpeg', libname('libjpeg')) ++ elif what == 'liblzma': ++ build_port('liblzma', libname('liblzma')) + elif what == 'libpng': + build_port('libpng', libname('libpng')) + elif what == 'sdl2': +diff --git a/src/settings.js b/src/settings.js +index 61cd98939ba..be6fcb678c6 100644 +--- a/src/settings.js ++++ b/src/settings.js +@@ -1197,6 +1197,9 @@ var USE_BZIP2 = 0; + // 1 = use libjpeg from emscripten-ports + var USE_LIBJPEG = 0; + ++// 1 = use liblzma from emscripten-ports ++var USE_LIBLZMA = 0; ++ + // 1 = use libpng from emscripten-ports + var USE_LIBPNG = 0; + +diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py +new file mode 100644 +index 00000000000..e9567ef36ff +--- /dev/null ++++ b/tools/ports/liblzma.py +@@ -0,0 +1,160 @@ ++# Copyright 2020 The Emscripten Authors. All rights reserved. ++# Emscripten is available under two separate licenses, the MIT license and the ++# University of Illinois/NCSA Open Source License. Both these licenses can be ++# found in the LICENSE file. ++ ++import os ++import shutil ++ ++VERSION = '5.2.5' ++HASH = '7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce' ++ ++ ++def needed(settings): ++ return settings.USE_LIBLZMA ++ ++ ++def get(ports, settings, shared): ++ libname = ports.get_lib_name('liblzma') ++ ports.fetch_project('liblzma', 'https://tukaani.org/xz/xz-' + VERSION + '.tar.gz', 'xz-' + VERSION, sha512hash=HASH) ++ ++ def create(): ++ ports.clear_project_build('liblzma') ++ ++ source_path = os.path.join(ports.get_dir(), 'liblzma', 'xz-' + VERSION) ++ dest_path = os.path.join(ports.get_build_dir(), 'liblzma') ++ ++ shared.try_delete(dest_path) ++ os.makedirs(dest_path) ++ shutil.rmtree(dest_path, ignore_errors=True) ++ shutil.copytree(source_path, dest_path) ++ ++ build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden'] ++ exclude_dirs = ['xzdec', 'xz', 'lzmainfo'] ++ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c' ++ 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c'] ++ include_dirs_rel = ['../common', 'api', 'common', 'check', 'lz', 'rangecoder', 'lzma', 'delta', 'simple'] ++ ++ open(os.path.join(dest_path, 'src', 'config.h'), 'w').write(config_h) ++ ++ final = os.path.join(dest_path, libname) ++ include_dirs = [os.path.join(dest_path, 'src', 'liblzma', p) for p in include_dirs_rel] ++ ports.build_port(os.path.join(dest_path, 'src'), final, flags=build_flags, exclude_dirs=exclude_dirs, exclude_files=exclude_files, includes=include_dirs) ++ ++ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api'), 'lzma.h') ++ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api', 'lzma'), '*.h', 'lzma') ++ ++ return final ++ ++ return [shared.Cache.get(libname, create, what='port')] ++ ++ ++def clear(ports, settings, shared): ++ shared.Cache.erase_file(ports.get_lib_name('liblzma')) ++ ++ ++def process_args(ports): ++ return [] ++ ++ ++def show(): ++ return 'liblzma (USE_LIBLZMA=1; public domain)' ++ ++ ++config_h = r''' ++#define ASSUME_RAM 128 ++#define ENABLE_NLS 1 ++#define HAVE_CHECK_CRC32 1 ++#define HAVE_CHECK_CRC64 1 ++#define HAVE_CHECK_SHA256 1 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_DCGETTEXT 1 ++#define HAVE_DECL_CLOCK_MONOTONIC 1 ++#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 ++#define HAVE_DECODERS 1 ++#define HAVE_DECODER_ARM 1 ++#define HAVE_DECODER_ARMTHUMB 1 ++#define HAVE_DECODER_DELTA 1 ++#define HAVE_DECODER_IA64 1 ++#define HAVE_DECODER_LZMA1 1 ++#define HAVE_DECODER_LZMA2 1 ++#define HAVE_DECODER_POWERPC 1 ++#define HAVE_DECODER_SPARC 1 ++#define HAVE_DECODER_X86 1 ++#define HAVE_DLFCN_H 1 ++#define HAVE_ENCODERS 1 ++#define HAVE_ENCODER_ARM 1 ++#define HAVE_ENCODER_ARMTHUMB 1 ++#define HAVE_ENCODER_DELTA 1 ++#define HAVE_ENCODER_IA64 1 ++#define HAVE_ENCODER_LZMA1 1 ++#define HAVE_ENCODER_LZMA2 1 ++#define HAVE_ENCODER_POWERPC 1 ++#define HAVE_ENCODER_SPARC 1 ++#define HAVE_ENCODER_X86 1 ++#define HAVE_FCNTL_H 1 ++#define HAVE_FUTIMENS 1 ++#define HAVE_GETOPT_H 1 ++#define HAVE_GETOPT_LONG 1 ++#define HAVE_GETTEXT 1 ++#define HAVE_IMMINTRIN_H 1 ++#define HAVE_INTTYPES_H 1 ++#define HAVE_LIMITS_H 1 ++#define HAVE_MBRTOWC 1 ++#define HAVE_MEMORY_H 1 ++#define HAVE_MF_BT2 1 ++#define HAVE_MF_BT3 1 ++#define HAVE_MF_BT4 1 ++#define HAVE_MF_HC3 1 ++#define HAVE_MF_HC4 1 ++#define HAVE_OPTRESET 1 ++#define HAVE_POSIX_FADVISE 1 ++#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1 ++#define HAVE_PTHREAD_PRIO_INHERIT 1 ++#define HAVE_STDBOOL_H 1 ++#define HAVE_STDINT_H 1 ++#define HAVE_STDLIB_H 1 ++#define HAVE_STRINGS_H 1 ++#define HAVE_STRING_H 1 ++#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_STAT_H 1 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_TYPES_H 1 ++#define HAVE_UINTPTR_T 1 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VISIBILITY 1 ++#define HAVE_WCWIDTH 1 ++#define HAVE__BOOL 1 ++#define HAVE___BUILTIN_ASSUME_ALIGNED 1 ++#define HAVE___BUILTIN_BSWAPXX 1 ++#define MYTHREAD_POSIX 1 ++#define NDEBUG 1 ++#define PACKAGE "xz" ++#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" ++#define PACKAGE_NAME "XZ Utils" ++#define PACKAGE_STRING "XZ Utils 5.2.5" ++#define PACKAGE_TARNAME "xz" ++#define PACKAGE_VERSION "5.2.5" ++#define SIZEOF_SIZE_T 4 ++#define STDC_HEADERS 1 ++#define TUKLIB_CPUCORES_SYSCONF 1 ++#define TUKLIB_FAST_UNALIGNED_ACCESS 1 ++#define TUKLIB_PHYSMEM_SYSCONF 1 ++#ifndef _ALL_SOURCE ++# define _ALL_SOURCE 1 ++#endif ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE 1 ++#endif ++#ifndef _POSIX_PTHREAD_SEMANTICS ++# define _POSIX_PTHREAD_SEMANTICS 1 ++#endif ++#ifndef _TANDEM_SOURCE ++# define _TANDEM_SOURCE 1 ++#endif ++#ifndef __EXTENSIONS__ ++# define __EXTENSIONS__ 1 ++#endif ++#define VERSION "5.2.5" ++''' diff --git a/os/emscripten/loading.png b/os/emscripten/loading.png new file mode 100755 index 0000000000000000000000000000000000000000..d4c4aaf75e34c7e22018990178313bc0fcf4a6fc GIT binary patch literal 4824 zcmeAS@N?(olHy`uVBq!ia0y~yU~pt$U{K^>Vqjq4Obqm3U=W(`>Eaj?aoBhI@xD~| zrijDtG4=01>-$Dda$RI;6p(Djq{6uP|9y@LZ8>I!n z-?&`=<@UTu*?(p(WGgo-|8ef2nJ4bFP0i%iaAi>z_S*99f%s`P6g&CGor8L|Q(!;#zE}bMf0f z;rY@xPD}YbIdoTW$=2M>*J2dnm)vxjd1(oA>`b@UCCRfJ_0mjcB`u~jSqe!gl z{pfF}-Y_oVon?GRW}?LBr7GXKU*&#jdaBoGnIb!fd6^cIx!6|*rd09!?p{t)zHam0 zFriNItpSsG^_GgWA-ZXodFEQhKaV!OH>Iz>fG6y;=ArHXlee9BFRF=stbcvw&Dx-s zi9es)KS{OxdtUIr)nylU18icCPFTD7m|W zb;TsF=}C)g?w{r$`PdS%IWeQW1k zcka~u;k5Cay*;xdG3s>Oq<>+5cy)J6)tr9FKEJm6t?vo{4J)>OU6b*$Nc@)0z4!xL zjQ@z9)D?T~dCn%pWM1ie=4m3!wpJazC^OMiS6YAb(W|SL?ow^^Jt*Xnv*F0+UEKbO znp3Zzzr0w+q-aK}(dkJlQIRIGyA>x?#vbG2O;-Q-t+;b@qUB}Hx}Ej@rLxPP+zaPF zwPMP>oXg4Xa!2=MJ_~%%^KM`7=cMSY0RNhcKDH~aXMfDA6E0qV@mcSS#YglL?m0$$VuAKtO?>GhvYwexxNygqO_ z+U#1rto9{;*~ina8O0BFPY+oCsCI7C?+J5x>SaTZUR&;|$+*hlSkycXj~rp?k4_T~ zB+Uz)eN6kv(gjDCn6L?|2(cRKOgb{1=k2E6{TPo0C+pAGUUn%Zl|* zMM8<$9=dlAB>tSvoOr2xrL*l8OQXv5zm{&U@MJ3SoRs=w#o9w2J>ANUYqV4UPwqx>S(^dp6-zF*jc%k3qKW!Dv?hZn2iyV11a&0Ho%4e>ZwLI7`@lL^Z z!)w*uNgEEo-hVx&B5nI(+raI0tM2n%R9hn#a4}1mDQ{Bc`MbORd-GJgjp^*y%kK(lbXtFioe#T%;}3rJ#yRaPU3XddjS%a zDuDvN=H-_s%_x1)6)|z$lHN(d`A-ubhvuJTSS~BM%_J*mn!v|twRXNJJyOiY`U%$Zv23r=5vlF-qu8IBsvR_Dy z&+_Kp74fq!?@m4@{_%bHCe3?4ULD+*YZ@1{sc6a9V3x<0PpgZ4AN=}a72o?=REv4? zOY{B$rQJ^!R^K_Y{pGre%Oh@7Hyt_jkK?AKkaw)+Tc59eKS~PczTccCdFkBRo4XlW zWPh&7)hSZCb16D&n`23f@}%<@j&H0r-+e6oJf~i7I7a~gn#~$zv$tH>@#o_F^`bg; zf)nE}|2LCh6W=-9Qk_~`xpBw+4FZe|pT5`bnpS8U-8n09WA3a?XI~u)JdK5l3cX^-n}yk>jH{m&$&!CoY}vx z!sE>M>tCjPur2@1W_xT&#xpagr6T*e|K=G6^V#uzh*`3FlI)53&52rF-}cUFOj4}< zD)rOud+j=P`Gsc>XY)_EDPrw;duH4WYmVaOZ|?kFw!l5k!^hxZSyt~?qrRe~vO=*X zYXq*BeV8oc^M@tHE}Q)^U#5+pn4??Ad+`SQKi|uKCC}bdZE0I8u=}{_zelH!AF1JI z?hH?!z)DX{NmU#1iFSMCiLo%@ks5colp0 zfZ5mgnP!ZSn~xq)KGoDQsS+af6ue@c-Q);$fU@z7(y`cJM$xZVc&pT!-v^o}P-hXD>OO4y)t{>mDYSP&+e`Z;gTns+>C~Qf%Rb9)xM{nm(k76q< zU7lOB$EfoCrr^%|AJ5KQHT%Z}<6>#~w%dO$XI5P+t(nN%m{QNL;Zs;xc5?P6w$~Cq zKi8BBt$*aZI_lVy*!Sy>Je~aVZ_7l91m)CS%8bh8 zhYhk$M?EjD`EGdZ<%TwU(-(}(@>723C107uEvMnP?8qO3&G$Rcr&qh4Ei;<5zWV1D zvESV_y4k-EeeGRx|3Zz#dbdN%YD<^z`|qFC$7ffYf3e1R&RmwQYrP-atgU(?G4ZE} z-iayP5{7Czzq0R#$Sf7KXxcG5W!Cd1W|MPe2mh{6*|PH5wXS77*E+ITG|~iqHP{}$ zw>T-b#FmFagw^A#zd^#L--q|U{j^ByG=~z$KjuijLoX+!g=W}IlV5gc{lw)P|K+WE zdm!%1Ql440|7%VDn79203@U;44_{-2teUp~D){r>xM#@_zN zGaatA&vdkU@#p_aKG!YUo`M`s^OioAHT9JGxN6Bg=A{lI7ei;dG-(~-O;Qs4arb=n zoVaPit}jpgdFJ|e(zAwU<-4}Ge&s3sH(4)jYBhl;u`ki4-E!N{?NNJ;D(^R6-u{mB z3 zCj92wBRiw-d$T2U3icRiY`Cz%CNd+yWMjaAywjT+9TN92H6~=F>~Na==)1lA`NuO~ znegn?-v8)XLZ<)Ssx9hS+Rd{A^M1Uuj4{h7_Pnz^V9&8{hokSN?@5WAekxL=!X;N2)I;*~Y_17@XAjxJ#Ur!U{9|vLY*5ZT8`rS18p8l8B7vB4SVl-xU<669P$JEQLmqO;gKJlsj zsp_>qzCWaW?`4$6O*!|2uW07G=Q8&fy-axAEweTEQlxa3P}h$~)t$FlL_9VvRV=zU zsmP^kLqxjLai`foGPlX7bi3M`NUE(fPJb^j$4EBn1n<8;`KP}epSJ2yXuR;})U^Fx zPlNXSJk5BtxBB+(FVgewIi6ql`D)3GRc9tGJyjNHab{cRi)VMrRnLCj`fx{5p8x9Y zX>+!0WBrkE(=$GK(;cmEO-%2er?%;?{iU&4Mr_s|#f#H_*gd`dWZCSOk&UYhy&NMu zrQfaI+31pAVdZr1Myh@0QHJ#&+E>gF|HkAyGmYbZ-Jhb?c>ena-7)bN{!!Hb3gemU|EDYpQvbH>Jd-{*JaND-c|AXu_4^xjDBZXVsmt&Ed67oZnO_ z+x%8RolEFpIrE-?LzfOY$)`^>EqeW$>r3W)y~jaboQqa1_2|)8IvFD>TU220b4e;A z&Ai2Y+wLYysi-Bg-AV3~Hp_(02s_5;?0-Y`$LIaJ?^3fprhmL0`KL(z-|8^NW8%-k z+03tmp8uK}=aZQqQX^V4`Cgpr9eY#V8G%LB^S&N>-oL@$_3NaD-3+4NRxaw-*l^TO zMzzg8(ePt{US303%r3)&hO4szVth8p@i?VV-07-N^z!wkB-yH+I;?jU+c_2IX+|1n zPF)y0#V@2Y!Ba%N@x0&6i2dDO&2Mh23tWhQ`KIc^rvHx@zO6R6P;b6|cITgIqIR); zCFLi>#gs4bpW0ba-Fm>ityS{{4pgf5Ri~%+fglW;;HAGuh*`Gw~?H zMXntsQjGKNExmla$z5-^l#%zZ6;?ehUxE}AQ!TPrs@A@$zI^-Wh0fJR>Zv=uY9Dwp zF)(OZ&ETzzc>MK#_Kb1{wrATG?^XL`&GF%d-i~|wUp=2a>*>$$Zk6^bi|4NXA`r1Z zCZH#8N<~Mc=&A5Mca}V;Fy&7we)!Apk$4*atUZmDlNXt+O!Mm!c_00`X74lAlMbIY z>}YIedfF@7V%Tt5Lg=YT(~)C=a&3pY_c1Q_d@Ztc3QL@{T5H%#@8DpWwc9RuwYOXM z75m=%@Ns{_?-G}nDK8>dJ+NMu=34qIYyQ65|12uy_EvBFc-4R7!D6S?JEEj6bA*%? z>j&ul>01-mAUfgur==JEgsFbdsL^l0mQu4A<=%Ka)H zQF}xhzR85%Ja)TtVuqk*dF-=hQN`8U8Wr~?oVY&oxe)u42Ciw6@(w?>EVi9{c;5cs z+4cLxRDZuU4}E3LBEXRFHCcAKUL5}>!RITRug3b*Mw_jS2&t%`RL~Flk4Hc8R*`~|LGUtX*F8+Eeb@6n; z!qzt1qlSjnoadRV7H&+m3o5nxdGLbfN|miLLe7eb>zt-VuQuJAF#q8rfz&VW{{Q-2-&%>Nlf&YOr>$nAbEaAd|O+ZeN>e%qekt|*q1Pd*yQ zTkm)|_x*aM$?MdcC&{EY`jqNlIusz_Z1&PlLw%>-#0<*_|Cq%ZoremUbdObBXfeA6y|TDxwSQl?LamE)A;%%x1RF(r|!4c*WCQyyNvhq>x*&B z91EAP`ys5*{d)0(!cFrU&bSx9tPO8E-(??TmFO5fG3eK_@40MtF7KwTyH_*YVO6t` zO|VS*FR9CaLgSOdzSQn#D~#`yJ?X}0cI3HDe82;XwaPITcXan9E5vU(78$%@tNZ0Q zvmMx*P8?b5D`qdevNz3kLSUFe{1q?OH$VQfOGPvH{ylZMfPsO5!PC{xWt~$(69A(p BfU5ui literal 0 HcmV?d00001 diff --git a/os/emscripten/pre.js b/os/emscripten/pre.js new file mode 100644 index 0000000000..5cbd899e04 --- /dev/null +++ b/os/emscripten/pre.js @@ -0,0 +1,93 @@ +Module.arguments.push('-mnull', '-snull', '-vsdl:relative_mode'); +Module['websocket'] = { url: function(host, port, proto) { + /* openttd.org hosts a WebSocket proxy for the content service. */ + if (host == "content.openttd.org" && port == 3978 && proto == "tcp") { + return "wss://content.openttd.org/"; + } + + /* Everything else just tries to make a default WebSocket connection. + * If you run your own server you can setup your own WebSocket proxy in + * front of it and let people connect to your server via the proxy. You + * are best to add another "if" statement as above for this. */ + return null; +} }; + +Module.preRun.push(function() { + personal_dir = '/home/web_user/.openttd'; + content_download_dir = personal_dir + '/content_download' + + /* Because of the "-c" above, all user-data is stored in /user_data. */ + FS.mkdir(personal_dir); + FS.mount(IDBFS, {}, personal_dir); + + Module.addRunDependency('syncfs'); + FS.syncfs(true, function (err) { + /* FS.mkdir() tends to fail if parent folders do not exist. */ + if (!FS.analyzePath(content_download_dir).exists) { + FS.mkdir(content_download_dir); + } + if (!FS.analyzePath(content_download_dir + '/baseset').exists) { + FS.mkdir(content_download_dir + '/baseset'); + } + + /* Check if the OpenGFX baseset is already downloaded. */ + if (!FS.analyzePath(content_download_dir + '/baseset/opengfx-0.6.0.tar').exists) { + window.openttd_downloaded_opengfx = true; + FS.createPreloadedFile(content_download_dir + '/baseset', 'opengfx-0.6.0.tar', 'https://installer.cdn.openttd.org/emscripten/opengfx-0.6.0.tar', true, true); + } else { + /* Fake dependency increase, so the counter is stable. */ + Module.addRunDependency('opengfx'); + Module.removeRunDependency('opengfx'); + } + + Module.removeRunDependency('syncfs'); + }); + + window.openttd_syncfs_shown_warning = false; + window.openttd_syncfs = function() { + /* Copy the virtual FS to the persistent storage. */ + FS.syncfs(false, function (err) { }); + + /* On first time, warn the user about the volatile behaviour of + * persistent storage. */ + if (!window.openttd_syncfs_shown_warning) { + window.openttd_syncfs_shown_warning = true; + Module.onWarningFs(); + } + } + + window.openttd_exit = function() { + Module.onExit(); + } + + window.openttd_abort = function() { + Module.onAbort(); + } + + window.openttd_server_list = function() { + add_server = Module.cwrap("em_openttd_add_server", null, ["string", "number"]); + + /* Add servers that support WebSocket here. Example: + * add_server("localhost", 3979); */ + } + + /* https://github.com/emscripten-core/emscripten/pull/12995 implements this + * properly. Till that time, we use a polyfill. */ + SOCKFS.websocket_sock_ops.createPeer_ = SOCKFS.websocket_sock_ops.createPeer; + SOCKFS.websocket_sock_ops.createPeer = function(sock, addr, port) + { + let func = Module['websocket']['url']; + Module['websocket']['url'] = func(addr, port, (sock.type == 2) ? 'udp' : 'tcp'); + let ret = SOCKFS.websocket_sock_ops.createPeer_(sock, addr, port); + Module['websocket']['url'] = func; + return ret; + } +}); + +Module.postRun.push(function() { + /* Check if we downloaded OpenGFX; if so, sync the virtual FS back to the + * IDBFS so OpenGFX is stored persistent. */ + if (window['openttd_downloaded_opengfx']) { + FS.syncfs(false, function (err) { }); + } +}); diff --git a/os/emscripten/shell.html b/os/emscripten/shell.html new file mode 100644 index 0000000000..17ea5b414f --- /dev/null +++ b/os/emscripten/shell.html @@ -0,0 +1,205 @@ + + + + + + OpenTTD + + + +
+
+
+ Loading ... +
+
+
+
+
+
+
+ Warning: savegames are stored in the Indexed DB of your browser.
Your browser can delete savegames without notice! +
+
+
+ +
+ + + {{{ SCRIPT }}} + + diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 051c4ee1db..79683d193c 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -26,7 +26,6 @@ #include "safeguards.h" static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter. -static const int MAX_FONT_SIZE = 72; ///< Maximum font size. /** Default heights for the different sizes of fonts. */ static const int _default_font_height[FS_END] = {10, 6, 18, 10}; @@ -202,6 +201,8 @@ bool SpriteFontCache::GetDrawGlyphShadow() FreeTypeSettings _freetype; +static const int MAX_FONT_SIZE = 72; ///< Maximum font size. + static const byte FACE_COLOUR = 1; static const byte SHADOW_COLOUR = 2; diff --git a/src/gfx_type.h b/src/gfx_type.h index 6fca2228df..452bc2c7e8 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -162,7 +162,9 @@ struct DrawPixelInfo { union Colour { uint32 data; ///< Conversion of the channel information to a 32 bit number. struct { -#if TTD_ENDIAN == TTD_BIG_ENDIAN +#if defined(__EMSCRIPTEN__) + uint8 r, g, b, a; ///< colour channels as used in browsers +#elif TTD_ENDIAN == TTD_BIG_ENDIAN uint8 a, r, g, b; ///< colour channels in BE order #else uint8 b, g, r, a; ///< colour channels in LE order @@ -177,7 +179,9 @@ union Colour { * @param a The channel for the alpha/transparency. */ Colour(uint8 r, uint8 g, uint8 b, uint8 a = 0xFF) : -#if TTD_ENDIAN == TTD_BIG_ENDIAN +#if defined(__EMSCRIPTEN__) + r(r), g(g), b(b), a(a) +#elif TTD_ENDIAN == TTD_BIG_ENDIAN a(a), r(r), g(g), b(b) #else b(b), g(g), r(r), a(a) diff --git a/src/ini.cpp b/src/ini.cpp index 6948bc1ea3..fc9b1e8fd2 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -13,6 +13,9 @@ #include "string_func.h" #include "fileio_func.h" #include +#ifdef __EMSCRIPTEN__ +# include +#endif #if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500) # include @@ -115,6 +118,10 @@ bool IniFile::SaveToDisk(const char *filename) } #endif +#ifdef __EMSCRIPTEN__ + EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); +#endif + return true; } diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index c2fecc7ff2..1aaa0b5fba 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -299,7 +299,15 @@ static SOCKET ConnectLoopProc(addrinfo *runp) if (!SetNoDelay(sock)) DEBUG(net, 1, "[%s] setting TCP_NODELAY failed", type); - if (connect(sock, runp->ai_addr, (int)runp->ai_addrlen) != 0) { + int err = connect(sock, runp->ai_addr, (int)runp->ai_addrlen); +#ifdef __EMSCRIPTEN__ + /* Emscripten is asynchronous, and as such a connect() is still in + * progress by the time the call returns. */ + if (err != 0 && errno != EINPROGRESS) +#else + if (err != 0) +#endif + { DEBUG(net, 1, "[%s] could not connect %s socket: %s", type, family, strerror(errno)); closesocket(sock); return INVALID_SOCKET; diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index 01ab68b278..be8b8f919a 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -83,6 +83,16 @@ typedef unsigned long in_addr_t; # include # include # include + +# if defined(__EMSCRIPTEN__) +/* Emscripten doesn't support AI_ADDRCONFIG and errors out on it. */ +# undef AI_ADDRCONFIG +# define AI_ADDRCONFIG 0 +/* Emscripten says it supports FD_SETSIZE fds, but it really only supports 64. + * https://github.com/emscripten-core/emscripten/issues/1711 */ +# undef FD_SETSIZE +# define FD_SETSIZE 64 +# endif #endif /* UNIX */ /* OS/2 stuff */ @@ -148,12 +158,16 @@ typedef unsigned long in_addr_t; */ static inline bool SetNonBlocking(SOCKET d) { -#ifdef _WIN32 - u_long nonblocking = 1; +#ifdef __EMSCRIPTEN__ + return true; #else +# ifdef _WIN32 + u_long nonblocking = 1; +# else int nonblocking = 1; -#endif +# endif return ioctlsocket(d, FIONBIO, &nonblocking) == 0; +#endif } /** @@ -163,10 +177,14 @@ static inline bool SetNonBlocking(SOCKET d) */ static inline bool SetNoDelay(SOCKET d) { +#ifdef __EMSCRIPTEN__ + return true; +#else /* XXX should this be done at all? */ int b = 1; /* The (const char*) cast is needed for windows */ return setsockopt(d, IPPROTO_TCP, TCP_NODELAY, (const char*)&b, sizeof(b)) == 0; +#endif } /* Make sure these structures have the size we expect them to be */ diff --git a/src/network/network.cpp b/src/network/network.cpp index 0e3d086301..a100b6b959 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1154,3 +1154,14 @@ bool IsNetworkCompatibleVersion(const char *other) const char *hash2 = ExtractNetworkRevisionHash(other); return hash1 && hash2 && (strncmp(hash1, hash2, GITHASH_SUFFIX_LEN) == 0); } + +#ifdef __EMSCRIPTEN__ +extern "C" { + +void CDECL em_openttd_add_server(const char *host, int port) +{ + NetworkUDPQueryServer(NetworkAddress(host, port), true); +} + +} +#endif diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 5e401d3e92..0140d3ef20 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -23,6 +23,10 @@ #include #endif +#ifdef __EMSCRIPTEN__ +# include +#endif + #include "../safeguards.h" extern bool HasScenario(const ContentInfo *ci, bool md5sum); @@ -289,6 +293,13 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin { bytes = 0; +#ifdef __EMSCRIPTEN__ + /* Emscripten is loaded via an HTTPS connection. As such, it is very + * difficult to make HTTP connections. So always use the TCP method of + * downloading content. */ + fallback = true; +#endif + ContentIDList content; for (const ContentInfo *ci : this->infos) { if (!ci->IsSelected() || ci->state == ContentInfo::ALREADY_HERE) continue; @@ -535,6 +546,10 @@ void ClientNetworkContentSocketHandler::AfterDownload() unlink(GetFullFilename(this->curInfo, false)); } +#ifdef __EMSCRIPTEN__ + EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); +#endif + this->OnDownloadComplete(this->curInfo->id); } else { ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_EXTRACT, INVALID_STRING_ID, WL_ERROR); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index c430c47e5e..47bf8fb69c 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -39,6 +39,9 @@ #include "../safeguards.h" +#ifdef __EMSCRIPTEN__ +# include +#endif static void ShowNetworkStartServerWindow(); static void ShowNetworkLobbyWindow(NetworkGameList *ngl); @@ -475,6 +478,14 @@ public: this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; this->SetFocusedWidget(WID_NG_FILTER); + /* As the master-server doesn't support "websocket" servers yet, we + * let "os/emscripten/pre.js" hardcode a list of servers people can + * join. This means the serverlist is curated for now, but it is the + * best we can offer. */ +#ifdef __EMSCRIPTEN__ + EM_ASM(if (window["openttd_server_list"]) openttd_server_list()); +#endif + this->last_joined = NetworkGameListAddItem(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port)); this->server = this->last_joined; if (this->last_joined != nullptr) NetworkUDPQueryServer(this->last_joined->address); @@ -615,6 +626,12 @@ public: this->GetWidget(WID_NG_NEWGRF_SEL)->SetDisplayedPlane(sel == nullptr || !sel->online || sel->info.grfconfig == nullptr); this->GetWidget(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == nullptr || !sel->online || sel->info.grfconfig == nullptr || !sel->info.version_compatible || sel->info.compatible); +#ifdef __EMSCRIPTEN__ + this->SetWidgetDisabledState(WID_NG_FIND, true); + this->SetWidgetDisabledState(WID_NG_ADD, true); + this->SetWidgetDisabledState(WID_NG_START, true); +#endif + this->DrawWidgets(); } diff --git a/src/openttd.cpp b/src/openttd.cpp index 4aeed39282..9cc5d2f205 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -73,6 +73,11 @@ #include "safeguards.h" +#ifdef __EMSCRIPTEN__ +# include +# include +#endif + void CallLandscapeTick(); void IncreaseDate(); void DoPaletteAnimations(); @@ -104,6 +109,15 @@ void CDECL usererror(const char *s, ...) ShowOSErrorBox(buf, false); if (VideoDriver::GetInstance() != nullptr) VideoDriver::GetInstance()->Stop(); +#ifdef __EMSCRIPTEN__ + emscripten_exit_pointerlock(); + /* In effect, the game ends here. As emscripten_set_main_loop() caused + * the stack to be unwound, the code after MainLoop() in + * openttd_main() is never executed. */ + EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); + EM_ASM(if (window["openttd_abort"]) openttd_abort()); +#endif + exit(1); } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 999a381d71..5288f9047d 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -45,6 +45,9 @@ #include "../error.h" #include #include +#ifdef __EMSCRIPTEN__ +# include +#endif #include "table/strings.h" @@ -2495,6 +2498,10 @@ static void SaveFileDone() InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SAVELOAD_FINISH); _sl.saveinprogress = false; + +#ifdef __EMSCRIPTEN__ + EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); +#endif } /** Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friends) */ diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 09d0e8a0bc..68b0aa983d 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -27,6 +27,10 @@ #include #include #include +#ifdef __EMSCRIPTEN__ +# include +# include +#endif #include "../safeguards.h" @@ -673,7 +677,19 @@ void VideoDriver_SDL::LoopOnce() InteractiveRandom(); // randomness while (PollEvent() == -1) {} - if (_exit_game) return; + if (_exit_game) { +#ifdef __EMSCRIPTEN__ + /* Emscripten is event-driven, and as such the main loop is inside + * the browser. So if _exit_game goes true, the main loop ends (the + * cancel call), but we still have to call the cleanup that is + * normally done at the end of the main loop for non-Emscripten. + * After that, Emscripten just halts, and the HTML shows a nice + * "bye, see you next time" message. */ + emscripten_cancel_main_loop(); + MainLoopCleanup(); +#endif + return; + } mod = SDL_GetModState(); keys = SDL_GetKeyboardState(&numkeys); @@ -722,9 +738,17 @@ void VideoDriver_SDL::LoopOnce() _local_palette = _cur_palette; } else { /* Release the thread while sleeping */ - if (_draw_mutex != nullptr) draw_lock.unlock(); - CSleep(1); - if (_draw_mutex != nullptr) draw_lock.lock(); + if (_draw_mutex != nullptr) { + draw_lock.unlock(); + CSleep(1); + draw_lock.lock(); + } else { +/* Emscripten is running an event-based mainloop; there is already some + * downtime between each iteration, so no need to sleep. */ +#ifndef __EMSCRIPTEN__ + CSleep(1); +#endif + } NetworkDrawChatMessage(); DrawMouseCursor(); @@ -778,6 +802,10 @@ void VideoDriver_SDL::MainLoop() DEBUG(driver, 1, "SDL2: using %sthreads", _draw_threaded ? "" : "no "); +#ifdef __EMSCRIPTEN__ + /* Run the main loop event-driven, based on RequestAnimationFrame. */ + emscripten_set_main_loop_arg(&this->EmscriptenLoop, this, 0, 1); +#else while (!_exit_game) { LoopOnce(); } @@ -803,6 +831,15 @@ void VideoDriver_SDL::MainLoopCleanup() _draw_mutex = nullptr; _draw_signal = nullptr; } + +#ifdef __EMSCRIPTEN__ + emscripten_exit_pointerlock(); + /* In effect, the game ends here. As emscripten_set_main_loop() caused + * the stack to be unwound, the code after MainLoop() in + * openttd_main() is never executed. */ + EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); + EM_ASM(if (window["openttd_exit"]) openttd_exit()); +#endif } bool VideoDriver_SDL::ChangeResolution(int w, int h) diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h index 6318c403f7..c2ac87a062 100644 --- a/src/video/sdl2_v.h +++ b/src/video/sdl2_v.h @@ -46,6 +46,11 @@ private: void MainLoopCleanup(); bool CreateMainSurface(uint w, uint h, bool resize); +#ifdef __EMSCRIPTEN__ + /* Convert a constant pointer back to a non-constant pointer to a member function. */ + static void EmscriptenLoop(void *self) { ((VideoDriver_SDL *)self)->LoopOnce(); } +#endif + /** * This is true to indicate that keyboard input is in text input mode, and SDL_TEXTINPUT events are enabled. */ From d5b9f7ac37c7d27d1ffe50e55aa73361da64189b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 6 Dec 2020 20:18:19 +0100 Subject: [PATCH 345/601] Add: [Emscripten] use "relative mouse mode" with SDL2 This mode doesn't wrap the mouse constantly, but requests SDL to lock the mouse pointer. This is needed, as with Emscripten you are not allowed to change the mouse poisition (only to lock it into place). --- src/gfx.cpp | 24 ++++++++++++++++++++++++ src/gfx_type.h | 1 + src/video/sdl2_v.cpp | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index 6039946fc6..8027dad265 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1784,6 +1784,30 @@ void SetAnimatedMouseCursor(const AnimCursor *table) SwitchAnimatedCursor(); } +/** + * Update cursor position on mouse movement for relative modes. + * @param delta_x How much change in the X position. + * @param delta_y How much change in the Y position. + */ +void CursorVars::UpdateCursorPositionRelative(int delta_x, int delta_y) +{ + if (this->fix_at) { + this->delta.x = delta_x; + this->delta.y = delta_y; + } else { + int last_position_x = this->pos.x; + int last_position_y = this->pos.y; + + this->pos.x = Clamp(this->pos.x + delta_x, 0, _cur_resolution.width - 1); + this->pos.y = Clamp(this->pos.y + delta_y, 0, _cur_resolution.height - 1); + + this->delta.x = last_position_x - this->pos.x; + this->delta.y = last_position_y - this->pos.y; + + this->dirty = true; + } +} + /** * Update cursor position on mouse movement. * @param x New X position. diff --git a/src/gfx_type.h b/src/gfx_type.h index 452bc2c7e8..ab802c45e4 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -143,6 +143,7 @@ struct CursorVars { /* Drag data */ bool vehchain; ///< vehicle chain is dragged + void UpdateCursorPositionRelative(int delta_x, int delta_y); bool UpdateCursorPosition(int x, int y, bool queued_warp); private: diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 68b0aa983d..852f7298d9 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -51,6 +51,11 @@ static volatile bool _draw_continue; static Palette _local_palette; static SDL_Palette *_sdl_palette; +#ifdef __EMSCRIPTEN__ +/** Whether we just had a window-enter event. */ +static bool _cursor_new_in_window = false; +#endif + #define MAX_DIRTY_RECTS 100 static SDL_Rect _dirty_rects[MAX_DIRTY_RECTS]; static int _num_dirty_rects; @@ -350,6 +355,9 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h, bool resize) bool VideoDriver_SDL::ClaimMousePointer() { SDL_ShowCursor(0); +#ifdef __EMSCRIPTEN__ + SDL_SetRelativeMouseMode(SDL_TRUE); +#endif return true; } @@ -509,9 +517,27 @@ int VideoDriver_SDL::PollEvent() switch (ev.type) { case SDL_MOUSEMOTION: +#ifdef __EMSCRIPTEN__ + if (_cursor_new_in_window) { + /* The cursor just moved into the window; this means we don't + * know the absolutely position yet to move relative from. + * Before this time, SDL didn't know it either, and this is + * why we postpone it till now. Update the absolute position + * for this once, and work relative after. */ + _cursor.pos.x = ev.motion.x; + _cursor.pos.y = ev.motion.y; + _cursor.dirty = true; + + _cursor_new_in_window = false; + SDL_SetRelativeMouseMode(SDL_TRUE); + } else { + _cursor.UpdateCursorPositionRelative(ev.motion.xrel, ev.motion.yrel); + } +#else if (_cursor.UpdateCursorPosition(ev.motion.x, ev.motion.y, true)) { SDL_WarpMouseInWindow(_sdl_window, _cursor.pos.x, _cursor.pos.y); } +#endif HandleMouseEvents(); break; @@ -615,6 +641,12 @@ int VideoDriver_SDL::PollEvent() } else if (ev.window.event == SDL_WINDOWEVENT_ENTER) { // mouse entered the window, enable cursor _cursor.in_window = true; +#ifdef __EMSCRIPTEN__ + /* Disable relative mouse mode for the first mouse motion, + * so we can pick up the absolutely position again. */ + _cursor_new_in_window = true; + SDL_SetRelativeMouseMode(SDL_FALSE); +#endif } else if (ev.window.event == SDL_WINDOWEVENT_LEAVE) { // mouse left the window, undraw cursor UndrawMouseCursor(); @@ -631,7 +663,8 @@ const char *VideoDriver_SDL::Start(const StringList &parm) /* Explicitly disable hardware acceleration. Enabling this causes * UpdateWindowSurface() to update the window's texture instead of * its surface. */ - SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION , "0"); + SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "0"); + SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "1"); /* Just on the offchance the audio subsystem started before the video system, * check whether any part of SDL has been initialised before getting here. From 8fbf5bef60568cd4dcd56921c37be64b8234d9bb Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 9 Dec 2020 17:13:34 +0100 Subject: [PATCH 346/601] Fix: workarounds for two emscripten bugs in the network stack --- src/network/core/address.cpp | 12 ++++++++++++ src/network/core/os_abstraction.h | 22 ++++++++++++++++++++++ src/network/core/tcp_listen.h | 3 +++ src/network/core/udp.cpp | 3 +++ 4 files changed, 40 insertions(+) diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index 1aaa0b5fba..2e00b5b193 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -267,6 +267,18 @@ SOCKET NetworkAddress::Resolve(int family, int socktype, int flags, SocketList * this->address_length = (int)runp->ai_addrlen; assert(sizeof(this->address) >= runp->ai_addrlen); memcpy(&this->address, runp->ai_addr, runp->ai_addrlen); +#ifdef __EMSCRIPTEN__ + /* Emscripten doesn't zero sin_zero, but as we compare addresses + * to see if they are the same address, we need them to be zero'd. + * Emscripten is, as far as we know, the only OS not doing this. + * + * https://github.com/emscripten-core/emscripten/issues/12998 + */ + if (this->address.ss_family == AF_INET) { + sockaddr_in *address_ipv4 = (sockaddr_in *)&this->address; + memset(address_ipv4->sin_zero, 0, sizeof(address_ipv4->sin_zero)); + } +#endif break; } diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index be8b8f919a..8aa072aefb 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -151,6 +151,28 @@ typedef unsigned long in_addr_t; #endif /* OS/2 */ +#ifdef __EMSCRIPTEN__ +/** + * Emscripten doesn't set 'addrlen' for accept(), getsockname(), getpeername() + * and recvfrom(), which confuses other functions and causes them to crash. + * This function needs to be called after these four functions to make sure + * 'addrlen' is patched up. + * + * https://github.com/emscripten-core/emscripten/issues/12996 + * + * @param address The address returned by those four functions. + * @return The correct value for addrlen. + */ +static inline socklen_t FixAddrLenForEmscripten(struct sockaddr_storage &address) +{ + switch (address.ss_family) { + case AF_INET6: return sizeof(struct sockaddr_in6); + case AF_INET: return sizeof(struct sockaddr_in); + default: NOT_REACHED(); + } +} +#endif + /** * Try to set the socket into non-blocking mode. * @param d The socket to set the non-blocking more for. diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index d2982363e6..1f073aa735 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -42,6 +42,9 @@ public: socklen_t sin_len = sizeof(sin); SOCKET s = accept(ls, (struct sockaddr*)&sin, &sin_len); if (s == INVALID_SOCKET) return; +#ifdef __EMSCRIPTEN__ + sin_len = FixAddrLenForEmscripten(sin); +#endif SetNonBlocking(s); // XXX error handling? diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 57352412b4..aa6d39cbba 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -129,6 +129,9 @@ void NetworkUDPSocketHandler::ReceivePackets() /* Did we get the bytes for the base header of the packet? */ if (nbytes <= 0) break; // No data, i.e. no packet if (nbytes <= 2) continue; // Invalid data; try next packet +#ifdef __EMSCRIPTEN__ + client_len = FixAddrLenForEmscripten(client_addr); +#endif NetworkAddress address(client_addr, client_len); p.PrepareToRead(); From 93ef759a257a1aebf98b9a54fc6698b4732b05f7 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 8 Dec 2020 13:49:22 +0100 Subject: [PATCH 347/601] Add: [Actions] preview workflow, where PRs can be reviewed in the browser When a developer attaches the "preview" label, a build is created and published on https://preview.openttd.org/. After that, new pushes to the PR are automatically build (as long as the "preview" label exists). If a non-developer attaches the "preview" label, it will be removed. --- .github/workflows/preview_build.yml | 133 ++++++++++++++++++++++++++++ .github/workflows/preview_label.yml | 66 ++++++++++++++ .github/workflows/preview_push.yml | 66 ++++++++++++++ 3 files changed, 265 insertions(+) create mode 100644 .github/workflows/preview_build.yml create mode 100644 .github/workflows/preview_label.yml create mode 100644 .github/workflows/preview_push.yml diff --git a/.github/workflows/preview_build.yml b/.github/workflows/preview_build.yml new file mode 100644 index 0000000000..9aea890bce --- /dev/null +++ b/.github/workflows/preview_build.yml @@ -0,0 +1,133 @@ +name: Preview build + +on: + repository_dispatch: + types: + - Preview* + +jobs: + preview: + name: Build preview + + runs-on: ubuntu-20.04 + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:2.0.10 + # uid=1001(runner) gid=121(docker) + options: -u 1001:121 + + steps: + - name: Update deployment status to in progress + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: in_progress + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.sha }} + + - name: Name branch + run: | + name=$(echo "${{ github.event.client_payload.folder }}") + git checkout -b ${name} + + - name: Setup cache + uses: actions/cache@v2 + with: + path: /emsdk/upstream/emscripten/cache + key: 2.0.10-${{ runner.os }} + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. \ + -DHOST_BINARY_DIR=../build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + emmake make -j$(nproc) + echo "::endgroup::" + + - name: Publish preview + run: | + # setuptools is missing in this Docker image, which breaks installing + # awscli. So we need to do this in two steps to recover sanity. + pip3 install setuptools + pip3 install awscli + + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.data s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.html s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.js s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.wasm s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + + # Invalidate the cache of the CloudFront distribution + ~/.local/bin/aws cloudfront create-invalidation --distribution-id ${{ secrets.PREVIEW_CF_DISTRIBUTION_ID }} --paths "/${{ github.event.client_payload.folder }}/*" + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Update deployment status to success + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: success + environment_url: https://preview.openttd.org/${{ github.event.client_payload.folder }}/ + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: failure() + name: Update deployment status to failure + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: failure + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} diff --git a/.github/workflows/preview_label.yml b/.github/workflows/preview_label.yml new file mode 100644 index 0000000000..6b3e17ea1a --- /dev/null +++ b/.github/workflows/preview_label.yml @@ -0,0 +1,66 @@ +name: Preview label + +on: + pull_request_target: + types: + - labeled + +env: + TEAM_CORE_DEVELOPER: core-developers + +jobs: + check_preview_label: + name: Check for preview label + if: github.event.action == 'labeled' && github.event.label.name == 'preview' + + runs-on: ubuntu-20.04 + + steps: + - name: Check if label was added by core developer + id: core_developer + continue-on-error: true + uses: octokit/request-action@v2.x + with: + route: GET /orgs/OpenTTD/teams/${{ env.TEAM_CORE_DEVELOPER }}/memberships/${{ github.event.sender.login }} + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: steps.core_developer.outcome == 'failure' + name: Remove preview label if not core developer + uses: octokit/request-action@v2.x + with: + route: DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/preview + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + issue_number: ${{ github.event.number }} + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: steps.core_developer.outcome == 'success' + name: Create deployment + id: deployment + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + ref: ${{ github.event.pull_request.head.sha }} + task: deploy:preview + auto_merge: false + required_contexts: "[]" + environment: preview-pr-${{ github.event.number }} + description: "Preview for Pull Request #${{ github.event.number }}" + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: steps.core_developer.outcome == 'success' + name: Trigger 'preview build' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + event-type: "Preview build #${{ github.event.number }}" + client-payload: '{"folder": "pr${{ github.event.number }}", "sha": "${{ github.event.pull_request.head.sha }}", "deployment_id": "${{ fromJson(steps.deployment.outputs.data).id }}"}' diff --git a/.github/workflows/preview_push.yml b/.github/workflows/preview_push.yml new file mode 100644 index 0000000000..cb68c8f6ce --- /dev/null +++ b/.github/workflows/preview_push.yml @@ -0,0 +1,66 @@ +name: Preview push + +on: + pull_request_target: + types: + - synchronize + +jobs: + check_new_preview: + name: Check preview needs update + + runs-on: ubuntu-20.04 + + steps: + - name: Check if earlier preview exists + id: earlier_preview + uses: octokit/request-action@v2.x + with: + route: GET /repos/{owner}/{repo}/deployments + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + environment: preview-pr-${{ github.event.number }} + per_page: 1 + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' + name: Check for preview label + id: preview_label + uses: octokit/request-action@v2.x + with: + route: GET /repos/{owner}/{repo}/issues/{issue_number}/labels + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + issue_number: ${{ github.event.number }} + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') + name: Create deployment + id: deployment + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + ref: ${{ github.event.pull_request.head.sha }} + task: deploy:preview + auto_merge: false + required_contexts: "[]" + environment: preview-pr-${{ github.event.number }} + description: "Preview for Pull Request #${{ github.event.number }}" + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') + name: Trigger 'preview build' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + event-type: "Preview build #${{ github.event.number }}" + client-payload: '{"folder": "pr${{ github.event.number }}", "sha": "${{ github.event.pull_request.head.sha }}", "deployment_id": "${{ fromJson(steps.deployment.outputs.data).id }}"}' From d6c54e7eef5e271c2bbd69e2f052fe14be1c236b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 14 Dec 2020 11:58:34 +0100 Subject: [PATCH 348/601] Fix: [Git] ignore any build folder you might have Instructions now suggest using build-host, etc. It is easier to just ignore all build* folders. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1e68f57074..4eed0f0e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /.vs -/build +/build* CMakeSettings.json docs/aidocs/* docs/gamedocs/* From 1a67954ff9e6d2ebd50b1ec60dd481df195da9dc Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 15 Dec 2020 17:57:40 +0000 Subject: [PATCH 349/601] Update: Translations from eints korean: 29 changes by telk5093 finnish: 8 changes by hpiirai slovak: 6 changes by FuryPapaya french: 6 changes by glx22 --- src/lang/finnish.txt | 9 +++++++- src/lang/french.txt | 6 ++++++ src/lang/korean.txt | 51 +++++++++++++++++++++++++------------------- src/lang/slovak.txt | 10 +++++---- 4 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 2c19c6e80b..b85a8ac0de 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Oletus STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}ruutua/vrk STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hv STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hv @@ -1553,6 +1554,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Pistelaskun pä 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_ECONOMY_TYPE :Talouden laji: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Tasaisessa taloudessa tuotanto muuttuu useammin, ja pienemmissä askeleissa, kuin alkuperäisessä. Jäädytetty talous estää tuotantomuutokset ja laitosten sulkeutumiset. Tämä asetus ei välttämättä vaikuta, jos teollisuustyypit tulevat NewGRF:stä. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Alkuperäinen +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Tasainen +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Jäädytetty STR_CONFIG_SETTING_ALLOW_SHARES :Salli toisten yhtiöiden osakkeiden ostaminen: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Mikäli käytössä, toisten yhtiöiden osakkeiden ostaminen ja myyminen on mahdollista. Osakkeet ovat saatavilla vain yhtiöille, jotka ovat saavuttaneet tietyn iän STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Yhtiön vähimmäisikä osakekaupoille: {STRING} @@ -1673,6 +1679,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kun käyttölii STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Brittiläinen (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrinen (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Pelin yksiköt (ruutuja vuorokaudessa) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Kulkuneuvon tehon yksikkö: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Kun käyttöliittymässä näytetään kulkuneuvon teho, näytä se valittua yksikköä käyttäen @@ -3800,7 +3807,7 @@ STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Nimeä a STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Nimeä laiva STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Nimeä ilma-alus -STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Ikä: {LTBLUE}{STRING}{BLACK} Käyttökustannukset: {LTBLUE}{CURRENCY_LONG}/yr +STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Ikä: {LTBLUE}{STRING}{BLACK} Käyttökustannukset: {LTBLUE}{CURRENCY_LONG}/v # The next two need to stay in this order STR_VEHICLE_INFO_AGE :{COMMA} vuo{P si tta} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} vuo{P si tta} ({COMMA}) diff --git a/src/lang/french.txt b/src/lang/french.txt index 78ecd8dd0c..f256421614 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -195,6 +195,7 @@ STR_COLOUR_DEFAULT :Défaut STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}cases/jour STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}ch @@ -1555,6 +1556,10 @@ STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :À la fin de ce STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Jamais STR_CONFIG_SETTING_ECONOMY_TYPE :Type d'économie{NBSP}: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Une économie stable entraîne des changements de production plus fréquents, mais de plus faible intensité. Une économie gelée bloque les changements de production et les fermetures d'industries. Ce paramètre peut n'avoir aucun effet si les types d'industries proviennent d'un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Stable +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Gelée STR_CONFIG_SETTING_ALLOW_SHARES :Permettre d'acheter des actions d'autres compagnies{NBSP}: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Lorsqu'il est activé, l'achat et la vente des parts de compagnie sont autorisées. Les parts ne seront disponibles que pour les compagnies ayant atteint un certain âge STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Âge minimum de la compagnie pour la vente d'actions{NBSP}: {STRING} @@ -1675,6 +1680,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quand une vites STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Impérial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrique (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unités du jeu (cases/jour) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unité de puissance de véhicule{NBSP}: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Quand une puissance de véhicule est affichée dans l'interface utilisateur, utiliser l'unité sélectionnée diff --git a/src/lang/korean.txt b/src/lang/korean.txt index ab2089ac48..80046c2ad0 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -192,36 +192,37 @@ STR_COLOUR_RANDOM :무작위 STR_COLOUR_DEFAULT :기본 # Units used in OpenTTD -STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph -STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h -STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_IMPERIAL :{COMMA}mph +STR_UNITS_VELOCITY_METRIC :{COMMA}km/h +STR_UNITS_VELOCITY_SI :{COMMA}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}칸/일 -STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}마력 -STR_UNITS_POWER_METRIC :{COMMA}{NBSP}마력 -STR_UNITS_POWER_SI :{COMMA}{NBSP}kW +STR_UNITS_POWER_IMPERIAL :{COMMA}마력 +STR_UNITS_POWER_METRIC :{COMMA}마력 +STR_UNITS_POWER_SI :{COMMA}kW -STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t -STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t -STR_UNITS_WEIGHT_SHORT_SI :{COMMA}{NBSP}kg +STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}t +STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t +STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg -STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}톤 -STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}톤 -STR_UNITS_WEIGHT_LONG_SI :{COMMA}{NBSP}kg +STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}톤 +STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}톤 +STR_UNITS_WEIGHT_LONG_SI :{COMMA}kg -STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}{NBSP}갤런 -STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}{NBSP}l -STR_UNITS_VOLUME_SHORT_SI :{COMMA}{NBSP}m³ +STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}갤런 +STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}l +STR_UNITS_VOLUME_SHORT_SI :{COMMA}m³ -STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}{NBSP}갤런 -STR_UNITS_VOLUME_LONG_METRIC :{COMMA}{NBSP}리터 -STR_UNITS_VOLUME_LONG_SI :{COMMA}{NBSP}m³ +STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}갤런 +STR_UNITS_VOLUME_LONG_METRIC :{COMMA}리터 +STR_UNITS_VOLUME_LONG_SI :{COMMA}m³ -STR_UNITS_FORCE_IMPERIAL :{COMMA}{NBSP}파운드중 -STR_UNITS_FORCE_METRIC :{COMMA}{NBSP}kg중 +STR_UNITS_FORCE_IMPERIAL :{COMMA}파운드중 +STR_UNITS_FORCE_METRIC :{COMMA}kg중 STR_UNITS_FORCE_SI :{COMMA}kN -STR_UNITS_HEIGHT_IMPERIAL :{COMMA}{NBSP}피트 -STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m +STR_UNITS_HEIGHT_IMPERIAL :{COMMA}피트 +STR_UNITS_HEIGHT_METRIC :{COMMA}m STR_UNITS_HEIGHT_SI :{COMMA}m # Common window strings @@ -1554,6 +1555,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :게임 종료 STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :점수를 기록할 게임 종료 연도를 설정합니다. 이 연도가 지나면, 회사의 점수가 고득점 순위표에 기록되어 표시됩니다. 하지만 플레이어는 계속해서 게임을 진행할 수 있습니다.{}이 값이 시작 연도보다 이전으로 설정되어 있다면, 고득점 순위표는 나타나지 않습니다. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :안 함 +STR_CONFIG_SETTING_ECONOMY_TYPE :경제 변화: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :부드러운 경제에서는 생산량이 소량으로 자주 변하게 됩니다. 멈춘 경제에서는 생산량이 변하지 않고 산업 시설의 폐쇄를 막습니다. 이 설정은 NewGRF로 추가한 산업 시설에는 적용되지 않을 수 있습니다. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :기본 +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :부드러움 +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :멈춤 STR_CONFIG_SETTING_ALLOW_SHARES :다른 회사의 지분을 사는 것을 허용: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :이 설정을 켜면, 회사의 지분을 거래할 수 있게 됩니다. 회사의 지분을 거래하려면 해당 회사가 어느 정도 오래되어야 합니다. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING} @@ -1674,6 +1680,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :속력를 표 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :임페리얼법 (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :미터법 (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :국제표준규격 (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :게임 단위 (칸/일) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :차량의 힘 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :출력할 차량의 힘 단위를 선택합니다. diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 094a5969ad..fe0ebc1bac 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -258,6 +258,7 @@ STR_COLOUR_DEFAULT :Predvolená STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph STR_UNITS_VELOCITY_METRIC :{COMMA} km/h STR_UNITS_VELOCITY_SI :{COMMA} m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}políč{P ko ka ok}/deň STR_UNITS_POWER_IMPERIAL :{COMMA}hp STR_UNITS_POWER_METRIC :{COMMA}hp @@ -383,7 +384,7 @@ STR_SORT_BY_RATING :Hodnotenie STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pozastaviť hru STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrýchliť priebeh hry STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Nastavenia -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť hru, opustiť hru, ukončiť program +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Uložiť hru, opustiť hru, ukončiť STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Zobraziť mapu STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Zobraziť zoznam miest STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Zobraziť dotácie @@ -413,7 +414,7 @@ STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informá STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Prepnúť panely nástrojov # Extra tooltips for the scenario editor toolbar -STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Uložiť scenár, nahrať scenár, opustiť editor scenára, ukončiť program +STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Uložiť scenár, nahrať scenár, opustiť editor scenára, ukončiť STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor scenára STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Posunúť začiatok o rok dozadu @@ -436,7 +437,7 @@ STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Uložiť výšk STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Nahrať výškovú mapu STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Opustiť editor scenára STR_SCENEDIT_FILE_MENU_SEPARATOR : -STR_SCENEDIT_FILE_MENU_QUIT :Ukončiť program +STR_SCENEDIT_FILE_MENU_QUIT :Ukončiť ############ range for SE file menu starts ############ range for settings menu starts @@ -461,7 +462,7 @@ STR_FILE_MENU_SAVE_GAME :Uložiť hru STR_FILE_MENU_LOAD_GAME :Nahrať hru STR_FILE_MENU_QUIT_GAME :Opustiť hru STR_FILE_MENU_SEPARATOR : -STR_FILE_MENU_EXIT :Ukončiť program +STR_FILE_MENU_EXIT :Ukončiť ############ range ends here # map menu @@ -1741,6 +1742,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vždy, keď sa STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiálne (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrické (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Jednotky hry (políčka/deň) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Jednotky výkonu vozidiel: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vždy, keď sa zobrazí výkon vozidla v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách From ca65f19b03f28bd6a2283d740ca6ae449bdc01e7 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Sun, 13 Sep 2020 23:24:46 +0200 Subject: [PATCH 350/601] Feature: Show group name as part of the default vehicle name. Only if the vehicle is member of a group and does not have a user defined name. --- src/group_cmd.cpp | 4 ++++ src/lang/english.txt | 1 + src/strings.cpp | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index fd63bd153a..bf25dae862 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -456,6 +456,8 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 InvalidateWindowData(WC_REPLACE_VEHICLE, g->vehicle_type, 1); InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), VehicleListIdentifier(VL_GROUP_LIST, g->vehicle_type, _current_company).Pack()); InvalidateWindowData(WC_COMPANY_COLOUR, g->owner, g->vehicle_type); + InvalidateWindowClassesData(WC_VEHICLE_VIEW); + InvalidateWindowClassesData(WC_VEHICLE_DETAILS); } return CommandCost(); @@ -545,6 +547,8 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u SetWindowDirty(WC_VEHICLE_VIEW, v->index); SetWindowDirty(WC_VEHICLE_DETAILS, v->index); InvalidateWindowData(GetWindowClassForVehicleType(v->type), VehicleListIdentifier(VL_GROUP_LIST, v->type, _current_company).Pack()); + InvalidateWindowData(WC_VEHICLE_VIEW, v->index); + InvalidateWindowData(WC_VEHICLE_DETAILS, v->index); } return CommandCost(); diff --git a/src/lang/english.txt b/src/lang/english.txt index b8756049d2..f08272d37a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -5037,6 +5037,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} Buoy STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Buoy #{COMMA} STR_FORMAT_COMPANY_NUM :(Company {COMMA}) STR_FORMAT_GROUP_NAME :Group {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} Waypoint STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Waypoint #{COMMA} diff --git a/src/strings.cpp b/src/strings.cpp index c2edf8e171..ae0ab2c906 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1467,6 +1467,11 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg int64 args_array[] = {(int64)(size_t)v->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + } else if (v->group_id != DEFAULT_GROUP) { + /* The vehicle has no name, but is member of a group, so print group name */ + int64 args_array[] = {v->group_id, v->unitnumber}; + StringParameters tmp_params(args_array); + buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_VEHICLE_NAME, &tmp_params, last); } else { int64 args_array[] = {v->unitnumber}; StringParameters tmp_params(args_array); From f7b8e7e46c4864f518d7455c80946938e29077ba Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 15 Dec 2020 10:36:19 +0100 Subject: [PATCH 351/601] Fix: prefix the Nth vehicle with "#" when ungrouped This is for consistency; most other objects add a # to indicate it is the Nth of that object, except for Trains / RVs / Ships / Aircrafts. This becomes painfully apparent with unnamed vehicles in groups, which do get a "#". --- regression/regression/result.txt | 2 +- src/lang/english.txt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/regression/regression/result.txt b/regression/regression/result.txt index ab441256d5..9ae029932d 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -9075,7 +9075,7 @@ ERROR: IsEnd() is invalid as Begin() is never called --Accounting-- GetCosts(): -5947 Should be: -5947 - GetName(): Road Vehicle 1 + GetName(): Road Vehicle #1 SetName(): true GetName(): MyVehicleName CloneVehicle(): 13 diff --git a/src/lang/english.txt b/src/lang/english.txt index f08272d37a..d3cf0de961 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4732,10 +4732,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Sugar Mine ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Unnamed -STR_SV_TRAIN_NAME :Train {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Road Vehicle {COMMA} -STR_SV_SHIP_NAME :Ship {COMMA} -STR_SV_AIRCRAFT_NAME :Aircraft {COMMA} +STR_SV_TRAIN_NAME :Train #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Road Vehicle #{COMMA} +STR_SV_SHIP_NAME :Ship #{COMMA} +STR_SV_AIRCRAFT_NAME :Aircraft #{COMMA} STR_SV_STNAME :{STRING1} STR_SV_STNAME_NORTH :{STRING1} North From e07afaeffb1da098dd8d623b5b66b339ee57530c Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 15 Dec 2020 21:39:29 +0100 Subject: [PATCH 352/601] Fix: a cargos sneaked in; should be cargoes for consistency (#8383) --- src/lang/english.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index d3cf0de961..d829b44361 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1315,7 +1315,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF 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 +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargoes and town growth requirements. NewGRF and Game Scripts allow finer control though STR_CONFIG_SETTING_LAND_GENERATOR :Land generator: {STRING2} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :The original generator depends on the base graphics set, and composes fixed landscape shapes. TerraGenesis is a Perlin noise based generator with finer control settings STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original From 1d85d71d29b8d554e9304f3feb6c26f8b9faea82 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 15 Dec 2020 20:52:41 +0000 Subject: [PATCH 353/601] Fix: for original terrain generator, keep a single gap of water at the borders (#7883) This means that for NE/NW, it should have one more in case of freeform-edges, and in case of SE/SW it should have one less. Reminder: freeform-edges only adds VOID tiles on X=0 and Y=0. --- src/landscape.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index f09bdcafff..33afd5163c 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -865,7 +865,8 @@ static void GenerateTerrain(int type, uint flag) uint x = r & MapMaxX(); uint y = (r >> MapLogX()) & MapMaxY(); - if (x < 2 || y < 2) return; + uint edge_distance = 1 + (_settings_game.construction.freeform_edges ? 1 : 0); + if (x <= edge_distance || y <= edge_distance) return; DiagDirection direction = (DiagDirection)GB(r, 22, 2); uint w = templ->width; @@ -900,8 +901,8 @@ static void GenerateTerrain(int type, uint flag) } } - if (x + w >= MapMaxX() - 1) return; - if (y + h >= MapMaxY() - 1) return; + if (x + w >= MapMaxX()) return; + if (y + h >= MapMaxY()) return; TileIndex tile = TileXY(x, y); From 0471de2d9220a415d9183a22765e40b65e4ef2c4 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Wed, 16 Dec 2020 06:39:51 +0900 Subject: [PATCH 354/601] Fix: Remove unnessary reference to suppress warning (#8337) Apple Clang version 12 (bundled with Xcode 12) complaints about copying small objects in range loop (-Wrange-loop-analysis introduced by -Wall). This warning can be easily avoided by removing the reference from the const pointer type. --- src/network/network_content.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 0140d3ef20..c4d26355c0 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -903,7 +903,7 @@ void ClientNetworkContentSocketHandler::ToggleSelectedState(const ContentInfo *c */ void ClientNetworkContentSocketHandler::ReverseLookupDependency(ConstContentVector &parents, const ContentInfo *child) const { - for (const ContentInfo * const &ci : this->infos) { + for (const ContentInfo *ci : this->infos) { if (ci == child) continue; for (uint i = 0; i < ci->dependency_count; i++) { From d5f05fb7813c2c835010932aee6e5e9edf93c82b Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 15 Dec 2020 22:42:03 +0100 Subject: [PATCH 355/601] Fix: [NewGRF] Action 7/9 conditions 0x0F to 0x12 failed, if 'param' was 0x88. (#8382) Fix: [NewGRF] Action 7/9 conditions 0x0B to 0x12 failed, if 'param' was 0x85. These conditions are supposed to ignore 'param' entirely. --- src/newgrf.cpp | 79 +++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 21dc9ffb4e..aa48022265 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6553,19 +6553,45 @@ static void SkipIf(ByteReader *buf) return; } - uint32 param_val = GetParamVal(param, &cond_val); + grfmsg(7, "SkipIf: Test condtype %d, param 0x%02X, condval 0x%08X", condtype, param, cond_val); - grfmsg(7, "SkipIf: Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val); - - /* - * Parameter (variable in specs) 0x88 can only have GRF ID checking - * conditions, except conditions 0x0B, 0x0C (cargo availability) and - * 0x0D, 0x0E (Rail type availability) as those ignore the parameter. - * So, when the condition type is one of those, the specific variable - * 0x88 code is skipped, so the "general" code for the cargo - * availability conditions kicks in. + /* condtypes that do not use 'param' are always valid. + * condtypes that use 'param' are either not valid for param 0x88, or they are only valid for param 0x88. */ - if (param == 0x88 && (condtype < 0x0B || condtype > 0x0E)) { + if (condtype >= 0x0B) { + /* Tests that ignore 'param' */ + switch (condtype) { + case 0x0B: result = GetCargoIDByLabel(BSWAP32(cond_val)) == CT_INVALID; + break; + case 0x0C: result = GetCargoIDByLabel(BSWAP32(cond_val)) != CT_INVALID; + break; + case 0x0D: result = GetRailTypeByLabel(BSWAP32(cond_val)) == INVALID_RAILTYPE; + break; + case 0x0E: result = GetRailTypeByLabel(BSWAP32(cond_val)) != INVALID_RAILTYPE; + break; + case 0x0F: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt == INVALID_ROADTYPE || !RoadTypeIsRoad(rt); + break; + } + case 0x10: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt != INVALID_ROADTYPE && RoadTypeIsRoad(rt); + break; + } + case 0x11: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt == INVALID_ROADTYPE || !RoadTypeIsTram(rt); + break; + } + 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; + } + } else if (param == 0x88) { /* GRF ID checks */ GRFConfig *c = GetGRFConfig(cond_val, mask); @@ -6606,7 +6632,8 @@ static void SkipIf(ByteReader *buf) default: grfmsg(1, "SkipIf: Unsupported GRF condition type %02X. Ignoring", condtype); return; } } else { - /* Parameter or variable tests */ + /* Tests that use 'param' and are not GRF ID checks. */ + uint32 param_val = GetParamVal(param, &cond_val); // cond_val is modified for param == 0x85 switch (condtype) { case 0x00: result = !!(param_val & (1 << cond_val)); break; @@ -6620,34 +6647,6 @@ static void SkipIf(ByteReader *buf) break; case 0x05: result = (param_val & mask) > cond_val; break; - case 0x0B: result = GetCargoIDByLabel(BSWAP32(cond_val)) == CT_INVALID; - break; - case 0x0C: result = GetCargoIDByLabel(BSWAP32(cond_val)) != CT_INVALID; - break; - case 0x0D: result = GetRailTypeByLabel(BSWAP32(cond_val)) == INVALID_RAILTYPE; - break; - case 0x0E: result = GetRailTypeByLabel(BSWAP32(cond_val)) != INVALID_RAILTYPE; - break; - case 0x0F: { - RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); - result = rt == INVALID_ROADTYPE || !RoadTypeIsRoad(rt); - break; - } - case 0x10: { - RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); - result = rt != INVALID_ROADTYPE && RoadTypeIsRoad(rt); - break; - } - case 0x11: { - RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); - result = rt == INVALID_ROADTYPE || !RoadTypeIsTram(rt); - break; - } - 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 88f30f7fe774f1e8943b5f5bed0264ac3f5d3a7b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 15 Dec 2020 22:47:57 +0100 Subject: [PATCH 356/601] Fix #8313: use correct capitalization for TTO / DOS base-music (#8385) DOS did not have cases in filenames. Different OS interpret them as either all-lowercase or all-uppercase. So we try both. All-uppercase is done by the obg/obm/obs files, and if opening fails, OpenTTD will automatically retry the all-lowercase variant. So for those who already have the files lowercase, nothing changes. For those that install fresh from TTO, it should now work out-of-the-box. --- media/baseset/orig_dos.obm | 46 +++++++++++++++++++------------------- media/baseset/orig_tto.obm | 36 ++++++++++++++--------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/media/baseset/orig_dos.obm b/media/baseset/orig_dos.obm index 49c0f67703..e476c11dd3 100644 --- a/media/baseset/orig_dos.obm +++ b/media/baseset/orig_dos.obm @@ -8,40 +8,40 @@ version = 1 @description_STR_BASEMUSIC_DOS_DESCRIPTION@ [files] -theme = gm.cat -old_0 = gm.cat -old_1 = gm.cat -old_2 = gm.cat -old_3 = gm.cat -old_4 = gm.cat -old_5 = gm.cat -old_6 = gm.cat -old_7 = gm.cat +theme = GM.CAT +old_0 = GM.CAT +old_1 = GM.CAT +old_2 = GM.CAT +old_3 = GM.CAT +old_4 = GM.CAT +old_5 = GM.CAT +old_6 = GM.CAT +old_7 = GM.CAT old_8 = old_9 = -new_0 = gm.cat -new_1 = gm.cat -new_2 = gm.cat -new_3 = gm.cat -new_4 = gm.cat -new_5 = gm.cat -new_6 = gm.cat +new_0 = GM.CAT +new_1 = GM.CAT +new_2 = GM.CAT +new_3 = GM.CAT +new_4 = GM.CAT +new_5 = GM.CAT +new_6 = GM.CAT new_7 = new_8 = new_9 = -ezy_0 = gm.cat -ezy_1 = gm.cat -ezy_2 = gm.cat -ezy_3 = gm.cat -ezy_4 = gm.cat -ezy_5 = gm.cat +ezy_0 = GM.CAT +ezy_1 = GM.CAT +ezy_2 = GM.CAT +ezy_3 = GM.CAT +ezy_4 = GM.CAT +ezy_5 = GM.CAT ezy_6 = ezy_7 = ezy_8 = ezy_9 = [md5s] -gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb +GM.CAT = 7a29d2d0c4f7d2e03091ffa9b2bdfffb [catindex] theme = 0 diff --git a/media/baseset/orig_tto.obm b/media/baseset/orig_tto.obm index ced9cf5807..fe97fd1439 100644 --- a/media/baseset/orig_tto.obm +++ b/media/baseset/orig_tto.obm @@ -8,25 +8,25 @@ version = 1 @description_STR_BASEMUSIC_TTO_DESCRIPTION@ [files] -theme = gm-tto.cat -old_0 = gm-tto.cat -old_1 = gm-tto.cat -old_2 = gm-tto.cat -old_3 = gm-tto.cat -old_4 = gm-tto.cat -old_5 = gm-tto.cat -old_6 = gm-tto.cat -old_7 = gm-tto.cat +theme = GM-TTO.CAT +old_0 = GM-TTO.CAT +old_1 = GM-TTO.CAT +old_2 = GM-TTO.CAT +old_3 = GM-TTO.CAT +old_4 = GM-TTO.CAT +old_5 = GM-TTO.CAT +old_6 = GM-TTO.CAT +old_7 = GM-TTO.CAT old_8 = old_9 = -new_0 = gm-tto.cat -new_1 = gm-tto.cat -new_2 = gm-tto.cat -new_3 = gm-tto.cat -new_4 = gm-tto.cat -new_5 = gm-tto.cat -new_6 = gm-tto.cat -new_7 = gm-tto.cat +new_0 = GM-TTO.CAT +new_1 = GM-TTO.CAT +new_2 = GM-TTO.CAT +new_3 = GM-TTO.CAT +new_4 = GM-TTO.CAT +new_5 = GM-TTO.CAT +new_6 = GM-TTO.CAT +new_7 = GM-TTO.CAT new_8 = new_9 = ezy_0 = @@ -60,7 +60,7 @@ new_6 = 14 new_7 = 3 [md5s] -gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e +GM-TTO.CAT = 26e85ff84b0063aa5da05dd4698fc76e [names] ; Names get read from the CAT file From d989fb516bf271bc59c97d7580b1b66d849a1c1b Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Wed, 16 Dec 2020 23:23:12 +0300 Subject: [PATCH 357/601] Change: send network error to the server before making an emergency save (#8387) --- src/network/network_client.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 74b802f919..dc593eacd7 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -217,10 +217,11 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) SendError(errorno); } + this->CloseConnection(res); + ClientNetworkEmergencySave(); _switch_mode = SM_MENU; - this->CloseConnection(res); _networking = false; } From b2895dfcd056798bb82957a55394a941c61376f5 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Wed, 16 Dec 2020 23:56:32 +0300 Subject: [PATCH 358/601] Change: extend the allowed range for max loan setting (#8386) --- regression/regression/result.txt | 18 +++++++++--------- src/company_cmd.cpp | 2 +- src/economy.cpp | 2 +- src/economy_type.h | 2 ++ src/settings_gui.cpp | 14 +++++++++----- src/table/settings.ini | 4 ++-- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 9ae029932d..52d957faf9 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -594,7 +594,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetBankBalance(): 100000 GetName(): (null : 0x00000000) GetLoanAmount(): 100000 - GetMaxLoanAmount(): 500000 + GetMaxLoanAmount(): 2000000000 GetLoanInterval(): 10000 SetLoanAmount(1): false SetLoanAmount(100): false @@ -606,8 +606,8 @@ ERROR: IsEnd() is invalid as Begin() is never called GetBankBalance(): 40000 GetLoanAmount(): 40000 SetLoanAmount(10000): true - GetBankBalance(): 500000 - GetLoanAmount(): 500000 + GetBankBalance(): 2000000000 + GetLoanAmount(): 2000000000 GetCompanyHQ(): -1 BuildCompanyHQ(): true GetCompanyHQ(): 33151 @@ -848,7 +848,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetAirportWidth(9): -1 GetAirportHeight(9): -1 GetAirportCoverageRadius(9): -1 - GetBankBalance(): 499790 + GetBankBalance(): 1999999790 GetPrice(): 5400 BuildAirport(): true IsHangarTile(): false @@ -858,11 +858,11 @@ ERROR: IsEnd() is invalid as Begin() is never called IsHangarTile(): true IsAirportTile(): true GetAirportType(): 0 - GetBankBalance(): 489890 + GetBankBalance(): 1999989890 RemoveAirport(): true IsHangarTile(): false IsAirportTile(): false - GetBankBalance(): 489626 + GetBankBalance(): 1999989626 BuildAirport(): true --Bridge-- @@ -7314,7 +7314,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 479664 + GetBankBalance(): 1999979664 BuildWaterDepot(): true BuildDock(): true BuildBuoy(): true @@ -7327,7 +7327,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): true IsLockTile(): true IsCanalTile(): true - GetBankBalance(): 465070 + GetBankBalance(): 1999965070 --AIWaypointList(BUOY)-- Count(): 1 @@ -7346,7 +7346,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 459675 + GetBankBalance(): 1999959675 BuildWaterDepot(): true BuildDock(): true diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 25b3fe6fbb..c871b64c97 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -553,7 +553,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) ResetCompanyLivery(c); _company_colours[c->index] = (Colours)c->colour; - c->money = c->current_loan = (100000ll * _economy.inflation_prices >> 16) / 50000 * 50000; + c->money = c->current_loan = (min(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000; c->share_owners[0] = c->share_owners[1] = c->share_owners[2] = c->share_owners[3] = INVALID_OWNER; diff --git a/src/economy.cpp b/src/economy.cpp index 00bdd6f534..7c801e854d 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -746,7 +746,7 @@ bool AddInflation(bool check_year) void RecomputePrices() { /* Setup maximum loan */ - _economy.max_loan = (_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000; + _economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000; /* Setup price bases */ for (Price i = PR_BEGIN; i < PR_END; i++) { diff --git a/src/economy_type.h b/src/economy_type.h index 842e2711c3..3e95195066 100644 --- a/src/economy_type.h +++ b/src/economy_type.h @@ -196,6 +196,8 @@ struct PriceBaseSpec { /** The "steps" in loan size, in British Pounds! */ static const int LOAN_INTERVAL = 10000; +/** The size of loan for a new company, in British Pounds! */ +static const int64 INITIAL_LOAN = 100000; /** * Maximum inflation (including fractional part) without causing overflows in int64 price computations. diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index cfb6bc5b81..c7dd0cb140 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2187,12 +2187,14 @@ struct GameSettingsWindow : Window { } else { /* Only open editbox if clicked for the second time, and only for types where it is sensible for. */ if (this->last_clicked == pe && sd->desc.cmd != SDT_BOOLX && !(sd->desc.flags & SGF_MULTISTRING)) { + int64 value64 = value; /* Show the correct currency-translated value */ - if (sd->desc.flags & SGF_CURRENCY) value *= _currency->rate; + if (sd->desc.flags & SGF_CURRENCY) value64 *= _currency->rate; this->valuewindow_entry = pe; - SetDParam(0, value); - ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); + SetDParam(0, value64); + /* Limit string length to 14 so that MAX_INT32 * max currency rate doesn't exceed MAX_INT64. */ + ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 15, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); } this->SetDisplayedHelpText(pe); } @@ -2217,10 +2219,12 @@ struct GameSettingsWindow : Window { int32 value; if (!StrEmpty(str)) { - value = atoi(str); + long long llvalue = atoll(str); /* Save the correct currency-translated value */ - if (sd->desc.flags & SGF_CURRENCY) value /= _currency->rate; + if (sd->desc.flags & SGF_CURRENCY) llvalue /= _currency->rate; + + value = (int32)ClampToI32(llvalue); } else { value = (int32)(size_t)sd->desc.def; } diff --git a/src/table/settings.ini b/src/table/settings.ini index b578d462b5..cca6a99bf8 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -148,8 +148,8 @@ type = SLE_UINT32 from = SLV_97 guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_CURRENCY def = 300000 -min = 100000 -max = 500000 +min = 0 +max = 2000000000 interval = 50000 str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT From 40269f5df21aaeb0e965670aa7c1d9de480eb8ff Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 17 Dec 2020 18:01:12 +0000 Subject: [PATCH 359/601] Update: Translations from eints finnish: 47 changes by hpiirai --- src/lang/finnish.txt | 93 ++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index b85a8ac0de..8f1c037227 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -274,9 +274,9 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :½!"#¤%&/()=?` # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Pituus: {NUM} -STR_MEASURE_AREA :{BLACK}Pinta-ala: {NUM} x {NUM} +STR_MEASURE_AREA :{BLACK}Pinta-ala: {NUM}×{NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Pituus: {NUM}{}Korkeusero: {HEIGHT} -STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pinta-ala: {NUM} x {NUM}{}Korkeusero: {HEIGHT} +STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pinta-ala: {NUM}×{NUM}{}Korkeusero: {HEIGHT} # These are used in buttons @@ -1026,7 +1026,7 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}Täyskuv # Custom currency window STR_CURRENCY_WINDOW :{WHITE}Oma valuutta -STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Vaihtokurssi: {ORANGE}{CURRENCY_LONG} = £ {COMMA} +STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Vaihtokurssi: {ORANGE}{CURRENCY_LONG} = {COMMA} £ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Pienennä vaihtokurssia verrattuna puntaan (£) STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Suurenna vaihtokurssia verrattuna puntaan (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Aseta vaihtokurssi valuutallesi verrattuna puntaan (£) @@ -1261,7 +1261,7 @@ STR_CONFIG_SETTING_FREIGHT_TRAINS :Rahdin painoker STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Määritä rahdin kuljettamisen vaikutus junissa. Korkeammat arvot tekevät rahdin kuljettamisesta raskaampaa junille, erityisesti mäissä STR_CONFIG_SETTING_PLANE_SPEED :Lentokoneiden nopeuskerroin: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Määritä lentokoneiden suhteellinen nopeus verrattuna toisiin kulkuneuvotyyppeihin, jotta vähennetään ilma-alusksilla tehtyjen kuljetusten tuottoa -STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} +STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Lento-onnettomuuksien määrä: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden.{}¹ Isot lentokoneet voivat kuitenkin aina tuhoutua pienille lentokentille laskeutuessaan. STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään¹ @@ -1296,7 +1296,7 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkune STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING} STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Suhteellinen ikä, jonka jälkeen kulkuneuvo voidaan uudistaa automaattisesti -STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 tta tta} ennen kulkuneuvon käyttöiän loppua +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 si tta} ennen kulkuneuvon käyttöiän loppua STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen kulkuneuvon käyttöiän lopun STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä kulkuneuvon automaattiseen uudistukseen: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pienin rahamäärä, joka on oltava pankissa ennen kulkuneuvojen automaattista uudistamista @@ -1315,7 +1315,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF: STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo 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 +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. STR_CONFIG_SETTING_LAND_GENERATOR :Maastogeneraattori: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Alkuperäinen maastonluoja riippuu perusgrafiikkapaketista ja luo ennalta määritettyjä maastonmuotoja. TerraGenesis luo maastoa Perlin-kohinan perusteella ja mahdollistaa asetusten tarkemman määrittelyn STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Alkuperäinen @@ -1487,7 +1487,7 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :Vaikea STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Salli tekoälyt moninpelissä: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sallii tietokonepelaajien osallistumisen moninpeleihin -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodet ennen skriptin pysäyttämistä: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Operaatiokoodien määrä ennen skriptin pysäyttämistä: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Suurin sallittu määrä laskutoimituksia, jonka skripti voi suorittaa yhden vuoron aikana STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Skriptikohtainen muistinkäyttö enintään: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon muistia yksittäinen skripti saa käyttää, ennen kuin se pakotetaan lopettamaan. Jos kartta on iso, tätä arvoa voi joutua suurentamaan. @@ -1645,7 +1645,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea STR_CONFIG_SETTING_LARGER_TOWNS :Kaupunkien osuus: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Kaupunkien määrä: kaupungit ovat isompia jo alussa ja kasvavat nopeammin kuin muut kunnat -STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA} +STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1/{COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kaupunkien keskimääräinen koko suhteessa muihin kuntiin pelin alussa @@ -2159,7 +2159,7 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Verkkope STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Palvelimen pelitallennetta ei voi ladata STR_NETWORK_ERROR_SERVER_START :{WHITE}Palvelinta ei voitu käynnistää STR_NETWORK_ERROR_CLIENT_START :{WHITE}Yhdistäminen ei onnistunut -STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys #{NUM} aikakatkaistiin +STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys nro {NUM} aikakatkaistiin STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Protokollavirhe tapahtui ja yhteys suljettiin STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Tämän asiakkaan versio ei vastaa palvelimen versiota STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä salasana @@ -2216,10 +2216,10 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :peliskripti ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :poistutaan STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} on liittynyt peliin -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (Asiakas #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (asiakas nro {2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön nro {2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} on liittynyt katselijoihin -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (nro {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} on poistunut pelistä ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muuttanut nimekseen {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi yhtiöllesi {2:CURRENCY_LONG} @@ -2524,7 +2524,7 @@ STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu -STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM} × {NUM} ruutua +STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM}×{NUM} ruutua STR_OBJECT_CLASS_LTHS :Majakat STR_OBJECT_CLASS_TRNS :Lähettimet @@ -2622,7 +2622,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Raitioti STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Rautatien omistaja: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kunta: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ei mitään -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM}×{NUM}×{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Rakennettu: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aseman luokka: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Aseman tyyppi: {LTBLUE}{STRING} @@ -2862,7 +2862,7 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuaali STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Korkeuskartan kierto: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Korkeuskartan nimi: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Koko: -STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM}×{NUM} STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Muuta suurinta sallittua kartan korkeutta STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Vaihda lumirajan korkeutta @@ -2885,7 +2885,7 @@ STR_GENERATION_ABORT :{BLACK}Peruuta STR_GENERATION_ABORT_CAPTION :{WHITE}Keskeytä maailman luominen STR_GENERATION_ABORT_MESSAGE :{YELLOW}Haluatko varmasti keskeyttää maan luomisen? STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina -STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} +STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen @@ -3072,7 +3072,7 @@ STR_INVALID_VEHICLE : Date: Fri, 18 Dec 2020 18:08:06 +0000 Subject: [PATCH 360/601] Update: Translations from eints russian: 10 changes by Ln-Wolf finnish: 4 changes by hpiirai slovak: 16 changes by FuryPapaya french: 1 change by glx22 --- src/lang/finnish.txt | 8 ++++---- src/lang/french.txt | 1 + src/lang/russian.txt | 13 ++++++++++--- src/lang/slovak.txt | 26 ++++++++++++++++---------- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 8f1c037227..c0dc8553c4 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3426,10 +3426,10 @@ STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuta tuotantotasoa (prosentteina, 800{NBSP}% asti) # Vehicle lists -STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} juna{P "" a} -STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} ajoneuvo{P "" a} -STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laiva{P "" a} -STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} ilma-alus{P "" ta} +STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} – {COMMA} juna{P "" a} +STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} – {COMMA} ajoneuvo{P "" a} +STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} – {COMMA} laiva{P "" a} +STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} – {COMMA} ilma-alus{P "" ta} STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat – napsauta junaa saadaksesi tietoja STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot – napsauta ajoneuvoa saadaksesi tietoja diff --git a/src/lang/french.txt b/src/lang/french.txt index f256421614..d885db2ac1 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -5038,6 +5038,7 @@ STR_FORMAT_BUOY_NAME :Bouée de {TOWN STR_FORMAT_BUOY_NAME_SERIAL :Bouée de {TOWN} n°{NBSP}{COMMA} STR_FORMAT_COMPANY_NUM :(Compagnie {COMMA}) STR_FORMAT_GROUP_NAME :Groupe {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} - {STRING} STR_FORMAT_WAYPOINT_NAME :Point de contrôle de {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Point de contrôle de {TOWN} n°{NBSP}{COMMA} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index cbe8e523af..9ceb1b6bc4 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -320,6 +320,7 @@ STR_COLOUR_DEFAULT :По умолч STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}мил{P я и ь}/ч STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}км/ч STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}м/с +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}клет{P ка ки ок}/день STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}лс STR_UNITS_POWER_METRIC :{COMMA}{NBSP}лс @@ -881,7 +882,7 @@ STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Автобусная станция STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Аэропорт/Вертодром STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Пристань -STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Неровность +STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Бездорожье STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Трава STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Пустырь STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Поля @@ -1466,7 +1467,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Показыв STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Показывать название модуля NewGRF, содержащего выбранную модель транспортного средства, в окне покупки транспорта. STR_CONFIG_SETTING_LANDSCAPE :Тип карты: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Выбор типа карты определяет основу игрового процесса, например, доступные типы транспорта и грузов, различные условия роста городов. Всё это также может быть изменено с помощью модулей NewGRF и игровых скриптов. +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Тип карты определяет основу игрового процесса, например, доступные типы транспорта и грузов, различные условия роста городов. Всё это также может быть изменено с помощью модулей NewGRF и игровых скриптов. STR_CONFIG_SETTING_LAND_GENERATOR :Генератор ландшафта: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Оригинальный генератор рассчитан на базовый графический набор и создаёт ландшафт из типовых элементов.{}TerraGenesis использует для создания ландшафта шум Перлина и более тонко настраивается. STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Оригинальный @@ -1705,6 +1706,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Последн STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :По прошествии указанного года рассчитывается рейтинг компании и выводится таблица рекордов. После этого игру можно продолжить.{}Если указанный год предшествует году начала игры, то таблица рекордов не отображается. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Никогда +STR_CONFIG_SETTING_ECONOMY_TYPE :Экономика: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :При плавной экономике изменения в производительности предприятий небольшие и происходят чаще.{}При стабильной экономике предприятия не закрываются и не меняют производительность.{}Типы предприятий, добавленные с помощью NewGRF, могут игнорировать эту настройку. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :классическая +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :плавная +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :стабильная STR_CONFIG_SETTING_ALLOW_SHARES :Разрешить торговлю акциями других компаний: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Разрешает торговлю акциями транспортных компаний. Акции выпускаются компаниями через некоторое время после основания. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мин. возраст компании для выпуска акций: {STRING} @@ -1957,6 +1963,7 @@ STR_INTRO_TRANSLATION :{BLACK}На э # Quit window STR_QUIT_CAPTION :{WHITE}Выход +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы уверены, что хотите выйти из OpenTTD? STR_QUIT_YES :{BLACK}Да STR_QUIT_NO :{BLACK}Нет @@ -2813,7 +2820,7 @@ STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Огра # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Камни -STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Неровность +STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Бездорожье STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Пустырь STR_LAI_CLEAR_DESCRIPTION_GRASS :Трава STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поля diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index fe0ebc1bac..5c5eef0509 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1383,7 +1383,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobraziť názo STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Pridá riadok do zoznamu vozidiel, ktorý ukazuje z akého NewGRF vozidlo pochádza. STR_CONFIG_SETTING_LANDSCAPE :Krajina: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajiny definuje základný herný scenár s rôznymi tovarmi a veľkosťami miest. NewGRF a Herný Skript umožňujú ich lepšiu kontrolu +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajiny definujú základný herný scenár s rôznymi druhmi nákladu a požiadavkami na rast miest. NewGRF a herné skripty umožňujú ich lepšiu kontrolu STR_CONFIG_SETTING_LAND_GENERATOR :Generátor uzemia: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Pôvodný generátor závisí na základnej grafickej sade a skladá pevné tvary krajiny. TerraGenesis je generátor postavený na Perlinovom šume s jemnejšími možnosťami nastavenia STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Pôvodný @@ -1622,6 +1622,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Rok ukončenia STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok v ktorom končí hra pre zaznamenanie skóre. Na konci tohto roku sa nahrá skóre spoločnosti a zobrazí sa tabuľka s najvyšším skóre, avšak hráči môžu v hre naďalej pokračovať.{}Ak je tento rok pred začiatkom hry, tabuľka sa nikdy nezobrazí. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy +STR_CONFIG_SETTING_ECONOMY_TYPE :Typ ekonomiky: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Plynulá ekonomika robí zmeny v produkcii častejšie a v menších krokoch. Zamrznutá ekonomika neumožňuje zmeny v produkcii, ani zatváranie priemyslu. Toto nastavenie nemusí ovplyvňovať priemysel z NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originálna +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Plynulá +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Zamrznutá STR_CONFIG_SETTING_ALLOW_SHARES :Povoliť kupovanie podielov v ostatných spoločnostiach: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ak je zapnuté, povolí sa nákup a predaj podielov spoločností. Podiely budú prístupné len pre spoločnosti od urcitého veku. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimálny vek spoločnosti na obchodovanie s podielmi: {STRING} @@ -2222,7 +2227,7 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Sieť - STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Nedokážem nahrať hru zo servera STR_NETWORK_ERROR_SERVER_START :{WHITE}Server nemôžem spustiť STR_NETWORK_ERROR_CLIENT_START :{WHITE}Nemozem sa pripojit. -STR_NETWORK_ERROR_TIMEOUT :{WHITE}Vypršal časový limit pre spojenie #{NUM} +STR_NETWORK_ERROR_TIMEOUT :{WHITE}Vypršal časový limit pre spojenie č. {NUM} STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Chyba vznikla v protokole a spojenie je zatvorene. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revizia hry u tohto klienta nezodpoveda revizii hry na serveri. STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nespravne heslo. @@ -2279,10 +2284,10 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :herný skript ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :odchádza STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} vstúpil do hry -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} vstúpil do hry (Client #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} sa pripojil do spoločnosti #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} vstúpil do hry (klient č. {2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} sa pripojil do spoločnosti č. {2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} sa pripojil k pozorovateľom -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} založil novú spoločnosť (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} založil novú spoločnosť (č. {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opustil hru ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} zmenil/-a svoje meno na {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} dal ti spoločnosť {2:CURRENCY_LONG} @@ -4795,10 +4800,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=z}Cukrová b ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Bez názvu -STR_SV_TRAIN_NAME :{G=m}Vlak {COMMA} +STR_SV_TRAIN_NAME :{G=m}Vlak č. {COMMA} STR_SV_ROAD_VEHICLE_NAME :{G=s}Cestné vozidlo {COMMA} -STR_SV_SHIP_NAME :{G=z}Loď {COMMA} -STR_SV_AIRCRAFT_NAME :{G=s}Lietadlo {COMMA} +STR_SV_SHIP_NAME :{G=z}Loď č. {COMMA} +STR_SV_AIRCRAFT_NAME :{G=s}Lietadlo č. {COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Sever @@ -4827,7 +4832,7 @@ STR_SV_STNAME_UPPER :Horný {STRING} STR_SV_STNAME_LOWER :Dolný {STRING} STR_SV_STNAME_HELIPORT :{STRING} Heliport STR_SV_STNAME_FOREST :{STRING} Les -STR_SV_STNAME_FALLBACK :{STRING} Stanica #{NUM} +STR_SV_STNAME_FALLBACK :{STRING} Stanica č. {NUM} ############ end of savegame specific region! ##id 0x8000 @@ -5100,12 +5105,13 @@ STR_FORMAT_BUOY_NAME :{TOWN} Bója STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bója #{COMMA} STR_FORMAT_COMPANY_NUM :(Spoločnosť {COMMA}) STR_FORMAT_GROUP_NAME :Skupina {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} č. {COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Smerový bod {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerový bod {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_TRAIN :Vlakové depo {TOWN} -STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} č. {COMMA} STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Garáž {TOWN} STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garáž {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_SHIP :Lodenica {TOWN} From 7cdf7c7ca02d687df29575b633e2db5132a7f749 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 12 Dec 2020 16:29:09 +0100 Subject: [PATCH 361/601] Fix: [bundle] custom launch.sh is no longer required for Mac OS Co-authored-by: Owen Rudge --- cmake/InstallAndPackage.cmake | 6 +++++- cmake/PackageBundle.cmake | 3 +-- os/macosx/launch.sh | 8 -------- 3 files changed, 6 insertions(+), 11 deletions(-) delete mode 100644 os/macosx/launch.sh diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 9c2ae1924c..ee6522a800 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -7,7 +7,11 @@ if(OPTION_INSTALL_FHS) set(DOCS_DESTINATION_DIR "${CMAKE_INSTALL_DOCDIR}") set(MAN_DESTINATION_DIR "${CMAKE_INSTALL_MANDIR}") else() - set(BINARY_DESTINATION_DIR ".") + if(APPLE) + set(BINARY_DESTINATION_DIR "../MacOS") + else() + set(BINARY_DESTINATION_DIR ".") + endif() set(DATA_DESTINATION_DIR ".") set(DOCS_DESTINATION_DIR ".") set(MAN_DESTINATION_DIR ".") diff --git a/cmake/PackageBundle.cmake b/cmake/PackageBundle.cmake index 7f96e05fa8..737f4809aa 100644 --- a/cmake/PackageBundle.cmake +++ b/cmake/PackageBundle.cmake @@ -3,7 +3,6 @@ string(TIMESTAMP CURRENT_YEAR "%Y") set(CPACK_BUNDLE_NAME "OpenTTD") set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/os/macosx/openttd.icns") set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") -set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_SOURCE_DIR}/os/macosx/launch.sh") set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/os/macosx/splash.png") set(CPACK_DMG_FORMAT "UDBZ") @@ -20,7 +19,7 @@ install( " include(BundleUtilities) set(BU_CHMOD_BUNDLE_ITEMS TRUE) - fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/openttd\" \"\" \"\") + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/../MacOS/openttd\" \"\" \"\") " DESTINATION . COMPONENT Runtime) diff --git a/os/macosx/launch.sh b/os/macosx/launch.sh deleted file mode 100644 index 7b0389d8a5..0000000000 --- a/os/macosx/launch.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -ROOT_DIR=$(dirname "$0")/.. - -export DYLD_LIBRARY_PATH=${ROOT_DIR}/Frameworks - -cd ${ROOT_DIR}/Resources -exec ./openttd "$@" From b8217610ce11ab0b87c601e604462d8ed0f7b0f9 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 12 Dec 2020 16:29:32 +0100 Subject: [PATCH 362/601] Fix: [bundle] postfix the architecture for Mac OS bundles This in preparation for other architectures, like arm64. --- cmake/InstallAndPackage.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index ee6522a800..e6bc7a0b70 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -76,6 +76,9 @@ if(WIN32) set(ARCHITECTURE "win32") endif() endif() +if(APPLE AND CMAKE_OSX_ARCHITECTURES) + string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" ARCHITECTURE) +endif() set(CPACK_SYSTEM_NAME "${ARCHITECTURE}") @@ -98,7 +101,7 @@ if(APPLE) set(CPACK_GENERATOR "Bundle") include(PackageBundle) - set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx") + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macosx-${CPACK_SYSTEM_NAME}") elseif(WIN32) set(CPACK_GENERATOR "ZIP") if(OPTION_USE_NSIS) From 6228dde3da9b1368e8ca26e16fb2623f25b249ed Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 12 Dec 2020 16:30:02 +0100 Subject: [PATCH 363/601] Fix: [bundle] postfix the distribution for Linux bundles --- cmake/InstallAndPackage.cmake | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index e6bc7a0b70..53b6ce3e2c 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -121,7 +121,24 @@ elseif(UNIX) set(CPACK_GENERATOR "TXZ") endif() - set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${CPACK_SYSTEM_NAME}") + find_program(LSB_RELEASE_EXEC lsb_release) + execute_process(COMMAND ${LSB_RELEASE_EXEC} -is + OUTPUT_VARIABLE LSB_RELEASE_ID + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(NOT LSB_RELEASE_ID) + set(PLATFORM "generic") + elseif(LSB_RELEASE_ID STREQUAL "Ubuntu" OR LSB_RELEASE_ID STREQUAL "Debian") + execute_process(COMMAND ${LSB_RELEASE_EXEC} -cs + OUTPUT_VARIABLE LSB_RELEASE_CODENAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(TOLOWER "${LSB_RELEASE_ID}-${LSB_RELEASE_CODENAME}" PLATFORM) + else() + message(FATAL_ERROR "Unknown Linux distribution found for packaging; please consider creating a Pull Request to add support for this distribution.") + endif() + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${PLATFORM}-${CPACK_SYSTEM_NAME}") else() message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.") endif() From 2df182748c8470be9b73ee45ec8acd185985fbde Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 14 Dec 2020 09:51:38 +0100 Subject: [PATCH 364/601] Fix: [CMake] automatically detect dependencies for .deb packages --- cmake/PackageDeb.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmake/PackageDeb.cmake b/cmake/PackageDeb.cmake index 0d635ebcb3..5d6d26fdd9 100644 --- a/cmake/PackageDeb.cmake +++ b/cmake/PackageDeb.cmake @@ -1,4 +1,3 @@ set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${ARCHITECTURE}") set(CPACK_DEBIAN_PACKAGE_SECTION "games") -# TODO -- Fix depends -set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.15)") +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) From 7ea5904395c6f04a256e71a1dd4708518b604d8d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 12 Dec 2020 16:32:05 +0100 Subject: [PATCH 365/601] Add: [Actions] release workflow for both releases and nightlies This has several ways of being triggered: - When creating a new release via the GitHub interface. Fully automated that will produce new binaries, upload them, and it will even update the website to tell about the new version. - When triggered in an automated way from OpenTTD/workflows to start a nightly. - Manually via the Release workflow, which accepts branches, Pull Requests and tags to build. Rerunning a job is safe and should be without issues. Everything retriggers and updates what-ever might have been broken. In fact, except for dates, it should produce identical results. Co-authored-by: Charles Pigott --- .github/changelog.sh | 16 + .github/workflows/release.yml | 592 ++++++++++++++++++++++++++++++++++ 2 files changed, 608 insertions(+) create mode 100755 .github/changelog.sh create mode 100644 .github/workflows/release.yml diff --git a/.github/changelog.sh b/.github/changelog.sh new file mode 100755 index 0000000000..ea0da948c1 --- /dev/null +++ b/.github/changelog.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +tag=$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@') + +# If we are a tag, show the part of the changelog till (but excluding) the last stable +if [ -n "$tag" ]; then + grep='^[0-9]\+\.[0-9]\+\.[0-9]\+[^-]' + next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//') + cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9]+.[0-9]+.[0-9]+/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }' + exit 0 +fi + +# In all other cases, show the git log of the last 7 days +revdate=$(git log -1 --pretty=format:"%ci") +last_week=$(date -d "$revdate -7days" +"%Y-%m-%d %H:%M") +git log --after="${last_week}" --pretty=fuller diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..965fe1bf61 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,592 @@ +name: Release + +on: + workflow_dispatch: + inputs: + ref: + description: 'Ref to build (for Pull Requests, use refs/pull/NNN/head)' + required: true + repository_dispatch: + # client_payload should be the same as the inputs for workflow_dispatch. + types: + - Build* + release: + types: + - published + +jobs: + source: + name: Source + + runs-on: ubuntu-20.04 + + outputs: + version: ${{ steps.metadata.outputs.version }} + is_tag: ${{ steps.metadata.outputs.is_tag }} + trigger_type: ${{ steps.metadata.outputs.trigger_type }} + folder: ${{ steps.metadata.outputs.folder }} + + steps: + - name: Checkout (Release) + if: github.event_name == 'release' + uses: actions/checkout@v2 + with: + # We generate a changelog; for this we need the full git log. + fetch-depth: 0 + + - name: Checkout (Manual) + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v2 + with: + ref: ${{ github.event.inputs.ref }} + # We generate a changelog; for this we need the full git log. + fetch-depth: 0 + + - name: Checkout (Trigger) + if: github.event_name == 'repository_dispatch' + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.ref }} + # We generate a changelog; for this we need the full git log. + fetch-depth: 0 + + - name: Check valid branch name + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + REF="${{ github.event.inputs.ref }}" + elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then + REF="${{ github.event.client_payload.ref }}" + else + REF="${{ github.ref }}" + fi + + # Check if we are a tag. + if [ -n "$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || false)" ]; then + exit 0 + fi + + # Check if the checkout caused the branch to be named. + if [ "$(git rev-parse --abbrev-ref HEAD)" != "HEAD" ]; then + exit 0 + fi + + # Check if this was a pull request. + if [ -n "$(echo ${REF} | grep '^refs/pull/[0-9]*')" ]; then + PULL=$(echo ${REF} | cut -d/ -f3) + git checkout -b pr${PULL} + fi + + # Are we still in a detached state? Error out. + if [ "$(git rev-parse --abbrev-ref HEAD)" == "HEAD" ]; then + echo "The 'ref' given resulted in a checkout of a detached HEAD." + echo "We cannot detect the version for these checkout accurate." + echo "" + echo "If you want to build a Pull Request, make sure you use 'refs/pull/NNN/head'." + echo "" + echo "Cancelling build, as without a version we cannot store the artifacts." + exit 1 + fi + + - name: Generate metadata + id: metadata + run: | + echo "::group::Prepare metadata files" + cmake -DGENERATE_OTTDREV=1 -P cmake/scripts/FindVersion.cmake + ./.github/changelog.sh > .changelog + TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date + cat .ottdrev | cut -f 1 -d$'\t' > .version + + if [ $(cat .ottdrev | cut -f 6 -d$'\t') = '1' ]; then + # Assume that all tags are always releases. Why else make a tag? + IS_TAG="true" + + FOLDER="${{ env.FOLDER_RELEASES }}" + TRIGGER_TYPE="new-tag" + else + IS_TAG="false" + + BRANCH=$(git symbolic-ref -q HEAD | sed 's@.*/@@') + if [ -z "${BRANCH}" ]; then + echo "Internal error: branch name is empty." + echo "An earlier step should have prevented this from happening." + echo "Cancelling build, as without a branch name we cannot store the artifacts" + exit 1 + fi + + if [ "${BRANCH}" = "${{ env.NIGHTLIES_BRANCH }}" ]; then + # The "master" branch is special, and we call a nightly. + FOLDER="${{ env.FOLDER_NIGHTLIES }}/$(date +%Y)" + TRIGGER_TYPE="new-master" + else + # All other branches, which can be builds of Pull Requests, are + # put in their own folder. + FOLDER="${{ env.FOLDER_BRANCHES }}/${BRANCH}" + TRIGGER_TYPE="new-branch" + fi + fi + + mkdir -p build/bundles + cp .changelog build/bundles/changelog.txt + cp .release_date build/bundles/released.txt + cp README.md build/bundles/README.md + echo "::endgroup::" + + echo "Release Date: $(cat .release_date)" + echo "Revision: $(cat .ottdrev)" + echo "Version: $(cat .version)" + echo "Is tag: ${IS_TAG}" + echo "Folder on CDN: ${FOLDER}" + echo "Workflow trigger: ${TRIGGER_TYPE}" + + echo "::set-output name=version::$(cat .version)" + echo "::set-output name=is_tag::${IS_TAG}" + echo "::set-output name=folder::${FOLDER}" + echo "::set-output name=trigger_type::${TRIGGER_TYPE}" + env: + NIGHTLIES_BRANCH: master + FOLDER_RELEASES: openttd-releases + FOLDER_NIGHTLIES: openttd-nightlies + FOLDER_BRANCHES: openttd-branches + + - name: Remove VCS information + run: | + rm -rf .git + + - name: Create bundles + run: | + FOLDER_NAME=openttd-${{ steps.metadata.outputs.version }} + + # Rename the folder to openttd-NNN + mkdir ${FOLDER_NAME} + find . -maxdepth 1 -not -name . -not -name build -not -name ${FOLDER_NAME} -exec mv {} ${FOLDER_NAME}/ \; + + echo "::group::Create tarball (xz) bundle" + tar --xz -cvf build/bundles/${FOLDER_NAME}-source.tar.xz ${FOLDER_NAME} + echo "::endgroup::" + + # This tarball is only to be used within this workflow. + echo "::group::Create tarball (gz) bundle" + tar --gzip -cvf source.tar.gz ${FOLDER_NAME} + echo "::endgroup::" + + echo "::group::Create zip bundle" + zip -9 -r build/bundles/${FOLDER_NAME}-source.zip ${FOLDER_NAME} + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-source + path: build/bundles/* + retention-days: 5 + + - name: Store source (for other jobs) + uses: actions/upload-artifact@v2 + with: + name: internal-source + path: source.tar.gz + retention-days: 1 + + docs: + name: Docs + needs: source + + runs-on: ubuntu-20.04 + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + run: | + echo "::group::Update apt" + sudo apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" + sudo apt-get install -y --no-install-recommends \ + doxygen \ + # EOF + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive + + - name: Build + run: | + mkdir -p ${GITHUB_WORKSPACE}/build + cd ${GITHUB_WORKSPACE}/build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DOPTION_DOCS_ONLY=ON \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + make docs + echo "::endgroup::" + + - name: Create bundles + run: | + BASENAME=openttd-${{ needs.source.outputs.version }} + + cd ${GITHUB_WORKSPACE}/build + + mv docs/source ${BASENAME}-docs + mv docs/ai-api ${BASENAME}-docs-ai + mv docs/gs-api ${BASENAME}-docs-gs + + mkdir -p bundles + + echo "::group::Create docs bundle" + tar --xz -cf bundles/${BASENAME}-docs.tar.xz ${BASENAME}-docs + echo "::endgroup::" + + echo "::group::Create AI API docs bundle" + tar --xz -cf bundles/${BASENAME}-docs-ai.tar.xz ${BASENAME}-docs-ai + echo "::endgroup::" + + echo "::group::Create GameScript API docs bundle" + tar --xz -cf bundles/${BASENAME}-docs-gs.tar.xz ${BASENAME}-docs-gs + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-docs + path: build/bundles/*.tar.xz + retention-days: 5 + + linux: + name: Linux + needs: source + + if: needs.source.outputs.is_tag == 'true' + + strategy: + fail-fast: false + matrix: + include: + - container_image: "ubuntu:18.04" + bundle_name: "bionic" + - container_image: "ubuntu:20.04" + bundle_name: "focal" + - container_image: "ubuntu:20.10" + bundle_name: "groovy" + - container_image: "debian:buster" + bundle_name: "buster" + + runs-on: ubuntu-20.04 + container: + image: ${{ matrix.container_image }} + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + run: | + echo "::group::Update apt" + apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" + apt-get install -y --no-install-recommends \ + cmake \ + debhelper \ + g++ \ + git \ + make \ + openssl \ + libfontconfig-dev \ + libfluidsynth-dev \ + libicu-dev \ + liblzma-dev \ + liblzo2-dev \ + libsdl2-dev \ + libxdg-basedir-dev \ + lsb-release \ + zlib1g-dev \ + # EOF + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir -p build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=/usr \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) package + echo "::endgroup::" + + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-linux-${{ matrix.bundle_name }} + path: build/bundles + retention-days: 5 + + macos: + name: MacOS + needs: source + + strategy: + fail-fast: false + matrix: + include: + - arch: x64 + full_arch: x86_64 + + runs-on: macos-11.0 + env: + MACOSX_DEPLOYMENT_TARGET: 10.9 + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: '/usr/local/share/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'freetype liblzma lzo' + vcpkgTriplet: '${{ matrix.arch }}-osx' + + - name: Build tools + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DOPTION_TOOLS_ONLY=ON \ + # EOF + echo "::endgroup::" + + echo "::group::Build tools" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + make -j$(sysctl -n hw.logicalcpu) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ + -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + make -j$(sysctl -n hw.logicalcpu) package + echo "::endgroup::" + + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-macos-${{ matrix.arch }} + path: build/bundles + retention-days: 5 + + windows: + name: Windows + needs: source + + strategy: + fail-fast: false + matrix: + include: + - arch: x86 + - arch: x64 + + runs-on: windows-latest + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + shell: bash + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: 'c:/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'liblzma libpng lzo zlib' + vcpkgTriplet: '${{ matrix.arch }}-windows-static' + + - name: Build tools + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: false + buildDirectory: '${{ github.workspace }}/build-host' + buildWithCMakeArgs: '--target tools' + cmakeBuildType: RelWithDebInfo + cmakeAppendedArgs: ' -GNinja -DOPTION_TOOLS_ONLY=ON' + + - name: Install MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Build (with installer) + if: needs.source.outputs.is_tag == 'true' && matrix.arch != 'arm64' + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: true + buildDirectory: '${{ github.workspace }}/build' + cmakeBuildType: RelWithDebInfo + cmakeAppendedArgs: ' -GNinja -DOPTION_USE_NSIS=ON -DHOST_BINARY_DIR=${{ github.workspace }}/build-host' + + - name: Build (without installer) + if: needs.source.outputs.is_tag != 'true' || matrix.arch == 'arm64' + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: true + buildDirectory: '${{ github.workspace }}/build' + cmakeBuildType: RelWithDebInfo + cmakeAppendedArgs: ' -GNinja -DHOST_BINARY_DIR=${{ github.workspace }}/build-host' + + - name: Create bundles + shell: bash + run: | + cd ${GITHUB_WORKSPACE}/build + echo "::group::Run CPack" + cpack + echo "::endgroup::" + + echo "::group::Prepare PDB to be bundled" + PDB=$(ls bundles/*.zip | cut -d/ -f2 | sed 's/.zip$/.pdb/') + cp openttd.pdb bundles/${PDB} + xz -9 bundles/${PDB} + echo "::endgroup::" + + echo "::group::Cleanup" + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-windows-${{ matrix.arch }} + path: build/bundles + retention-days: 5 + + upload: + name: Upload + needs: + - source + - docs + - linux + - macos + - windows + + # The 'linux' job can be skipped if it is a nightly. That normally causes + # this job to be skipped too, unless we have this length boy :) + # "always()" is important here, it is the keyword to use to stop skipping + # this job if any dependency is skipped. It looks a bit silly, but it is + # how GitHub Actions work ;) + if: always() && needs.source.result == 'success' && needs.docs.result == 'success' && (needs.linux.result == 'success' || needs.linux.result == 'skipped') && needs.macos.result == 'success' && needs.windows.result == 'success' + + runs-on: ubuntu-20.04 + + steps: + - name: Download all bundles + uses: actions/download-artifact@v2 + + - name: Calculate checksums + run: | + echo "::group::Move bundles to a single folder" + mkdir bundles + mv openttd-*/* bundles/ + cd bundles + echo "::group::Build" + + for i in $(ls openttd-*); do + echo "::group::Calculating checksums for ${i}" + openssl dgst -r -md5 -hex $i > $i.md5sum + openssl dgst -r -sha1 -hex $i > $i.sha1sum + openssl dgst -r -sha256 -hex $i > $i.sha256sum + echo "::endgroup::" + done + + - name: Upload bundles to AWS + run: | + aws s3 cp --recursive --only-show-errors bundles/ s3://${{ secrets.CDN_S3_BUCKET }}/${{ needs.source.outputs.folder }}/${{ needs.source.outputs.version }}/ + + # We do not invalidate the CloudFront distribution here. The trigger + # for "New OpenTTD release" first updated the manifest files and + # creates an index.html. We invalidate after that, so everything + # becomes visible at once. + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.AWS_REGION }} + + - name: Trigger 'New OpenTTD release' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.DEPLOYMENT_TOKEN }} + repository: OpenTTD/workflows + event-type: ${{ needs.source.outputs.trigger_type }} + client-payload: '{"version": "${{ needs.source.outputs.version }}", "folder": "${{ needs.source.outputs.folder }}"}' From de614131e4e6b5810a7d1773e19f3caae1636b9f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 14 Dec 2020 10:01:58 +0100 Subject: [PATCH 366/601] Remove: [Azure Pipelines] So Long, and Thanks for All the Fish Azure Pipelines has build our releases for two years now, but we are finally switching to GitHub Actions. This to bring the full workflow to a single place, making it easier for people to see what is going on and how to influence the process. --- azure-pipelines-release-stable.yml | 10 - azure-pipelines-release.yml | 7 - azure-pipelines/changelog.sh | 16 -- azure-pipelines/manifest.sh | 87 -------- azure-pipelines/templates/linux-build.yml | 39 ---- .../templates/linux-claim-bundles.yml | 5 - azure-pipelines/templates/osx-build.yml | 9 - .../templates/osx-dependencies.yml | 5 - azure-pipelines/templates/release-bundles.yml | 26 --- .../templates/release-fetch-source.yml | 20 -- .../templates/release-manifest.yml | 20 -- .../templates/release-prepare-source.yml | 37 ---- azure-pipelines/templates/release.yml | 193 ------------------ azure-pipelines/templates/windows-build.yml | 17 -- .../templates/windows-dependencies.yml | 14 -- .../templates/windows-dependency-zip.yml | 5 - 16 files changed, 510 deletions(-) delete mode 100644 azure-pipelines-release-stable.yml delete mode 100644 azure-pipelines-release.yml delete mode 100755 azure-pipelines/changelog.sh delete mode 100755 azure-pipelines/manifest.sh delete mode 100644 azure-pipelines/templates/linux-build.yml delete mode 100644 azure-pipelines/templates/linux-claim-bundles.yml delete mode 100644 azure-pipelines/templates/osx-build.yml delete mode 100644 azure-pipelines/templates/osx-dependencies.yml delete mode 100644 azure-pipelines/templates/release-bundles.yml delete mode 100644 azure-pipelines/templates/release-fetch-source.yml delete mode 100644 azure-pipelines/templates/release-manifest.yml delete mode 100644 azure-pipelines/templates/release-prepare-source.yml delete mode 100644 azure-pipelines/templates/release.yml delete mode 100644 azure-pipelines/templates/windows-build.yml delete mode 100644 azure-pipelines/templates/windows-dependencies.yml delete mode 100644 azure-pipelines/templates/windows-dependency-zip.yml diff --git a/azure-pipelines-release-stable.yml b/azure-pipelines-release-stable.yml deleted file mode 100644 index ee756ca9ee..0000000000 --- a/azure-pipelines-release-stable.yml +++ /dev/null @@ -1,10 +0,0 @@ -trigger: - branches: - include: - - refs/tags/* -pr: none - -jobs: -- template: azure-pipelines/templates/release.yml - parameters: - IsStableRelease: true diff --git a/azure-pipelines-release.yml b/azure-pipelines-release.yml deleted file mode 100644 index 79e2da77ac..0000000000 --- a/azure-pipelines-release.yml +++ /dev/null @@ -1,7 +0,0 @@ -trigger: none -pr: none - -jobs: -- template: azure-pipelines/templates/release.yml - parameters: - IsStableRelease: false diff --git a/azure-pipelines/changelog.sh b/azure-pipelines/changelog.sh deleted file mode 100755 index ea0da948c1..0000000000 --- a/azure-pipelines/changelog.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -tag=$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@') - -# If we are a tag, show the part of the changelog till (but excluding) the last stable -if [ -n "$tag" ]; then - grep='^[0-9]\+\.[0-9]\+\.[0-9]\+[^-]' - next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//') - cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9]+.[0-9]+.[0-9]+/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }' - exit 0 -fi - -# In all other cases, show the git log of the last 7 days -revdate=$(git log -1 --pretty=format:"%ci") -last_week=$(date -d "$revdate -7days" +"%Y-%m-%d %H:%M") -git log --after="${last_week}" --pretty=fuller diff --git a/azure-pipelines/manifest.sh b/azure-pipelines/manifest.sh deleted file mode 100755 index 2703b37e56..0000000000 --- a/azure-pipelines/manifest.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh - -set -ex - -if [ -z "$1" ]; then - echo "Usage: $0 " - exit 1 -fi - -FOLDER=$1 - -if [ ! -e .version ] || [ ! -e .release_date ]; then - echo "This script should be executed in the root of an extracted source tarball" - exit 1 -fi - -# Find the name based on the version -if [ -e .is_stable ]; then - isTesting=$(cat .version | grep "RC\|beta" || true) - if [ -z "${isTesting}" ]; then - NAME="stable" - else - NAME="testing" - fi -else - NAME=$(cat .version | cut -d- -f2 | cut -d- -f-2) -fi - -# Convert the date to a YAML date -DATE=$(cat .release_date | tr ' ' T | sed 's/TUTC/:00-00:00/') -VERSION=$(cat .version) -BASE="openttd-${VERSION}" - -echo "name: ${NAME}" > manifest.yaml -echo "date: ${DATE}" >> manifest.yaml -echo "base: ${BASE}-" >> manifest.yaml - -error="" - -FILES= -DEV_FILES= -for filename in $(ls ${FOLDER} | grep -v ".txt$\|.md$\|sum$" | sort); do - case ${filename} in - *docs* |\ - *source* |\ - *dbg.deb |\ - *pdb.xz ) - DEV_FILES="${DEV_FILES} ${filename}" - ;; - - *) - FILES="${FILES} ${filename}" - ;; - esac -done - -# output_files key filename... -output_files() { - if [ "$#" -lt 2 ]; then return; fi - key=$1 - echo "${key}:" >> manifest.yaml - shift - while [ "$#" -gt 0 ]; do - filename=$1 - if [ ! -e ${FOLDER}/${filename}.md5sum ] || [ ! -e ${FOLDER}/${filename}.sha1sum ] || [ ! -e ${FOLDER}/${filename}.sha256sum ]; then - echo "ERROR: missing checksum file for ${filename}" 1>&2 - error="y" - shift - continue - fi - - echo "- id: ${filename}" >> manifest.yaml - echo " size: $(stat -c"%s" ${FOLDER}/${filename})" >> manifest.yaml - echo " md5sum: $(cat ${FOLDER}/${filename}.md5sum | cut -d\ -f1)" >> manifest.yaml - echo " sha1sum: $(cat ${FOLDER}/${filename}.sha1sum | cut -d\ -f1)" >> manifest.yaml - echo " sha256sum: $(cat ${FOLDER}/${filename}.sha256sum | cut -d\ -f1)" >> manifest.yaml - shift - done -} - -output_files files ${FILES} -output_files dev_files ${DEV_FILES} - -if [ -n "${error}" ]; then - echo "ERROR: exiting due to earlier errors" 1>&2 - exit 1 -fi diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml deleted file mode 100644 index 88095c9d32..0000000000 --- a/azure-pipelines/templates/linux-build.yml +++ /dev/null @@ -1,39 +0,0 @@ -parameters: - Image: '' - Tag: '' - ContainerCommand: '' - -steps: -# 'envVars' in the 'Docker@1' task is a bit funky. When you want to use a -# variable, you have to quote it. But the quote is also sent directly to -# Docker and ends up in the variable, which you don't want. To work around -# this, we set the correct variable first (which becomes an env-variable), and -# pass that env-variable through to Docker. We cannot use the normal -# 'variables' entry, as we are a template. So that results in this bit of -# Bash code. Not because it is pretty, but it is the only way we found that -# works. -- bash: | - echo "##vso[task.setvariable variable=TARGET_BRANCH]${SYSTEM_PULLREQUEST_TARGETBRANCH}" - echo "Target branch is ${SYSTEM_PULLREQUEST_TARGETBRANCH}" - displayName: "Set target branch" - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) - -- task: Docker@1 - ${{ if eq(parameters.Image, 'compile-farm') }}: - displayName: 'Build' - ${{ if eq(parameters.Image, 'compile-farm-ci') }}: - displayName: 'Build and test' - # Run the commit-checker only if it is a Pull Request - condition: and(succeeded(), or(not(contains(variables['Agent.JobName'], 'commit-checker')), eq(variables['Build.Reason'], 'PullRequest'))) - inputs: - command: 'Run an image' - imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }} - volumes: | - $(Build.SourcesDirectory):$(Build.SourcesDirectory) - /usr/local/share/games/openttd:/usr/local/share/games/openttd - workingDirectory: '$(Build.SourcesDirectory)' - containerCommand: ${{ parameters.ContainerCommand }} - runInBackground: false - envVars: | - TARGET_BRANCH - CTEST_OUTPUT_ON_FAILURE=1 diff --git a/azure-pipelines/templates/linux-claim-bundles.yml b/azure-pipelines/templates/linux-claim-bundles.yml deleted file mode 100644 index 162584f237..0000000000 --- a/azure-pipelines/templates/linux-claim-bundles.yml +++ /dev/null @@ -1,5 +0,0 @@ -steps: -# Because we run the compile in a docker (under root), we are not owner -# of the 'bundles' folder. Fix that by executing a chown on it. -- bash: sudo chown -R $(id -u):$(id -g) build/bundles - displayName: 'Claim bundles folder back' diff --git a/azure-pipelines/templates/osx-build.yml b/azure-pipelines/templates/osx-build.yml deleted file mode 100644 index 2baabf9327..0000000000 --- a/azure-pipelines/templates/osx-build.yml +++ /dev/null @@ -1,9 +0,0 @@ -steps: -- script: | - set -ex - - mkdir build - cd build - cmake .. - make -j2 - displayName: 'Build' diff --git a/azure-pipelines/templates/osx-dependencies.yml b/azure-pipelines/templates/osx-dependencies.yml deleted file mode 100644 index d918d12c52..0000000000 --- a/azure-pipelines/templates/osx-dependencies.yml +++ /dev/null @@ -1,5 +0,0 @@ -steps: -- script: | - set -ex - HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng freetype - displayName: 'Install dependencies' diff --git a/azure-pipelines/templates/release-bundles.yml b/azure-pipelines/templates/release-bundles.yml deleted file mode 100644 index f9f9fdcdd9..0000000000 --- a/azure-pipelines/templates/release-bundles.yml +++ /dev/null @@ -1,26 +0,0 @@ -parameters: - CalculateChecksums: true - -steps: -- ${{ if eq(parameters.CalculateChecksums, true) }}: - - bash: | - set -ex - cd build/bundles - - # CPack generates sha256, but with a slightly different name than - # our own convention. Also, because we rename files, the content - # might be out of date. To be safe, we remove it and replace it - # with our own version. - rm -f *.sha256 - - for i in $(ls); do - openssl dgst -r -md5 -hex $i > $i.md5sum - openssl dgst -r -sha1 -hex $i > $i.sha1sum - openssl dgst -r -sha256 -hex $i > $i.sha256sum - done - displayName: 'Calculate checksums' -- task: PublishBuildArtifacts@1 - displayName: 'Publish bundles' - inputs: - PathtoPublish: build/bundles/ - ArtifactName: bundles diff --git a/azure-pipelines/templates/release-fetch-source.yml b/azure-pipelines/templates/release-fetch-source.yml deleted file mode 100644 index 8b43983067..0000000000 --- a/azure-pipelines/templates/release-fetch-source.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Fetch the source tarball as prepared by an earlier job. In there is the -# version predefined. This ensures we are all going to compile the same -# source with the same version. - -steps: -- checkout: none -- task: DownloadBuildArtifacts@0 - displayName: 'Download source' - inputs: - downloadType: specific - itemPattern: 'bundles/openttd-*-source.tar.xz' - downloadPath: '$(Build.ArtifactStagingDirectory)' -- bash: tar --xz -xf ../a/bundles/openttd-*-source.tar.xz --strip-components=1 - displayName: 'Extracting source' -- bash: | - set -e - VERSION=$(cat .version) - echo "${VERSION}" - echo "##vso[build.updatebuildnumber]${VERSION}" - displayName: 'Change BuildNumber to version' diff --git a/azure-pipelines/templates/release-manifest.yml b/azure-pipelines/templates/release-manifest.yml deleted file mode 100644 index 9fe30717b4..0000000000 --- a/azure-pipelines/templates/release-manifest.yml +++ /dev/null @@ -1,20 +0,0 @@ -parameters: - IsStableRelease: false - -steps: -- task: DownloadBuildArtifacts@0 - displayName: 'Download all bundles' - inputs: - downloadType: specific - itemPattern: 'bundles/*' - downloadPath: '$(Build.ArtifactStagingDirectory)' -- ${{ if eq(parameters.IsStableRelease, true) }}: - - script: | - touch .is_stable - displayName: 'Mark as stable release' -- script: | - set -ex - ./azure-pipelines/manifest.sh ../a/bundles/ - mkdir -p build/bundles - mv manifest.yaml build/bundles/ - displayName: 'Create manifest.yaml' diff --git a/azure-pipelines/templates/release-prepare-source.yml b/azure-pipelines/templates/release-prepare-source.yml deleted file mode 100644 index 3eb148aef5..0000000000 --- a/azure-pipelines/templates/release-prepare-source.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Set the revisions, and remove the VCS files. -# This ensures everything else picks up on the predefined versions, and not -# that because of some build process the version all of a sudden changes. - -steps: -- script: | - set -ex - - if [ -n "${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}" ]; then - # We are triggered from a GitHub Pull Request - git checkout -B pr${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER} - elif [ "${BUILD_SOURCEBRANCHNAME}" = "merge" ] || [ "${BUILD_SOURCEBRANCHNAME}" = "head" ]; then - # We are manually triggered based on a GitHub Pull Request - PULLREQUESTNUMBER=$(echo ${BUILD_SOURCEBRANCH} | cut -d/ -f3) - git checkout -B pr${PULLREQUESTNUMBER} - else - git checkout -B ${BUILD_SOURCEBRANCHNAME} - fi - - # Generate .ottdrev, which contains the version information - cmake -DGENERATE_OTTDREV=1 -P cmake/scripts/FindVersion.cmake - - ./azure-pipelines/changelog.sh > .changelog - TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date - cat .ottdrev | cut -f 1 -d$'\t' > .version - echo "Release Date: $(cat .release_date)" - echo "Revision: $(cat .ottdrev)" - echo "Version: $(cat .version)" - displayName: 'Create version files' -- script: | - set -e - VERSION=$(cat .version) - echo "${VERSION}" - echo "##vso[build.updatebuildnumber]${VERSION}" - displayName: 'Change BuildNumber to version' -- script: find . -iname .hg -or -iname .git -or -iname .svn | xargs rm -rf - displayName: 'Remove VCS information' diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml deleted file mode 100644 index f6a00b7cf2..0000000000 --- a/azure-pipelines/templates/release.yml +++ /dev/null @@ -1,193 +0,0 @@ -parameters: - # If this is false, not all targets are triggered. For example: - # The NSIS installer for Windows and the creation of debs only work for - # releases. Not for any other type of binary. So they are skilled if this - # is set to false. - IsStableRelease: false - -jobs: -- job: source - displayName: 'Source' - pool: - vmImage: 'ubuntu-16.04' - - steps: - - template: release-prepare-source.yml - - script: | - set -ex - - # Rename the folder to openttd-NNN-source - mkdir openttd-$(Build.BuildNumber) - find . -maxdepth 1 -not -name . -not -name openttd-$(Build.BuildNumber) -exec mv {} openttd-$(Build.BuildNumber)/ \; - # Copy back release_date, as it is needed for the template 'release-bundles' - cp openttd-$(Build.BuildNumber)/.release_date .release_date - - mkdir -p build/bundles - tar --xz -cf build/bundles/openttd-$(Build.BuildNumber)-source.tar.xz openttd-$(Build.BuildNumber) - zip -9 -r -q build/bundles/openttd-$(Build.BuildNumber)-source.zip openttd-$(Build.BuildNumber) - displayName: 'Create bundle' - - template: release-bundles.yml - -- job: meta - displayName: 'Metadata' - pool: - vmImage: 'ubuntu-16.04' - dependsOn: source - - steps: - - template: release-fetch-source.yml - - script: | - set -ex - - mkdir -p build/bundles - cp .changelog build/bundles/changelog.txt - cp .release_date build/bundles/released.txt - cp README.md build/bundles/README.md - displayName: 'Copy meta files' - - template: release-bundles.yml - parameters: - CalculateChecksums: false - -- job: docs - displayName: 'Docs' - pool: - vmImage: 'ubuntu-16.04' - dependsOn: source - - steps: - - template: release-fetch-source.yml - - template: linux-build.yml - parameters: - Image: compile-farm - ContainerCommand: '$(Build.BuildNumber)' - Tag: docs - - template: linux-claim-bundles.yml - - template: release-bundles.yml - -- job: windows - displayName: 'Windows' - pool: - vmImage: 'VS2017-Win2016' - dependsOn: source - - strategy: - matrix: - Win32: - BundlePlatform: 'win32' - BuildArch: 'Win32' - VcpkgTargetTriplet: 'x86-windows-static' - Win64: - BundlePlatform: 'win64' - BuildArch: 'x64' - VcpkgTargetTriplet: 'x64-windows-static' - - steps: - - template: release-fetch-source.yml - - template: windows-dependencies.yml - - template: windows-dependency-zip.yml - - template: windows-build.yml - parameters: - BuildArch: $(BuildArch) - VcpkgTargetTriplet: $(VcpkgTargetTriplet) - BuildConfiguration: 'RelWithDebInfo' - ${{ if eq(parameters.IsStableRelease, true) }}: - OptionUseNSIS: "ON" - - task: VSBuild@1 - displayName: 'Create bundles' - inputs: - solution: build/PACKAGE.vcxproj - configuration: 'RelWithDebInfo' - - bash: | - set -ex - - cp build/RelWithDebInfo/openttd.pdb build/bundles/openttd-$(Build.BuildNumber)-windows-$(BundlePlatform).pdb - xz -9 build/bundles/openttd-$(Build.BuildNumber)-windows-$(BundlePlatform).pdb - displayName: 'Copy PDB to bundles folder' - - template: release-bundles.yml - -- ${{ if eq(parameters.IsStableRelease, true) }}: - - job: linux_stable - displayName: 'Linux' - pool: - vmImage: 'ubuntu-16.04' - dependsOn: source - - strategy: - matrix: - linux-ubuntu-xenial-i386-gcc: - Tag: 'linux-ubuntu-xenial-i386-gcc' - linux-ubuntu-xenial-amd64-gcc: - Tag: 'linux-ubuntu-xenial-amd64-gcc' - linux-ubuntu-bionic-i386-gcc: - Tag: 'linux-ubuntu-bionic-i386-gcc' - linux-ubuntu-bionic-amd64-gcc: - Tag: 'linux-ubuntu-bionic-amd64-gcc' - linux-ubuntu-focal-amd64-gcc: - Tag: 'linux-ubuntu-focal-amd64-gcc' - linux-debian-stretch-i386-gcc: - Tag: 'linux-debian-stretch-i386-gcc' - linux-debian-stretch-amd64-gcc: - Tag: 'linux-debian-stretch-amd64-gcc' - linux-debian-buster-i386-gcc: - Tag: 'linux-debian-buster-i386-gcc' - linux-debian-buster-amd64-gcc: - Tag: 'linux-debian-buster-amd64-gcc' - - steps: - - template: release-fetch-source.yml - - template: linux-build.yml - parameters: - Image: compile-farm - ContainerCommand: '$(Build.BuildNumber)' - Tag: $(Tag) - - template: linux-claim-bundles.yml - - template: release-bundles.yml - -- job: macos - displayName: 'MacOS' - pool: - vmImage: 'macOS-10.14' - dependsOn: source - - variables: - MACOSX_DEPLOYMENT_TARGET: 10.9 - - steps: - - template: release-fetch-source.yml - - template: osx-dependencies.yml - - template: osx-build.yml - - script: | - set -ex - - cd build - make package - displayName: 'Create bundles' - - template: release-bundles.yml - -- job: manifest - displayName: 'Manifest' - pool: - vmImage: 'ubuntu-16.04' - dependsOn: - - source - - docs - - windows - - ${{ if eq(parameters.IsStableRelease, true) }}: - - linux_stable - - macos - # "Skipped" is not a status, and is not succeeded. So it seems to be - # considered failed. So we trigger if all the earlier jobs are done (which - # might be succeeded, failed, or skipped), and run this job. This is not - # optimal, but given the rules, it is the only way to get this to work (as - # some jobs might be skipped). - condition: succeededOrFailed() - - steps: - - template: release-fetch-source.yml - - template: release-manifest.yml - ${{ if eq(parameters.IsStableRelease, true) }}: - parameters: - IsStableRelease: true - - template: release-bundles.yml - parameters: - CalculateChecksums: false diff --git a/azure-pipelines/templates/windows-build.yml b/azure-pipelines/templates/windows-build.yml deleted file mode 100644 index ae3b894144..0000000000 --- a/azure-pipelines/templates/windows-build.yml +++ /dev/null @@ -1,17 +0,0 @@ -parameters: - BuildArch: '' - VcpkgTargetTriplet: '' - BuildConfiguration: '' - OptionUseNSIS: 'OFF' - -steps: -- task: CMake@1 - displayName: 'Configure' - inputs: - cmakeArgs: '.. -G "Visual Studio 15 2017" -A ${{ parameters.BuildArch }} -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="${{ parameters.VcpkgTargetTriplet }}" -DOPTION_USE_NSIS="${{ parameters.OptionUseNSIS }}"' -- task: VSBuild@1 - displayName: 'Build' - inputs: - solution: build/openttd.vcxproj - configuration: ${{ parameters.BuildConfiguration }} - maximumCpuCount: true diff --git a/azure-pipelines/templates/windows-dependencies.yml b/azure-pipelines/templates/windows-dependencies.yml deleted file mode 100644 index 72368b9d71..0000000000 --- a/azure-pipelines/templates/windows-dependencies.yml +++ /dev/null @@ -1,14 +0,0 @@ -steps: -- bash: | - set -ex - - curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip - unzip windows-dependencies.zip - rm -f windows-dependencies.zip - - mv windows-dependencies/installed /c/vcpkg/ - rm -rf windows-dependencies - displayName: 'Install dependencies' - workingDirectory: $(Build.ArtifactStagingDirectory) -- script: c:\vcpkg\vcpkg.exe integrate install - displayName: 'Integrate vcpkg' diff --git a/azure-pipelines/templates/windows-dependency-zip.yml b/azure-pipelines/templates/windows-dependency-zip.yml deleted file mode 100644 index e2ae06dbe7..0000000000 --- a/azure-pipelines/templates/windows-dependency-zip.yml +++ /dev/null @@ -1,5 +0,0 @@ -steps: -- bash: | - set -ex - choco install zip - displayName: 'Install zip' From 4c1ee264a69537b93e8cb9dfd03a8e6b54672ab8 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sat, 19 Dec 2020 21:59:27 +0100 Subject: [PATCH 367/601] Fix: [OSX] Warning about ambiguous method (-Wobjc-multiple-method-names). (#8399) --- src/video/cocoa/wnd_quartz.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index edc9c50081..2281981082 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -297,7 +297,7 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp) this->window_height = height; this->buffer_depth = bpp; - [ this->window center ]; + [ (OTTD_CocoaWindow *)this->window center ]; /* Only recreate the view if it doesn't already exist */ if (this->cocoaview == nil) { From 5ca8a0bda9157ee34c12cb4360f46493dba69979 Mon Sep 17 00:00:00 2001 From: dP Date: Sun, 26 Jan 2020 00:53:16 +0300 Subject: [PATCH 368/601] Feature #7962: Significantly improve sprite sorter performance --- src/viewport.cpp | 146 +++++++++++++++++-------- src/viewport_sprite_sorter.h | 2 +- src/viewport_sprite_sorter_sse4.cpp | 158 ++++++++++++++++++++-------- 3 files changed, 222 insertions(+), 84 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index bf1f34acd6..88a7d40464 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -89,7 +89,9 @@ #include "network/network_func.h" #include "framerate_type.h" +#include #include +#include #include "table/strings.h" #include "table/string_colours.h" @@ -726,7 +728,6 @@ void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, ps.zmin = z + bb_offset_z; ps.zmax = z + max(bb_offset_z, dz) - 1; - ps.comparison_done = false; ps.first_child = -1; _vd.last_child = &ps.first_child; @@ -1498,64 +1499,127 @@ static bool ViewportSortParentSpritesChecker() return true; } -/** Sort parent sprites pointer array */ +/** Sort parent sprites pointer array replicating the way original sorter did it. */ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) { - auto psdvend = psdv->end(); - auto psd = psdv->begin(); - while (psd != psdvend) { - ParentSpriteToDraw *ps = *psd; + if (psdv->size() < 2) return; - if (ps->comparison_done) { - psd++; + /* We rely on sprites being, for the most part, already ordered. + * So we don't need to move many of them and can keep track of their + * order efficiently by using stack. We always move sprites to the front + * of the current position, i.e. to the top of the stack. + * Also use special constants to indicate sorting state without + * adding extra fields to ParentSpriteToDraw structure. + */ + const uint32 ORDER_COMPARED = UINT32_MAX; // Sprite was compared but we still need to compare the ones preceding it + const uint32 ORDER_RETURNED = UINT32_MAX - 1; // Makr sorted sprite in case there are other occurrences of it in the stack + std::stack sprite_order; + uint32 next_order = 0; + + std::forward_list> sprite_list; // We store sprites in a list sorted by xmin+ymin + + /* Initialize sprite list and order. */ + for (auto p = psdv->rbegin(); p != psdv->rend(); p++) { + sprite_list.push_front(std::make_pair((*p)->xmin + (*p)->ymin, *p)); + sprite_order.push(*p); + (*p)->order = next_order++; + } + + sprite_list.sort(); + + std::vector preceding; // Temporarily stores sprites that precede current and their position in the list + auto preceding_prev = sprite_list.begin(); // Store iterator in case we need to delete a single preciding sprite + auto out = psdv->begin(); // Iterator to output sorted sprites + + while (!sprite_order.empty()) { + + auto s = sprite_order.top(); + sprite_order.pop(); + + /* Sprite is already sorted, ignore it. */ + if (s->order == ORDER_RETURNED) continue; + + /* Sprite was already compared, just need to output it. */ + if (s->order == ORDER_COMPARED) { + *(out++) = s; + s->order = ORDER_RETURNED; continue; } - ps->comparison_done = true; + preceding.clear(); - for (auto psd2 = psd + 1; psd2 != psdvend; psd2++) { - ParentSpriteToDraw *ps2 = *psd2; + /* We only need sprites with xmin <= s->xmax && ymin <= s->ymax && zmin <= s->zmax + * So by iterating sprites with xmin + ymin <= s->xmax + s->ymax + * we get all we need and some more that we filter out later. + * We don't include zmin into the sum as there are usually more neighbors on x and y than z + * so including it will actually increase the amount of false positives. + * Also min coordinates can be > max so using max(xmin, xmax) + max(ymin, ymax) + * to ensure that we iterate the current sprite as we need to remove it from the list. + */ + auto ssum = max(s->xmax, s->xmin) + max(s->ymax, s->ymin); + auto prev = sprite_list.before_begin(); + auto x = sprite_list.begin(); + while (x != sprite_list.end() && ((*x).first <= ssum)) { + auto p = (*x).second; + if (p == s) { + /* We found the current sprite, remove it and move on. */ + x = sprite_list.erase_after(prev); + continue; + } - if (ps2->comparison_done) continue; + auto p_prev = prev; + prev = x++; - /* Decide which comparator to use, based on whether the bounding - * boxes overlap - */ - if (ps->xmax >= ps2->xmin && ps->xmin <= ps2->xmax && // overlap in X? - ps->ymax >= ps2->ymin && ps->ymin <= ps2->ymax && // overlap in Y? - ps->zmax >= ps2->zmin && ps->zmin <= ps2->zmax) { // overlap in Z? - /* Use X+Y+Z as the sorting order, so sprites closer to the bottom of - * the screen and with higher Z elevation, are drawn in front. - * Here X,Y,Z are the coordinates of the "center of mass" of the sprite, - * i.e. X=(left+right)/2, etc. - * However, since we only care about order, don't actually divide / 2 - */ - if (ps->xmin + ps->xmax + ps->ymin + ps->ymax + ps->zmin + ps->zmax <= - ps2->xmin + ps2->xmax + ps2->ymin + ps2->ymax + ps2->zmin + ps2->zmax) { - continue; - } - } else { - /* We only change the order, if it is definite. - * I.e. every single order of X, Y, Z says ps2 is behind ps or they overlap. - * That is: If one partial order says ps behind ps2, do not change the order. - */ - if (ps->xmax < ps2->xmin || - ps->ymax < ps2->ymin || - ps->zmax < ps2->zmin) { + if (s->xmax < p->xmin || s->ymax < p->ymin || s->zmax < p->zmin) continue; + if (s->xmin <= p->xmax && // overlap in X? + s->ymin <= p->ymax && // overlap in Y? + s->zmin <= p->zmax) { // overlap in Z? + if (s->xmin + s->xmax + s->ymin + s->ymax + s->zmin + s->zmax <= + p->xmin + p->xmax + p->ymin + p->ymax + p->zmin + p->zmax) { continue; } } + preceding.push_back(p); + preceding_prev = p_prev; + } - /* Move ps2 in front of ps */ - ParentSpriteToDraw *temp = ps2; - for (auto psd3 = psd2; psd3 > psd; psd3--) { - *psd3 = *(psd3 - 1); + if (preceding.empty()) { + /* No preceding sprites, add current one to the output */ + *(out++) = s; + s->order = ORDER_RETURNED; + continue; + } + + /* Optimization for the case when we only have 1 sprite to move. */ + if (preceding.size() == 1) { + auto p = preceding[0]; + /* We can only output the preceding sprite if there can't be any other sprites preceding it. */ + if (p->xmax <= s->xmax && p->ymax <= s->ymax && p->zmax <= s->zmax) { + p->order = ORDER_RETURNED; + s->order = ORDER_RETURNED; + sprite_list.erase_after(preceding_prev); + *(out++) = p; + *(out++) = s; + continue; } - *psd = temp; + } + + /* Sort all preceding sprites by order and assign new orders in reverse (as original sorter did). */ + std::sort(preceding.begin(), preceding.end(), [](const ParentSpriteToDraw *a, const ParentSpriteToDraw *b) { + return a->order > b->order; + }); + + s->order = ORDER_COMPARED; + sprite_order.push(s); // Still need to output so push it back for now + + for (auto p: preceding) { + p->order = next_order++; + sprite_order.push(p); } } } + static void ViewportDrawParentSprites(const ParentSpriteToSortVector *psd, const ChildScreenSpriteToDrawVector *csstdv) { for (const ParentSpriteToDraw *ps : *psd) { diff --git a/src/viewport_sprite_sorter.h b/src/viewport_sprite_sorter.h index d9948b7c22..2a91f48a4f 100644 --- a/src/viewport_sprite_sorter.h +++ b/src/viewport_sprite_sorter.h @@ -36,7 +36,7 @@ struct ParentSpriteToDraw { int32 top; ///< minimal screen Y coordinate of sprite (= y + sprite->y_offs), reference point for child sprites int32 first_child; ///< the first child to draw. - bool comparison_done; ///< Used during sprite sorting: true if sprite has been compared with all other sprites + uint32 order; ///< Used during sprite sorting }; typedef std::vector ParentSpriteToSortVector; diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index 6d1a2ceee4..876821fdda 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -13,6 +13,9 @@ #include "cpu.h" #include "smmintrin.h" #include "viewport_sprite_sorter.h" +#include +#include +#include #include "safeguards.h" @@ -23,74 +26,145 @@ # define LOAD_128 _mm_loadu_si128 #endif -/** Sort parent sprites pointer array using SSE4.1 optimizations. */ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) { - const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); - auto const psdvend = psdv->end(); - auto psd = psdv->begin(); - while (psd != psdvend) { - ParentSpriteToDraw * const ps = *psd; + if (psdv->size() < 2) return; - if (ps->comparison_done) { - psd++; + const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); + + /* We rely on sprites being, for the most part, already ordered. + * So we don't need to move many of them and can keep track of their + * order efficiently by using stack. We always move sprites to the front + * of the current position, i.e. to the top of the stack. + * Also use special constants to indicate sorting state without + * adding extra fields to ParentSpriteToDraw structure. + */ + const uint32 ORDER_COMPARED = UINT32_MAX; // Sprite was compared but we still need to compare the ones preceding it + const uint32 ORDER_RETURNED = UINT32_MAX - 1; // Mark sorted sprite in case there are other occurrences of it in the stack + std::stack sprite_order; + uint32 next_order = 0; + + std::forward_list> sprite_list; // We store sprites in a list sorted by xmin+ymin + + /* Initialize sprite list and order. */ + for (auto p = psdv->rbegin(); p != psdv->rend(); p++) { + sprite_list.push_front(std::make_pair((*p)->xmin + (*p)->ymin, *p)); + sprite_order.push(*p); + (*p)->order = next_order++; + } + + sprite_list.sort(); + + std::vector preceding; // Temporarily stores sprites that precede current and their position in the list + auto preceding_prev = sprite_list.begin(); // Store iterator in case we need to delete a single preciding sprite + auto out = psdv->begin(); // Iterator to output sorted sprites + + while (!sprite_order.empty()) { + + auto s = sprite_order.top(); + sprite_order.pop(); + + /* Sprite is already sorted, ignore it. */ + if (s->order == ORDER_RETURNED) continue; + + /* Sprite was already compared, just need to output it. */ + if (s->order == ORDER_COMPARED) { + *(out++) = s; + s->order = ORDER_RETURNED; continue; } - ps->comparison_done = true; + preceding.clear(); - for (auto psd2 = psd + 1; psd2 != psdvend; psd2++) { - ParentSpriteToDraw * const ps2 = *psd2; + /* We only need sprites with xmin <= s->xmax && ymin <= s->ymax && zmin <= s->zmax + * So by iterating sprites with xmin + ymin <= s->xmax + s->ymax + * we get all we need and some more that we filter out later. + * We don't include zmin into the sum as there are usually more neighbors on x and y than z + * so including it will actually increase the amount of false positives. + * Also min coordinates can be > max so using max(xmin, xmax) + max(ymin, ymax) + * to ensure that we iterate the current sprite as we need to remove it from the list. + */ + auto ssum = max(s->xmax, s->xmin) + max(s->ymax, s->ymin); + auto prev = sprite_list.before_begin(); + auto x = sprite_list.begin(); + while (x != sprite_list.end() && ((*x).first <= ssum)) { + auto p = (*x).second; + if (p == s) { + /* We found the current sprite, remove it and move on. */ + x = sprite_list.erase_after(prev); + continue; + } - if (ps2->comparison_done) continue; + auto p_prev = prev; + prev = x++; - /* - * Decide which comparator to use, based on whether the bounding boxes overlap - * - * Original code: - * if (ps->xmax >= ps2->xmin && ps->xmin <= ps2->xmax && // overlap in X? - * ps->ymax >= ps2->ymin && ps->ymin <= ps2->ymax && // overlap in Y? - * ps->zmax >= ps2->zmin && ps->zmin <= ps2->zmax) { // overlap in Z? - * - * Above conditions are equivalent to: - * 1/ !( (ps->xmax >= ps2->xmin) && (ps->ymax >= ps2->ymin) && (ps->zmax >= ps2->zmin) && (ps->xmin <= ps2->xmax) && (ps->ymin <= ps2->ymax) && (ps->zmin <= ps2->zmax) ) - * 2/ !( (ps->xmax >= ps2->xmin) && (ps->ymax >= ps2->ymin) && (ps->zmax >= ps2->zmin) && (ps2->xmax >= ps->xmin) && (ps2->ymax >= ps->ymin) && (ps2->zmax >= ps->zmin) ) - * 3/ !( ( (ps->xmax >= ps2->xmin) && (ps->ymax >= ps2->ymin) && (ps->zmax >= ps2->zmin) ) && ( (ps2->xmax >= ps->xmin) && (ps2->ymax >= ps->ymin) && (ps2->zmax >= ps->zmin) ) ) - * 4/ !( !( (ps->xmax < ps2->xmin) || (ps->ymax < ps2->ymin) || (ps->zmax < ps2->zmin) ) && !( (ps2->xmax < ps->xmin) || (ps2->ymax < ps->ymin) || (ps2->zmax < ps->zmin) ) ) - * 5/ PTEST <---------------------------------- rslt1 ----------------------------------> <------------------------------ rslt2 --------------------------------------> - */ - __m128i ps1_max = LOAD_128((__m128i*) &ps->xmax); - __m128i ps2_min = LOAD_128((__m128i*) &ps2->xmin); - __m128i rslt1 = _mm_cmplt_epi32(ps1_max, ps2_min); - if (!_mm_testz_si128(mask_ptest, rslt1)) + /* Check that p->xmin <= s->xmax && p->ymin <= s->ymax && p->zmin <= s->zmax */ + __m128i s_max = LOAD_128((__m128i*) &s->xmax); + __m128i p_min = LOAD_128((__m128i*) &p->xmin); + __m128i r1 = _mm_cmplt_epi32(s_max, p_min); + if (!_mm_testz_si128(mask_ptest, r1)) continue; - __m128i ps1_min = LOAD_128((__m128i*) &ps->xmin); - __m128i ps2_max = LOAD_128((__m128i*) &ps2->xmax); - __m128i rslt2 = _mm_cmplt_epi32(ps2_max, ps1_min); - if (_mm_testz_si128(mask_ptest, rslt2)) { + /* Check if sprites overlap, i.e. + * s->xmin <= p->xmax && s->ymin <= p->ymax && s->zmin <= p->zmax + */ + __m128i s_min = LOAD_128((__m128i*) &s->xmin); + __m128i p_max = LOAD_128((__m128i*) &p->xmax); + __m128i r2 = _mm_cmplt_epi32(p_max, s_min); + if (_mm_testz_si128(mask_ptest, r2)) { /* Use X+Y+Z as the sorting order, so sprites closer to the bottom of * the screen and with higher Z elevation, are drawn in front. * Here X,Y,Z are the coordinates of the "center of mass" of the sprite, * i.e. X=(left+right)/2, etc. * However, since we only care about order, don't actually divide / 2 */ - if (ps->xmin + ps->xmax + ps->ymin + ps->ymax + ps->zmin + ps->zmax <= - ps2->xmin + ps2->xmax + ps2->ymin + ps2->ymax + ps2->zmin + ps2->zmax) { + if (s->xmin + s->xmax + s->ymin + s->ymax + s->zmin + s->zmax <= + p->xmin + p->xmax + p->ymin + p->ymax + p->zmin + p->zmax) { continue; } } - /* Move ps2 in front of ps */ - ParentSpriteToDraw * const temp = ps2; - for (auto psd3 = psd2; psd3 > psd; psd3--) { - *psd3 = *(psd3 - 1); + preceding.push_back(p); + preceding_prev = p_prev; + } + + if (preceding.empty()) { + /* No preceding sprites, add current one to the output */ + *(out++) = s; + s->order = ORDER_RETURNED; + continue; + } + + /* Optimization for the case when we only have 1 sprite to move. */ + if (preceding.size() == 1) { + auto p = preceding[0]; + /* We can only output the preceding sprite if there can't be any other sprites preceding it. */ + if (p->xmax <= s->xmax && p->ymax <= s->ymax && p->zmax <= s->zmax) { + p->order = ORDER_RETURNED; + s->order = ORDER_RETURNED; + sprite_list.erase_after(preceding_prev); + *(out++) = p; + *(out++) = s; + continue; } - *psd = temp; + } + + /* Sort all preceding sprites by order and assign new orders in reverse (as original sorter did). */ + std::sort(preceding.begin(), preceding.end(), [](const ParentSpriteToDraw *a, const ParentSpriteToDraw *b) { + return a->order > b->order; + }); + + s->order = ORDER_COMPARED; + sprite_order.push(s); // Still need to output so push it back for now + + for (auto p: preceding) { + p->order = next_order++; + sprite_order.push(p); } } } + /** * Check whether the current CPU supports SSE 4.1. * @return True iff the CPU supports SSE 4.1. From e82333cf77861fd78ef156f97865b5f17ae38e4b Mon Sep 17 00:00:00 2001 From: dP Date: Sat, 15 Feb 2020 01:10:04 +0300 Subject: [PATCH 369/601] Feature #7962: Improve rendering of large viewports --- src/viewport.cpp | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 88a7d40464..e9e8d34dac 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1782,32 +1782,6 @@ void ViewportDoDraw(const Viewport *vp, int left, int top, int right, int bottom _vd.child_screen_sprites_to_draw.clear(); } -/** - * Make sure we don't draw a too big area at a time. - * If we do, the sprite memory will overflow. - */ -static void ViewportDrawChk(const Viewport *vp, int left, int top, int right, int bottom) -{ - if ((int64)ScaleByZoom(bottom - top, vp->zoom) * (int64)ScaleByZoom(right - left, vp->zoom) > (int64)(180000 * ZOOM_LVL_BASE * ZOOM_LVL_BASE)) { - if ((bottom - top) > (right - left)) { - int t = (top + bottom) >> 1; - ViewportDrawChk(vp, left, top, right, t); - ViewportDrawChk(vp, left, t, right, bottom); - } else { - int t = (left + right) >> 1; - ViewportDrawChk(vp, left, top, t, bottom); - ViewportDrawChk(vp, t, top, right, bottom); - } - } else { - ViewportDoDraw(vp, - ScaleByZoom(left - vp->left, vp->zoom) + vp->virtual_left, - ScaleByZoom(top - vp->top, vp->zoom) + vp->virtual_top, - ScaleByZoom(right - vp->left, vp->zoom) + vp->virtual_left, - ScaleByZoom(bottom - vp->top, vp->zoom) + vp->virtual_top - ); - } -} - static inline void ViewportDraw(const Viewport *vp, int left, int top, int right, int bottom) { if (right <= vp->left || bottom <= vp->top) return; @@ -1822,7 +1796,12 @@ static inline void ViewportDraw(const Viewport *vp, int left, int top, int right if (top < vp->top) top = vp->top; if (bottom > vp->top + vp->height) bottom = vp->top + vp->height; - ViewportDrawChk(vp, left, top, right, bottom); + ViewportDoDraw(vp, + ScaleByZoom(left - vp->left, vp->zoom) + vp->virtual_left, + ScaleByZoom(top - vp->top, vp->zoom) + vp->virtual_top, + ScaleByZoom(right - vp->left, vp->zoom) + vp->virtual_left, + ScaleByZoom(bottom - vp->top, vp->zoom) + vp->virtual_top + ); } /** From 914fb4c9871128ed999a1b997d6b731b0b1acdd0 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 20 Dec 2020 19:04:18 +0000 Subject: [PATCH 370/601] Update: Translations from eints korean: 1 change by telk5093 slovak: 6 changes by FuryPapaya latvian: 9 changes by lexuslatvia --- src/lang/korean.txt | 1 + src/lang/latvian.txt | 9 +++++++++ src/lang/slovak.txt | 12 ++++++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 80046c2ad0..68d66b1bd0 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -5038,6 +5038,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} 부표 STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} 부표 #{COMMA} STR_FORMAT_COMPANY_NUM :(회사 {COMMA}) STR_FORMAT_GROUP_NAME :그룹 {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} 경유지 STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} 경유지 #{COMMA} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 5a9c86f247..b4811bb901 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -196,6 +196,7 @@ STR_COLOUR_DEFAULT :Noklusējuma STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}jūdzes stundā STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}lauciņi/diena STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}ZS STR_UNITS_POWER_METRIC :{COMMA}{NBSP}ZS @@ -1555,6 +1556,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas b STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Spēles beigas gads (tiek izmantots rezultāta noteikšanai). Šī gada beigās uzņēmuma rezultāti tiek ierakstīti un uz ekrāna tiek parādīti labākie rezultāti, bet spēlētāji var turpināt spēlēt arī pēc šī datuma.{}Ja tas ir norādīts pirms spēles sākuma datuma, labākie rezultāti nekad netiek parādīti. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad +STR_CONFIG_SETTING_ECONOMY_TYPE :Ekonomikas tips: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Vienmērīga ekonomika liek mainīt ražošanas apjomus biežāk un mazākos soļos. Saldēta ekonomika aptur ražošanas izmaiņas un nozaru slēgšanu. Šim iestatījumam var nebūt ietekmes, ja nozares veidus nodrošina NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Orģināls +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Gluds +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Saldēts STR_CONFIG_SETTING_ALLOW_SHARES :Atļaut akciju pirkšanu no citiem uzņēmumiem: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, ir atļauts pirkt un pārdodot uzņēmumu akcijas. Akcijas būs pieejamas tikai atbilstošu vecumu sasniegušiem uzņēmumiem STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} @@ -1675,6 +1681,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vai lietotāja STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :impērijas, britu (jūdzes stundā) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriskās (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI, starptautiskās (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Spēles vienības (lauciņi/dienas) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Transportlīdzekļu jaudas mērvienības: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vai lietotāja saskarnē rāda transporta līdzekļa jaudu, rādīt norādītajās mērvienībās @@ -1809,6 +1816,7 @@ STR_INTRO_TRANSLATION :{BLACK}Šim tul # Quit window STR_QUIT_CAPTION :{WHITE}Iziet +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Vai esat pārliecināts ka vēlaties iziet no OpenTTD? STR_QUIT_YES :{BLACK}Jā STR_QUIT_NO :{BLACK}Nē @@ -5040,6 +5048,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} boja STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} boja Nr. #{COMMA} STR_FORMAT_COMPANY_NUM :({COMMA}. uzņēmums) STR_FORMAT_GROUP_NAME :Grupa {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Pieturas punkts {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Pieturas punkts {TOWN} #{COMMA} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 5c5eef0509..8e7c29f1db 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1747,7 +1747,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vždy, keď sa STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiálne (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrické (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Jednotky hry (políčka/deň) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Jednotky v hre (políčka/deň) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Jednotky výkonu vozidiel: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vždy, keď sa zobrazí výkon vozidla v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách @@ -4801,7 +4801,7 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=z}Cukrová b STR_SV_EMPTY : STR_SV_UNNAMED :Bez názvu STR_SV_TRAIN_NAME :{G=m}Vlak č. {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=s}Cestné vozidlo {COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=s}Cestné vozidlo č. {COMMA} STR_SV_SHIP_NAME :{G=z}Loď č. {COMMA} STR_SV_AIRCRAFT_NAME :{G=s}Lietadlo č. {COMMA} @@ -5102,20 +5102,20 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} STR_FORMAT_BUOY_NAME :{TOWN} Bója -STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bója #{COMMA} +STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bója č. {COMMA} STR_FORMAT_COMPANY_NUM :(Spoločnosť {COMMA}) STR_FORMAT_GROUP_NAME :Skupina {COMMA} STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} č. {COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Smerový bod {TOWN} -STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerový bod {TOWN} #{COMMA} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Smerový bod {TOWN} č. {COMMA} STR_FORMAT_DEPOT_NAME_TRAIN :Vlakové depo {TOWN} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Vlakové depo {TOWN} č. {COMMA} STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Garáž {TOWN} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garáž {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garáž {TOWN} č. {COMMA} STR_FORMAT_DEPOT_NAME_SHIP :Lodenica {TOWN} -STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Lodenica {TOWN} #{COMMA} +STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Lodenica {TOWN} č. {COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :Letecký hangár {STATION} STR_UNKNOWN_STATION :neznáma stanica From 5575cb9133cd47553ed37a20f0981f0d14ae0e08 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Mon, 21 Dec 2020 18:21:59 +0100 Subject: [PATCH 371/601] Remove: Remnants of PSP support. No active target is that limited in concurrent file descriptors. --- src/fileio.cpp | 57 +------------------------------------------------- 1 file changed, 1 insertion(+), 56 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index eb529632cd..e294a82929 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -46,10 +46,6 @@ struct Fio { byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file const char *filenames[MAX_FILE_SLOTS]; ///< array of filenames we (should) have open char *shortnames[MAX_FILE_SLOTS]; ///< array of short names for spriteloader's use -#if defined(LIMITED_FDS) - uint open_handles; ///< current amount of open handles - uint usage_count[MAX_FILE_SLOTS]; ///< count how many times this file has been opened -#endif /* LIMITED_FDS */ }; static Fio _fio; ///< #Fio instance. @@ -94,18 +90,6 @@ void FioSeekTo(size_t pos, int mode) } } -#if defined(LIMITED_FDS) -static void FioRestoreFile(int slot) -{ - /* Do we still have the file open, or should we reopen it? */ - if (_fio.handles[slot] == nullptr) { - DEBUG(misc, 6, "Restoring file '%s' in slot '%d' from disk", _fio.filenames[slot], slot); - FioOpenFile(slot, _fio.filenames[slot]); - } - _fio.usage_count[slot]++; -} -#endif /* LIMITED_FDS */ - /** * Switch to a different file and seek to a position. * @param slot Slot number of the new file. @@ -113,12 +97,7 @@ static void FioRestoreFile(int slot) */ void FioSeekToFile(uint8 slot, size_t pos) { - FILE *f; -#if defined(LIMITED_FDS) - /* Make sure we have this file open */ - FioRestoreFile(slot); -#endif /* LIMITED_FDS */ - f = _fio.handles[slot]; + FILE *f = _fio.handles[slot]; assert(f != nullptr); _fio.cur_fh = f; _fio.filename = _fio.filenames[slot]; @@ -202,9 +181,6 @@ static inline void FioCloseFile(int slot) _fio.shortnames[slot] = nullptr; _fio.handles[slot] = nullptr; -#if defined(LIMITED_FDS) - _fio.open_handles--; -#endif /* LIMITED_FDS */ } } @@ -216,30 +192,6 @@ void FioCloseAll() } } -#if defined(LIMITED_FDS) -static void FioFreeHandle() -{ - /* If we are about to open a file that will exceed the limit, close a file */ - if (_fio.open_handles + 1 == LIMITED_FDS) { - uint i, count; - int slot; - - count = UINT_MAX; - slot = -1; - /* Find the file that is used the least */ - for (i = 0; i < lengthof(_fio.handles); i++) { - if (_fio.handles[i] != nullptr && _fio.usage_count[i] < count) { - count = _fio.usage_count[i]; - slot = i; - } - } - assert(slot != -1); - DEBUG(misc, 6, "Closing filehandler '%s' in slot '%d' because of fd-limit", _fio.filenames[slot], slot); - FioCloseFile(slot); - } -} -#endif /* LIMITED_FDS */ - /** * Open a slotted file. * @param slot Index to assign. @@ -250,9 +202,6 @@ void FioOpenFile(int slot, const char *filename, Subdirectory subdir) { FILE *f; -#if defined(LIMITED_FDS) - FioFreeHandle(); -#endif /* LIMITED_FDS */ f = FioFOpenFile(filename, "rb", subdir); if (f == nullptr) usererror("Cannot open file '%s'", filename); long pos = ftell(f); @@ -269,10 +218,6 @@ void FioOpenFile(int slot, const char *filename, Subdirectory subdir) if (t2 != nullptr) *t2 = '\0'; strtolower(_fio.shortnames[slot]); -#if defined(LIMITED_FDS) - _fio.usage_count[slot] = 0; - _fio.open_handles++; -#endif /* LIMITED_FDS */ FioSeekToFile(slot, (uint32)pos); } From f24bc8b509dc6148c355dfd7e3a393ea78cc7cef Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 21 Dec 2020 18:08:31 +0000 Subject: [PATCH 372/601] Update: Translations from eints vietnamese: 3 changes by KhoiCanDev russian: 4 changes by Ln-Wolf polish: 11 changes by yazalo --- src/lang/polish.txt | 13 +++++++++++-- src/lang/russian.txt | 6 ++++-- src/lang/vietnamese.txt | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 3cb810848b..c39f1b0c38 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -573,6 +573,7 @@ STR_COLOUR_DEFAULT :Domyślny STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}p{P ole ola ól}/dzień STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}KM STR_UNITS_POWER_METRIC :{COMMA}{NBSP}KM @@ -1694,7 +1695,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Pokaż nazwę N STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj linię do okna budowy pojazdów, pokazujących z którego NewGRF'a wybrany pojazd pochodzi. STR_CONFIG_SETTING_LANDSCAPE :Krajobraz: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajobrazy określają podstawowe scenariusze gry, które różnią się przedsiębiorstwami, towarami i wymogami dla rozwoju miast. Pliki NewGRF i skrypty umożliwiają dokładniejszą kontrolę warunków rozgrywki +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Krajobrazy określają podstawowe scenariusze gry, które różnią się przedsiębiorstwami, ładunkiem i wymogami dla rozwoju miast. Pliki NewGRF i skrypty umożliwiają dokładniejszą kontrolę warunków rozgrywki STR_CONFIG_SETTING_LAND_GENERATOR :Generator krajobrazu: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Oryginalny generator tworzy tylko proste kształty krajobrazu i jest zależny od podstawowego zestawu grafiki. TerraGenesis jest oparty na generatorze szumu Perlina, który umożliwia precyzyjną kontrolę parametrów STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Oryginalny @@ -1933,6 +1934,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Punktacja na ko STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok, w którym gra się kończy na cel punktacji. Na koniec tego roku, punkty firmy są zarejestrowane i ekran wyników najwyższych jest pokazywany, ale gracze mogą po tym dalej grać.{}Jeżeli jest to przed rokiem startowym, ekran wyników najwyższych nie jest nigdy pokazywany. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nigdy +STR_CONFIG_SETTING_ECONOMY_TYPE :Typ ekonomii: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Płynna ekonomia oznacza, że zmiany w produkcji zachodzą częściej i w mniejszych krokach. Zamrożona gospodarka zatrzymuje zmiany w produkcji i zamykanie przedsiębiorstw. To ustawienie może nie mieć żadnego wpływu, jeśli przemysł jest regulowany przez NewGRFy. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Oryginalna +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Płynna +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Zamrożona STR_CONFIG_SETTING_ALLOW_SHARES :Pozwól kupować udziały w innych firmach: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kiedy włączone, pozwala na kupowanie i sprzedawanie udziałów w firmie. Udziały będą dostępne tylko dla firm z odpowiednim stażem STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimalny wiek firmy pozwalający na handel udziałami: {STRING} @@ -2053,6 +2059,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kiedy prędkoś STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperialne (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metryczne (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Jednostki gry (pola/dzień) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Jednostka mocy pojazdów: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Kiedy moc pojazdu jest pokazywana w interfejsie użytkownika, wyświetl ją w wybranych jednostkach @@ -2185,6 +2192,7 @@ STR_INTRO_TRANSLATION :{BLACK}Tej wers # Quit window STR_QUIT_CAPTION :{WHITE}Wyjście +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Czy jesteś pewien, że chcesz wyjść z OpenTTD? STR_QUIT_YES :{BLACK}Tak STR_QUIT_NO :{BLACK}Nie @@ -4756,7 +4764,7 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nie moż STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Przylega do więcej niż jednej stacji STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stacja zbyt rozległa -STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Za duzo stacji +STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Za dużo stacji STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Za dużo części stacji kolejowej STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Zbyt wiele przystanków autobusowych STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Zbyt wiele stacji załadunku ciężarówek @@ -5452,6 +5460,7 @@ STR_FORMAT_BUOY_NAME :Boja {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Boja {TOWN} #{COMMA} STR_FORMAT_COMPANY_NUM :(Firma {COMMA}) STR_FORMAT_GROUP_NAME :Grupa {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Post. {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Post. {TOWN} #{COMMA} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 9ceb1b6bc4..650b21d6a8 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -320,7 +320,7 @@ STR_COLOUR_DEFAULT :По умолч STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}мил{P я и ь}/ч STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}км/ч STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}м/с -STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}клет{P ка ки ок}/день +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}кл./день STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}лс STR_UNITS_POWER_METRIC :{COMMA}{NBSP}лс @@ -1831,6 +1831,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Показыв STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :английская (миль/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :метрическая (км/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :СИ (м/с) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :внутриигровая (клетки в день) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Система единиц для мощности: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Показывать значения мощности двигателей транспортных средств в выбранной системе единиц @@ -1878,7 +1879,7 @@ STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Мар STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Ограничения STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Аварии и катастрофы STR_CONFIG_SETTING_GENWORLD :{ORANGE}Создание карты -STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Окружающая среда +STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Окружение STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Городская администрация STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Города STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Предприятия @@ -5265,6 +5266,7 @@ STR_FORMAT_BUOY_NAME :Буй {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Буй {TOWN} №{COMMA} STR_FORMAT_COMPANY_NUM :(Компания {COMMA}) STR_FORMAT_GROUP_NAME :Группа {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} (№{COMMA}) STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Точка пути {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Точка пути {TOWN} №{COMMA} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index e317952ff1..8d3abf6d96 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1553,6 +1553,8 @@ STR_CONFIG_SETTING_ENDING_YEAR :Năm kết thú STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Năm mà ván chơi sẽ kết thúc và tính điểm. Khi năm đó kết thúc, điểm số của công ty sẽ được lưu lại và hiển thị bảng điểm chơi cao nhất, sau đó người chơi vẫn có thể tiếp tục ván chơi.{} Nếu năm được đặt nhỏ hơn năm bắt đầu, bảng điểm chơi cao nhất sẽ không bao giờ được hiển thị. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Không bao giờ +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Nguyên gốc +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Đóng băng STR_CONFIG_SETTING_ALLOW_SHARES :Cho phép mua cổ phần của các công ty khác: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Nếu bật, cho phép mua và bán cổ phần công ty. Cổ phần chỉ có thể mua bán nếu công ty đã tồn tại một thời gian nhất định nào đó STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Tuổi công ty tối thiểu để bán cổ phần: {STRING} @@ -5029,6 +5031,7 @@ STR_FORMAT_BUOY_NAME :Phao {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Phao {TOWN} số #{COMMA} STR_FORMAT_COMPANY_NUM :(Công ty {COMMA}) STR_FORMAT_GROUP_NAME :Nhóm {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Điểm mốc {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Điểm mốc {TOWN} số #{COMMA} From 0c3ddc5436a28051aab41b100fa9cacfa1b3907c Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 21 Dec 2020 21:32:29 +0100 Subject: [PATCH 373/601] Fix: support non-ubuntu/debian Linux variants with LSB support (#8408) This now generates a warning, as we would still like people to make a Pull Request to support the target. But it does continue with packing to a txz. --- cmake/InstallAndPackage.cmake | 47 ++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index 53b6ce3e2c..3f33f699ee 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -114,31 +114,38 @@ elseif(UNIX) # With FHS, we can create deb/rpm/... Without it, they would be horribly broken # and not work. The other way around is also true; with FHS they are not # usable, and only flat formats work. - if(OPTION_INSTALL_FHS) - set(CPACK_GENERATOR "DEB") - include(PackageDeb) - else() + if(NOT OPTION_INSTALL_FHS) set(CPACK_GENERATOR "TXZ") - endif() - - find_program(LSB_RELEASE_EXEC lsb_release) - execute_process(COMMAND ${LSB_RELEASE_EXEC} -is - OUTPUT_VARIABLE LSB_RELEASE_ID - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(NOT LSB_RELEASE_ID) - set(PLATFORM "generic") - elseif(LSB_RELEASE_ID STREQUAL "Ubuntu" OR LSB_RELEASE_ID STREQUAL "Debian") - execute_process(COMMAND ${LSB_RELEASE_EXEC} -cs - OUTPUT_VARIABLE LSB_RELEASE_CODENAME + else() + find_program(LSB_RELEASE_EXEC lsb_release) + execute_process(COMMAND ${LSB_RELEASE_EXEC} -is + OUTPUT_VARIABLE LSB_RELEASE_ID OUTPUT_STRIP_TRAILING_WHITESPACE ) - string(TOLOWER "${LSB_RELEASE_ID}-${LSB_RELEASE_CODENAME}" PLATFORM) - else() - message(FATAL_ERROR "Unknown Linux distribution found for packaging; please consider creating a Pull Request to add support for this distribution.") + if(NOT LSB_RELEASE_ID) + set(PLATFORM "generic") + set(CPACK_GENERATOR "TXZ") + + message(WARNING "Unknown Linux distribution found for packaging; can only pack to a txz. Please consider creating a Pull Request to add support for this distribution.") + elseif(LSB_RELEASE_ID STREQUAL "Ubuntu" OR LSB_RELEASE_ID STREQUAL "Debian") + execute_process(COMMAND ${LSB_RELEASE_EXEC} -cs + OUTPUT_VARIABLE LSB_RELEASE_CODENAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(TOLOWER "${LSB_RELEASE_ID}-${LSB_RELEASE_CODENAME}" PLATFORM) + + set(CPACK_GENERATOR "DEB") + include(PackageDeb) + else() + set(PLATFORM "unknown") + set(CPACK_GENERATOR "TXZ") + + message(WARNING "Unknown LSB-based Linux distribution '${LSB_RELEASE_ID}' found for packaging; can only pack to a txz. Please consider creating a Pull Request to add support for this distribution.") + endif() + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${PLATFORM}-${CPACK_SYSTEM_NAME}") endif() - set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${PLATFORM}-${CPACK_SYSTEM_NAME}") else() message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.") endif() From 34051c10df373da8f85675d2a02043c3c92c4eed Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 21 Dec 2020 22:28:56 +0100 Subject: [PATCH 374/601] Doc: some comments for the win32 video driver (#8409) Co-authored-by: Niels Martin Hansen --- src/video/win32_v.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 3411873201..fa780dd3d5 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -44,18 +44,18 @@ typedef BOOL (WINAPI *PFNTRACKMOUSEEVENT)(LPTRACKMOUSEEVENT lpEventTrack); static PFNTRACKMOUSEEVENT _pTrackMouseEvent = nullptr; static struct { - HWND main_wnd; - HBITMAP dib_sect; - void *buffer_bits; - HPALETTE gdi_palette; - RECT update_rect; - int width; - int height; - int width_org; - int height_org; - bool fullscreen; - bool has_focus; - bool running; + HWND main_wnd; ///< Handle to system window. + HBITMAP dib_sect; ///< System bitmap object referencing our rendering buffer. + void *buffer_bits; ///< Internal rendering buffer. + HPALETTE gdi_palette; ///< Palette object for 8bpp blitter. + RECT update_rect; ///< Current dirty rect. + int width; ///< Width in pixels of our display surface. + int height; ///< Height in pixels of our display surface. + int width_org; ///< Original monitor resolution width, before we changed it. + int height_org; ///< Original monitor resolution height, before we changed it. + bool fullscreen; ///< Whether to use (true) fullscreen mode. + bool has_focus; ///< Does our window have system focus? + bool running; ///< Is the main loop running? } _wnd; bool _force_full_redraw; @@ -262,6 +262,8 @@ static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT_PTR event, DW */ bool VideoDriver_Win32::MakeWindow(bool full_screen) { + /* full_screen is whether the new window should be fullscreen, + * _wnd.fullscreen is whether the current window is. */ _fullscreen = full_screen; /* recreate window? */ From d05be2cff55b71247d747fa2df1650023be0c38c Mon Sep 17 00:00:00 2001 From: Xaroth Brook Date: Wed, 16 Dec 2020 22:54:52 +0100 Subject: [PATCH 375/601] Cleanup: Rework the CargoSpec macro for improved readability. --- src/lang/english.txt | 8 +- src/table/cargo_const.h | 218 ++++++++++++++-------------------------- src/table/sprites.h | 19 ++-- 3 files changed, 92 insertions(+), 153 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index d829b44361..6d11d2d761 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Wheat STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sugar STR_CARGO_PLURAL_TOYS :Toys -STR_CARGO_PLURAL_CANDY :Sweets +STR_CARGO_PLURAL_SWEETS :Sweets STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Candyfloss +STR_CARGO_PLURAL_CANDYFLOSS :Candyfloss STR_CARGO_PLURAL_BUBBLES :Bubbles STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batteries @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Wheat STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sugar STR_CARGO_SINGULAR_TOY :Toy -STR_CARGO_SINGULAR_CANDY :Sweet +STR_CARGO_SINGULAR_SWEETS :Sweet STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Candyfloss +STR_CARGO_SINGULAR_CANDYFLOSS :Candyfloss STR_CARGO_SINGULAR_BUBBLE :Bubble STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Battery diff --git a/src/table/cargo_const.h b/src/table/cargo_const.h index ad1ed8a215..8518a25614 100644 --- a/src/table/cargo_const.h +++ b/src/table/cargo_const.h @@ -7,157 +7,91 @@ /** @file cargo_const.h Table of all default cargo types */ -/** Construction macro for a #CargoSpec structure. */ -#define MK(bt, label, c, e, f, g, h, fr, te, ks1, ks2, ks3, ks4, ks5, l, m, cmult) \ - {bt, label, c, c, e, cmult, f, {g, h}, fr, te, 0, 0, ks1, ks2, ks3, ks4, ks5, l, m, nullptr, nullptr, 0} +/** Construction macros for the #CargoSpec StringID entries. */ +#define MK_STR_CARGO_PLURAL(label_plural) STR_CARGO_PLURAL_ ## label_plural +#define MK_STR_CARGO_SINGULAR(label_singular) STR_CARGO_SINGULAR_ ## label_singular +#define MK_STR_QUANTITY(label_plural) STR_QUANTITY_ ## label_plural +#define MK_STR_ABBREV(label_plural) STR_ABBREV_ ## label_plural +/** Construction macros for the #CargoSpec SpriteID entry. */ +#define MK_SPRITE(label_plural) SPR_CARGO_ ## label_plural + +/** + * Construction macro for a #CargoSpec structure. + * The order of arguments matches the order in which they are defined in #CargoSpec. + * Some macros are used to automatically expand to the correct StringID consts, this + * means that adding/changing a cargo spec requires updating of the following strings: + * - STR_CARGO_PLURAL_ + * - STR_CARGO_SINGULAR_ + * - STR_QUANTITY_ + * - STR_ABBREV_ + * And the following sprite: + * - SPR_CARGO_ + * + * @param bt Cargo bit number, is #INVALID_CARGO for a non-used spec. + * @param label Unique label of the cargo type. + * @param colour CargoSpec->legend_colour and CargoSpec->rating_colour. + * @param weight Weight of a single unit of this cargo type in 1/16 ton (62.5 kg). + * @param mult Capacity multiplier for vehicles. (8 fractional bits). + * @param ip CargoSpec->initial_payment. + * @param td1 CargoSpec->transit_days[0]. + * @param td2 CargoSpec->transit_days[1]. + * @param freight Cargo type is considered to be freight (affects train freight multiplier). + * @param te The effect that delivering this cargo type has on towns. Also affects destination of subsidies. + * @param str_plural The name suffix used to populate CargoSpec->name, CargoSpec->quantifier, + * CargoSpec->abbrev and CargoSpec->sprite. See above for more detailed information. + * @param str_singular The name suffix used to populate CargoSpec->name_single. See above for more information. + * @param str_volume Name of a single unit of cargo of this type. + * @param classes Classes of this cargo type. @see CargoClass + */ +#define MK(bt, label, colour, weight, mult, ip, td1, td2, freight, te, str_plural, str_singular, str_volume, classes) \ + {bt, label, colour, colour, weight, mult, ip, {td1, td2}, freight, te, 0, 0, \ + MK_STR_CARGO_PLURAL(str_plural), MK_STR_CARGO_SINGULAR(str_singular), str_volume, MK_STR_QUANTITY(str_plural), MK_STR_ABBREV(str_plural), \ + MK_SPRITE(str_plural), classes, nullptr, nullptr, 0} + /** Cargo types available by default. */ static const CargoSpec _default_cargo[] = { - MK( 0, 'PASS', 152, 1, 3185, 0, 24, false, TE_PASSENGERS, - STR_CARGO_PLURAL_PASSENGERS, STR_CARGO_SINGULAR_PASSENGER, STR_PASSENGERS, STR_QUANTITY_PASSENGERS, STR_ABBREV_PASSENGERS, - SPR_CARGO_PASSENGER, CC_PASSENGERS, 0x400), - - MK( 1, 'COAL', 6, 16, 5916, 7, 255, true, TE_NONE, - STR_CARGO_PLURAL_COAL, STR_CARGO_SINGULAR_COAL, STR_TONS, STR_QUANTITY_COAL, STR_ABBREV_COAL, - SPR_CARGO_COAL, CC_BULK, 0x100), - - MK( 2, 'MAIL', 15, 4, 4550, 20, 90, false, TE_MAIL, - STR_CARGO_PLURAL_MAIL, STR_CARGO_SINGULAR_MAIL, STR_BAGS, STR_QUANTITY_MAIL, STR_ABBREV_MAIL, - SPR_CARGO_MAIL, CC_MAIL, 0x200), - + MK( 0, 'PASS', 152, 1, 0x400, 3185, 0, 24, false, TE_PASSENGERS, PASSENGERS, PASSENGER, STR_PASSENGERS, CC_PASSENGERS), + MK( 1, 'COAL', 6, 16, 0x100, 5916, 7, 255, true, TE_NONE, COAL, COAL, STR_TONS, CC_BULK), + MK( 2, 'MAIL', 15, 4, 0x200, 4550, 20, 90, false, TE_MAIL, MAIL, MAIL, STR_BAGS, CC_MAIL), /* Oil in temperate and arctic */ - MK( 3, 'OIL_', 174, 16, 4437, 25, 255, true, TE_NONE, - STR_CARGO_PLURAL_OIL, STR_CARGO_SINGULAR_OIL, STR_LITERS, STR_QUANTITY_OIL, STR_ABBREV_OIL, - SPR_CARGO_OIL, CC_LIQUID, 0x100), - + MK( 3, 'OIL_', 174, 16, 0x100, 4437, 25, 255, true, TE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID), /* Oil in subtropic */ - MK( 3, 'OIL_', 174, 16, 4892, 25, 255, true, TE_NONE, - STR_CARGO_PLURAL_OIL, STR_CARGO_SINGULAR_OIL, STR_LITERS, STR_QUANTITY_OIL, STR_ABBREV_OIL, - SPR_CARGO_OIL, CC_LIQUID, 0x100), - - MK( 4, 'LVST', 208, 3, 4322, 4, 18, true, TE_NONE, - STR_CARGO_PLURAL_LIVESTOCK, STR_CARGO_SINGULAR_LIVESTOCK, STR_ITEMS, STR_QUANTITY_LIVESTOCK, STR_ABBREV_LIVESTOCK, - SPR_CARGO_LIVESTOCK, CC_PIECE_GOODS, 0x100), - - MK( 5, 'GOOD', 194, 8, 6144, 5, 28, true, TE_GOODS, - STR_CARGO_PLURAL_GOODS, STR_CARGO_SINGULAR_GOODS, STR_CRATES, STR_QUANTITY_GOODS, STR_ABBREV_GOODS, - SPR_CARGO_GOODS, CC_EXPRESS, 0x200), - - MK( 6, 'GRAI', 191, 16, 4778, 4, 40, true, TE_NONE, - STR_CARGO_PLURAL_GRAIN, STR_CARGO_SINGULAR_GRAIN, STR_TONS, STR_QUANTITY_GRAIN, STR_ABBREV_GRAIN, - SPR_CARGO_GRAIN, CC_BULK, 0x100), - - MK( 6, 'WHEA', 191, 16, 4778, 4, 40, true, TE_NONE, - STR_CARGO_PLURAL_WHEAT, STR_CARGO_SINGULAR_WHEAT, STR_TONS, STR_QUANTITY_WHEAT, STR_ABBREV_WHEAT, - SPR_CARGO_GRAIN, CC_BULK, 0x100), - - MK( 6, 'MAIZ', 191, 16, 4322, 4, 40, true, TE_NONE, - STR_CARGO_PLURAL_MAIZE, STR_CARGO_SINGULAR_MAIZE, STR_TONS, STR_QUANTITY_MAIZE, STR_ABBREV_MAIZE, - SPR_CARGO_GRAIN, CC_BULK, 0x100), - + MK( 3, 'OIL_', 174, 16, 0x100, 4892, 25, 255, true, TE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID), + MK( 4, 'LVST', 208, 3, 0x100, 4322, 4, 18, true, TE_NONE, LIVESTOCK, LIVESTOCK, STR_ITEMS, CC_PIECE_GOODS), + MK( 5, 'GOOD', 194, 8, 0x200, 6144, 5, 28, true, TE_GOODS, GOODS, GOODS, STR_CRATES, CC_EXPRESS), + MK( 6, 'GRAI', 191, 16, 0x100, 4778, 4, 40, true, TE_NONE, GRAIN, GRAIN, STR_TONS, CC_BULK), + MK( 6, 'WHEA', 191, 16, 0x100, 4778, 4, 40, true, TE_NONE, WHEAT, WHEAT, STR_TONS, CC_BULK), + MK( 6, 'MAIZ', 191, 16, 0x100, 4322, 4, 40, true, TE_NONE, MAIZE, MAIZE, STR_TONS, CC_BULK), /* Wood in temperate and arctic */ - MK( 7, 'WOOD', 84, 16, 5005, 15, 255, true, TE_NONE, - STR_CARGO_PLURAL_WOOD, STR_CARGO_SINGULAR_WOOD, STR_TONS, STR_QUANTITY_WOOD, STR_ABBREV_WOOD, - SPR_CARGO_WOOD, CC_PIECE_GOODS, 0x100), - + MK( 7, 'WOOD', 84, 16, 0x100, 5005, 15, 255, true, TE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS), /* Wood in subtropic */ - MK( 7, 'WOOD', 84, 16, 7964, 15, 255, true, TE_NONE, - STR_CARGO_PLURAL_WOOD, STR_CARGO_SINGULAR_WOOD, STR_TONS, STR_QUANTITY_WOOD, STR_ABBREV_WOOD, - SPR_CARGO_WOOD, CC_PIECE_GOODS, 0x100), - - MK( 8, 'IORE', 184, 16, 5120, 9, 255, true, TE_NONE, - STR_CARGO_PLURAL_IRON_ORE, STR_CARGO_SINGULAR_IRON_ORE, STR_TONS, STR_QUANTITY_IRON_ORE, STR_ABBREV_IRON_ORE, - SPR_CARGO_IRON_ORE, CC_BULK, 0x100), - - MK( 9, 'STEL', 10, 16, 5688, 7, 255, true, TE_NONE, - STR_CARGO_PLURAL_STEEL, STR_CARGO_SINGULAR_STEEL, STR_TONS, STR_QUANTITY_STEEL, STR_ABBREV_STEEL, - SPR_CARGO_STEEL, CC_PIECE_GOODS, 0x100), - - MK( 10, 'VALU', 202, 2, 7509, 1, 32, true, TE_NONE, - STR_CARGO_PLURAL_VALUABLES, STR_CARGO_SINGULAR_VALUABLES, STR_BAGS, STR_QUANTITY_VALUABLES, STR_ABBREV_VALUABLES, - SPR_CARGO_VALUES_GOLD, CC_ARMOURED, 0x100), - - MK( 10, 'GOLD', 202, 8, 5802, 10, 40, true, TE_NONE, - STR_CARGO_PLURAL_GOLD, STR_CARGO_SINGULAR_GOLD, STR_BAGS, STR_QUANTITY_GOLD, STR_ABBREV_GOLD, - SPR_CARGO_VALUES_GOLD, CC_ARMOURED, 0x100), - - MK( 10, 'DIAM', 202, 2, 5802, 10, 255, true, TE_NONE, - STR_CARGO_PLURAL_DIAMONDS, STR_CARGO_SINGULAR_DIAMOND, STR_BAGS, STR_QUANTITY_DIAMONDS, STR_ABBREV_DIAMONDS, - SPR_CARGO_DIAMONDS, CC_ARMOURED, 0x100), - - MK( 11, 'PAPR', 10, 16, 5461, 7, 60, true, TE_NONE, - STR_CARGO_PLURAL_PAPER, STR_CARGO_SINGULAR_PAPER, STR_TONS, STR_QUANTITY_PAPER, STR_ABBREV_PAPER, - SPR_CARGO_PAPER, CC_PIECE_GOODS, 0x100), - - MK( 12, 'FOOD', 48, 16, 5688, 0, 30, true, TE_FOOD, - STR_CARGO_PLURAL_FOOD, STR_CARGO_SINGULAR_FOOD, STR_TONS, STR_QUANTITY_FOOD, STR_ABBREV_FOOD, - SPR_CARGO_FOOD, CC_EXPRESS | CC_REFRIGERATED, 0x100), - - MK( 13, 'FRUT', 208, 16, 4209, 0, 15, true, TE_NONE, - STR_CARGO_PLURAL_FRUIT, STR_CARGO_SINGULAR_FRUIT, STR_TONS, STR_QUANTITY_FRUIT, STR_ABBREV_FRUIT, - SPR_CARGO_FRUIT, CC_BULK | CC_REFRIGERATED, 0x100), - - MK( 14, 'CORE', 184, 16, 4892, 12, 255, true, TE_NONE, - STR_CARGO_PLURAL_COPPER_ORE, STR_CARGO_SINGULAR_COPPER_ORE, STR_TONS, STR_QUANTITY_COPPER_ORE, STR_ABBREV_COPPER_ORE, - SPR_CARGO_COPPER_ORE, CC_BULK, 0x100), - - MK( 15, 'WATR', 10, 16, 4664, 20, 80, true, TE_WATER, - STR_CARGO_PLURAL_WATER, STR_CARGO_SINGULAR_WATER, STR_LITERS, STR_QUANTITY_WATER, STR_ABBREV_WATER, - SPR_CARGO_WATERCOLA, CC_LIQUID, 0x100), - - MK( 16, 'RUBR', 6, 16, 4437, 2, 20, true, TE_NONE, - STR_CARGO_PLURAL_RUBBER, STR_CARGO_SINGULAR_RUBBER, STR_LITERS, STR_QUANTITY_RUBBER, STR_ABBREV_RUBBER, - SPR_CARGO_RUBBER, CC_LIQUID, 0x100), - - MK( 17, 'SUGR', 6, 16, 4437, 20, 255, true, TE_NONE, - STR_CARGO_PLURAL_SUGAR, STR_CARGO_SINGULAR_SUGAR, STR_TONS, STR_QUANTITY_SUGAR, STR_ABBREV_SUGAR, - SPR_CARGO_SUGAR, CC_BULK, 0x100), - - MK( 18, 'TOYS', 174, 2, 5574, 25, 255, true, TE_NONE, - STR_CARGO_PLURAL_TOYS, STR_CARGO_SINGULAR_TOY, STR_ITEMS, STR_QUANTITY_TOYS, STR_ABBREV_TOYS, - SPR_CARGO_TOYS, CC_PIECE_GOODS, 0x100), - - MK( 19, 'BATT', 208, 4, 4322, 2, 30, true, TE_NONE, - STR_CARGO_PLURAL_BATTERIES, STR_CARGO_SINGULAR_BATTERY, STR_ITEMS, STR_QUANTITY_BATTERIES, STR_ABBREV_BATTERIES, - SPR_CARGO_BATTERIES, CC_PIECE_GOODS, 0x100), - - MK( 20, 'SWET', 194, 5, 6144, 8, 40, true, TE_GOODS, - STR_CARGO_PLURAL_CANDY, STR_CARGO_SINGULAR_CANDY, STR_BAGS, STR_QUANTITY_SWEETS, STR_ABBREV_SWEETS, - SPR_CARGO_CANDY, CC_EXPRESS, 0x200), - - MK( 21, 'TOFF', 191, 16, 4778, 14, 60, true, TE_NONE, - STR_CARGO_PLURAL_TOFFEE, STR_CARGO_SINGULAR_TOFFEE, STR_TONS, STR_QUANTITY_TOFFEE, STR_ABBREV_TOFFEE, - SPR_CARGO_TOFFEE, CC_BULK, 0x100), - - MK( 22, 'COLA', 84, 16, 4892, 5, 75, true, TE_NONE, - STR_CARGO_PLURAL_COLA, STR_CARGO_SINGULAR_COLA, STR_LITERS, STR_QUANTITY_COLA, STR_ABBREV_COLA, - SPR_CARGO_WATERCOLA, CC_LIQUID, 0x100), - - MK( 23, 'CTCD', 184, 16, 5005, 10, 25, true, TE_NONE, - STR_CARGO_PLURAL_COTTON_CANDY, STR_CARGO_SINGULAR_COTTON_CANDY, STR_TONS, STR_QUANTITY_CANDYFLOSS, STR_ABBREV_CANDYFLOSS, - SPR_CARGO_COTTONCANDY, CC_BULK, 0x100), - - MK( 24, 'BUBL', 10, 1, 5077, 20, 80, true, TE_NONE, - STR_CARGO_PLURAL_BUBBLES, STR_CARGO_SINGULAR_BUBBLE, STR_ITEMS, STR_QUANTITY_BUBBLES, STR_ABBREV_BUBBLES, - SPR_CARGO_BUBBLES, CC_PIECE_GOODS, 0x100), - - MK( 25, 'PLST', 202, 16, 4664, 30, 255, true, TE_NONE, - STR_CARGO_PLURAL_PLASTIC, STR_CARGO_SINGULAR_PLASTIC, STR_LITERS, STR_QUANTITY_PLASTIC, STR_ABBREV_PLASTIC, - SPR_CARGO_PLASTIC, CC_LIQUID, 0x100), - - MK( 26, 'FZDR', 48, 2, 6250, 30, 50, true, TE_FOOD, - STR_CARGO_PLURAL_FIZZY_DRINKS, STR_CARGO_SINGULAR_FIZZY_DRINK, STR_ITEMS, STR_QUANTITY_FIZZY_DRINKS, STR_ABBREV_FIZZY_DRINKS, - SPR_CARGO_FIZZYDRINK, CC_PIECE_GOODS, 0x100), + MK( 7, 'WOOD', 84, 16, 0x100, 7964, 15, 255, true, TE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS), + MK( 8, 'IORE', 184, 16, 0x100, 5120, 9, 255, true, TE_NONE, IRON_ORE, IRON_ORE, STR_TONS, CC_BULK), + MK( 9, 'STEL', 10, 16, 0x100, 5688, 7, 255, true, TE_NONE, STEEL, STEEL, STR_TONS, CC_PIECE_GOODS), + MK( 10, 'VALU', 202, 2, 0x100, 7509, 1, 32, true, TE_NONE, VALUABLES, VALUABLES, STR_BAGS, CC_ARMOURED), + MK( 10, 'GOLD', 202, 8, 0x100, 5802, 10, 40, true, TE_NONE, GOLD, GOLD, STR_BAGS, CC_ARMOURED), + MK( 10, 'DIAM', 202, 2, 0x100, 5802, 10, 255, true, TE_NONE, DIAMONDS, DIAMOND, STR_BAGS, CC_ARMOURED), + MK( 11, 'PAPR', 10, 16, 0x100, 5461, 7, 60, true, TE_NONE, PAPER, PAPER, STR_TONS, CC_PIECE_GOODS), + MK( 12, 'FOOD', 48, 16, 0x100, 5688, 0, 30, true, TE_FOOD, FOOD, FOOD, STR_TONS, CC_EXPRESS | CC_REFRIGERATED), + MK( 13, 'FRUT', 208, 16, 0x100, 4209, 0, 15, true, TE_NONE, FRUIT, FRUIT, STR_TONS, CC_BULK | CC_REFRIGERATED), + MK( 14, 'CORE', 184, 16, 0x100, 4892, 12, 255, true, TE_NONE, COPPER_ORE, COPPER_ORE, STR_TONS, CC_BULK), + MK( 15, 'WATR', 10, 16, 0x100, 4664, 20, 80, true, TE_WATER, WATER, WATER, STR_LITERS, CC_LIQUID), + MK( 16, 'RUBR', 6, 16, 0x100, 4437, 2, 20, true, TE_NONE, RUBBER, RUBBER, STR_LITERS, CC_LIQUID), + MK( 17, 'SUGR', 6, 16, 0x100, 4437, 20, 255, true, TE_NONE, SUGAR, SUGAR, STR_TONS, CC_BULK), + MK( 18, 'TOYS', 174, 2, 0x100, 5574, 25, 255, true, TE_NONE, TOYS, TOY, STR_ITEMS, CC_PIECE_GOODS), + MK( 19, 'BATT', 208, 4, 0x100, 4322, 2, 30, true, TE_NONE, BATTERIES, BATTERY, STR_ITEMS, CC_PIECE_GOODS), + MK( 20, 'SWET', 194, 5, 0x200, 6144, 8, 40, true, TE_GOODS, SWEETS, SWEETS, STR_BAGS, CC_EXPRESS), + MK( 21, 'TOFF', 191, 16, 0x100, 4778, 14, 60, true, TE_NONE, TOFFEE, TOFFEE, STR_TONS, CC_BULK), + MK( 22, 'COLA', 84, 16, 0x100, 4892, 5, 75, true, TE_NONE, COLA, COLA, STR_LITERS, CC_LIQUID), + MK( 23, 'CTCD', 184, 16, 0x100, 5005, 10, 25, true, TE_NONE, CANDYFLOSS, CANDYFLOSS, STR_TONS, CC_BULK), + MK( 24, 'BUBL', 10, 1, 0x100, 5077, 20, 80, true, TE_NONE, BUBBLES, BUBBLE, STR_ITEMS, CC_PIECE_GOODS), + MK( 25, 'PLST', 202, 16, 0x100, 4664, 30, 255, true, TE_NONE, PLASTIC, PLASTIC, STR_LITERS, CC_LIQUID), + MK( 26, 'FZDR', 48, 2, 0x100, 6250, 30, 50, true, TE_FOOD, FIZZY_DRINKS, FIZZY_DRINK, STR_ITEMS, CC_PIECE_GOODS), /* Void slot in temperate */ - MK( 0xFF, 0, 1, 0, 5688, 0, 30, true, TE_NONE, - STR_CARGO_PLURAL_NOTHING, STR_CARGO_SINGULAR_NOTHING, STR_TONS, STR_QUANTITY_NOTHING, STR_ABBREV_NOTHING, - SPR_ASCII_SPACE, CC_NOAVAILABLE, 0x100), - + MK(0xFF, 0, 1, 0, 0x100, 5688, 0, 30, true, TE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE), /* Void slot in arctic */ - MK( 0xFF, 0, 184, 0, 5120, 9, 255, true, TE_NONE, - STR_CARGO_PLURAL_NOTHING, STR_CARGO_SINGULAR_NOTHING, STR_TONS, STR_QUANTITY_NOTHING, STR_ABBREV_NOTHING, - SPR_ASCII_SPACE, CC_NOAVAILABLE, 0x100), - + MK(0xFF, 0, 184, 0, 0x100, 5120, 9, 255, true, TE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE), }; diff --git a/src/table/sprites.h b/src/table/sprites.h index 5df55b8ae4..64f628e5d1 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -1139,33 +1139,38 @@ static const SpriteID SPR_IT_TOY_FACTORY_ROBOT = 4720; static const SpriteID SPR_IT_POWER_PLANT_TRANSFORMERS = 2054; /* small icons of cargo available in station waiting*/ -static const SpriteID SPR_CARGO_PASSENGER = 4297; +static const SpriteID SPR_CARGO_PASSENGERS = 4297; static const SpriteID SPR_CARGO_COAL = 4298; static const SpriteID SPR_CARGO_MAIL = 4299; static const SpriteID SPR_CARGO_OIL = 4300; static const SpriteID SPR_CARGO_LIVESTOCK = 4301; static const SpriteID SPR_CARGO_GOODS = 4302; -static const SpriteID SPR_CARGO_GRAIN = 4303; +static const SpriteID SPR_CARGO_GRAIN = 4303; // shared sprite with SPR_CARGO_WHEAT, SPR_CARGO_MAIZE +static const SpriteID SPR_CARGO_WHEAT = 4303; // shared sprite with SPR_CARGO_GRAIN, SPR_CARGO_MAIZE +static const SpriteID SPR_CARGO_MAIZE = 4303; // shared sprite with SPR_CARGO_GRAIN, SPR_CARGO_WHEAT static const SpriteID SPR_CARGO_WOOD = 4304; static const SpriteID SPR_CARGO_IRON_ORE = 4305; static const SpriteID SPR_CARGO_STEEL = 4306; -static const SpriteID SPR_CARGO_VALUES_GOLD = 4307; // shared between temperate and arctic +static const SpriteID SPR_CARGO_VALUABLES = 4307; // shared between temperate and arctic ( SPR_CARGO_GOLD ) +static const SpriteID SPR_CARGO_GOLD = 4307; // shared between temperate and arctic ( SPR_CARGO_VALUABLES ) static const SpriteID SPR_CARGO_FRUIT = 4308; static const SpriteID SPR_CARGO_COPPER_ORE = 4309; -static const SpriteID SPR_CARGO_WATERCOLA = 4310; // shared between desert and toyland +static const SpriteID SPR_CARGO_WATER = 4310; // shared between desert and toyland ( SPR_CARGO_COLA ) +static const SpriteID SPR_CARGO_COLA = 4310; // shared between desert and toyland ( SPR_CARGO_WATER ) static const SpriteID SPR_CARGO_DIAMONDS = 4311; static const SpriteID SPR_CARGO_FOOD = 4312; static const SpriteID SPR_CARGO_PAPER = 4313; static const SpriteID SPR_CARGO_RUBBER = 4314; -static const SpriteID SPR_CARGO_CANDY = 4315; +static const SpriteID SPR_CARGO_SWEETS = 4315; static const SpriteID SPR_CARGO_SUGAR = 4316; static const SpriteID SPR_CARGO_TOYS = 4317; -static const SpriteID SPR_CARGO_COTTONCANDY = 4318; -static const SpriteID SPR_CARGO_FIZZYDRINK = 4319; +static const SpriteID SPR_CARGO_CANDYFLOSS = 4318; +static const SpriteID SPR_CARGO_FIZZY_DRINKS = 4319; static const SpriteID SPR_CARGO_TOFFEE = 4320; static const SpriteID SPR_CARGO_BUBBLES = 4321; static const SpriteID SPR_CARGO_PLASTIC = 4322; static const SpriteID SPR_CARGO_BATTERIES = 4323; +static const SpriteID SPR_CARGO_NOTHING = SPR_ASCII_SPACE; // Placeholder for void cargo slots. /* Effect vehicles */ static const SpriteID SPR_BULLDOZER_NE = 1416; From 86e08aa8ef57822e3080b859ffe2802c8996bd9e Mon Sep 17 00:00:00 2001 From: Xaroth Brook Date: Wed, 16 Dec 2020 23:05:43 +0100 Subject: [PATCH 376/601] Update: Apply name changes to all languages. --- src/lang/afrikaans.txt | 8 +++--- src/lang/arabic_egypt.txt | 8 +++--- src/lang/basque.txt | 8 +++--- src/lang/belarusian.txt | 38 +++++++++++++-------------- src/lang/brazilian_portuguese.txt | 8 +++--- src/lang/bulgarian.txt | 8 +++--- src/lang/catalan.txt | 8 +++--- src/lang/croatian.txt | 18 ++++++------- src/lang/czech.txt | 14 +++++----- src/lang/danish.txt | 8 +++--- src/lang/dutch.txt | 8 +++--- src/lang/english_AU.txt | 8 +++--- src/lang/english_US.txt | 8 +++--- src/lang/esperanto.txt | 8 +++--- src/lang/estonian.txt | 10 +++---- src/lang/faroese.txt | 8 +++--- src/lang/finnish.txt | 8 +++--- src/lang/french.txt | 8 +++--- src/lang/gaelic.txt | 26 +++++++++--------- src/lang/galician.txt | 8 +++--- src/lang/german.txt | 8 +++--- src/lang/greek.txt | 14 +++++----- src/lang/hebrew.txt | 10 +++---- src/lang/hungarian.txt | 14 +++++----- src/lang/icelandic.txt | 8 +++--- src/lang/indonesian.txt | 8 +++--- src/lang/irish.txt | 8 +++--- src/lang/italian.txt | 8 +++--- src/lang/japanese.txt | 8 +++--- src/lang/korean.txt | 8 +++--- src/lang/latin.txt | 26 +++++++++--------- src/lang/latvian.txt | 8 +++--- src/lang/lithuanian.txt | 20 +++++++------- src/lang/luxembourgish.txt | 8 +++--- src/lang/malay.txt | 8 +++--- src/lang/norwegian_bokmal.txt | 8 +++--- src/lang/norwegian_nynorsk.txt | 8 +++--- src/lang/polish.txt | 42 +++++++++++++++--------------- src/lang/portuguese.txt | 8 +++--- src/lang/romanian.txt | 8 +++--- src/lang/russian.txt | 20 +++++++------- src/lang/serbian.txt | 26 +++++++++--------- src/lang/simplified_chinese.txt | 8 +++--- src/lang/slovak.txt | 14 +++++----- src/lang/slovenian.txt | 26 +++++++++--------- src/lang/spanish.txt | 8 +++--- src/lang/spanish_MX.txt | 8 +++--- src/lang/swedish.txt | 8 +++--- src/lang/tamil.txt | 8 +++--- src/lang/thai.txt | 8 +++--- src/lang/traditional_chinese.txt | 8 +++--- src/lang/turkish.txt | 8 +++--- src/lang/ukrainian.txt | 20 +++++++------- src/lang/unfinished/chuvash.txt | 8 +++--- src/lang/unfinished/frisian.txt | 8 +++--- src/lang/unfinished/ido.txt | 8 +++--- src/lang/unfinished/macedonian.txt | 8 +++--- src/lang/unfinished/maltese.txt | 8 +++--- src/lang/unfinished/marathi.txt | 8 +++--- src/lang/unfinished/persian.txt | 8 +++--- src/lang/unfinished/urdu.txt | 8 +++--- src/lang/vietnamese.txt | 8 +++--- src/lang/welsh.txt | 8 +++--- 63 files changed, 357 insertions(+), 357 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index abb65269a5..5ac444e61c 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Koring STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Suiker STR_CARGO_PLURAL_TOYS :Speelgoed -STR_CARGO_PLURAL_CANDY :Lekkers +STR_CARGO_PLURAL_SWEETS :Lekkers STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Spookasem +STR_CARGO_PLURAL_CANDYFLOSS :Spookasem STR_CARGO_PLURAL_BUBBLES :Borrels STR_CARGO_PLURAL_TOFFEE :Toffie STR_CARGO_PLURAL_BATTERIES :Batterye @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Koring STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Suiker STR_CARGO_SINGULAR_TOY :Speelding -STR_CARGO_SINGULAR_CANDY :Lekker +STR_CARGO_SINGULAR_SWEETS :Lekker STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Spookasem +STR_CARGO_SINGULAR_CANDYFLOSS :Spookasem STR_CARGO_SINGULAR_BUBBLE :Borrel STR_CARGO_SINGULAR_TOFFEE :Toffie STR_CARGO_SINGULAR_BATTERY :Battery diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index c5df571ea2..d86812afb1 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :قمح STR_CARGO_PLURAL_RUBBER :مطاط STR_CARGO_PLURAL_SUGAR :سكر STR_CARGO_PLURAL_TOYS :دُمَي -STR_CARGO_PLURAL_CANDY :حلويات +STR_CARGO_PLURAL_SWEETS :حلويات STR_CARGO_PLURAL_COLA :كولا -STR_CARGO_PLURAL_COTTON_CANDY :سكر نبات +STR_CARGO_PLURAL_CANDYFLOSS :سكر نبات STR_CARGO_PLURAL_BUBBLES :فقاعات STR_CARGO_PLURAL_TOFFEE :توفي STR_CARGO_PLURAL_BATTERIES :بطاريات @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :قمح STR_CARGO_SINGULAR_RUBBER :مطاط STR_CARGO_SINGULAR_SUGAR :سكر STR_CARGO_SINGULAR_TOY :دُمِيه -STR_CARGO_SINGULAR_CANDY :حلويات +STR_CARGO_SINGULAR_SWEETS :حلويات STR_CARGO_SINGULAR_COLA :كولا -STR_CARGO_SINGULAR_COTTON_CANDY :سكر نبات +STR_CARGO_SINGULAR_CANDYFLOSS :سكر نبات STR_CARGO_SINGULAR_BUBBLE :فقاعات STR_CARGO_SINGULAR_TOFFEE :توفي STR_CARGO_SINGULAR_BATTERY :بطاريات diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 088783db8a..3c84f8df62 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Garia STR_CARGO_PLURAL_RUBBER :Goma STR_CARGO_PLURAL_SUGAR :Azukrea STR_CARGO_PLURAL_TOYS :Jostailuak -STR_CARGO_PLURAL_CANDY :Gozokiak +STR_CARGO_PLURAL_SWEETS :Gozokiak STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Kotoiezko Azukrea +STR_CARGO_PLURAL_CANDYFLOSS :Kotoiezko Azukrea STR_CARGO_PLURAL_BUBBLES :Burbuilak STR_CARGO_PLURAL_TOFFEE :Gozoki lehengaia STR_CARGO_PLURAL_BATTERIES :Pilak @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Garia STR_CARGO_SINGULAR_RUBBER :Goma STR_CARGO_SINGULAR_SUGAR :Azukrea STR_CARGO_SINGULAR_TOY :Jostailua -STR_CARGO_SINGULAR_CANDY :Gozoki +STR_CARGO_SINGULAR_SWEETS :Gozoki STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Kotoiezko Azukrea +STR_CARGO_SINGULAR_CANDYFLOSS :Kotoiezko Azukrea STR_CARGO_SINGULAR_BUBBLE :Burbuila STR_CARGO_SINGULAR_TOFFEE :Gozoki lehengaia STR_CARGO_SINGULAR_BATTERY :Pila diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 29df4c3c2a..e295b60282 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -166,7 +166,7 @@ STR_CARGO_PLURAL_TOYS.dat :цацкам STR_CARGO_PLURAL_TOYS.acc :цацкі STR_CARGO_PLURAL_TOYS.abl :цацкамі STR_CARGO_PLURAL_TOYS.pre :цацках -STR_CARGO_PLURAL_CANDY :{G=p}Цукеркi +STR_CARGO_PLURAL_SWEETS :{G=p}Цукеркi STR_CARGO_PLURAL_CANDY.gen :цукерак STR_CARGO_PLURAL_CANDY.dat :цукеркам STR_CARGO_PLURAL_CANDY.acc :цукеркі @@ -178,12 +178,12 @@ STR_CARGO_PLURAL_COLA.dat :коле STR_CARGO_PLURAL_COLA.acc :колу STR_CARGO_PLURAL_COLA.abl :колай STR_CARGO_PLURAL_COLA.pre :коле -STR_CARGO_PLURAL_COTTON_CANDY :{G=f}Цукровая баўна -STR_CARGO_PLURAL_COTTON_CANDY.gen :цукровай баўны -STR_CARGO_PLURAL_COTTON_CANDY.dat :цукровай баўне -STR_CARGO_PLURAL_COTTON_CANDY.acc :цукровую баўну -STR_CARGO_PLURAL_COTTON_CANDY.abl :цукровай баўнай -STR_CARGO_PLURAL_COTTON_CANDY.pre :цукровай баўне +STR_CARGO_PLURAL_CANDYFLOSS :{G=f}Цукровая баўна +STR_CARGO_PLURAL_CANDYFLOSS.gen :цукровай баўны +STR_CARGO_PLURAL_CANDYFLOSS.dat :цукровай баўне +STR_CARGO_PLURAL_CANDYFLOSS.acc :цукровую баўну +STR_CARGO_PLURAL_CANDYFLOSS.abl :цукровай баўнай +STR_CARGO_PLURAL_CANDYFLOSS.pre :цукровай баўне STR_CARGO_PLURAL_BUBBLES :{G=p}Бурбалкi STR_CARGO_PLURAL_BUBBLES.gen :бурбалак STR_CARGO_PLURAL_BUBBLES.dat :бурбалкам @@ -355,24 +355,24 @@ STR_CARGO_SINGULAR_TOY.dat :цаццы STR_CARGO_SINGULAR_TOY.acc :цацку STR_CARGO_SINGULAR_TOY.abl :цацкай STR_CARGO_SINGULAR_TOY.pre :цаццы -STR_CARGO_SINGULAR_CANDY :{G=f}Цукерка -STR_CARGO_SINGULAR_CANDY.gen :цукеркі -STR_CARGO_SINGULAR_CANDY.dat :цукерцы -STR_CARGO_SINGULAR_CANDY.acc :цукерку -STR_CARGO_SINGULAR_CANDY.abl :цукеркай -STR_CARGO_SINGULAR_CANDY.pre :цукерцы +STR_CARGO_SINGULAR_SWEETS :{G=f}Цукерка +STR_CARGO_SINGULAR_SWEETS.gen :цукеркі +STR_CARGO_SINGULAR_SWEETS.dat :цукерцы +STR_CARGO_SINGULAR_SWEETS.acc :цукерку +STR_CARGO_SINGULAR_SWEETS.abl :цукеркай +STR_CARGO_SINGULAR_SWEETS.pre :цукерцы STR_CARGO_SINGULAR_COLA :{G=f}Кола STR_CARGO_SINGULAR_COLA.gen :колы STR_CARGO_SINGULAR_COLA.dat :коле STR_CARGO_SINGULAR_COLA.acc :колу STR_CARGO_SINGULAR_COLA.abl :колай STR_CARGO_SINGULAR_COLA.pre :коле -STR_CARGO_SINGULAR_COTTON_CANDY :{G=f}Цукровая баўна -STR_CARGO_SINGULAR_COTTON_CANDY.gen :цукровай баўны -STR_CARGO_SINGULAR_COTTON_CANDY.dat :цукровай баўне -STR_CARGO_SINGULAR_COTTON_CANDY.acc :цукровую баўну -STR_CARGO_SINGULAR_COTTON_CANDY.abl :цукровай баўнай -STR_CARGO_SINGULAR_COTTON_CANDY.pre :цукровай баўне +STR_CARGO_SINGULAR_CANDYFLOSS :{G=f}Цукровая баўна +STR_CARGO_SINGULAR_CANDYFLOSS.gen :цукровай баўны +STR_CARGO_SINGULAR_CANDYFLOSS.dat :цукровай баўне +STR_CARGO_SINGULAR_CANDYFLOSS.acc :цукровую баўну +STR_CARGO_SINGULAR_CANDYFLOSS.abl :цукровай баўнай +STR_CARGO_SINGULAR_CANDYFLOSS.pre :цукровай баўне STR_CARGO_SINGULAR_BUBBLE :{G=f}Бурбалка STR_CARGO_SINGULAR_BUBBLE.gen :бурбалкі STR_CARGO_SINGULAR_BUBBLE.dat :бурбалцы diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 040a6e0499..49d34f5bfe 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Trigo STR_CARGO_PLURAL_RUBBER :{G=f}Borracha STR_CARGO_PLURAL_SUGAR :{G=m}Açúcar STR_CARGO_PLURAL_TOYS :{G=m}Brinquedos -STR_CARGO_PLURAL_CANDY :{G=m}Doces +STR_CARGO_PLURAL_SWEETS :{G=m}Doces STR_CARGO_PLURAL_COLA :{G=f}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Algodão Doce +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}Algodão Doce STR_CARGO_PLURAL_BUBBLES :{G=f}Bolhas STR_CARGO_PLURAL_TOFFEE :{G=m}Caramelo STR_CARGO_PLURAL_BATTERIES :{G=f}Pilhas @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}Trigo STR_CARGO_SINGULAR_RUBBER :{G=f}Borracha STR_CARGO_SINGULAR_SUGAR :{G=m}Açúcar STR_CARGO_SINGULAR_TOY :{G=m}Brinquedo -STR_CARGO_SINGULAR_CANDY :{G=m}Doce +STR_CARGO_SINGULAR_SWEETS :{G=m}Doce STR_CARGO_SINGULAR_COLA :{G=m}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Algodão doce +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}Algodão doce STR_CARGO_SINGULAR_BUBBLE :{G=f}Bolha STR_CARGO_SINGULAR_TOFFEE :{G=m}Caramelo STR_CARGO_SINGULAR_BATTERY :{G=f}Pilha diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 37ead463bd..c5a645caf8 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :Пшеница STR_CARGO_PLURAL_RUBBER :Каучук STR_CARGO_PLURAL_SUGAR :Захар STR_CARGO_PLURAL_TOYS :Играчки -STR_CARGO_PLURAL_CANDY :Сладки +STR_CARGO_PLURAL_SWEETS :Сладки STR_CARGO_PLURAL_COLA :Кола -STR_CARGO_PLURAL_COTTON_CANDY :Захарен памук +STR_CARGO_PLURAL_CANDYFLOSS :Захарен памук STR_CARGO_PLURAL_BUBBLES :Балони STR_CARGO_PLURAL_TOFFEE :Карамел STR_CARGO_PLURAL_BATTERIES :Батерии @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :Пшеница STR_CARGO_SINGULAR_RUBBER :Каучук STR_CARGO_SINGULAR_SUGAR :Захар STR_CARGO_SINGULAR_TOY :Играчки -STR_CARGO_SINGULAR_CANDY :Сладки +STR_CARGO_SINGULAR_SWEETS :Сладки STR_CARGO_SINGULAR_COLA :Кола -STR_CARGO_SINGULAR_COTTON_CANDY :Захарен памук +STR_CARGO_SINGULAR_CANDYFLOSS :Захарен памук STR_CARGO_SINGULAR_BUBBLE :Балони STR_CARGO_SINGULAR_TOFFEE :Карамел STR_CARGO_SINGULAR_BATTERY :Батерии diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 958632690b..e2b4561029 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=Masculin}Bla STR_CARGO_PLURAL_RUBBER :{G=Masculin}Cautxú STR_CARGO_PLURAL_SUGAR :{G=Masculin}Sucre STR_CARGO_PLURAL_TOYS :{G=Femenin}Joguines -STR_CARGO_PLURAL_CANDY :{G=Masculin}Dolços +STR_CARGO_PLURAL_SWEETS :{G=Masculin}Dolços STR_CARGO_PLURAL_COLA :{G=Masculin}Refrescos -STR_CARGO_PLURAL_COTTON_CANDY :{G=Masculin}Cotó de sucre +STR_CARGO_PLURAL_CANDYFLOSS :{G=Masculin}Cotó de sucre STR_CARGO_PLURAL_BUBBLES :{G=Femenin}Bombolles STR_CARGO_PLURAL_TOFFEE :{G=Masculin}Caramels STR_CARGO_PLURAL_BATTERIES :{G=Femenin}Piles @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=Masculin}Bla STR_CARGO_SINGULAR_RUBBER :{G=Masculin}Cautxú STR_CARGO_SINGULAR_SUGAR :{G=Masculin}Sucre STR_CARGO_SINGULAR_TOY :{G=Femenin}Joguina -STR_CARGO_SINGULAR_CANDY :{G=Masculin}Dolç +STR_CARGO_SINGULAR_SWEETS :{G=Masculin}Dolç STR_CARGO_SINGULAR_COLA :{G=Masculin}Refresc -STR_CARGO_SINGULAR_COTTON_CANDY :{G=Masculin}Cotó de sucre +STR_CARGO_SINGULAR_CANDYFLOSS :{G=Masculin}Cotó de sucre STR_CARGO_SINGULAR_BUBBLE :{G=Femenin}Bombolla STR_CARGO_SINGULAR_TOFFEE :{G=Masculin}Caramel STR_CARGO_SINGULAR_BATTERY :{G=Femenin}Pila diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 8b44a0aea0..3566934e5b 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -73,12 +73,12 @@ STR_CARGO_PLURAL_SUGAR :Šećer STR_CARGO_PLURAL_SUGAR.gen :šećera STR_CARGO_PLURAL_TOYS :Igračke STR_CARGO_PLURAL_TOYS.gen :igračaka -STR_CARGO_PLURAL_CANDY :Slatkiši +STR_CARGO_PLURAL_SWEETS :Slatkiši STR_CARGO_PLURAL_CANDY.gen :slatkiša STR_CARGO_PLURAL_COLA :Cola STR_CARGO_PLURAL_COLA.gen :cole -STR_CARGO_PLURAL_COTTON_CANDY :Šećerna vuna -STR_CARGO_PLURAL_COTTON_CANDY.gen :šećerne vune +STR_CARGO_PLURAL_CANDYFLOSS :Šećerna vuna +STR_CARGO_PLURAL_CANDYFLOSS.gen :šećerne vune STR_CARGO_PLURAL_BUBBLES :Baloni STR_CARGO_PLURAL_BUBBLES.gen :balona STR_CARGO_PLURAL_TOFFEE :Mliječne karamele @@ -161,15 +161,15 @@ STR_CARGO_SINGULAR_SUGAR.aku :šećer STR_CARGO_SINGULAR_TOY :Igračka STR_CARGO_SINGULAR_TOY.gen :igračaka STR_CARGO_SINGULAR_TOY.aku :igračku -STR_CARGO_SINGULAR_CANDY :Slatkiš -STR_CARGO_SINGULAR_CANDY.gen :slatkiša -STR_CARGO_SINGULAR_CANDY.aku :slatkiš +STR_CARGO_SINGULAR_SWEETS :Slatkiš +STR_CARGO_SINGULAR_SWEETS.gen :slatkiša +STR_CARGO_SINGULAR_SWEETS.aku :slatkiš STR_CARGO_SINGULAR_COLA :Cola STR_CARGO_SINGULAR_COLA.gen :cole STR_CARGO_SINGULAR_COLA.aku :colu -STR_CARGO_SINGULAR_COTTON_CANDY :Šećerna vuna -STR_CARGO_SINGULAR_COTTON_CANDY.gen :šećerne vune -STR_CARGO_SINGULAR_COTTON_CANDY.aku :šećernu vunu +STR_CARGO_SINGULAR_CANDYFLOSS :Šećerna vuna +STR_CARGO_SINGULAR_CANDYFLOSS.gen :šećerne vune +STR_CARGO_SINGULAR_CANDYFLOSS.aku :šećernu vunu STR_CARGO_SINGULAR_BUBBLE :Balon STR_CARGO_SINGULAR_BUBBLE.gen :balona STR_CARGO_SINGULAR_BUBBLE.aku :balon diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 4f03a803d0..0d0b8772d9 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -102,17 +102,17 @@ STR_CARGO_PLURAL_SUGAR.big :Cukr STR_CARGO_PLURAL_TOYS :hračky STR_CARGO_PLURAL_TOYS.gen :hraček STR_CARGO_PLURAL_TOYS.big :Hračky -STR_CARGO_PLURAL_CANDY :bonbony +STR_CARGO_PLURAL_SWEETS :bonbony STR_CARGO_PLURAL_CANDY.gen :bonbonů STR_CARGO_PLURAL_CANDY.big :Bonbony STR_CARGO_PLURAL_COLA :kola STR_CARGO_PLURAL_COLA.gen :koly STR_CARGO_PLURAL_COLA.acc :kolu STR_CARGO_PLURAL_COLA.big :Kola -STR_CARGO_PLURAL_COTTON_CANDY :cukrová vata -STR_CARGO_PLURAL_COTTON_CANDY.gen :cukrové vaty -STR_CARGO_PLURAL_COTTON_CANDY.acc :cukrovou vatu -STR_CARGO_PLURAL_COTTON_CANDY.big :Cukrová vata +STR_CARGO_PLURAL_CANDYFLOSS :cukrová vata +STR_CARGO_PLURAL_CANDYFLOSS.gen :cukrové vaty +STR_CARGO_PLURAL_CANDYFLOSS.acc :cukrovou vatu +STR_CARGO_PLURAL_CANDYFLOSS.big :Cukrová vata STR_CARGO_PLURAL_BUBBLES :bubliny STR_CARGO_PLURAL_BUBBLES.gen :bublin STR_CARGO_PLURAL_BUBBLES.big :Bubliny @@ -157,9 +157,9 @@ STR_CARGO_SINGULAR_WHEAT :pšenice STR_CARGO_SINGULAR_RUBBER :kaučuku STR_CARGO_SINGULAR_SUGAR :cukru STR_CARGO_SINGULAR_TOY :hraček -STR_CARGO_SINGULAR_CANDY :bonbonů +STR_CARGO_SINGULAR_SWEETS :bonbonů STR_CARGO_SINGULAR_COLA :koly -STR_CARGO_SINGULAR_COTTON_CANDY :cukrové vaty +STR_CARGO_SINGULAR_CANDYFLOSS :cukrové vaty STR_CARGO_SINGULAR_BUBBLE :bublin STR_CARGO_SINGULAR_TOFFEE :karamelu STR_CARGO_SINGULAR_BATTERY :baterií diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 10852b899f..95d65615ee 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Hvede STR_CARGO_PLURAL_RUBBER :Gummi STR_CARGO_PLURAL_SUGAR :Sukker STR_CARGO_PLURAL_TOYS :Legetøj -STR_CARGO_PLURAL_CANDY :Slik +STR_CARGO_PLURAL_SWEETS :Slik STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Candyfloss +STR_CARGO_PLURAL_CANDYFLOSS :Candyfloss STR_CARGO_PLURAL_BUBBLES :Bobler STR_CARGO_PLURAL_TOFFEE :Karamel STR_CARGO_PLURAL_BATTERIES :Batterier @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Hvede STR_CARGO_SINGULAR_RUBBER :Gummi STR_CARGO_SINGULAR_SUGAR :Sukker STR_CARGO_SINGULAR_TOY :Legetøj -STR_CARGO_SINGULAR_CANDY :Slik +STR_CARGO_SINGULAR_SWEETS :Slik STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Candyfloss +STR_CARGO_SINGULAR_CANDYFLOSS :Candyfloss STR_CARGO_SINGULAR_BUBBLE :Boble STR_CARGO_SINGULAR_TOFFEE :Karamel STR_CARGO_SINGULAR_BATTERY :Batteri diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index e7d28ce112..4f3e3c3ac5 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Tarwe STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Suiker STR_CARGO_PLURAL_TOYS :Speelgoed -STR_CARGO_PLURAL_CANDY :Snoep +STR_CARGO_PLURAL_SWEETS :Snoep STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Suikerspin +STR_CARGO_PLURAL_CANDYFLOSS :Suikerspin STR_CARGO_PLURAL_BUBBLES :Bellen STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batterijen @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Tarwe STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Suiker STR_CARGO_SINGULAR_TOY :Speelgoed -STR_CARGO_SINGULAR_CANDY :Snoep +STR_CARGO_SINGULAR_SWEETS :Snoep STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Suikerspin +STR_CARGO_SINGULAR_CANDYFLOSS :Suikerspin STR_CARGO_SINGULAR_BUBBLE :Bubbel STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Batterij diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 177c9eb2b2..a4a2b405de 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Wheat STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sugar STR_CARGO_PLURAL_TOYS :Toys -STR_CARGO_PLURAL_CANDY :Lollies +STR_CARGO_PLURAL_SWEETS :Lollies STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Fairy Floss +STR_CARGO_PLURAL_CANDYFLOSS :Fairy Floss STR_CARGO_PLURAL_BUBBLES :Bubbles STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batteries @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Wheat STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sugar STR_CARGO_SINGULAR_TOY :Toy -STR_CARGO_SINGULAR_CANDY :lollies +STR_CARGO_SINGULAR_SWEETS :lollies STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Fairy Floss +STR_CARGO_SINGULAR_CANDYFLOSS :Fairy Floss STR_CARGO_SINGULAR_BUBBLE :Bubble STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Battery diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b633514294..73b1bf42b1 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Wheat STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sugar STR_CARGO_PLURAL_TOYS :Toys -STR_CARGO_PLURAL_CANDY :Candy +STR_CARGO_PLURAL_SWEETS :Candy STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Cotton Candy +STR_CARGO_PLURAL_CANDYFLOSS :Cotton Candy STR_CARGO_PLURAL_BUBBLES :Bubbles STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batteries @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Wheat STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sugar STR_CARGO_SINGULAR_TOY :Toy -STR_CARGO_SINGULAR_CANDY :Candy +STR_CARGO_SINGULAR_SWEETS :Candy STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Cotton Candy +STR_CARGO_SINGULAR_CANDYFLOSS :Cotton Candy STR_CARGO_SINGULAR_BUBBLE :Bubble STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Battery diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 6a03087e33..676314aa61 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Tritiko STR_CARGO_PLURAL_RUBBER :Kaŭĉuko STR_CARGO_PLURAL_SUGAR :Sukero STR_CARGO_PLURAL_TOYS :Ludiloj -STR_CARGO_PLURAL_CANDY :Dolĉaĵoj +STR_CARGO_PLURAL_SWEETS :Dolĉaĵoj STR_CARGO_PLURAL_COLA :Kolao -STR_CARGO_PLURAL_COTTON_CANDY :Sukerŝpinaĵoj +STR_CARGO_PLURAL_CANDYFLOSS :Sukerŝpinaĵoj STR_CARGO_PLURAL_BUBBLES :Vezikoj STR_CARGO_PLURAL_TOFFEE :Tofeoj STR_CARGO_PLURAL_BATTERIES :Baterioj @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Tritiko STR_CARGO_SINGULAR_RUBBER :Kaŭĉuko STR_CARGO_SINGULAR_SUGAR :Sukero STR_CARGO_SINGULAR_TOY :Ludilo -STR_CARGO_SINGULAR_CANDY :Dolĉaĵo +STR_CARGO_SINGULAR_SWEETS :Dolĉaĵo STR_CARGO_SINGULAR_COLA :Kolao -STR_CARGO_SINGULAR_COTTON_CANDY :Sukerŝpinaĵo +STR_CARGO_SINGULAR_CANDYFLOSS :Sukerŝpinaĵo STR_CARGO_SINGULAR_BUBBLE :Veziko STR_CARGO_SINGULAR_TOFFEE :Tofeo STR_CARGO_SINGULAR_BATTERY :Baterio diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 383357dbc2..eab1f86e34 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -72,12 +72,12 @@ STR_CARGO_PLURAL_SUGAR :Suhkur STR_CARGO_PLURAL_SUGAR.g :Suhkru STR_CARGO_PLURAL_TOYS :Mänguasjad STR_CARGO_PLURAL_TOYS.g :Mänguasjade -STR_CARGO_PLURAL_CANDY :Maiustused +STR_CARGO_PLURAL_SWEETS :Maiustused STR_CARGO_PLURAL_CANDY.g :Maiustuste STR_CARGO_PLURAL_COLA :Koola STR_CARGO_PLURAL_COLA.g :Koola -STR_CARGO_PLURAL_COTTON_CANDY :Suhkruvatt -STR_CARGO_PLURAL_COTTON_CANDY.g :Suhkruvati +STR_CARGO_PLURAL_CANDYFLOSS :Suhkruvatt +STR_CARGO_PLURAL_CANDYFLOSS.g :Suhkruvati STR_CARGO_PLURAL_BUBBLES :Mullid STR_CARGO_PLURAL_BUBBLES.g :Mullide STR_CARGO_PLURAL_TOFFEE :Iiris @@ -137,9 +137,9 @@ STR_CARGO_SINGULAR_SUGAR :Suhkur STR_CARGO_SINGULAR_SUGAR.g :Suhkru STR_CARGO_SINGULAR_TOY :Mänguasjad STR_CARGO_SINGULAR_TOY.g :Mänguasjade -STR_CARGO_SINGULAR_CANDY :Maiustus +STR_CARGO_SINGULAR_SWEETS :Maiustus STR_CARGO_SINGULAR_COLA :Koola -STR_CARGO_SINGULAR_COTTON_CANDY :Suhkruvatt +STR_CARGO_SINGULAR_CANDYFLOSS :Suhkruvatt STR_CARGO_SINGULAR_BUBBLE :Mullid STR_CARGO_SINGULAR_TOFFEE :Iiris STR_CARGO_SINGULAR_TOFFEE.g :Iirise diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 4f9592eb60..66ed873d64 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=n}Hveiti STR_CARGO_PLURAL_RUBBER :{G=n}Gummi STR_CARGO_PLURAL_SUGAR :{G=n}Sukur STR_CARGO_PLURAL_TOYS :{G=n}Leikutoy -STR_CARGO_PLURAL_CANDY :{G=n}Góðgæti +STR_CARGO_PLURAL_SWEETS :{G=n}Góðgæti STR_CARGO_PLURAL_COLA :{G=n}Kola -STR_CARGO_PLURAL_COTTON_CANDY :{G=n}Kandifloss +STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Kandifloss STR_CARGO_PLURAL_BUBBLES :{G=f}Sápiblørir STR_CARGO_PLURAL_TOFFEE :{G=n}Toffee STR_CARGO_PLURAL_BATTERIES :{G=n}Battarí @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=n}Hveiti STR_CARGO_SINGULAR_RUBBER :{G=n}Gummi STR_CARGO_SINGULAR_SUGAR :{G=n}Sukur STR_CARGO_SINGULAR_TOY :{G=n}Leikutoy -STR_CARGO_SINGULAR_CANDY :{G=n}Góðgæti +STR_CARGO_SINGULAR_SWEETS :{G=n}Góðgæti STR_CARGO_SINGULAR_COLA :{G=n}Kola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=n}Kandifloss +STR_CARGO_SINGULAR_CANDYFLOSS :{G=n}Kandifloss STR_CARGO_SINGULAR_BUBBLE :{G=f}Sápibløra STR_CARGO_SINGULAR_TOFFEE :{G=n}Toffee STR_CARGO_SINGULAR_BATTERY :{G=n}Battarí diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index c0dc8553c4..b756e299c3 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Vehnää STR_CARGO_PLURAL_RUBBER :Kumia STR_CARGO_PLURAL_SUGAR :Sokeria STR_CARGO_PLURAL_TOYS :Leluja -STR_CARGO_PLURAL_CANDY :Karkkia +STR_CARGO_PLURAL_SWEETS :Karkkia STR_CARGO_PLURAL_COLA :Limsaa -STR_CARGO_PLURAL_COTTON_CANDY :Hattaraa +STR_CARGO_PLURAL_CANDYFLOSS :Hattaraa STR_CARGO_PLURAL_BUBBLES :Kuplia STR_CARGO_PLURAL_TOFFEE :Toffeeta STR_CARGO_PLURAL_BATTERIES :Paristoja @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Vehnä STR_CARGO_SINGULAR_RUBBER :Kumi STR_CARGO_SINGULAR_SUGAR :Sokeri STR_CARGO_SINGULAR_TOY :Lelu -STR_CARGO_SINGULAR_CANDY :Karkki +STR_CARGO_SINGULAR_SWEETS :Karkki STR_CARGO_SINGULAR_COLA :Limsa -STR_CARGO_SINGULAR_COTTON_CANDY :Hattara +STR_CARGO_SINGULAR_CANDYFLOSS :Hattara STR_CARGO_SINGULAR_BUBBLE :Kupla STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Paristo diff --git a/src/lang/french.txt b/src/lang/french.txt index d885db2ac1..fba699ebb3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Blé STR_CARGO_PLURAL_RUBBER :Caoutchouc STR_CARGO_PLURAL_SUGAR :Sucre STR_CARGO_PLURAL_TOYS :Jouets -STR_CARGO_PLURAL_CANDY :Bonbons +STR_CARGO_PLURAL_SWEETS :Bonbons STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Barbe à papa +STR_CARGO_PLURAL_CANDYFLOSS :Barbe à papa STR_CARGO_PLURAL_BUBBLES :Bulles STR_CARGO_PLURAL_TOFFEE :Caramel STR_CARGO_PLURAL_BATTERIES :Batteries @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Blé STR_CARGO_SINGULAR_RUBBER :Caoutchouc STR_CARGO_SINGULAR_SUGAR :Sucre STR_CARGO_SINGULAR_TOY :Jouet -STR_CARGO_SINGULAR_CANDY :Bonbon +STR_CARGO_SINGULAR_SWEETS :Bonbon STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Barbe à papa +STR_CARGO_SINGULAR_CANDYFLOSS :Barbe à papa STR_CARGO_SINGULAR_BUBBLE :Bulle STR_CARGO_SINGULAR_TOFFEE :Caramel STR_CARGO_SINGULAR_BATTERY :Batterie diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 37f180cce3..852ebee8fa 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -119,7 +119,7 @@ STR_CARGO_PLURAL_TOYS :{G=f}Dèideagan STR_CARGO_PLURAL_TOYS.nom :Dèideagan STR_CARGO_PLURAL_TOYS.gen :Dhèideagan STR_CARGO_PLURAL_TOYS.dat :Dèideagan -STR_CARGO_PLURAL_CANDY :{G=m}Mìlseanan +STR_CARGO_PLURAL_SWEETS :{G=m}Mìlseanan STR_CARGO_PLURAL_CANDY.nom :Mìlseanan STR_CARGO_PLURAL_CANDY.gen :Mhìlseanan STR_CARGO_PLURAL_CANDY.dat :Mìlseanan @@ -127,10 +127,10 @@ STR_CARGO_PLURAL_COLA :{G=m}Cola STR_CARGO_PLURAL_COLA.nom :Cola STR_CARGO_PLURAL_COLA.gen :Cola STR_CARGO_PLURAL_COLA.dat :Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=f}Canach-shiùcair -STR_CARGO_PLURAL_COTTON_CANDY.nom :Canach-shiùcair -STR_CARGO_PLURAL_COTTON_CANDY.gen :Canaich-siùcair -STR_CARGO_PLURAL_COTTON_CANDY.dat :Canach-shiùcair +STR_CARGO_PLURAL_CANDYFLOSS :{G=f}Canach-shiùcair +STR_CARGO_PLURAL_CANDYFLOSS.nom :Canach-shiùcair +STR_CARGO_PLURAL_CANDYFLOSS.gen :Canaich-siùcair +STR_CARGO_PLURAL_CANDYFLOSS.dat :Canach-shiùcair STR_CARGO_PLURAL_BUBBLES :{G=m}Builgeanan STR_CARGO_PLURAL_BUBBLES.nom :Builgeanan STR_CARGO_PLURAL_BUBBLES.gen :Bhuilgeanan @@ -246,18 +246,18 @@ STR_CARGO_SINGULAR_TOY :{G=f}Dèideag STR_CARGO_SINGULAR_TOY.nom :Dèideag STR_CARGO_SINGULAR_TOY.gen :Dèideig STR_CARGO_SINGULAR_TOY.dat :Dèideag -STR_CARGO_SINGULAR_CANDY :{G=m}Mìlsean -STR_CARGO_SINGULAR_CANDY.nom :Mìlsean -STR_CARGO_SINGULAR_CANDY.gen :Mìlsein -STR_CARGO_SINGULAR_CANDY.dat :Mìlsean +STR_CARGO_SINGULAR_SWEETS :{G=m}Mìlsean +STR_CARGO_SINGULAR_SWEETS.nom :Mìlsean +STR_CARGO_SINGULAR_SWEETS.gen :Mìlsein +STR_CARGO_SINGULAR_SWEETS.dat :Mìlsean STR_CARGO_SINGULAR_COLA :{G=m}Cola STR_CARGO_SINGULAR_COLA.nom :Cola STR_CARGO_SINGULAR_COLA.gen :Cola STR_CARGO_SINGULAR_COLA.dat :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=f}Canach-shiùcair -STR_CARGO_SINGULAR_COTTON_CANDY.nom :Canach-shiùcair -STR_CARGO_SINGULAR_COTTON_CANDY.gen :Canaich-siùcair -STR_CARGO_SINGULAR_COTTON_CANDY.dat :Canach-shiùcair +STR_CARGO_SINGULAR_CANDYFLOSS :{G=f}Canach-shiùcair +STR_CARGO_SINGULAR_CANDYFLOSS.nom :Canach-shiùcair +STR_CARGO_SINGULAR_CANDYFLOSS.gen :Canaich-siùcair +STR_CARGO_SINGULAR_CANDYFLOSS.dat :Canach-shiùcair STR_CARGO_SINGULAR_BUBBLE :{G=m}Builgean STR_CARGO_SINGULAR_BUBBLE.nom :Builgean STR_CARGO_SINGULAR_BUBBLE.gen :Builgein diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 577789b6b3..5834e93d55 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Trigo STR_CARGO_PLURAL_RUBBER :Caucho STR_CARGO_PLURAL_SUGAR :Azucre STR_CARGO_PLURAL_TOYS :Xoguetes -STR_CARGO_PLURAL_CANDY :Lambetadas +STR_CARGO_PLURAL_SWEETS :Lambetadas STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Algodón de azucre +STR_CARGO_PLURAL_CANDYFLOSS :Algodón de azucre STR_CARGO_PLURAL_BUBBLES :Burbullas STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Pilas @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Trigo STR_CARGO_SINGULAR_RUBBER :Caucho STR_CARGO_SINGULAR_SUGAR :Azucre STR_CARGO_SINGULAR_TOY :Xoguete -STR_CARGO_SINGULAR_CANDY :Lambetada +STR_CARGO_SINGULAR_SWEETS :Lambetada STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Algodón de azucre +STR_CARGO_SINGULAR_CANDYFLOSS :Algodón de azucre STR_CARGO_SINGULAR_BUBBLE :Burbulla STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Pila diff --git a/src/lang/german.txt b/src/lang/german.txt index 2d1ea45741..2cad372f9b 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Weizen STR_CARGO_PLURAL_RUBBER :{G=m}Kautschuk STR_CARGO_PLURAL_SUGAR :{G=m}Zucker STR_CARGO_PLURAL_TOYS :{G=p}Spielzeuge -STR_CARGO_PLURAL_CANDY :{G=p}Bonbons +STR_CARGO_PLURAL_SWEETS :{G=p}Bonbons STR_CARGO_PLURAL_COLA :{G=w}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=w}Zuckerwatte +STR_CARGO_PLURAL_CANDYFLOSS :{G=w}Zuckerwatte STR_CARGO_PLURAL_BUBBLES :{G=p}Luftblasen STR_CARGO_PLURAL_TOFFEE :{G=n}Karamell STR_CARGO_PLURAL_BATTERIES :{G=p}Batterien @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=n}Weizen STR_CARGO_SINGULAR_RUBBER :{G=m}Kautschuk STR_CARGO_SINGULAR_SUGAR :{G=m}Zucker STR_CARGO_SINGULAR_TOY :{G=n}Spielzeug -STR_CARGO_SINGULAR_CANDY :{G=m}Bonbon +STR_CARGO_SINGULAR_SWEETS :{G=m}Bonbon STR_CARGO_SINGULAR_COLA :{G=w}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=w}Zuckerwatte +STR_CARGO_SINGULAR_CANDYFLOSS :{G=w}Zuckerwatte STR_CARGO_SINGULAR_BUBBLE :{G=w}Luftblase STR_CARGO_SINGULAR_TOFFEE :{G=n}Karamell STR_CARGO_SINGULAR_BATTERY :{G=w}Batterie diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 65e565e3e8..c09aa806fe 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -72,12 +72,12 @@ STR_CARGO_PLURAL_SUGAR :{G=f}Ζάχαρ STR_CARGO_PLURAL_SUGAR.geniki :Ζάχαρης STR_CARGO_PLURAL_TOYS :{G=n}Παιχνίδια STR_CARGO_PLURAL_TOYS.geniki :Παιχνιδιών -STR_CARGO_PLURAL_CANDY :{G=n}Γλυκίσματα +STR_CARGO_PLURAL_SWEETS :{G=n}Γλυκίσματα STR_CARGO_PLURAL_CANDY.geniki :Γλυκισμάτων STR_CARGO_PLURAL_COLA :{G=f}Κόλα STR_CARGO_PLURAL_COLA.geniki :Κόλας -STR_CARGO_PLURAL_COTTON_CANDY :{G=n}Μαλλιά της γριάς -STR_CARGO_PLURAL_COTTON_CANDY.geniki :Μαλλιών της γριάς +STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Μαλλιά της γριάς +STR_CARGO_PLURAL_CANDYFLOSS.geniki :Μαλλιών της γριάς STR_CARGO_PLURAL_BUBBLES :{G=f}Φυσαλίδες STR_CARGO_PLURAL_BUBBLES.geniki :Φυσαλίδων STR_CARGO_PLURAL_TOFFEE :{G=n}Καραμέλες βουτύρου @@ -136,11 +136,11 @@ STR_CARGO_SINGULAR_SUGAR :{G=f}Ζάχαρ STR_CARGO_SINGULAR_SUGAR.subs :Ζάχαρες STR_CARGO_SINGULAR_TOY :{G=n}Παιχνίδι STR_CARGO_SINGULAR_TOY.subs :Παιχνίδια -STR_CARGO_SINGULAR_CANDY :{G=n}Γλυκό -STR_CARGO_SINGULAR_CANDY.subs :Γλυκα +STR_CARGO_SINGULAR_SWEETS :{G=n}Γλυκό +STR_CARGO_SINGULAR_SWEETS.subs :Γλυκα STR_CARGO_SINGULAR_COLA :{G=f}Κόλα -STR_CARGO_SINGULAR_COTTON_CANDY :{G=n}Μαλλί της γριάς -STR_CARGO_SINGULAR_COTTON_CANDY.subs :Μαλλί της γριάς +STR_CARGO_SINGULAR_CANDYFLOSS :{G=n}Μαλλί της γριάς +STR_CARGO_SINGULAR_CANDYFLOSS.subs :Μαλλί της γριάς STR_CARGO_SINGULAR_BUBBLE :{G=f}Φυσαλίδα STR_CARGO_SINGULAR_BUBBLE.subs :Φυσαλίδες STR_CARGO_SINGULAR_TOFFEE :{G=n}Καραμέλα βουτύρου diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 2bdba01d9d..5a8f15312e 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :חיטה STR_CARGO_PLURAL_RUBBER :גומי STR_CARGO_PLURAL_SUGAR :סוכר STR_CARGO_PLURAL_TOYS :צעצועים -STR_CARGO_PLURAL_CANDY :ממתקים +STR_CARGO_PLURAL_SWEETS :ממתקים STR_CARGO_PLURAL_COLA :קולה -STR_CARGO_PLURAL_COTTON_CANDY :שערות סבתא +STR_CARGO_PLURAL_CANDYFLOSS :שערות סבתא STR_CARGO_PLURAL_BUBBLES :בועות STR_CARGO_PLURAL_TOFFEE :טופי STR_CARGO_PLURAL_BATTERIES :סוללות @@ -92,10 +92,10 @@ STR_CARGO_SINGULAR_RUBBER :גומי STR_CARGO_SINGULAR_SUGAR :סוכר STR_CARGO_SINGULAR_TOY :צעצוע STR_CARGO_SINGULAR_TOY.plural :צעצועים -STR_CARGO_SINGULAR_CANDY :ממתק -STR_CARGO_SINGULAR_CANDY.plural :ממתקים +STR_CARGO_SINGULAR_SWEETS :ממתק +STR_CARGO_SINGULAR_SWEETS.plural :ממתקים STR_CARGO_SINGULAR_COLA :קולה -STR_CARGO_SINGULAR_COTTON_CANDY :צמר גפן מתוק +STR_CARGO_SINGULAR_CANDYFLOSS :צמר גפן מתוק STR_CARGO_SINGULAR_BUBBLE :בועה STR_CARGO_SINGULAR_BUBBLE.plural :בועות STR_CARGO_SINGULAR_TOFFEE :טופי diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8520f8fead..c3ed93acc1 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -72,12 +72,12 @@ STR_CARGO_PLURAL_SUGAR :Cukor STR_CARGO_PLURAL_SUGAR.t :cukrot STR_CARGO_PLURAL_TOYS :Játék STR_CARGO_PLURAL_TOYS.t :játékot -STR_CARGO_PLURAL_CANDY :Cukorka +STR_CARGO_PLURAL_SWEETS :Cukorka STR_CARGO_PLURAL_CANDY.t :cukorkát STR_CARGO_PLURAL_COLA :Kóla STR_CARGO_PLURAL_COLA.t :kólát -STR_CARGO_PLURAL_COTTON_CANDY :Vattacukor -STR_CARGO_PLURAL_COTTON_CANDY.t :vattacukrot +STR_CARGO_PLURAL_CANDYFLOSS :Vattacukor +STR_CARGO_PLURAL_CANDYFLOSS.t :vattacukrot STR_CARGO_PLURAL_BUBBLES :Buborék STR_CARGO_PLURAL_BUBBLES.t :buborékot STR_CARGO_PLURAL_TOFFEE :Tejkaramella @@ -137,12 +137,12 @@ STR_CARGO_SINGULAR_SUGAR :cukor STR_CARGO_SINGULAR_SUGAR.t :cukrot STR_CARGO_SINGULAR_TOY :játék STR_CARGO_SINGULAR_TOY.t :játékot -STR_CARGO_SINGULAR_CANDY :cukorka -STR_CARGO_SINGULAR_CANDY.t :cukorkát +STR_CARGO_SINGULAR_SWEETS :cukorka +STR_CARGO_SINGULAR_SWEETS.t :cukorkát STR_CARGO_SINGULAR_COLA :kóla STR_CARGO_SINGULAR_COLA.t :kólát -STR_CARGO_SINGULAR_COTTON_CANDY :vattacukor -STR_CARGO_SINGULAR_COTTON_CANDY.t :vattacukrot +STR_CARGO_SINGULAR_CANDYFLOSS :vattacukor +STR_CARGO_SINGULAR_CANDYFLOSS.t :vattacukrot STR_CARGO_SINGULAR_BUBBLE :buborék STR_CARGO_SINGULAR_BUBBLE.t :buborékot STR_CARGO_SINGULAR_TOFFEE :tejkaramella diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index f25b2d3154..eca04147e6 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Hveiti STR_CARGO_PLURAL_RUBBER :Gúmmí STR_CARGO_PLURAL_SUGAR :Sykur STR_CARGO_PLURAL_TOYS :Leikföng -STR_CARGO_PLURAL_CANDY :Sælgæti +STR_CARGO_PLURAL_SWEETS :Sælgæti STR_CARGO_PLURAL_COLA :Kóladrykkir -STR_CARGO_PLURAL_COTTON_CANDY :Sykurfrauð +STR_CARGO_PLURAL_CANDYFLOSS :Sykurfrauð STR_CARGO_PLURAL_BUBBLES :Kúlur STR_CARGO_PLURAL_TOFFEE :Toffý STR_CARGO_PLURAL_BATTERIES :Rafhlöður @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Hveitis STR_CARGO_SINGULAR_RUBBER :Gúmmí STR_CARGO_SINGULAR_SUGAR :Sykur STR_CARGO_SINGULAR_TOY :Leikfanga -STR_CARGO_SINGULAR_CANDY :Sælgætis +STR_CARGO_SINGULAR_SWEETS :Sælgætis STR_CARGO_SINGULAR_COLA :Kóladrykkja -STR_CARGO_SINGULAR_COTTON_CANDY :Sykurfrauðs +STR_CARGO_SINGULAR_CANDYFLOSS :Sykurfrauðs STR_CARGO_SINGULAR_BUBBLE :Kúlu STR_CARGO_SINGULAR_TOFFEE :Toffý STR_CARGO_SINGULAR_BATTERY :Rafhlöðu diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 70a240208e..dc1a20878f 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Gandum STR_CARGO_PLURAL_RUBBER :Karet STR_CARGO_PLURAL_SUGAR :Gula STR_CARGO_PLURAL_TOYS :Mainan -STR_CARGO_PLURAL_CANDY :Manisan +STR_CARGO_PLURAL_SWEETS :Manisan STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Arum Manis +STR_CARGO_PLURAL_CANDYFLOSS :Arum Manis STR_CARGO_PLURAL_BUBBLES :Gelembung STR_CARGO_PLURAL_TOFFEE :Gula-gula STR_CARGO_PLURAL_BATTERIES :Baterai @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Gandum STR_CARGO_SINGULAR_RUBBER :Karet STR_CARGO_SINGULAR_SUGAR :Gula STR_CARGO_SINGULAR_TOY :Mainan -STR_CARGO_SINGULAR_CANDY :Manisan +STR_CARGO_SINGULAR_SWEETS :Manisan STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Arum Manis +STR_CARGO_SINGULAR_CANDYFLOSS :Arum Manis STR_CARGO_SINGULAR_BUBBLE :Gelembung STR_CARGO_SINGULAR_TOFFEE :Gula-gula STR_CARGO_SINGULAR_BATTERY :Baterai diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 527daebf1b..0658941a7d 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Cruinneacht STR_CARGO_PLURAL_RUBBER :Rubar STR_CARGO_PLURAL_SUGAR :Siúcra STR_CARGO_PLURAL_TOYS :Bréagáin -STR_CARGO_PLURAL_CANDY :Milseáin +STR_CARGO_PLURAL_SWEETS :Milseáin STR_CARGO_PLURAL_COLA :Cóla -STR_CARGO_PLURAL_COTTON_CANDY :Scamall siúcra +STR_CARGO_PLURAL_CANDYFLOSS :Scamall siúcra STR_CARGO_PLURAL_BUBBLES :Súilíní STR_CARGO_PLURAL_TOFFEE :Taifí STR_CARGO_PLURAL_BATTERIES :Cadhnraí @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Cruithneacht STR_CARGO_SINGULAR_RUBBER :Rubar STR_CARGO_SINGULAR_SUGAR :Siúcra STR_CARGO_SINGULAR_TOY :Bréagán -STR_CARGO_SINGULAR_CANDY :Milseán +STR_CARGO_SINGULAR_SWEETS :Milseán STR_CARGO_SINGULAR_COLA :Cóla -STR_CARGO_SINGULAR_COTTON_CANDY :Scamall siúcra +STR_CARGO_SINGULAR_CANDYFLOSS :Scamall siúcra STR_CARGO_SINGULAR_BUBBLE :Súilín STR_CARGO_SINGULAR_TOFFEE :Taifí STR_CARGO_SINGULAR_BATTERY :Ceallra diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 94784dc454..770ddc41a0 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Frumento STR_CARGO_PLURAL_RUBBER :{G=f}Gomma STR_CARGO_PLURAL_SUGAR :{G=m}Zucchero STR_CARGO_PLURAL_TOYS :{G=m}Giocattoli -STR_CARGO_PLURAL_CANDY :{G=f}Caramelle +STR_CARGO_PLURAL_SWEETS :{G=f}Caramelle STR_CARGO_PLURAL_COLA :{G=f}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Zucchero filato +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}Zucchero filato STR_CARGO_PLURAL_BUBBLES :{G=f}Bollicine STR_CARGO_PLURAL_TOFFEE :{G=m}Toffee STR_CARGO_PLURAL_BATTERIES :{G=f}Batterie @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}Frumento STR_CARGO_SINGULAR_RUBBER :{G=f}Gomma STR_CARGO_SINGULAR_SUGAR :{G=m}Zucchero STR_CARGO_SINGULAR_TOY :{G=m}Giocattolo -STR_CARGO_SINGULAR_CANDY :{G=f}Caramella +STR_CARGO_SINGULAR_SWEETS :{G=f}Caramella STR_CARGO_SINGULAR_COLA :{G=f}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Zucchero filato +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}Zucchero filato STR_CARGO_SINGULAR_BUBBLE :{G=f}Bollicine STR_CARGO_SINGULAR_TOFFEE :{G=m}Toffee STR_CARGO_SINGULAR_BATTERY :{G=f}Batterie diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 5a157e91df..203a33ab38 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :小麦 STR_CARGO_PLURAL_RUBBER :ゴム STR_CARGO_PLURAL_SUGAR :砂糖 STR_CARGO_PLURAL_TOYS :おもちゃ -STR_CARGO_PLURAL_CANDY :お菓子 +STR_CARGO_PLURAL_SWEETS :お菓子 STR_CARGO_PLURAL_COLA :コーラ -STR_CARGO_PLURAL_COTTON_CANDY :わたあめ +STR_CARGO_PLURAL_CANDYFLOSS :わたあめ STR_CARGO_PLURAL_BUBBLES :泡 STR_CARGO_PLURAL_TOFFEE :タフィー STR_CARGO_PLURAL_BATTERIES :電池 @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :小麦 STR_CARGO_SINGULAR_RUBBER :ゴム STR_CARGO_SINGULAR_SUGAR :砂糖 STR_CARGO_SINGULAR_TOY :おもちゃ -STR_CARGO_SINGULAR_CANDY :お菓子 +STR_CARGO_SINGULAR_SWEETS :お菓子 STR_CARGO_SINGULAR_COLA :コーラ -STR_CARGO_SINGULAR_COTTON_CANDY :わたあめ +STR_CARGO_SINGULAR_CANDYFLOSS :わたあめ STR_CARGO_SINGULAR_BUBBLE :泡 STR_CARGO_SINGULAR_TOFFEE :タフィー STR_CARGO_SINGULAR_BATTERY :電池 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 68d66b1bd0..dfd20b2d5f 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}밀 STR_CARGO_PLURAL_RUBBER :{G=f}고무 STR_CARGO_PLURAL_SUGAR :{G=m}설탕 STR_CARGO_PLURAL_TOYS :{G=m}장난감 -STR_CARGO_PLURAL_CANDY :{G=m}사탕 +STR_CARGO_PLURAL_SWEETS :{G=m}사탕 STR_CARGO_PLURAL_COLA :{G=f}콜라 -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}솜사탕 +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}솜사탕 STR_CARGO_PLURAL_BUBBLES :{G=m}거품 STR_CARGO_PLURAL_TOFFEE :{G=f}토피 STR_CARGO_PLURAL_BATTERIES :{G=f}건전지 @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}밀 STR_CARGO_SINGULAR_RUBBER :{G=f}고무 STR_CARGO_SINGULAR_SUGAR :{G=m}설탕 STR_CARGO_SINGULAR_TOY :{G=m}장난감 -STR_CARGO_SINGULAR_CANDY :{G=m}사탕 +STR_CARGO_SINGULAR_SWEETS :{G=m}사탕 STR_CARGO_SINGULAR_COLA :{G=f}콜라 -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}솜사탕 +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}솜사탕 STR_CARGO_SINGULAR_BUBBLE :{G=m}거품 STR_CARGO_SINGULAR_TOFFEE :{G=f}토피 STR_CARGO_SINGULAR_BATTERY :{G=f}건전지 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 3fe5a1129b..a61630ede3 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -119,7 +119,7 @@ STR_CARGO_PLURAL_TOYS :{G=np}Ludicra STR_CARGO_PLURAL_TOYS.gen :ludicrorum STR_CARGO_PLURAL_TOYS.acc :Ludicra STR_CARGO_PLURAL_TOYS.dat :Ludicris -STR_CARGO_PLURAL_CANDY :{G=np}Bellaria +STR_CARGO_PLURAL_SWEETS :{G=np}Bellaria STR_CARGO_PLURAL_CANDY.gen :bellariorum STR_CARGO_PLURAL_CANDY.acc :Bellaria STR_CARGO_PLURAL_CANDY.dat :Bellariis @@ -127,10 +127,10 @@ STR_CARGO_PLURAL_COLA :{G=f}Cola STR_CARGO_PLURAL_COLA.gen :colae STR_CARGO_PLURAL_COLA.acc :Colam STR_CARGO_PLURAL_COLA.dat :Colae -STR_CARGO_PLURAL_COTTON_CANDY :{G=n}Sacchari Xylinum -STR_CARGO_PLURAL_COTTON_CANDY.gen :sacchari xylini -STR_CARGO_PLURAL_COTTON_CANDY.acc :Sacchari Xylinum -STR_CARGO_PLURAL_COTTON_CANDY.dat :Sacchari Xylino +STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Sacchari Xylinum +STR_CARGO_PLURAL_CANDYFLOSS.gen :sacchari xylini +STR_CARGO_PLURAL_CANDYFLOSS.acc :Sacchari Xylinum +STR_CARGO_PLURAL_CANDYFLOSS.dat :Sacchari Xylino STR_CARGO_PLURAL_BUBBLES :{G=fp}Bullae STR_CARGO_PLURAL_BUBBLES.gen :bullarum STR_CARGO_PLURAL_BUBBLES.acc :Bullas @@ -246,18 +246,18 @@ STR_CARGO_SINGULAR_TOY :{G=np}Ludicra STR_CARGO_SINGULAR_TOY.gen :ludicrorum STR_CARGO_SINGULAR_TOY.acc :Ludicra STR_CARGO_SINGULAR_TOY.dat :Ludicris -STR_CARGO_SINGULAR_CANDY :{G=np}Bellaria -STR_CARGO_SINGULAR_CANDY.gen :bellariorum -STR_CARGO_SINGULAR_CANDY.acc :Bellaria -STR_CARGO_SINGULAR_CANDY.dat :Bellariis +STR_CARGO_SINGULAR_SWEETS :{G=np}Bellaria +STR_CARGO_SINGULAR_SWEETS.gen :bellariorum +STR_CARGO_SINGULAR_SWEETS.acc :Bellaria +STR_CARGO_SINGULAR_SWEETS.dat :Bellariis STR_CARGO_SINGULAR_COLA :{G=f}Cola STR_CARGO_SINGULAR_COLA.gen :colae STR_CARGO_SINGULAR_COLA.acc :Colam STR_CARGO_SINGULAR_COLA.dat :Colae -STR_CARGO_SINGULAR_COTTON_CANDY :{G=n}Sacchari Xylinum -STR_CARGO_SINGULAR_COTTON_CANDY.gen :sacchari xylini -STR_CARGO_SINGULAR_COTTON_CANDY.acc :Sacchari Xylinum -STR_CARGO_SINGULAR_COTTON_CANDY.dat :Sacchari Xylino +STR_CARGO_SINGULAR_CANDYFLOSS :{G=n}Sacchari Xylinum +STR_CARGO_SINGULAR_CANDYFLOSS.gen :sacchari xylini +STR_CARGO_SINGULAR_CANDYFLOSS.acc :Sacchari Xylinum +STR_CARGO_SINGULAR_CANDYFLOSS.dat :Sacchari Xylino STR_CARGO_SINGULAR_BUBBLE :{G=fp}Bullae STR_CARGO_SINGULAR_BUBBLE.gen :bullarum STR_CARGO_SINGULAR_BUBBLE.acc :Bullas diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index b4811bb901..e14040c1a4 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :Kvieši STR_CARGO_PLURAL_RUBBER :Kaučuks STR_CARGO_PLURAL_SUGAR :Cukurs STR_CARGO_PLURAL_TOYS :Rotaļlietas -STR_CARGO_PLURAL_CANDY :Saldumi +STR_CARGO_PLURAL_SWEETS :Saldumi STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Cukurvate +STR_CARGO_PLURAL_CANDYFLOSS :Cukurvate STR_CARGO_PLURAL_BUBBLES :Burbuļi STR_CARGO_PLURAL_TOFFEE :Īriss STR_CARGO_PLURAL_BATTERIES :Baterijas @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :Kvieši STR_CARGO_SINGULAR_RUBBER :Kaučuks STR_CARGO_SINGULAR_SUGAR :Cukurs STR_CARGO_SINGULAR_TOY :Rotaļlieta -STR_CARGO_SINGULAR_CANDY :Saldumi +STR_CARGO_SINGULAR_SWEETS :Saldumi STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Cukurvate +STR_CARGO_SINGULAR_CANDYFLOSS :Cukurvate STR_CARGO_SINGULAR_BUBBLE :Burbuļi STR_CARGO_SINGULAR_TOFFEE :Īriss STR_CARGO_SINGULAR_BATTERY :Baterijas diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 1e052710a1..8e78fb11d4 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -194,7 +194,7 @@ STR_CARGO_PLURAL_TOYS.kam :žaislams STR_CARGO_PLURAL_TOYS.ka :žaislus STR_CARGO_PLURAL_TOYS.kuo :žaislais STR_CARGO_PLURAL_TOYS.kur :žaisluose -STR_CARGO_PLURAL_CANDY :Saldumynai +STR_CARGO_PLURAL_SWEETS :Saldumynai STR_CARGO_PLURAL_CANDY.kas :saldumynai STR_CARGO_PLURAL_CANDY.ko :saldumynų STR_CARGO_PLURAL_CANDY.kam :saldumynams @@ -208,13 +208,13 @@ STR_CARGO_PLURAL_COLA.kam :kolai STR_CARGO_PLURAL_COLA.ka :kolą STR_CARGO_PLURAL_COLA.kuo :kola STR_CARGO_PLURAL_COLA.kur :koloje -STR_CARGO_PLURAL_COTTON_CANDY :Cukraus vata -STR_CARGO_PLURAL_COTTON_CANDY.kas :cukraus vata -STR_CARGO_PLURAL_COTTON_CANDY.ko :cukraus vatos -STR_CARGO_PLURAL_COTTON_CANDY.kam :cukraus vatai -STR_CARGO_PLURAL_COTTON_CANDY.ka :cukraus vatą -STR_CARGO_PLURAL_COTTON_CANDY.kuo :cukraus vata -STR_CARGO_PLURAL_COTTON_CANDY.kur :cukraus vatoje +STR_CARGO_PLURAL_CANDYFLOSS :Cukraus vata +STR_CARGO_PLURAL_CANDYFLOSS.kas :cukraus vata +STR_CARGO_PLURAL_CANDYFLOSS.ko :cukraus vatos +STR_CARGO_PLURAL_CANDYFLOSS.kam :cukraus vatai +STR_CARGO_PLURAL_CANDYFLOSS.ka :cukraus vatą +STR_CARGO_PLURAL_CANDYFLOSS.kuo :cukraus vata +STR_CARGO_PLURAL_CANDYFLOSS.kur :cukraus vatoje STR_CARGO_PLURAL_BUBBLES :Burbulai STR_CARGO_PLURAL_BUBBLES.kas :burbulai STR_CARGO_PLURAL_BUBBLES.ko :burbulų @@ -276,9 +276,9 @@ STR_CARGO_SINGULAR_WHEAT :Kviečių STR_CARGO_SINGULAR_RUBBER :Kaučiuko STR_CARGO_SINGULAR_SUGAR :Cukraus STR_CARGO_SINGULAR_TOY :Žaislų -STR_CARGO_SINGULAR_CANDY :Saldumynų +STR_CARGO_SINGULAR_SWEETS :Saldumynų STR_CARGO_SINGULAR_COLA :Kolos -STR_CARGO_SINGULAR_COTTON_CANDY :Cukraus vatos +STR_CARGO_SINGULAR_CANDYFLOSS :Cukraus vatos STR_CARGO_SINGULAR_BUBBLE :Burbulų STR_CARGO_SINGULAR_TOFFEE :Karamelės STR_CARGO_SINGULAR_BATTERY :Baterijų diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index d1fc27a6bc..f73c886e49 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Weess STR_CARGO_PLURAL_RUBBER :Kautschuk STR_CARGO_PLURAL_SUGAR :Zocker STR_CARGO_PLURAL_TOYS :Spillsaachen -STR_CARGO_PLURAL_CANDY :Séissegkeeten +STR_CARGO_PLURAL_SWEETS :Séissegkeeten STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Zockerwatt +STR_CARGO_PLURAL_CANDYFLOSS :Zockerwatt STR_CARGO_PLURAL_BUBBLES :Blosen STR_CARGO_PLURAL_TOFFEE :Karamell STR_CARGO_PLURAL_BATTERIES :Batterien @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Weess STR_CARGO_SINGULAR_RUBBER :Kautschuck STR_CARGO_SINGULAR_SUGAR :Zocker STR_CARGO_SINGULAR_TOY :Spillsaach -STR_CARGO_SINGULAR_CANDY :Séissegkeet +STR_CARGO_SINGULAR_SWEETS :Séissegkeet STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Zockerwatt +STR_CARGO_SINGULAR_CANDYFLOSS :Zockerwatt STR_CARGO_SINGULAR_BUBBLE :Blos STR_CARGO_SINGULAR_TOFFEE :Karamell STR_CARGO_SINGULAR_BATTERY :Batterie diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 051bb4f3b9..9cfa8578f7 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Gandum STR_CARGO_PLURAL_RUBBER :Getah STR_CARGO_PLURAL_SUGAR :Gula STR_CARGO_PLURAL_TOYS :Mainan -STR_CARGO_PLURAL_CANDY :Gula-gula +STR_CARGO_PLURAL_SWEETS :Gula-gula STR_CARGO_PLURAL_COLA :Minuman cola -STR_CARGO_PLURAL_COTTON_CANDY :Gula kapas +STR_CARGO_PLURAL_CANDYFLOSS :Gula kapas STR_CARGO_PLURAL_BUBBLES :Buih STR_CARGO_PLURAL_TOFFEE :Tofi STR_CARGO_PLURAL_BATTERIES :Bateri @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Gandum STR_CARGO_SINGULAR_RUBBER :Getah STR_CARGO_SINGULAR_SUGAR :Gula STR_CARGO_SINGULAR_TOY :Mainan -STR_CARGO_SINGULAR_CANDY :Manisan +STR_CARGO_SINGULAR_SWEETS :Manisan STR_CARGO_SINGULAR_COLA :Minuman cola -STR_CARGO_SINGULAR_COTTON_CANDY :Gula kapas +STR_CARGO_SINGULAR_CANDYFLOSS :Gula kapas STR_CARGO_SINGULAR_BUBBLE :Buih STR_CARGO_SINGULAR_TOFFEE :Tofi STR_CARGO_SINGULAR_BATTERY :Bateri diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 474d6c2b64..f51737db28 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :Hvete STR_CARGO_PLURAL_RUBBER :Gummi STR_CARGO_PLURAL_SUGAR :Sukker STR_CARGO_PLURAL_TOYS :Leketøy -STR_CARGO_PLURAL_CANDY :Godteri +STR_CARGO_PLURAL_SWEETS :Godteri STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Sukkerspinn +STR_CARGO_PLURAL_CANDYFLOSS :Sukkerspinn STR_CARGO_PLURAL_BUBBLES :Bobler STR_CARGO_PLURAL_TOFFEE :Karamell STR_CARGO_PLURAL_BATTERIES :Batterier @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :Hvete STR_CARGO_SINGULAR_RUBBER :Gummi STR_CARGO_SINGULAR_SUGAR :Sukker STR_CARGO_SINGULAR_TOY :Leketøy -STR_CARGO_SINGULAR_CANDY :Godteri +STR_CARGO_SINGULAR_SWEETS :Godteri STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Sukkerspinn +STR_CARGO_SINGULAR_CANDYFLOSS :Sukkerspinn STR_CARGO_SINGULAR_BUBBLE :Boble STR_CARGO_SINGULAR_TOFFEE :Karamell STR_CARGO_SINGULAR_BATTERY :Batteri diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 36db98b654..adf49f5051 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :Kveite STR_CARGO_PLURAL_RUBBER :Gummi STR_CARGO_PLURAL_SUGAR :Sukker STR_CARGO_PLURAL_TOYS :Leiketøy -STR_CARGO_PLURAL_CANDY :Godteri +STR_CARGO_PLURAL_SWEETS :Godteri STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Sukkerspinn +STR_CARGO_PLURAL_CANDYFLOSS :Sukkerspinn STR_CARGO_PLURAL_BUBBLES :Bobler STR_CARGO_PLURAL_TOFFEE :Karamell STR_CARGO_PLURAL_BATTERIES :Batteri @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :Kveite STR_CARGO_SINGULAR_RUBBER :Gummi STR_CARGO_SINGULAR_SUGAR :Sukker STR_CARGO_SINGULAR_TOY :Leiketøy -STR_CARGO_SINGULAR_CANDY :Godteri +STR_CARGO_SINGULAR_SWEETS :Godteri STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Sukkerspinn +STR_CARGO_SINGULAR_CANDYFLOSS :Sukkerspinn STR_CARGO_SINGULAR_BUBBLE :Boble STR_CARGO_SINGULAR_TOFFEE :Karamell STR_CARGO_SINGULAR_BATTERY :Batteri diff --git a/src/lang/polish.txt b/src/lang/polish.txt index c39f1b0c38..b7759eb719 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -188,7 +188,7 @@ STR_CARGO_PLURAL_TOYS.b :zabawki STR_CARGO_PLURAL_TOYS.n :zabawkami STR_CARGO_PLURAL_TOYS.m :zabawkach STR_CARGO_PLURAL_TOYS.w :zabawki -STR_CARGO_PLURAL_CANDY :Słodycze +STR_CARGO_PLURAL_SWEETS :Słodycze STR_CARGO_PLURAL_CANDY.d :słodyczy STR_CARGO_PLURAL_CANDY.c :słodyczom STR_CARGO_PLURAL_CANDY.b :słodycze @@ -202,13 +202,13 @@ STR_CARGO_PLURAL_COLA.b :colę STR_CARGO_PLURAL_COLA.n :colą STR_CARGO_PLURAL_COLA.m :coli STR_CARGO_PLURAL_COLA.w :colo -STR_CARGO_PLURAL_COTTON_CANDY :Wata cukrowa -STR_CARGO_PLURAL_COTTON_CANDY.d :waty cukrowej -STR_CARGO_PLURAL_COTTON_CANDY.c :wacie cukrowej -STR_CARGO_PLURAL_COTTON_CANDY.b :watę cukrową -STR_CARGO_PLURAL_COTTON_CANDY.n :watą cukrową -STR_CARGO_PLURAL_COTTON_CANDY.m :wacie cukrowej -STR_CARGO_PLURAL_COTTON_CANDY.w :wato cukrowa +STR_CARGO_PLURAL_CANDYFLOSS :Wata cukrowa +STR_CARGO_PLURAL_CANDYFLOSS.d :waty cukrowej +STR_CARGO_PLURAL_CANDYFLOSS.c :wacie cukrowej +STR_CARGO_PLURAL_CANDYFLOSS.b :watę cukrową +STR_CARGO_PLURAL_CANDYFLOSS.n :watą cukrową +STR_CARGO_PLURAL_CANDYFLOSS.m :wacie cukrowej +STR_CARGO_PLURAL_CANDYFLOSS.w :wato cukrowa STR_CARGO_PLURAL_BUBBLES :Bąbelki STR_CARGO_PLURAL_BUBBLES.d :bąbelków STR_CARGO_PLURAL_BUBBLES.c :bąbelkom @@ -408,12 +408,12 @@ STR_CARGO_SINGULAR_TOY.b :zabawkę STR_CARGO_SINGULAR_TOY.n :zabawką STR_CARGO_SINGULAR_TOY.m :zabawce STR_CARGO_SINGULAR_TOY.w :zabawko -STR_CARGO_SINGULAR_CANDY :Słodycz -STR_CARGO_SINGULAR_CANDY.d :słodyczy -STR_CARGO_SINGULAR_CANDY.c :słodyczy -STR_CARGO_SINGULAR_CANDY.b :słodycz -STR_CARGO_SINGULAR_CANDY.n :słodyczą -STR_CARGO_SINGULAR_CANDY.m :słodyczy +STR_CARGO_SINGULAR_SWEETS :Słodycz +STR_CARGO_SINGULAR_SWEETS.d :słodyczy +STR_CARGO_SINGULAR_SWEETS.c :słodyczy +STR_CARGO_SINGULAR_SWEETS.b :słodycz +STR_CARGO_SINGULAR_SWEETS.n :słodyczą +STR_CARGO_SINGULAR_SWEETS.m :słodyczy STR_CARGO_SINGULAR_COLA :Cola STR_CARGO_SINGULAR_COLA.d :coli STR_CARGO_SINGULAR_COLA.c :coli @@ -421,13 +421,13 @@ STR_CARGO_SINGULAR_COLA.b :colę STR_CARGO_SINGULAR_COLA.n :colą STR_CARGO_SINGULAR_COLA.m :coli STR_CARGO_SINGULAR_COLA.w :colo -STR_CARGO_SINGULAR_COTTON_CANDY :Wata cukrowa -STR_CARGO_SINGULAR_COTTON_CANDY.d :waty cukrowej -STR_CARGO_SINGULAR_COTTON_CANDY.c :wacie cukrowej -STR_CARGO_SINGULAR_COTTON_CANDY.b :watę cukrową -STR_CARGO_SINGULAR_COTTON_CANDY.n :watą cukrową -STR_CARGO_SINGULAR_COTTON_CANDY.m :wacie cukrowej -STR_CARGO_SINGULAR_COTTON_CANDY.w :wato cukrowa +STR_CARGO_SINGULAR_CANDYFLOSS :Wata cukrowa +STR_CARGO_SINGULAR_CANDYFLOSS.d :waty cukrowej +STR_CARGO_SINGULAR_CANDYFLOSS.c :wacie cukrowej +STR_CARGO_SINGULAR_CANDYFLOSS.b :watę cukrową +STR_CARGO_SINGULAR_CANDYFLOSS.n :watą cukrową +STR_CARGO_SINGULAR_CANDYFLOSS.m :wacie cukrowej +STR_CARGO_SINGULAR_CANDYFLOSS.w :wato cukrowa STR_CARGO_SINGULAR_BUBBLE :Bąbelek STR_CARGO_SINGULAR_BUBBLE.d :bąbelka STR_CARGO_SINGULAR_BUBBLE.c :bąbelkowi diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 342aa839db..a98e24b917 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Trigo STR_CARGO_PLURAL_RUBBER :Borracha STR_CARGO_PLURAL_SUGAR :Açúcar STR_CARGO_PLURAL_TOYS :Brinquedos -STR_CARGO_PLURAL_CANDY :Doces +STR_CARGO_PLURAL_SWEETS :Doces STR_CARGO_PLURAL_COLA :Bebida de cola -STR_CARGO_PLURAL_COTTON_CANDY :Algodão Doce +STR_CARGO_PLURAL_CANDYFLOSS :Algodão Doce STR_CARGO_PLURAL_BUBBLES :Bolhas STR_CARGO_PLURAL_TOFFEE :Caramelo STR_CARGO_PLURAL_BATTERIES :Baterias @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Trigo STR_CARGO_SINGULAR_RUBBER :Borracha STR_CARGO_SINGULAR_SUGAR :Açúcar STR_CARGO_SINGULAR_TOY :Brinquedos -STR_CARGO_SINGULAR_CANDY :Doces +STR_CARGO_SINGULAR_SWEETS :Doces STR_CARGO_SINGULAR_COLA :Bebida de cola -STR_CARGO_SINGULAR_COTTON_CANDY :Algodão Doce +STR_CARGO_SINGULAR_CANDYFLOSS :Algodão Doce STR_CARGO_SINGULAR_BUBBLE :Bolhas STR_CARGO_SINGULAR_TOFFEE :Caramelo STR_CARGO_SINGULAR_BATTERY :Baterias diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index eecd07d703..c79feefab0 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Grâu STR_CARGO_PLURAL_RUBBER :Cauciuc STR_CARGO_PLURAL_SUGAR :Zahăr STR_CARGO_PLURAL_TOYS :Jucării -STR_CARGO_PLURAL_CANDY :Dulciuri +STR_CARGO_PLURAL_SWEETS :Dulciuri STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Vată de zahăr +STR_CARGO_PLURAL_CANDYFLOSS :Vată de zahăr STR_CARGO_PLURAL_BUBBLES :Balonașe STR_CARGO_PLURAL_TOFFEE :Caramele STR_CARGO_PLURAL_BATTERIES :Baterii @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Grâu STR_CARGO_SINGULAR_RUBBER :Cauciuc STR_CARGO_SINGULAR_SUGAR :Zahăr STR_CARGO_SINGULAR_TOY :Jucărie -STR_CARGO_SINGULAR_CANDY :Dulciuri +STR_CARGO_SINGULAR_SWEETS :Dulciuri STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Vată de zahăr +STR_CARGO_SINGULAR_CANDYFLOSS :Vată de zahăr STR_CARGO_SINGULAR_BUBBLE :Balonaș STR_CARGO_SINGULAR_TOFFEE :Caramea STR_CARGO_SINGULAR_BATTERY :Baterie diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 650b21d6a8..24eef4e9ad 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -96,15 +96,15 @@ STR_CARGO_PLURAL_SUGAR.acc :сахар STR_CARGO_PLURAL_TOYS :{G=p}Игрушки STR_CARGO_PLURAL_TOYS.gen :игрушек STR_CARGO_PLURAL_TOYS.acc :игрушки -STR_CARGO_PLURAL_CANDY :{G=p}Конфеты +STR_CARGO_PLURAL_SWEETS :{G=p}Конфеты STR_CARGO_PLURAL_CANDY.gen :конфет STR_CARGO_PLURAL_CANDY.acc :конфеты STR_CARGO_PLURAL_COLA :{G=f}Кола STR_CARGO_PLURAL_COLA.gen :колы STR_CARGO_PLURAL_COLA.acc :колу -STR_CARGO_PLURAL_COTTON_CANDY :{G=f}Сахарная вата -STR_CARGO_PLURAL_COTTON_CANDY.gen :сахарной ваты -STR_CARGO_PLURAL_COTTON_CANDY.acc :сахарную вату +STR_CARGO_PLURAL_CANDYFLOSS :{G=f}Сахарная вата +STR_CARGO_PLURAL_CANDYFLOSS.gen :сахарной ваты +STR_CARGO_PLURAL_CANDYFLOSS.acc :сахарную вату STR_CARGO_PLURAL_BUBBLES :{G=p}Пузырьки STR_CARGO_PLURAL_BUBBLES.gen :пузырьков STR_CARGO_PLURAL_BUBBLES.acc :пузырьки @@ -192,15 +192,15 @@ STR_CARGO_SINGULAR_SUGAR.acc :сахар STR_CARGO_SINGULAR_TOY :{G=p}Игрушки STR_CARGO_SINGULAR_TOY.gen :игрушек STR_CARGO_SINGULAR_TOY.acc :игрушки -STR_CARGO_SINGULAR_CANDY :{G=p}Конфеты -STR_CARGO_SINGULAR_CANDY.gen :конфет -STR_CARGO_SINGULAR_CANDY.acc :конфеты +STR_CARGO_SINGULAR_SWEETS :{G=p}Конфеты +STR_CARGO_SINGULAR_SWEETS.gen :конфет +STR_CARGO_SINGULAR_SWEETS.acc :конфеты STR_CARGO_SINGULAR_COLA :{G=f}Кола STR_CARGO_SINGULAR_COLA.gen :колы STR_CARGO_SINGULAR_COLA.acc :колу -STR_CARGO_SINGULAR_COTTON_CANDY :{G=f}Сахарная вата -STR_CARGO_SINGULAR_COTTON_CANDY.gen :сахарной ваты -STR_CARGO_SINGULAR_COTTON_CANDY.acc :сахарную вату +STR_CARGO_SINGULAR_CANDYFLOSS :{G=f}Сахарная вата +STR_CARGO_SINGULAR_CANDYFLOSS.gen :сахарной ваты +STR_CARGO_SINGULAR_CANDYFLOSS.acc :сахарную вату STR_CARGO_SINGULAR_BUBBLE :{G=p}Пузырьки STR_CARGO_SINGULAR_BUBBLE.gen :пузырьков STR_CARGO_SINGULAR_BUBBLE.acc :пузырьки diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 4131acf754..b6ec8e2d6e 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -119,7 +119,7 @@ STR_CARGO_PLURAL_TOYS :igračke STR_CARGO_PLURAL_TOYS.big :Igračke STR_CARGO_PLURAL_TOYS.gen :igračaka STR_CARGO_PLURAL_TOYS.aku :igračke -STR_CARGO_PLURAL_CANDY :slatkiši +STR_CARGO_PLURAL_SWEETS :slatkiši STR_CARGO_PLURAL_CANDY.big :Slatkiši STR_CARGO_PLURAL_CANDY.gen :slatkiša STR_CARGO_PLURAL_CANDY.aku :slatkiše @@ -127,10 +127,10 @@ STR_CARGO_PLURAL_COLA :kola STR_CARGO_PLURAL_COLA.big :Kola STR_CARGO_PLURAL_COLA.gen :kole STR_CARGO_PLURAL_COLA.aku :kolu -STR_CARGO_PLURAL_COTTON_CANDY :šećerna vuna -STR_CARGO_PLURAL_COTTON_CANDY.big :Šećerna vuna -STR_CARGO_PLURAL_COTTON_CANDY.gen :šećerne vune -STR_CARGO_PLURAL_COTTON_CANDY.aku :šećernu vunu +STR_CARGO_PLURAL_CANDYFLOSS :šećerna vuna +STR_CARGO_PLURAL_CANDYFLOSS.big :Šećerna vuna +STR_CARGO_PLURAL_CANDYFLOSS.gen :šećerne vune +STR_CARGO_PLURAL_CANDYFLOSS.aku :šećernu vunu STR_CARGO_PLURAL_BUBBLES :mehurići STR_CARGO_PLURAL_BUBBLES.big :Mehurići STR_CARGO_PLURAL_BUBBLES.gen :mehurića @@ -246,18 +246,18 @@ STR_CARGO_SINGULAR_TOY :igračka STR_CARGO_SINGULAR_TOY.big :Igračka STR_CARGO_SINGULAR_TOY.gen :igračke STR_CARGO_SINGULAR_TOY.aku :igračku -STR_CARGO_SINGULAR_CANDY :slatkiš -STR_CARGO_SINGULAR_CANDY.big :Slatkiš -STR_CARGO_SINGULAR_CANDY.gen :slatkiša -STR_CARGO_SINGULAR_CANDY.aku :slatkiš +STR_CARGO_SINGULAR_SWEETS :slatkiš +STR_CARGO_SINGULAR_SWEETS.big :Slatkiš +STR_CARGO_SINGULAR_SWEETS.gen :slatkiša +STR_CARGO_SINGULAR_SWEETS.aku :slatkiš STR_CARGO_SINGULAR_COLA :kola STR_CARGO_SINGULAR_COLA.big :Kola STR_CARGO_SINGULAR_COLA.gen :kole STR_CARGO_SINGULAR_COLA.aku :kolu -STR_CARGO_SINGULAR_COTTON_CANDY :šećerna vuna -STR_CARGO_SINGULAR_COTTON_CANDY.big :Šećerna vuna -STR_CARGO_SINGULAR_COTTON_CANDY.gen :šećerne vune -STR_CARGO_SINGULAR_COTTON_CANDY.aku :šećernu vunu +STR_CARGO_SINGULAR_CANDYFLOSS :šećerna vuna +STR_CARGO_SINGULAR_CANDYFLOSS.big :Šećerna vuna +STR_CARGO_SINGULAR_CANDYFLOSS.gen :šećerne vune +STR_CARGO_SINGULAR_CANDYFLOSS.aku :šećernu vunu STR_CARGO_SINGULAR_BUBBLE :mehurić STR_CARGO_SINGULAR_BUBBLE.big :Mehurić STR_CARGO_SINGULAR_BUBBLE.gen :mehurića diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 971d405aa8..1b113ac767 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :小麦 STR_CARGO_PLURAL_RUBBER :橡胶 STR_CARGO_PLURAL_SUGAR :蔗糖 STR_CARGO_PLURAL_TOYS :玩具 -STR_CARGO_PLURAL_CANDY :糖果 +STR_CARGO_PLURAL_SWEETS :糖果 STR_CARGO_PLURAL_COLA :可乐 -STR_CARGO_PLURAL_COTTON_CANDY :棉花糖 +STR_CARGO_PLURAL_CANDYFLOSS :棉花糖 STR_CARGO_PLURAL_BUBBLES :泡泡 STR_CARGO_PLURAL_TOFFEE :太妃糖 STR_CARGO_PLURAL_BATTERIES :电池 @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :小麦 STR_CARGO_SINGULAR_RUBBER :橡胶 STR_CARGO_SINGULAR_SUGAR :蔗糖 STR_CARGO_SINGULAR_TOY :玩具 -STR_CARGO_SINGULAR_CANDY :糖果 +STR_CARGO_SINGULAR_SWEETS :糖果 STR_CARGO_SINGULAR_COLA :可乐 -STR_CARGO_SINGULAR_COTTON_CANDY :棉花糖 +STR_CARGO_SINGULAR_CANDYFLOSS :棉花糖 STR_CARGO_SINGULAR_BUBBLE :泡泡 STR_CARGO_SINGULAR_TOFFEE :太妃糖 STR_CARGO_SINGULAR_BATTERY :电池 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 8e7c29f1db..5a333b98c6 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -73,12 +73,12 @@ STR_CARGO_PLURAL_SUGAR :Cukor STR_CARGO_PLURAL_SUGAR.g :cukru STR_CARGO_PLURAL_TOYS :Hračky STR_CARGO_PLURAL_TOYS.g :hračiek -STR_CARGO_PLURAL_CANDY :Cukríky +STR_CARGO_PLURAL_SWEETS :Cukríky STR_CARGO_PLURAL_CANDY.g :cukríkov STR_CARGO_PLURAL_COLA :Kofola STR_CARGO_PLURAL_COLA.g :kofoly -STR_CARGO_PLURAL_COTTON_CANDY :Cukrová vata -STR_CARGO_PLURAL_COTTON_CANDY.g :cukrovej vaty +STR_CARGO_PLURAL_CANDYFLOSS :Cukrová vata +STR_CARGO_PLURAL_CANDYFLOSS.g :cukrovej vaty STR_CARGO_PLURAL_BUBBLES :Bublinky STR_CARGO_PLURAL_BUBBLES.g :bubliniek STR_CARGO_PLURAL_TOFFEE :Karamelky @@ -138,12 +138,12 @@ STR_CARGO_SINGULAR_SUGAR :Cukor STR_CARGO_SINGULAR_SUGAR.g :cukru STR_CARGO_SINGULAR_TOY :Hračka STR_CARGO_SINGULAR_TOY.g :hračky -STR_CARGO_SINGULAR_CANDY :Cukrík -STR_CARGO_SINGULAR_CANDY.g :cukríka +STR_CARGO_SINGULAR_SWEETS :Cukrík +STR_CARGO_SINGULAR_SWEETS.g :cukríka STR_CARGO_SINGULAR_COLA :Kofola STR_CARGO_SINGULAR_COLA.g :kofoly -STR_CARGO_SINGULAR_COTTON_CANDY :Cukrová vata -STR_CARGO_SINGULAR_COTTON_CANDY.g :cukrovej vaty +STR_CARGO_SINGULAR_CANDYFLOSS :Cukrová vata +STR_CARGO_SINGULAR_CANDYFLOSS.g :cukrovej vaty STR_CARGO_SINGULAR_BUBBLE :Bublinka STR_CARGO_SINGULAR_BUBBLE.g :bublinky STR_CARGO_SINGULAR_TOFFEE :Karamel diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 6112a6a823..e90de58c23 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -105,16 +105,16 @@ STR_CARGO_PLURAL_SUGAR.d :Sladkorju STR_CARGO_PLURAL_TOYS :Igrače STR_CARGO_PLURAL_TOYS.r :Igrač STR_CARGO_PLURAL_TOYS.d :Igračam -STR_CARGO_PLURAL_CANDY :Sladkarije +STR_CARGO_PLURAL_SWEETS :Sladkarije STR_CARGO_PLURAL_CANDY.r :Sladkarij STR_CARGO_PLURAL_CANDY.d :Sladkarijam STR_CARGO_PLURAL_COLA :Cockta STR_CARGO_PLURAL_COLA.r :Cockte STR_CARGO_PLURAL_COLA.d :Cockti -STR_CARGO_PLURAL_COTTON_CANDY :Sladkorna pena -STR_CARGO_PLURAL_COTTON_CANDY.r :Sladkorne pene -STR_CARGO_PLURAL_COTTON_CANDY.d :Sladkorni peni -STR_CARGO_PLURAL_COTTON_CANDY.t :Sladkorno peno +STR_CARGO_PLURAL_CANDYFLOSS :Sladkorna pena +STR_CARGO_PLURAL_CANDYFLOSS.r :Sladkorne pene +STR_CARGO_PLURAL_CANDYFLOSS.d :Sladkorni peni +STR_CARGO_PLURAL_CANDYFLOSS.t :Sladkorno peno STR_CARGO_PLURAL_BUBBLES :Mehurčki STR_CARGO_PLURAL_BUBBLES.r :Mehurčkov STR_CARGO_PLURAL_BUBBLES.d :Mehurčkom @@ -212,18 +212,18 @@ STR_CARGO_SINGULAR_TOY :Igrača STR_CARGO_SINGULAR_TOY.r :Igrače STR_CARGO_SINGULAR_TOY.d :Igrači STR_CARGO_SINGULAR_TOY.t :Igračo -STR_CARGO_SINGULAR_CANDY :Sladkarija -STR_CARGO_SINGULAR_CANDY.r :Sladkarije -STR_CARGO_SINGULAR_CANDY.d :Sladkariji -STR_CARGO_SINGULAR_CANDY.t :Sladkarijo +STR_CARGO_SINGULAR_SWEETS :Sladkarija +STR_CARGO_SINGULAR_SWEETS.r :Sladkarije +STR_CARGO_SINGULAR_SWEETS.d :Sladkariji +STR_CARGO_SINGULAR_SWEETS.t :Sladkarijo STR_CARGO_SINGULAR_COLA :Cockta STR_CARGO_SINGULAR_COLA.r :Cockte STR_CARGO_SINGULAR_COLA.d :Cockti STR_CARGO_SINGULAR_COLA.t :Cockto -STR_CARGO_SINGULAR_COTTON_CANDY :Sladkorna pena -STR_CARGO_SINGULAR_COTTON_CANDY.r :Sladkorne pene -STR_CARGO_SINGULAR_COTTON_CANDY.d :Sladkorni peni -STR_CARGO_SINGULAR_COTTON_CANDY.t :Sladkorno peno +STR_CARGO_SINGULAR_CANDYFLOSS :Sladkorna pena +STR_CARGO_SINGULAR_CANDYFLOSS.r :Sladkorne pene +STR_CARGO_SINGULAR_CANDYFLOSS.d :Sladkorni peni +STR_CARGO_SINGULAR_CANDYFLOSS.t :Sladkorno peno STR_CARGO_SINGULAR_BUBBLE :Mehurček STR_CARGO_SINGULAR_BUBBLE.r :Mehurčka STR_CARGO_SINGULAR_BUBBLE.d :Mehurčku diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 0fba4df700..05c2ad5129 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Trigo STR_CARGO_PLURAL_RUBBER :{G=m}Caucho STR_CARGO_PLURAL_SUGAR :{G=m}Azúcar STR_CARGO_PLURAL_TOYS :{G=m}Juguetes -STR_CARGO_PLURAL_CANDY :{G=m}Caramelos +STR_CARGO_PLURAL_SWEETS :{G=m}Caramelos STR_CARGO_PLURAL_COLA :{G=f}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Algodón de Azúcar +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}Algodón de Azúcar STR_CARGO_PLURAL_BUBBLES :{G=f}Burbujas STR_CARGO_PLURAL_TOFFEE :{G=m}Tofes STR_CARGO_PLURAL_BATTERIES :{G=f}Pilas @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}Trigo STR_CARGO_SINGULAR_RUBBER :{G=m}Caucho STR_CARGO_SINGULAR_SUGAR :{G=m}Azúcar STR_CARGO_SINGULAR_TOY :{G=m}Juguete -STR_CARGO_SINGULAR_CANDY :{G=m}Caramelo +STR_CARGO_SINGULAR_SWEETS :{G=m}Caramelo STR_CARGO_SINGULAR_COLA :{G=f}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Algodón de Azúcar +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}Algodón de Azúcar STR_CARGO_SINGULAR_BUBBLE :{G=f}Burbuja STR_CARGO_SINGULAR_TOFFEE :{G=m}Tofe STR_CARGO_SINGULAR_BATTERY :{G=f}Pila diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 2c4fe437bc..ee9c8ff37e 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Trigo STR_CARGO_PLURAL_RUBBER :{G=m}Caucho STR_CARGO_PLURAL_SUGAR :{G=m}Azúcar STR_CARGO_PLURAL_TOYS :{G=m}Juguetes -STR_CARGO_PLURAL_CANDY :{G=m}Dulces +STR_CARGO_PLURAL_SWEETS :{G=m}Dulces STR_CARGO_PLURAL_COLA :{G=f}Bebida de cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Algodón de azúcar +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}Algodón de azúcar STR_CARGO_PLURAL_BUBBLES :{G=f}Burbujas STR_CARGO_PLURAL_TOFFEE :{G=m}Caramelos suaves STR_CARGO_PLURAL_BATTERIES :{G=f}Pilas @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}Trigo STR_CARGO_SINGULAR_RUBBER :{G=m}Caucho STR_CARGO_SINGULAR_SUGAR :{G=m}Azúcar STR_CARGO_SINGULAR_TOY :{G=m}Juguete -STR_CARGO_SINGULAR_CANDY :{G=m}Dulce +STR_CARGO_SINGULAR_SWEETS :{G=m}Dulce STR_CARGO_SINGULAR_COLA :{G=f}Bebida de cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Algodón de azúcar +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}Algodón de azúcar STR_CARGO_SINGULAR_BUBBLE :{G=f}Burbuja STR_CARGO_SINGULAR_TOFFEE :{G=m}Caramelo suave STR_CARGO_SINGULAR_BATTERY :{G=f}Pila diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 21c811345a..6f83e5d461 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Vete STR_CARGO_PLURAL_RUBBER :Gummi STR_CARGO_PLURAL_SUGAR :Socker STR_CARGO_PLURAL_TOYS :Leksaker -STR_CARGO_PLURAL_CANDY :Godis +STR_CARGO_PLURAL_SWEETS :Godis STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Sockervadd +STR_CARGO_PLURAL_CANDYFLOSS :Sockervadd STR_CARGO_PLURAL_BUBBLES :Bubblor STR_CARGO_PLURAL_TOFFEE :Knäck STR_CARGO_PLURAL_BATTERIES :Batterier @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Spannmål STR_CARGO_SINGULAR_RUBBER :Gummi STR_CARGO_SINGULAR_SUGAR :Socker STR_CARGO_SINGULAR_TOY :Leksak -STR_CARGO_SINGULAR_CANDY :Godis +STR_CARGO_SINGULAR_SWEETS :Godis STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Sockervadd +STR_CARGO_SINGULAR_CANDYFLOSS :Sockervadd STR_CARGO_SINGULAR_BUBBLE :Bubbla STR_CARGO_SINGULAR_TOFFEE :Knäck STR_CARGO_SINGULAR_BATTERY :Batteri diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index f4cdbe0586..4e7c33b86d 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :கோதும STR_CARGO_PLURAL_RUBBER :இறப்பர் STR_CARGO_PLURAL_SUGAR :சர்க்கரை STR_CARGO_PLURAL_TOYS :பொம்மைகள் -STR_CARGO_PLURAL_CANDY :இனிப்புகள் +STR_CARGO_PLURAL_SWEETS :இனிப்புகள் STR_CARGO_PLURAL_COLA :கோலா -STR_CARGO_PLURAL_COTTON_CANDY :பஞ்சுமிட்டாய் +STR_CARGO_PLURAL_CANDYFLOSS :பஞ்சுமிட்டாய் STR_CARGO_PLURAL_BUBBLES :குமிழிகள் STR_CARGO_PLURAL_TOFFEE :மிட்டாய்கள் STR_CARGO_PLURAL_BATTERIES :பாட்டரிகள் @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :கோதும STR_CARGO_SINGULAR_RUBBER :இறப்பர் STR_CARGO_SINGULAR_SUGAR :சர்க்கரை STR_CARGO_SINGULAR_TOY :பொம்மை -STR_CARGO_SINGULAR_CANDY :இனிப்பு +STR_CARGO_SINGULAR_SWEETS :இனிப்பு STR_CARGO_SINGULAR_COLA :கோலா -STR_CARGO_SINGULAR_COTTON_CANDY :பஞ்சுமிட்டாய் +STR_CARGO_SINGULAR_CANDYFLOSS :பஞ்சுமிட்டாய் STR_CARGO_SINGULAR_BUBBLE :குமிழி STR_CARGO_SINGULAR_TOFFEE :மிட்டாய் STR_CARGO_SINGULAR_BATTERY :மின்கலம் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 95b051e085..bbc964690a 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :ข้าวส STR_CARGO_PLURAL_RUBBER :ยางพารา STR_CARGO_PLURAL_SUGAR :น้ำตาล STR_CARGO_PLURAL_TOYS :ของเล่น -STR_CARGO_PLURAL_CANDY :ขนมสายไหม +STR_CARGO_PLURAL_SWEETS :ขนมสายไหม STR_CARGO_PLURAL_COLA :โคล่า -STR_CARGO_PLURAL_COTTON_CANDY :ขนมสายไหม +STR_CARGO_PLURAL_CANDYFLOSS :ขนมสายไหม STR_CARGO_PLURAL_BUBBLES :ฟอง STR_CARGO_PLURAL_TOFFEE :ลูกอม STR_CARGO_PLURAL_BATTERIES :ถ่านไฟฉาย @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :ข้าวส STR_CARGO_SINGULAR_RUBBER :ยางพารา STR_CARGO_SINGULAR_SUGAR :น้ำตาล STR_CARGO_SINGULAR_TOY :ของเล่น -STR_CARGO_SINGULAR_CANDY :ขนมสายไหม +STR_CARGO_SINGULAR_SWEETS :ขนมสายไหม STR_CARGO_SINGULAR_COLA :โคล่า -STR_CARGO_SINGULAR_COTTON_CANDY :ขนมสายไหม +STR_CARGO_SINGULAR_CANDYFLOSS :ขนมสายไหม STR_CARGO_SINGULAR_BUBBLE :ฟอง STR_CARGO_SINGULAR_TOFFEE :ลูกอม STR_CARGO_SINGULAR_BATTERY :ถ่านไฟฉาย diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index eabbb03608..85d8b1de4d 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :小麥 STR_CARGO_PLURAL_RUBBER :橡膠 STR_CARGO_PLURAL_SUGAR :砂糖 STR_CARGO_PLURAL_TOYS :玩具 -STR_CARGO_PLURAL_CANDY :糖果 +STR_CARGO_PLURAL_SWEETS :糖果 STR_CARGO_PLURAL_COLA :可樂 -STR_CARGO_PLURAL_COTTON_CANDY :棉花糖 +STR_CARGO_PLURAL_CANDYFLOSS :棉花糖 STR_CARGO_PLURAL_BUBBLES :氣泡 STR_CARGO_PLURAL_TOFFEE :太妃糖 STR_CARGO_PLURAL_BATTERIES :電池 @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :小麥 STR_CARGO_SINGULAR_RUBBER :橡膠 STR_CARGO_SINGULAR_SUGAR :砂糖 STR_CARGO_SINGULAR_TOY :玩具 -STR_CARGO_SINGULAR_CANDY :糖果 +STR_CARGO_SINGULAR_SWEETS :糖果 STR_CARGO_SINGULAR_COLA :可樂 -STR_CARGO_SINGULAR_COTTON_CANDY :棉花糖 +STR_CARGO_SINGULAR_CANDYFLOSS :棉花糖 STR_CARGO_SINGULAR_BUBBLE :氣泡 STR_CARGO_SINGULAR_TOFFEE :太妃糖 STR_CARGO_SINGULAR_BATTERY :電池 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 6246e05b7e..d9d664e957 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Buğday STR_CARGO_PLURAL_RUBBER :Kauçuk STR_CARGO_PLURAL_SUGAR :Şeker STR_CARGO_PLURAL_TOYS :Oyuncak -STR_CARGO_PLURAL_CANDY :Tatlı +STR_CARGO_PLURAL_SWEETS :Tatlı STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Pamuk şeker +STR_CARGO_PLURAL_CANDYFLOSS :Pamuk şeker STR_CARGO_PLURAL_BUBBLES :Baloncuk STR_CARGO_PLURAL_TOFFEE :Şekerleme STR_CARGO_PLURAL_BATTERIES :Pil @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Buğday STR_CARGO_SINGULAR_RUBBER :Kauçuk STR_CARGO_SINGULAR_SUGAR :Şeker STR_CARGO_SINGULAR_TOY :Oyuncak -STR_CARGO_SINGULAR_CANDY :Tatlı +STR_CARGO_SINGULAR_SWEETS :Tatlı STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Pamuk helva +STR_CARGO_SINGULAR_CANDYFLOSS :Pamuk helva STR_CARGO_SINGULAR_BUBBLE :Balon STR_CARGO_SINGULAR_TOFFEE :Şekerleme STR_CARGO_SINGULAR_BATTERY :Pil diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e0799eddae..a0053615b4 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -95,15 +95,15 @@ STR_CARGO_PLURAL_SUGAR.z :цукор STR_CARGO_PLURAL_TOYS :іграшки STR_CARGO_PLURAL_TOYS.r :іграшок STR_CARGO_PLURAL_TOYS.z :іграшки -STR_CARGO_PLURAL_CANDY :солодощі +STR_CARGO_PLURAL_SWEETS :солодощі STR_CARGO_PLURAL_CANDY.r :солодощів STR_CARGO_PLURAL_CANDY.z :солодощі STR_CARGO_PLURAL_COLA :кола STR_CARGO_PLURAL_COLA.r :коли STR_CARGO_PLURAL_COLA.z :колу -STR_CARGO_PLURAL_COTTON_CANDY :солодка вата -STR_CARGO_PLURAL_COTTON_CANDY.r :солодкої вати -STR_CARGO_PLURAL_COTTON_CANDY.z :солодку вату +STR_CARGO_PLURAL_CANDYFLOSS :солодка вата +STR_CARGO_PLURAL_CANDYFLOSS.r :солодкої вати +STR_CARGO_PLURAL_CANDYFLOSS.z :солодку вату STR_CARGO_PLURAL_BUBBLES :бульбашки STR_CARGO_PLURAL_BUBBLES.r :бульбашок STR_CARGO_PLURAL_BUBBLES.z :бульбашки @@ -191,15 +191,15 @@ STR_CARGO_SINGULAR_SUGAR.z :цукор STR_CARGO_SINGULAR_TOY :іграшки STR_CARGO_SINGULAR_TOY.r :іграшок STR_CARGO_SINGULAR_TOY.z :іграшки -STR_CARGO_SINGULAR_CANDY :цукерки -STR_CARGO_SINGULAR_CANDY.r :цукерок -STR_CARGO_SINGULAR_CANDY.z :цукерки +STR_CARGO_SINGULAR_SWEETS :цукерки +STR_CARGO_SINGULAR_SWEETS.r :цукерок +STR_CARGO_SINGULAR_SWEETS.z :цукерки STR_CARGO_SINGULAR_COLA :кола STR_CARGO_SINGULAR_COLA.r :коли STR_CARGO_SINGULAR_COLA.z :колу -STR_CARGO_SINGULAR_COTTON_CANDY :солодка вата -STR_CARGO_SINGULAR_COTTON_CANDY.r :солодкої вати -STR_CARGO_SINGULAR_COTTON_CANDY.z :солодку вату +STR_CARGO_SINGULAR_CANDYFLOSS :солодка вата +STR_CARGO_SINGULAR_CANDYFLOSS.r :солодкої вати +STR_CARGO_SINGULAR_CANDYFLOSS.z :солодку вату STR_CARGO_SINGULAR_BUBBLE :бульбашки STR_CARGO_SINGULAR_BUBBLE.r :бульбашок STR_CARGO_SINGULAR_BUBBLE.z :бульбашки diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index e0608c3e3d..701e9aa97b 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Тулă STR_CARGO_PLURAL_RUBBER :Каучук STR_CARGO_PLURAL_SUGAR :Сахăр STR_CARGO_PLURAL_TOYS :Теттесем -STR_CARGO_PLURAL_CANDY :Канфетсем +STR_CARGO_PLURAL_SWEETS :Канфетсем STR_CARGO_PLURAL_COLA :Кола -STR_CARGO_PLURAL_COTTON_CANDY :Сахăр ваткĕ +STR_CARGO_PLURAL_CANDYFLOSS :Сахăр ваткĕ STR_CARGO_PLURAL_BUBBLES :Хӑмпӑҫӑмсем STR_CARGO_PLURAL_TOFFEE :Карамель STR_CARGO_PLURAL_BATTERIES :Батарейкасем @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Тулă STR_CARGO_SINGULAR_RUBBER :Каучук STR_CARGO_SINGULAR_SUGAR :Сахăр STR_CARGO_SINGULAR_TOY :Тетте -STR_CARGO_SINGULAR_CANDY :Канфетсем +STR_CARGO_SINGULAR_SWEETS :Канфетсем STR_CARGO_SINGULAR_COLA :Кола -STR_CARGO_SINGULAR_COTTON_CANDY :Сахăр ваткĕ +STR_CARGO_SINGULAR_CANDYFLOSS :Сахăр ваткĕ STR_CARGO_SINGULAR_BUBBLE :Хӑмпӑҫӑм STR_CARGO_SINGULAR_TOFFEE :Карамель STR_CARGO_SINGULAR_BATTERY :Батарейкасем diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 97b3746b8f..57f55e83bf 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Weet STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sûker STR_CARGO_PLURAL_TOYS :Boartersguod -STR_CARGO_PLURAL_CANDY :Snobbersguod +STR_CARGO_PLURAL_SWEETS :Snobbersguod STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Sûkerspin +STR_CARGO_PLURAL_CANDYFLOSS :Sûkerspin STR_CARGO_PLURAL_BUBBLES :Bubbels STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batterijen @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Weet STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sûker STR_CARGO_SINGULAR_TOY :Boartersguod -STR_CARGO_SINGULAR_CANDY :Snobbersguod +STR_CARGO_SINGULAR_SWEETS :Snobbersguod STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Sûkerspin +STR_CARGO_SINGULAR_CANDYFLOSS :Sûkerspin STR_CARGO_SINGULAR_BUBBLE :Bûle STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Batterij diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 8807e62bb6..d089320735 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -47,9 +47,9 @@ STR_CARGO_PLURAL_WHEAT :Frumento STR_CARGO_PLURAL_RUBBER :Kauchuko STR_CARGO_PLURAL_SUGAR :Sukro STR_CARGO_PLURAL_TOYS :Ludili -STR_CARGO_PLURAL_CANDY :Bonboni +STR_CARGO_PLURAL_SWEETS :Bonboni STR_CARGO_PLURAL_COLA :Kolao -STR_CARGO_PLURAL_COTTON_CANDY :Kandi-lanugo +STR_CARGO_PLURAL_CANDYFLOSS :Kandi-lanugo STR_CARGO_PLURAL_BUBBLES :Buli STR_CARGO_PLURAL_TOFFEE :Karamelo STR_CARGO_PLURAL_BATTERIES :Baterii @@ -81,9 +81,9 @@ STR_CARGO_SINGULAR_WHEAT :Frumento STR_CARGO_SINGULAR_RUBBER :Kauchuko STR_CARGO_SINGULAR_SUGAR :Sukro STR_CARGO_SINGULAR_TOY :Ludilo -STR_CARGO_SINGULAR_CANDY :Bonbono +STR_CARGO_SINGULAR_SWEETS :Bonbono STR_CARGO_SINGULAR_COLA :Kolao -STR_CARGO_SINGULAR_COTTON_CANDY :Kandi-lanugo +STR_CARGO_SINGULAR_CANDYFLOSS :Kandi-lanugo STR_CARGO_SINGULAR_BUBBLE :Bulo STR_CARGO_SINGULAR_TOFFEE :Karamelo STR_CARGO_SINGULAR_BATTERY :Baterio diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 340bb0818c..3884677880 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Пченица STR_CARGO_PLURAL_RUBBER :Гума STR_CARGO_PLURAL_SUGAR :Шеќер STR_CARGO_PLURAL_TOYS :Играчки -STR_CARGO_PLURAL_CANDY :Колачиња +STR_CARGO_PLURAL_SWEETS :Колачиња STR_CARGO_PLURAL_COLA :Кола (сок) -STR_CARGO_PLURAL_COTTON_CANDY :Суровина за колачиња +STR_CARGO_PLURAL_CANDYFLOSS :Суровина за колачиња STR_CARGO_PLURAL_BUBBLES :Меурчиња STR_CARGO_PLURAL_TOFFEE :Карамели STR_CARGO_PLURAL_BATTERIES :Батерии @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Пченица STR_CARGO_SINGULAR_RUBBER :Гума STR_CARGO_SINGULAR_SUGAR :Шеќер STR_CARGO_SINGULAR_TOY :Играчка -STR_CARGO_SINGULAR_CANDY :Колаче +STR_CARGO_SINGULAR_SWEETS :Колаче STR_CARGO_SINGULAR_COLA :Кола (сок) -STR_CARGO_SINGULAR_COTTON_CANDY :Суровина за колачиња +STR_CARGO_SINGULAR_CANDYFLOSS :Суровина за колачиња STR_CARGO_SINGULAR_BUBBLE :Меурче STR_CARGO_SINGULAR_TOFFEE :Карамела STR_CARGO_SINGULAR_BATTERY :Батерија diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index ea06945bb1..fccf5f42d1 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Qamħ STR_CARGO_PLURAL_RUBBER :Lastku STR_CARGO_PLURAL_SUGAR :Zokkor STR_CARGO_PLURAL_TOYS :Ġugarelli -STR_CARGO_PLURAL_CANDY :Ħelu +STR_CARGO_PLURAL_SWEETS :Ħelu STR_CARGO_PLURAL_COLA :Koka -STR_CARGO_PLURAL_COTTON_CANDY :Kandifloss +STR_CARGO_PLURAL_CANDYFLOSS :Kandifloss STR_CARGO_PLURAL_BUBBLES :Bżieżaq STR_CARGO_PLURAL_TOFFEE :Tofija STR_CARGO_PLURAL_BATTERIES :Batteriji @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Qamħ STR_CARGO_SINGULAR_RUBBER :Lastku STR_CARGO_SINGULAR_SUGAR :Zokkor STR_CARGO_SINGULAR_TOY :Ġugarell -STR_CARGO_SINGULAR_CANDY :Ħelwa +STR_CARGO_SINGULAR_SWEETS :Ħelwa STR_CARGO_SINGULAR_COLA :Koka -STR_CARGO_SINGULAR_COTTON_CANDY :Kandiflos +STR_CARGO_SINGULAR_CANDYFLOSS :Kandiflos STR_CARGO_SINGULAR_BUBBLE :Bużżieqa STR_CARGO_SINGULAR_TOFFEE :Tofija STR_CARGO_SINGULAR_BATTERY :Batterija diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index 25cae04d3e..488c016bc7 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :गहू STR_CARGO_PLURAL_RUBBER :रबर STR_CARGO_PLURAL_SUGAR :साखर STR_CARGO_PLURAL_TOYS :खेळणी -STR_CARGO_PLURAL_CANDY :मिठाई +STR_CARGO_PLURAL_SWEETS :मिठाई STR_CARGO_PLURAL_COLA :शीतपेये -STR_CARGO_PLURAL_COTTON_CANDY :म्हातारीचा कापूस +STR_CARGO_PLURAL_CANDYFLOSS :म्हातारीचा कापूस STR_CARGO_PLURAL_BUBBLES :बुडबुडे STR_CARGO_PLURAL_TOFFEE :टॉफी STR_CARGO_PLURAL_BATTERIES :बॅटरी @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :गहू STR_CARGO_SINGULAR_RUBBER :रबर STR_CARGO_SINGULAR_SUGAR :साखर STR_CARGO_SINGULAR_TOY :खेळणी -STR_CARGO_SINGULAR_CANDY :मिठाई +STR_CARGO_SINGULAR_SWEETS :मिठाई STR_CARGO_SINGULAR_COLA :कोला -STR_CARGO_SINGULAR_COTTON_CANDY :कँडी फ्लास +STR_CARGO_SINGULAR_CANDYFLOSS :कँडी फ्लास STR_CARGO_SINGULAR_BUBBLE :बुडबुडा STR_CARGO_SINGULAR_TOFFEE :टॉफी STR_CARGO_SINGULAR_BATTERY :बॅटरी diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index dde996e034..ffebcc9045 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :گندم STR_CARGO_PLURAL_RUBBER :کائوچو STR_CARGO_PLURAL_SUGAR :شکر STR_CARGO_PLURAL_TOYS :اسباب بازی -STR_CARGO_PLURAL_CANDY :شیرینی +STR_CARGO_PLURAL_SWEETS :شیرینی STR_CARGO_PLURAL_COLA :نوشابه -STR_CARGO_PLURAL_COTTON_CANDY :پشمک +STR_CARGO_PLURAL_CANDYFLOSS :پشمک STR_CARGO_PLURAL_BUBBLES :حباب STR_CARGO_PLURAL_TOFFEE :تافی STR_CARGO_PLURAL_BATTERIES :باتری @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :گندم STR_CARGO_SINGULAR_RUBBER :کائوچو STR_CARGO_SINGULAR_SUGAR :شکر STR_CARGO_SINGULAR_TOY :اسباب بازی -STR_CARGO_SINGULAR_CANDY :شیرینی +STR_CARGO_SINGULAR_SWEETS :شیرینی STR_CARGO_SINGULAR_COLA :نوشابه -STR_CARGO_SINGULAR_COTTON_CANDY :پشمک +STR_CARGO_SINGULAR_CANDYFLOSS :پشمک STR_CARGO_SINGULAR_BUBBLE :حباب STR_CARGO_SINGULAR_TOFFEE :تافی STR_CARGO_SINGULAR_BATTERY :باتری diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 2e8266c230..37edeb27eb 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :گندم STR_CARGO_PLURAL_RUBBER :ربڑ STR_CARGO_PLURAL_SUGAR :چینی STR_CARGO_PLURAL_TOYS :کھلونے -STR_CARGO_PLURAL_CANDY :مٹھایاں +STR_CARGO_PLURAL_SWEETS :مٹھایاں STR_CARGO_PLURAL_COLA :کوئلہ -STR_CARGO_PLURAL_COTTON_CANDY :کینڈی فلاس +STR_CARGO_PLURAL_CANDYFLOSS :کینڈی فلاس STR_CARGO_PLURAL_BUBBLES :بلبلے STR_CARGO_PLURAL_TOFFEE :ٹافی STR_CARGO_PLURAL_BATTERIES :بیٹریاں @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :گندم STR_CARGO_SINGULAR_RUBBER :ربڑ STR_CARGO_SINGULAR_SUGAR :چینی STR_CARGO_SINGULAR_TOY :کھلونا -STR_CARGO_SINGULAR_CANDY :مٹھائی +STR_CARGO_SINGULAR_SWEETS :مٹھائی STR_CARGO_SINGULAR_COLA :کولا -STR_CARGO_SINGULAR_COTTON_CANDY :کینڈی فلاس +STR_CARGO_SINGULAR_CANDYFLOSS :کینڈی فلاس STR_CARGO_SINGULAR_BUBBLE :بلبلہ STR_CARGO_SINGULAR_TOFFEE :ٹافی STR_CARGO_SINGULAR_BATTERY :بیٹری diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 8d3abf6d96..aed29fab1a 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Bột mì STR_CARGO_PLURAL_RUBBER :Cao su STR_CARGO_PLURAL_SUGAR :Đường STR_CARGO_PLURAL_TOYS :Đồ chơi -STR_CARGO_PLURAL_CANDY :Kẹo +STR_CARGO_PLURAL_SWEETS :Kẹo STR_CARGO_PLURAL_COLA :Nước cola -STR_CARGO_PLURAL_COTTON_CANDY :Kẹo bông +STR_CARGO_PLURAL_CANDYFLOSS :Kẹo bông STR_CARGO_PLURAL_BUBBLES :Bong bóng STR_CARGO_PLURAL_TOFFEE :Kẹo bơ cứng STR_CARGO_PLURAL_BATTERIES :Pin @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Bột mì STR_CARGO_SINGULAR_RUBBER :Cao su STR_CARGO_SINGULAR_SUGAR :Đường STR_CARGO_SINGULAR_TOY :Đồ chơi -STR_CARGO_SINGULAR_CANDY :Kẹo +STR_CARGO_SINGULAR_SWEETS :Kẹo STR_CARGO_SINGULAR_COLA :Nước cola -STR_CARGO_SINGULAR_COTTON_CANDY :Kẹo bông +STR_CARGO_SINGULAR_CANDYFLOSS :Kẹo bông STR_CARGO_SINGULAR_BUBBLE :Bong bóng STR_CARGO_SINGULAR_TOFFEE :Kẹo bơ cứng STR_CARGO_SINGULAR_BATTERY :Pin diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 2f267f488b..8f68d17a78 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Gwenith STR_CARGO_PLURAL_RUBBER :Rwber STR_CARGO_PLURAL_SUGAR :Siwgr STR_CARGO_PLURAL_TOYS :Teganau -STR_CARGO_PLURAL_CANDY :Melysion +STR_CARGO_PLURAL_SWEETS :Melysion STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Candifflos +STR_CARGO_PLURAL_CANDYFLOSS :Candifflos STR_CARGO_PLURAL_BUBBLES :Swigod STR_CARGO_PLURAL_TOFFEE :Toffi STR_CARGO_PLURAL_BATTERIES :Baterïau @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Gwenith STR_CARGO_SINGULAR_RUBBER :Rwber STR_CARGO_SINGULAR_SUGAR :Siwgr STR_CARGO_SINGULAR_TOY :Tegan -STR_CARGO_SINGULAR_CANDY :Melysyn +STR_CARGO_SINGULAR_SWEETS :Melysyn STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Candifflos +STR_CARGO_SINGULAR_CANDYFLOSS :Candifflos STR_CARGO_SINGULAR_BUBBLE :Swigen STR_CARGO_SINGULAR_TOFFEE :Toffi STR_CARGO_SINGULAR_BATTERY :Batri From 584df548f1bdfa27482aa995d151542abe4f0bca Mon Sep 17 00:00:00 2001 From: Bernard Teo Date: Fri, 11 Jan 2019 16:09:37 +0800 Subject: [PATCH 377/601] Codechange: Make vehicle lists internally support grouping of vehicles This is in preparation for the new UI feature that allows grouping by shared orders. --- src/group_gui.cpp | 62 +++++------ src/vehicle_gui.cpp | 229 +++++++++++++++++++++++++---------------- src/vehicle_gui_base.h | 76 ++++++++++++-- 3 files changed, 233 insertions(+), 134 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 8d0bba8fbb..5323b65f28 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -341,24 +341,12 @@ public: this->vscroll = this->GetScrollbar(WID_GL_LIST_VEHICLE_SCROLLBAR); this->group_sb = this->GetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR); - switch (this->vli.vtype) { - default: NOT_REACHED(); - case VEH_TRAIN: this->sorting = &_sorting.train; break; - case VEH_ROAD: this->sorting = &_sorting.roadveh; break; - case VEH_SHIP: this->sorting = &_sorting.ship; break; - case VEH_AIRCRAFT: this->sorting = &_sorting.aircraft; break; - } - this->vli.index = ALL_GROUP; this->vehicle_sel = INVALID_VEHICLE; this->group_sel = INVALID_GROUP; this->group_rename = INVALID_GROUP; this->group_over = INVALID_GROUP; - this->vehicles.SetListing(*this->sorting); - this->vehicles.ForceRebuild(); - this->vehicles.NeedResort(); - this->BuildVehicleList(); this->SortVehicleList(); @@ -382,7 +370,7 @@ public: ~VehicleGroupWindow() { - *this->sorting = this->vehicles.GetListing(); + *this->sorting = this->vehgroups.GetListing(); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override @@ -453,10 +441,10 @@ public: { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->groups.ForceRebuild(); } else { - this->vehicles.ForceResort(); + this->vehgroups.ForceResort(); this->groups.ForceResort(); } @@ -509,8 +497,8 @@ public: this->BuildGroupList(this->owner); - this->group_sb->SetCount((uint)this->groups.size()); - this->vscroll->SetCount((uint)this->vehicles.size()); + this->group_sb->SetCount(static_cast(this->groups.size())); + this->vscroll->SetCount(static_cast(this->vehgroups.size())); /* The drop down menu is out, *but* it may not be used, retract it. */ if (this->vehicles.size() == 0 && this->IsWidgetLowered(WID_GL_MANAGE_VEHICLES_DROPDOWN)) { @@ -550,7 +538,7 @@ public: this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data = protect_sprite + this->vli.vtype; /* Set text of sort by dropdown */ - this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->vehicle_sorter_names[this->vehicles.SortType()]; + this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->vehicle_group_none_sorter_names[this->vehgroups.SortType()]; this->DrawWidgets(); } @@ -623,16 +611,16 @@ public: } case WID_GL_SORT_BY_ORDER: - this->DrawSortButtonState(WID_GL_SORT_BY_ORDER, this->vehicles.IsDescSortOrder() ? SBS_DOWN : SBS_UP); + this->DrawSortButtonState(WID_GL_SORT_BY_ORDER, this->vehgroups.IsDescSortOrder() ? SBS_DOWN : SBS_UP); break; case WID_GL_LIST_VEHICLE: - if (this->vli.index != ALL_GROUP) { - /* Mark vehicles which are in sub-groups */ + if (this->vli.index != ALL_GROUP && this->grouping == GB_NONE) { + /* Mark vehicles which are in sub-groups (only if we are not using shared order coalescing) */ int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->vehicles.size()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), static_cast(this->vehgroups.size())); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { - const Vehicle *v = this->vehicles[i]; + const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); if (v->group_id != this->vli.index) { GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->resize.step_height - 2, _colour_gradient[COLOUR_GREY][3], FILLRECT_CHECKER); } @@ -658,18 +646,18 @@ public: { switch (widget) { case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending - this->vehicles.ToggleSortOrder(); + this->vehgroups.ToggleSortOrder(); this->SetDirty(); break; case WID_GL_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu - ShowDropDownMenu(this, this->vehicle_sorter_names, this->vehicles.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); + ShowDropDownMenu(this, this->GetVehicleSorterNames(), this->vehgroups.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); return; case WID_GL_ALL_VEHICLES: // All vehicles button if (!IsAllGroupID(this->vli.index)) { this->vli.index = ALL_GROUP; - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); } break; @@ -677,7 +665,7 @@ public: case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles button if (!IsDefaultGroupID(this->vli.index)) { this->vli.index = DEFAULT_GROUP; - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); } break; @@ -717,17 +705,17 @@ public: SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); break; } case WID_GL_LIST_VEHICLE: { // Matrix Vehicle uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_VEHICLE); - if (id_v >= this->vehicles.size()) return; // click out of list bound + if (id_v >= this->vehgroups.size()) return; // click out of list bound - const Vehicle *v = this->vehicles[id_v]; - if (VehicleClicked(v)) break; + const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; + const Vehicle * const v = vehgroup.GetSingleVehicle(); this->vehicle_sel = v->index; @@ -851,13 +839,13 @@ public: this->SetDirty(); uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_VEHICLE); - if (id_v >= this->vehicles.size()) return; // click out of list bound + if (id_v >= this->vehgroups.size()) return; // click out of list bound - const Vehicle *v = this->vehicles[id_v]; + const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; + const Vehicle *v = vehgroup.GetSingleVehicle(); if (!VehicleClicked(v) && vindex == v->index) { ShowVehicleViewWindow(v); } - break; } } } @@ -886,7 +874,7 @@ public: { switch (widget) { case WID_GL_SORT_BY_DROPDOWN: - this->vehicles.SetSortType(index); + this->vehgroups.SetSortType(index); break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: @@ -924,7 +912,7 @@ public: void OnGameTick() override { - if (this->groups.NeedResort() || this->vehicles.NeedResort()) { + if (this->groups.NeedResort() || this->vehgroups.NeedResort()) { this->SetDirty(); } } @@ -1019,7 +1007,7 @@ public: } this->group_sb->ScrollTowards(id_g); } - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 84ff890d15..135da393a2 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -39,40 +39,50 @@ #include "safeguards.h" +#include -Sorting _sorting; -static GUIVehicleList::SortFunction VehicleNumberSorter; -static GUIVehicleList::SortFunction VehicleNameSorter; -static GUIVehicleList::SortFunction VehicleAgeSorter; -static GUIVehicleList::SortFunction VehicleProfitThisYearSorter; -static GUIVehicleList::SortFunction VehicleProfitLastYearSorter; -static GUIVehicleList::SortFunction VehicleCargoSorter; -static GUIVehicleList::SortFunction VehicleReliabilitySorter; -static GUIVehicleList::SortFunction VehicleMaxSpeedSorter; -static GUIVehicleList::SortFunction VehicleModelSorter; -static GUIVehicleList::SortFunction VehicleValueSorter; -static GUIVehicleList::SortFunction VehicleLengthSorter; -static GUIVehicleList::SortFunction VehicleTimeToLiveSorter; -static GUIVehicleList::SortFunction VehicleTimetableDelaySorter; +BaseVehicleListWindow::GroupBy _grouping[VLT_END][VEH_COMPANY_END]; +Sorting _sorting[BaseVehicleListWindow::GB_END]; -GUIVehicleList::SortFunction * const BaseVehicleListWindow::vehicle_sorter_funcs[] = { - &VehicleNumberSorter, - &VehicleNameSorter, - &VehicleAgeSorter, - &VehicleProfitThisYearSorter, - &VehicleProfitLastYearSorter, - &VehicleCargoSorter, - &VehicleReliabilitySorter, - &VehicleMaxSpeedSorter, - &VehicleModelSorter, - &VehicleValueSorter, - &VehicleLengthSorter, - &VehicleTimeToLiveSorter, - &VehicleTimetableDelaySorter, +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleNumberSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleNameSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleAgeSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleProfitThisYearSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleProfitLastYearSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleCargoSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleReliabilitySorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleMaxSpeedSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleModelSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleValueSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleLengthSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleTimeToLiveSorter; +static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleTimetableDelaySorter; + +/** Wrapper to convert a VehicleIndividualSortFunction to a VehicleGroupSortFunction */ +template +static bool VehicleIndividualToGroupSorterWrapper(GUIVehicleGroup const &a, GUIVehicleGroup const &b) +{ + return func(*(a.vehicles_begin), *(b.vehicles_begin)); +} + +BaseVehicleListWindow::VehicleGroupSortFunction * const BaseVehicleListWindow::vehicle_group_none_sorter_funcs[] = { + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, + &VehicleIndividualToGroupSorterWrapper, }; -const StringID BaseVehicleListWindow::vehicle_sorter_names[] = { +const StringID BaseVehicleListWindow::vehicle_group_none_sorter_names[] = { STR_SORT_BY_NUMBER, STR_SORT_BY_NAME, STR_SORT_BY_AGE, @@ -96,6 +106,31 @@ const StringID BaseVehicleListWindow::vehicle_depot_name[] = { STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR }; +BaseVehicleListWindow::BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno) : Window(desc), vli(VehicleListIdentifier::UnPack(wno)) +{ + this->grouping = _grouping[vli.type][vli.vtype]; + this->UpdateSortingFromGrouping(); +} + +/** + * Get the number of digits of space required for the given number. + * @param number The number. + * @return The number of digits to allocate space for. + */ +uint CountDigitsForAllocatingSpace(uint number) +{ + if (number >= 10000) return 5; + if (number >= 1000) return 4; + if (number >= 100) return 3; + + /* + * When the smallest unit number is less than 10, it is + * quite likely that it will expand to become more than + * 10 quite soon. + */ + return 2; +} + /** * Get the number of digits the biggest unit number of a set of vehicles has. * @param vehicles The list of vehicles. @@ -108,30 +143,29 @@ uint GetUnitNumberDigits(VehicleList &vehicles) unitnumber = max(unitnumber, v->unitnumber); } - if (unitnumber >= 10000) return 5; - if (unitnumber >= 1000) return 4; - if (unitnumber >= 100) return 3; - - /* - * When the smallest unit number is less than 10, it is - * quite likely that it will expand to become more than - * 10 quite soon. - */ - return 2; + return CountDigitsForAllocatingSpace(unitnumber); } void BaseVehicleListWindow::BuildVehicleList() { - if (!this->vehicles.NeedRebuild()) return; + if (!this->vehgroups.NeedRebuild()) return; DEBUG(misc, 3, "Building vehicle list type %d for company %d given index %d", this->vli.type, this->vli.company, this->vli.index); + this->vehgroups.clear(); + GenerateVehicleSortList(&this->vehicles, this->vli); - this->unitnumber_digits = GetUnitNumberDigits(this->vehicles); + uint max_unitnumber = 0; + for (auto it = this->vehicles.begin(); it != this->vehicles.end(); ++it) { + this->vehgroups.emplace_back(it, it + 1, (*it)->GetDisplayProfitThisYear(), (*it)->GetDisplayProfitLastYear(), (*it)->age); - this->vehicles.RebuildDone(); - this->vscroll->SetCount((uint)this->vehicles.size()); + max_unitnumber = max(max_unitnumber, (*it)->unitnumber); + } + this->unitnumber_digits = CountDigitsForAllocatingSpace(max_unitnumber); + + this->vehgroups.RebuildDone(); + this->vscroll->SetCount(this->vehgroups.size()); } /** @@ -183,7 +217,7 @@ static const Vehicle *_last_vehicle[2] = { nullptr, nullptr }; void BaseVehicleListWindow::SortVehicleList() { - if (this->vehicles.Sort()) return; + if (this->vehgroups.Sort()) return; /* invalidate cached values for name sorter - vehicle names could change */ _last_vehicle[0] = _last_vehicle[1] = nullptr; @@ -196,16 +230,16 @@ void DepotSortList(VehicleList *list) } /** draw the vehicle profit button in the vehicle list window. */ -static void DrawVehicleProfitButton(const Vehicle *v, int x, int y) +static void DrawVehicleProfitButton(Date age, Money display_profit_last_year, uint num_vehicles, int x, int y) { SpriteID spr; /* draw profit-based coloured icons */ - if (v->age <= VEHICLE_PROFIT_MIN_AGE) { + if (age <= VEHICLE_PROFIT_MIN_AGE) { spr = SPR_PROFIT_NA; - } else if (v->GetDisplayProfitLastYear() < 0) { + } else if (display_profit_last_year < 0) { spr = SPR_PROFIT_NEGATIVE; - } else if (v->GetDisplayProfitLastYear() < VEHICLE_PROFIT_THRESHOLD) { + } else if (display_profit_last_year < VEHICLE_PROFIT_THRESHOLD * num_vehicles) { spr = SPR_PROFIT_SOME; } else { spr = SPR_PROFIT_LOT; @@ -1204,6 +1238,7 @@ static bool VehicleTimetableDelaySorter(const Vehicle * const &a, const Vehicle void InitializeGUI() { + MemSetT(&_grouping, 0); MemSetT(&_sorting, 0); } @@ -1384,16 +1419,20 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int int vehicle_button_x = rtl ? right - GetSpriteSize(SPR_PROFIT_LOT).width : left; int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->vehicles.size()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { - const Vehicle *v = this->vehicles[i]; - StringID str; - SetDParam(0, v->GetDisplayProfitThisYear()); - SetDParam(1, v->GetDisplayProfitLastYear()); + const GUIVehicleGroup &vehgroup = this->vehgroups[i]; + + SetDParam(0, vehgroup.display_profit_this_year); + SetDParam(1, vehgroup.display_profit_last_year); + DrawString(text_left, text_right, y + line_height - FONT_HEIGHT_SMALL - WD_FRAMERECT_BOTTOM - 1, STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR); + + DrawVehicleProfitButton(vehgroup.age, vehgroup.display_profit_last_year, vehgroup.NumVehicles(), vehicle_button_x, y + FONT_HEIGHT_NORMAL + 3); + + const Vehicle *v = vehgroup.GetSingleVehicle(); DrawVehicleImage(v, image_left, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); - DrawString(text_left, text_right, y + line_height - FONT_HEIGHT_SMALL - WD_FRAMERECT_BOTTOM - 1, STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR); if (!v->name.empty()) { /* The vehicle got a name so we will print it */ @@ -1407,6 +1446,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int if (show_orderlist) DrawSmallOrderList(v, orderlist_left, orderlist_right, y, v->cur_real_order_index); + StringID str; if (v->IsChainInDepot()) { str = STR_BLUE_COMMA; } else { @@ -1416,12 +1456,41 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int SetDParam(0, v->unitnumber); DrawString(left, right, y + 2, str); - DrawVehicleProfitButton(v, vehicle_button_x, y + FONT_HEIGHT_NORMAL + 3); - y += line_height; } } +void BaseVehicleListWindow::UpdateSortingFromGrouping() +{ + /* Set up sorting. Make the window-specific _sorting variable + * point to the correct global _sorting struct so we are freed + * from having conditionals during window operation */ + switch (this->vli.vtype) { + case VEH_TRAIN: this->sorting = &_sorting[this->grouping].train; break; + case VEH_ROAD: this->sorting = &_sorting[this->grouping].roadveh; break; + case VEH_SHIP: this->sorting = &_sorting[this->grouping].ship; break; + case VEH_AIRCRAFT: this->sorting = &_sorting[this->grouping].aircraft; break; + default: NOT_REACHED(); + } + this->vehgroups.SetSortFuncs(this->vehicle_group_none_sorter_funcs); + this->vehgroups.SetListing(*this->sorting); + this->vehgroups.ForceRebuild(); + this->vehgroups.NeedResort(); +} + +void BaseVehicleListWindow::UpdateVehicleGroupBy(GroupBy group_by) +{ + if (this->grouping != group_by) { + /* Save the old sorting option, so that if we change the grouping option back later on, + * UpdateSortingFromGrouping() will automatically restore the saved sorting option. */ + *this->sorting = this->vehgroups.GetListing(); + + this->grouping = group_by; + _grouping[this->vli.type][this->vli.vtype] = group_by; + this->UpdateSortingFromGrouping(); + } +} + /** * Window for the (old) vehicle listing. * @@ -1442,24 +1511,10 @@ private: public: VehicleListWindow(WindowDesc *desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) { - /* Set up sorting. Make the window-specific _sorting variable - * point to the correct global _sorting struct so we are freed - * from having conditionals during window operation */ - switch (this->vli.vtype) { - case VEH_TRAIN: this->sorting = &_sorting.train; break; - case VEH_ROAD: this->sorting = &_sorting.roadveh; break; - case VEH_SHIP: this->sorting = &_sorting.ship; break; - case VEH_AIRCRAFT: this->sorting = &_sorting.aircraft; break; - default: NOT_REACHED(); - } - this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_VL_SCROLLBAR); - this->vehicles.SetListing(*this->sorting); - this->vehicles.ForceRebuild(); - this->vehicles.NeedResort(); this->BuildVehicleList(); this->SortVehicleList(); @@ -1478,7 +1533,7 @@ public: ~VehicleListWindow() { - *this->sorting = this->vehicles.GetListing(); + *this->sorting = this->vehgroups.GetListing(); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override @@ -1533,26 +1588,26 @@ public: * and we should close the window when deleting the order. */ NOT_REACHED(); } - SetDParam(0, this->vscroll->GetCount()); + SetDParam(0, this->vehicles.size()); break; case VL_STANDARD: // Company Name SetDParam(0, STR_COMPANY_NAME); SetDParam(1, this->vli.index); - SetDParam(3, this->vscroll->GetCount()); + SetDParam(3, this->vehicles.size()); break; case VL_STATION_LIST: // Station/Waypoint Name SetDParam(0, Station::IsExpected(BaseStation::Get(this->vli.index)) ? STR_STATION_NAME : STR_WAYPOINT_NAME); SetDParam(1, this->vli.index); - SetDParam(3, this->vscroll->GetCount()); + SetDParam(3, this->vehicles.size()); break; case VL_DEPOT_LIST: SetDParam(0, STR_DEPOT_CAPTION); SetDParam(1, this->vli.vtype); SetDParam(2, this->vli.index); - SetDParam(3, this->vscroll->GetCount()); + SetDParam(3, this->vehicles.size()); break; default: NOT_REACHED(); } @@ -1566,7 +1621,7 @@ public: switch (widget) { case WID_VL_SORT_ORDER: /* draw arrow pointing up/down for ascending/descending sorting */ - this->DrawSortButtonState(widget, this->vehicles.IsDescSortOrder() ? SBS_DOWN : SBS_UP); + this->DrawSortButtonState(widget, this->vehgroups.IsDescSortOrder() ? SBS_DOWN : SBS_UP); break; case WID_VL_LIST: @@ -1602,7 +1657,7 @@ public: } /* Set text of sort by dropdown widget. */ - this->GetWidget(WID_VL_SORT_BY_PULLDOWN)->widget_data = this->vehicle_sorter_names[this->vehicles.SortType()]; + this->GetWidget(WID_VL_SORT_BY_PULLDOWN)->widget_data = this->vehicle_group_none_sorter_names[this->vehgroups.SortType()]; this->DrawWidgets(); } @@ -1611,20 +1666,22 @@ public: { switch (widget) { case WID_VL_SORT_ORDER: // Flip sorting method ascending/descending - this->vehicles.ToggleSortOrder(); + this->vehgroups.ToggleSortOrder(); this->SetDirty(); break; case WID_VL_SORT_BY_PULLDOWN:// Select sorting criteria dropdown menu - ShowDropDownMenu(this, this->vehicle_sorter_names, this->vehicles.SortType(), WID_VL_SORT_BY_PULLDOWN, 0, + ShowDropDownMenu(this, this->vehicle_group_none_sorter_names, this->vehgroups.SortType(), WID_VL_SORT_BY_PULLDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); return; case WID_VL_LIST: { // Matrix to show vehicles uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_VL_LIST); - if (id_v >= this->vehicles.size()) return; // click out of list bound + if (id_v >= this->vehgroups.size()) return; // click out of list bound + + const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; + const Vehicle *v = vehgroup.GetSingleVehicle(); - const Vehicle *v = this->vehicles[id_v]; if (!VehicleClicked(v)) { if (_ctrl_pressed) { ShowCompanyGroupForVehicle(v); @@ -1655,7 +1712,7 @@ public: { switch (widget) { case WID_VL_SORT_BY_PULLDOWN: - this->vehicles.SetSortType(index); + this->vehgroups.SetSortType(index); break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: assert(this->vehicles.size() != 0); @@ -1679,7 +1736,7 @@ public: void OnGameTick() override { - if (this->vehicles.NeedResort()) { + if (this->vehgroups.NeedResort()) { StationID station = (this->vli.type == VL_STATION_LIST) ? this->vli.index : INVALID_STATION; DEBUG(misc, 3, "Periodic resort %d list company %d at station %d", this->vli.vtype, this->owner, station); @@ -1703,15 +1760,15 @@ public: /* Needs to be done in command-scope, so everything stays valid */ this->vli.index = GB(data, 0, 20); this->window_number = this->vli.Pack(); - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); return; } if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); } else { - this->vehicles.ForceResort(); + this->vehgroups.ForceResort(); } } }; diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 89410b17ef..c63d5ec18f 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -10,19 +10,59 @@ #ifndef VEHICLE_GUI_BASE_H #define VEHICLE_GUI_BASE_H +#include "core/smallvec_type.hpp" +#include "date_type.h" +#include "economy_type.h" #include "sortlist_type.h" #include "vehiclelist.h" #include "window_gui.h" #include "widgets/dropdown_type.h" +#include + typedef GUIList GUIVehicleList; +struct GUIVehicleGroup { + VehicleList::const_iterator vehicles_begin; ///< Pointer to beginning element of this vehicle group. + VehicleList::const_iterator vehicles_end; ///< Pointer to past-the-end element of this vehicle group. + Money display_profit_this_year; ///< Total profit for the vehicle group this year. + Money display_profit_last_year; ///< Total profit for the vehicle group laste year. + Date age; ///< Age in days of oldest vehicle in the group. + + GUIVehicleGroup(VehicleList::const_iterator vehicles_begin, VehicleList::const_iterator vehicles_end, Money display_profit_this_year, Money display_profit_last_year, Date age) + : vehicles_begin(vehicles_begin), vehicles_end(vehicles_end), display_profit_this_year(display_profit_this_year), display_profit_last_year(display_profit_last_year), age(age) {} + + std::ptrdiff_t NumVehicles() const + { + return std::distance(vehicles_begin, vehicles_end); + } + const Vehicle *GetSingleVehicle() const + { + assert(NumVehicles() == 1); + return vehicles_begin[0]; + } +}; + +typedef GUIList GUIVehicleGroupList; + struct BaseVehicleListWindow : public Window { - GUIVehicleList vehicles; ///< The list of vehicles - Listing *sorting; ///< Pointer to the vehicle type related sorting. - byte unitnumber_digits; ///< The number of digits of the highest unit number + + enum GroupBy : byte { + GB_NONE, + + GB_END, + }; + + GroupBy grouping; ///< How we want to group the list. + VehicleList vehicles; ///< List of vehicles. This is the buffer for `vehgroups` to point into; if this is structurally modified, `vehgroups` must be rebuilt. + GUIVehicleGroupList vehgroups; ///< List of (groups of) vehicles. This stores iterators of `vehicles`, and should be rebuilt if `vehicles` is structurally changed. + Listing *sorting; ///< Pointer to the vehicle type related sorting. + byte unitnumber_digits; ///< The number of digits of the highest unit number. Scrollbar *vscroll; - VehicleListIdentifier vli; ///< Identifier of the vehicle list we want to currently show. + VehicleListIdentifier vli; ///< Identifier of the vehicle list we want to currently show. + + typedef GUIVehicleGroupList::SortFunction VehicleGroupSortFunction; + typedef GUIVehicleList::SortFunction VehicleIndividualSortFunction; enum ActionDropdownItem { ADI_REPLACE, @@ -33,19 +73,32 @@ struct BaseVehicleListWindow : public Window { }; static const StringID vehicle_depot_name[]; - static const StringID vehicle_sorter_names[]; - static GUIVehicleList::SortFunction * const vehicle_sorter_funcs[]; + static const StringID vehicle_group_by_names[]; + static const StringID vehicle_group_none_sorter_names[]; + static const StringID vehicle_group_shared_orders_sorter_names[]; + static VehicleGroupSortFunction * const vehicle_group_none_sorter_funcs[]; + static VehicleGroupSortFunction * const vehicle_group_shared_orders_sorter_funcs[]; - BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno) : Window(desc), vli(VehicleListIdentifier::UnPack(wno)) - { - this->vehicles.SetSortFuncs(this->vehicle_sorter_funcs); - } + BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno); + + void UpdateSortingFromGrouping(); void DrawVehicleListItems(VehicleID selected_vehicle, int line_height, const Rect &r) const; + void UpdateVehicleGroupBy(GroupBy group_by); void SortVehicleList(); void BuildVehicleList(); Dimension GetActionDropdownSize(bool show_autoreplace, bool show_group); DropDownList BuildActionDropdownList(bool show_autoreplace, bool show_group); + + const StringID *GetVehicleSorterNames() + { + return vehicle_group_none_sorter_names; + } + + VehicleGroupSortFunction * const *GetVehicleSorterFuncs() + { + return vehicle_group_none_sorter_funcs; + } }; uint GetVehicleListHeight(VehicleType type, uint divisor = 1); @@ -57,6 +110,7 @@ struct Sorting { Listing train; }; -extern Sorting _sorting; +extern BaseVehicleListWindow::GroupBy _grouping[VLT_END][VEH_COMPANY_END]; +extern Sorting _sorting[BaseVehicleListWindow::GB_END]; #endif /* VEHICLE_GUI_BASE_H */ From e59c400ca6e56605dd8660630246982f23a16b0a Mon Sep 17 00:00:00 2001 From: Bernard Teo Date: Fri, 11 Jan 2019 16:50:38 +0800 Subject: [PATCH 378/601] Feature: Option to group vehicle lists by shared orders This applies to all kinds of vehicle lists, as well as the "vehicle groups" window. --- src/group_gui.cpp | 71 ++++++++-- src/lang/english.txt | 9 ++ src/vehicle_gui.cpp | 251 +++++++++++++++++++++++++++++------ src/vehicle_gui_base.h | 19 ++- src/widgets/group_widget.h | 2 + src/widgets/vehicle_widget.h | 2 + 6 files changed, 298 insertions(+), 56 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 5323b65f28..c5d9ac5990 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -71,6 +71,11 @@ static const NWidgetPart _nested_group_widgets[] = { EndContainer(), /* right part */ NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GL_GROUP_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_GROUP_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER), + NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(), + EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), @@ -537,8 +542,11 @@ public: if (!IsDefaultGroupID(this->vli.index) && !IsAllGroupID(this->vli.index) && Group::Get(this->vli.index)->replace_protection) protect_sprite = SPR_GROUP_REPLACE_ON_TRAIN; this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data = protect_sprite + this->vli.vtype; - /* Set text of sort by dropdown */ - this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->vehicle_group_none_sorter_names[this->vehgroups.SortType()]; + /* Set text of "group by" dropdown widget. */ + this->GetWidget(WID_GL_GROUP_BY_DROPDOWN)->widget_data = this->vehicle_group_by_names[this->grouping]; + + /* Set text of "sort by" dropdown widget. */ + this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->GetVehicleSorterNames()[this->vehgroups.SortType()]; this->DrawWidgets(); } @@ -650,6 +658,10 @@ public: this->SetDirty(); break; + case WID_GL_GROUP_BY_DROPDOWN: // Select grouping option dropdown menu + ShowDropDownMenu(this, this->vehicle_group_by_names, this->grouping, WID_GL_GROUP_BY_DROPDOWN, 0, 0); + return; + case WID_GL_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu ShowDropDownMenu(this, this->GetVehicleSorterNames(), this->vehgroups.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); return; @@ -715,19 +727,35 @@ public: if (id_v >= this->vehgroups.size()) return; // click out of list bound const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; - const Vehicle * const v = vehgroup.GetSingleVehicle(); + switch (this->grouping) { + case GB_NONE: { + const Vehicle *v = vehgroup.GetSingleVehicle(); + if (VehicleClicked(v)) break; - this->vehicle_sel = v->index; + this->vehicle_sel = v->index; - if (_ctrl_pressed) { - this->SelectGroup(v->group_id); + 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; + + this->SetDirty(); + break; + } + + case GB_SHARED_ORDERS: + assert(vehgroup.NumVehicles() > 0); + /* No drag-and-drop support for shared order grouping; we immediately open the shared orders window */ + ShowVehicleListWindow(vehgroup.vehicles_begin[0]); + break; + + default: + NOT_REACHED(); } - SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); - SetMouseCursorVehicle(v, EIT_IN_LIST); - _cursor.vehchain = true; - - this->SetDirty(); break; } @@ -842,10 +870,21 @@ public: if (id_v >= this->vehgroups.size()) return; // click out of list bound const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; - const Vehicle *v = vehgroup.GetSingleVehicle(); - if (!VehicleClicked(v) && vindex == v->index) { - ShowVehicleViewWindow(v); + switch (this->grouping) { + case GB_NONE: { + const Vehicle *v = vehgroup.GetSingleVehicle(); + if (!VehicleClicked(v) && vindex == v->index) { + ShowVehicleViewWindow(v); + } + break; + } + case GB_SHARED_ORDERS: + /* Currently no drag-and-drop support when grouped by shared orders. Modify this if we want to support some drag-drop behaviour for shared order list items. */ + NOT_REACHED(); + default: + NOT_REACHED(); } + break; } } } @@ -873,6 +912,10 @@ public: void OnDropdownSelect(int widget, int index) override { switch (widget) { + case WID_GL_GROUP_BY_DROPDOWN: + this->UpdateVehicleGroupBy(static_cast(index)); + break; + case WID_GL_SORT_BY_DROPDOWN: this->vehgroups.SetSortType(index); break; diff --git a/src/lang/english.txt b/src/lang/english.txt index 6d11d2d761..2b96f19314 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -315,6 +315,15 @@ STR_SORT_BY_CARGO_CAPACITY :Cargo capacity STR_SORT_BY_RANGE :Range STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Rating +STR_SORT_BY_NUM_VEHICLES :Number of vehicles +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total profit last year +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total profit this year +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Average profit last year +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Average profit this year + +# Group by options for vehicle list +STR_GROUP_BY_NONE :None +STR_GROUP_BY_SHARED_ORDERS :Shared orders # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 135da393a2..a1b40ba921 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -58,6 +58,11 @@ static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleValueSorter; static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleLengthSorter; static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleTimeToLiveSorter; static BaseVehicleListWindow::VehicleIndividualSortFunction VehicleTimetableDelaySorter; +static BaseVehicleListWindow::VehicleGroupSortFunction VehicleGroupLengthSorter; +static BaseVehicleListWindow::VehicleGroupSortFunction VehicleGroupTotalProfitThisYearSorter; +static BaseVehicleListWindow::VehicleGroupSortFunction VehicleGroupTotalProfitLastYearSorter; +static BaseVehicleListWindow::VehicleGroupSortFunction VehicleGroupAverageProfitThisYearSorter; +static BaseVehicleListWindow::VehicleGroupSortFunction VehicleGroupAverageProfitLastYearSorter; /** Wrapper to convert a VehicleIndividualSortFunction to a VehicleGroupSortFunction */ template @@ -99,6 +104,29 @@ const StringID BaseVehicleListWindow::vehicle_group_none_sorter_names[] = { INVALID_STRING_ID }; +BaseVehicleListWindow::VehicleGroupSortFunction * const BaseVehicleListWindow::vehicle_group_shared_orders_sorter_funcs[] = { + &VehicleGroupLengthSorter, + &VehicleGroupTotalProfitThisYearSorter, + &VehicleGroupTotalProfitLastYearSorter, + &VehicleGroupAverageProfitThisYearSorter, + &VehicleGroupAverageProfitLastYearSorter, +}; + +const StringID BaseVehicleListWindow::vehicle_group_shared_orders_sorter_names[] = { + STR_SORT_BY_NUM_VEHICLES, + STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR, + STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR, + STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR, + STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR, + INVALID_STRING_ID +}; + +const StringID BaseVehicleListWindow::vehicle_group_by_names[] = { + STR_GROUP_BY_NONE, + STR_GROUP_BY_SHARED_ORDERS, + INVALID_STRING_ID +}; + const StringID BaseVehicleListWindow::vehicle_depot_name[] = { STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT, STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT, @@ -156,16 +184,50 @@ void BaseVehicleListWindow::BuildVehicleList() GenerateVehicleSortList(&this->vehicles, this->vli); - uint max_unitnumber = 0; - for (auto it = this->vehicles.begin(); it != this->vehicles.end(); ++it) { - this->vehgroups.emplace_back(it, it + 1, (*it)->GetDisplayProfitThisYear(), (*it)->GetDisplayProfitLastYear(), (*it)->age); + if (this->grouping == GB_NONE) { + uint max_unitnumber = 0; + for (auto it = this->vehicles.begin(); it != this->vehicles.end(); ++it) { + this->vehgroups.emplace_back(it, it + 1, (*it)->GetDisplayProfitThisYear(), (*it)->GetDisplayProfitLastYear(), (*it)->age); - max_unitnumber = max(max_unitnumber, (*it)->unitnumber); + max_unitnumber = max(max_unitnumber, (*it)->unitnumber); + } + this->unitnumber_digits = CountDigitsForAllocatingSpace(max_unitnumber); + } else { + /* Sort by the primary vehicle; we just want all vehicles that share the same orders to form a contiguous range. */ + std::stable_sort(this->vehicles.begin(), this->vehicles.end(), [](const Vehicle * const &u, const Vehicle * const &v) { + return u->FirstShared() < v->FirstShared(); + }); + + uint max_num_vehicles = 0; + + VehicleList::const_iterator begin = this->vehicles.begin(); + while (begin != this->vehicles.end()) { + VehicleList::const_iterator end = std::find_if_not(begin, this->vehicles.cend(), [first_shared = (*begin)->FirstShared()](const Vehicle * const &v) { + return v->FirstShared() == first_shared; + }); + + Money display_profit_this_year = 0; + Money display_profit_last_year = 0; + Date age = 0; + for (auto it = begin; it != end; ++it) { + const Vehicle * const v = (*it); + display_profit_this_year += v->GetDisplayProfitThisYear(); + display_profit_last_year += v->GetDisplayProfitLastYear(); + age = max(age, v->age); + } + + this->vehgroups.emplace_back(begin, end, display_profit_this_year, display_profit_last_year, age); + + max_num_vehicles = max(max_num_vehicles, static_cast(end - begin)); + + begin = end; + } + + this->unitnumber_digits = CountDigitsForAllocatingSpace(max_num_vehicles); } - this->unitnumber_digits = CountDigitsForAllocatingSpace(max_unitnumber); this->vehgroups.RebuildDone(); - this->vscroll->SetCount(this->vehgroups.size()); + this->vscroll->SetCount(static_cast(this->vehgroups.size())); } /** @@ -1114,6 +1176,36 @@ StringID GetCargoSubtypeText(const Vehicle *v) return STR_EMPTY; } +/** Sort vehicle groups by the number of vehicles in the group */ +static bool VehicleGroupLengthSorter(const GUIVehicleGroup &a, const GUIVehicleGroup &b) +{ + return a.NumVehicles() < b.NumVehicles(); +} + +/** Sort vehicle groups by the total profit this year */ +static bool VehicleGroupTotalProfitThisYearSorter(const GUIVehicleGroup &a, const GUIVehicleGroup &b) +{ + return a.display_profit_this_year < b.display_profit_this_year; +} + +/** Sort vehicle groups by the total profit last year */ +static bool VehicleGroupTotalProfitLastYearSorter(const GUIVehicleGroup &a, const GUIVehicleGroup &b) +{ + return a.display_profit_last_year < b.display_profit_last_year; +} + +/** Sort vehicle groups by the average profit this year */ +static bool VehicleGroupAverageProfitThisYearSorter(const GUIVehicleGroup &a, const GUIVehicleGroup &b) +{ + return a.display_profit_this_year * static_cast(b.NumVehicles()) < b.display_profit_this_year * static_cast(a.NumVehicles()); +} + +/** Sort vehicle groups by the average profit last year */ +static bool VehicleGroupAverageProfitLastYearSorter(const GUIVehicleGroup &a, const GUIVehicleGroup &b) +{ + return a.display_profit_last_year * static_cast(b.NumVehicles()) < b.display_profit_last_year * static_cast(a.NumVehicles()); +} + /** Sort vehicles by their number */ static bool VehicleNumberSorter(const Vehicle * const &a, const Vehicle * const &b) { @@ -1289,6 +1381,12 @@ static const NWidgetPart _nested_vehicle_list[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_VL_GROUP_ORDER), SetMinimalSize(81, 12), SetFill(0, 1), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VL_GROUP_BY_PULLDOWN), SetMinimalSize(167, 12), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER), + NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetFill(1, 1), SetResize(1, 0), EndContainer(), + EndContainer(), + NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VL_SORT_ORDER), SetMinimalSize(81, 12), SetFill(0, 1), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VL_SORT_BY_PULLDOWN), SetMinimalSize(167, 12), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), @@ -1352,6 +1450,25 @@ static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, Veh } while (oid != start); } +/** Draw small order list in the vehicle GUI, but without the little black arrow. This is used for shared order groups. */ +static void DrawSmallOrderList(const Order *order, int left, int right, int y) +{ + bool rtl = _current_text_dir == TD_RTL; + int l_offset = rtl ? 0 : ScaleGUITrad(6); + int r_offset = rtl ? ScaleGUITrad(6) : 0; + int i = 0; + while (order != nullptr) { + if (order->IsType(OT_GOTO_STATION)) { + SetDParam(0, order->GetDestination()); + DrawString(left + l_offset, right - r_offset, y, STR_TINY_BLACK_STATION); + + y += FONT_HEIGHT_SMALL; + if (++i == 4) break; + } + order = order->next; + } +} + /** * Draws an image of a vehicle chain * @param v Front vehicle @@ -1419,7 +1536,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int int vehicle_button_x = rtl ? right - GetSpriteSize(SPR_PROFIT_LOT).width : left; int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), static_cast(this->vehgroups.size())); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const GUIVehicleGroup &vehgroup = this->vehgroups[i]; @@ -1430,32 +1547,55 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawVehicleProfitButton(vehgroup.age, vehgroup.display_profit_last_year, vehgroup.NumVehicles(), vehicle_button_x, y + FONT_HEIGHT_NORMAL + 3); - const Vehicle *v = vehgroup.GetSingleVehicle(); + switch (this->grouping) { + case GB_NONE: { + const Vehicle *v = vehgroup.GetSingleVehicle(); - DrawVehicleImage(v, image_left, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); + DrawVehicleImage(v, image_left, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); - if (!v->name.empty()) { - /* The vehicle got a name so we will print it */ - SetDParam(0, v->index); - DrawString(text_left, text_right, y, STR_TINY_BLACK_VEHICLE); - } else if (v->group_id != DEFAULT_GROUP) { - /* The vehicle has no name, but is member of a group, so print group name */ - SetDParam(0, v->group_id); - DrawString(text_left, text_right, y, STR_TINY_GROUP, TC_BLACK); + if (!v->name.empty()) { + /* The vehicle got a name so we will print it */ + SetDParam(0, v->index); + DrawString(text_left, text_right, y, STR_TINY_BLACK_VEHICLE); + } else if (v->group_id != DEFAULT_GROUP) { + /* The vehicle has no name, but is member of a group, so print group name */ + SetDParam(0, v->group_id); + DrawString(text_left, text_right, y, STR_TINY_GROUP, TC_BLACK); + } + + if (show_orderlist) DrawSmallOrderList(v, orderlist_left, orderlist_right, y, v->cur_real_order_index); + + StringID str; + if (v->IsChainInDepot()) { + str = STR_BLUE_COMMA; + } else { + str = (v->age > v->max_age - DAYS_IN_LEAP_YEAR) ? STR_RED_COMMA : STR_BLACK_COMMA; + } + + SetDParam(0, v->unitnumber); + DrawString(left, right, y + 2, str); + break; + } + + case GB_SHARED_ORDERS: + + assert(vehgroup.NumVehicles() > 0); + + for (int i = 0; i < static_cast(vehgroup.NumVehicles()); ++i) { + if (image_left + 8 * i >= image_right) break; // Break if there is no more space to draw any more vehicles anyway. + DrawVehicleImage(vehgroup.vehicles_begin[i], image_left + 8 * i, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); + } + + if (show_orderlist) DrawSmallOrderList((vehgroup.vehicles_begin[0])->GetFirstOrder(), orderlist_left, orderlist_right, y); + + SetDParam(0, vehgroup.NumVehicles()); + DrawString(left, right, y + 2, STR_BLACK_COMMA); + break; + + default: + NOT_REACHED(); } - if (show_orderlist) DrawSmallOrderList(v, orderlist_left, orderlist_right, y, v->cur_real_order_index); - - StringID str; - if (v->IsChainInDepot()) { - str = STR_BLUE_COMMA; - } else { - str = (v->age > v->max_age - DAYS_IN_LEAP_YEAR) ? STR_RED_COMMA : STR_BLACK_COMMA; - } - - SetDParam(0, v->unitnumber); - DrawString(left, right, y + 2, str); - y += line_height; } } @@ -1472,7 +1612,7 @@ void BaseVehicleListWindow::UpdateSortingFromGrouping() case VEH_AIRCRAFT: this->sorting = &_sorting[this->grouping].aircraft; break; default: NOT_REACHED(); } - this->vehgroups.SetSortFuncs(this->vehicle_group_none_sorter_funcs); + this->vehgroups.SetSortFuncs(this->GetVehicleSorterFuncs()); this->vehgroups.SetListing(*this->sorting); this->vehgroups.ForceRebuild(); this->vehgroups.NeedResort(); @@ -1523,6 +1663,10 @@ public: if (this->vli.type == VL_SHARED_ORDERS) { this->GetWidget(WID_VL_CAPTION)->widget_data = STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION; + /* If we are in the shared orders window, then disable the group-by dropdown menu. + * Remove this when the group-by dropdown menu has another option apart from grouping by shared orders. */ + this->SetWidgetDisabledState(WID_VL_GROUP_ORDER, true); + this->SetWidgetDisabledState(WID_VL_GROUP_BY_PULLDOWN, true); } else { this->GetWidget(WID_VL_CAPTION)->widget_data = STR_VEHICLE_LIST_TRAIN_CAPTION + this->vli.vtype; } @@ -1656,8 +1800,11 @@ public: WIDGET_LIST_END); } + /* Set text of group by dropdown widget. */ + this->GetWidget(WID_VL_GROUP_BY_PULLDOWN)->widget_data = this->vehicle_group_by_names[this->grouping]; + /* Set text of sort by dropdown widget. */ - this->GetWidget(WID_VL_SORT_BY_PULLDOWN)->widget_data = this->vehicle_group_none_sorter_names[this->vehgroups.SortType()]; + this->GetWidget(WID_VL_SORT_BY_PULLDOWN)->widget_data = this->GetVehicleSorterNames()[this->vehgroups.SortType()]; this->DrawWidgets(); } @@ -1670,8 +1817,12 @@ public: this->SetDirty(); break; - case WID_VL_SORT_BY_PULLDOWN:// Select sorting criteria dropdown menu - ShowDropDownMenu(this, this->vehicle_group_none_sorter_names, this->vehgroups.SortType(), WID_VL_SORT_BY_PULLDOWN, 0, + case WID_VL_GROUP_BY_PULLDOWN: // Select sorting criteria dropdown menu + ShowDropDownMenu(this, this->vehicle_group_by_names, this->grouping, WID_VL_GROUP_BY_PULLDOWN, 0, 0); + return; + + case WID_VL_SORT_BY_PULLDOWN: // Select sorting criteria dropdown menu + ShowDropDownMenu(this, this->GetVehicleSorterNames(), this->vehgroups.SortType(), WID_VL_SORT_BY_PULLDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); return; @@ -1680,15 +1831,29 @@ public: if (id_v >= this->vehgroups.size()) return; // click out of list bound const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; - const Vehicle *v = vehgroup.GetSingleVehicle(); - - if (!VehicleClicked(v)) { - if (_ctrl_pressed) { - ShowCompanyGroupForVehicle(v); - } else { - ShowVehicleViewWindow(v); + switch (this->grouping) { + case GB_NONE: { + const Vehicle *v = vehgroup.GetSingleVehicle(); + if (!VehicleClicked(v)) { + if (_ctrl_pressed) { + ShowCompanyGroupForVehicle(v); + } else { + ShowVehicleViewWindow(v); + } + } + break; } + + case GB_SHARED_ORDERS: + assert(vehgroup.NumVehicles() > 0); + /* We do not support VehicleClicked() here since the contextual action may only make sense for individual vehicles */ + + ShowVehicleListWindow(vehgroup.vehicles_begin[0]); + break; + + default: NOT_REACHED(); } + break; } @@ -1711,9 +1876,14 @@ public: void OnDropdownSelect(int widget, int index) override { switch (widget) { + case WID_VL_GROUP_BY_PULLDOWN: + this->UpdateVehicleGroupBy(static_cast(index)); + break; + case WID_VL_SORT_BY_PULLDOWN: this->vehgroups.SetSortType(index); break; + case WID_VL_MANAGE_VEHICLES_DROPDOWN: assert(this->vehicles.size() != 0); @@ -1729,6 +1899,7 @@ public: default: NOT_REACHED(); } break; + default: NOT_REACHED(); } this->SetDirty(); diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index c63d5ec18f..f89b81ffbe 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -49,6 +49,7 @@ struct BaseVehicleListWindow : public Window { enum GroupBy : byte { GB_NONE, + GB_SHARED_ORDERS, GB_END, }; @@ -92,12 +93,26 @@ struct BaseVehicleListWindow : public Window { const StringID *GetVehicleSorterNames() { - return vehicle_group_none_sorter_names; + switch (this->grouping) { + case GB_NONE: + return vehicle_group_none_sorter_names; + case GB_SHARED_ORDERS: + return vehicle_group_shared_orders_sorter_names; + default: + NOT_REACHED(); + } } VehicleGroupSortFunction * const *GetVehicleSorterFuncs() { - return vehicle_group_none_sorter_funcs; + switch (this->grouping) { + case GB_NONE: + return vehicle_group_none_sorter_funcs; + case GB_SHARED_ORDERS: + return vehicle_group_shared_orders_sorter_funcs; + default: + NOT_REACHED(); + } } }; diff --git a/src/widgets/group_widget.h b/src/widgets/group_widget.h index beca5a3a65..03ac61a48e 100644 --- a/src/widgets/group_widget.h +++ b/src/widgets/group_widget.h @@ -13,6 +13,8 @@ /** Widgets of the #VehicleGroupWindow class. */ enum GroupListWidgets { WID_GL_CAPTION, ///< Caption of the window. + WID_GL_GROUP_BY_ORDER, ///< Group order. + WID_GL_GROUP_BY_DROPDOWN, ///< Group by dropdown list. WID_GL_SORT_BY_ORDER, ///< Sort order. WID_GL_SORT_BY_DROPDOWN, ///< Sort by dropdown list. WID_GL_LIST_VEHICLE, ///< List of the vehicles. diff --git a/src/widgets/vehicle_widget.h b/src/widgets/vehicle_widget.h index 5ecb8dffea..0ee1b2624f 100644 --- a/src/widgets/vehicle_widget.h +++ b/src/widgets/vehicle_widget.h @@ -61,6 +61,8 @@ enum VehicleDetailsWidgets { /** Widgets of the #VehicleListWindow class. */ enum VehicleListWidgets { WID_VL_CAPTION, ///< Caption of window. + WID_VL_GROUP_ORDER, ///< Group order. + WID_VL_GROUP_BY_PULLDOWN, ///< Group by dropdown list. WID_VL_SORT_ORDER, ///< Sort order. WID_VL_SORT_BY_PULLDOWN, ///< Sort by dropdown list. WID_VL_LIST, ///< List of the vehicles. From 61fb1cac546716fed45e1250be3ed26bffb312ef Mon Sep 17 00:00:00 2001 From: Bernard Teo Date: Fri, 11 Jan 2019 16:52:49 +0800 Subject: [PATCH 379/601] Cleanup: Move EndContainer() for empty WWT_PANEL to the same line --- src/vehicle_gui.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index a1b40ba921..2cc9f9d749 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1390,8 +1390,7 @@ static const NWidgetPart _nested_vehicle_list[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VL_SORT_ORDER), SetMinimalSize(81, 12), SetFill(0, 1), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VL_SORT_BY_PULLDOWN), SetMinimalSize(167, 12), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), - NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetFill(1, 1), SetResize(1, 0), - EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetFill(1, 1), SetResize(1, 0), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), From a5047b7566ffdc430e6753a76d1381959275f259 Mon Sep 17 00:00:00 2001 From: Bernard Teo Date: Fri, 11 Jan 2019 16:55:32 +0800 Subject: [PATCH 380/601] Cleanup: Use range-based for-loop in group_gui.cpp --- src/group_gui.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index c5d9ac5990..f1b1d4ef8e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -565,11 +565,9 @@ public: case WID_GL_INFO: { Money this_year = 0; Money last_year = 0; - uint32 occupancy = 0; - size_t vehicle_count = this->vehicles.size(); + uint64 occupancy = 0; - for (uint i = 0; i < vehicle_count; i++) { - const Vehicle *v = this->vehicles[i]; + for (const Vehicle * const v : this->vehicles) { assert(v->owner == this->owner); this_year += v->GetDisplayProfitThisYear(); @@ -592,6 +590,7 @@ public: y += FONT_HEIGHT_NORMAL; DrawString(left, right, y, STR_GROUP_OCCUPANCY, TC_BLACK); + const size_t vehicle_count = this->vehicles.size(); if (vehicle_count > 0) { SetDParam(0, occupancy / vehicle_count); DrawString(left, right, y, STR_GROUP_OCCUPANCY_VALUE, TC_BLACK, SA_RIGHT); From 4af1acfe926db39965f3cff2a41ecf0da32b4137 Mon Sep 17 00:00:00 2001 From: Bernard Teo Date: Thu, 17 Dec 2020 20:27:29 +0800 Subject: [PATCH 381/601] Feature: Drag-and-drop vehicles in group GUI for shared order groups --- src/group_gui.cpp | 61 ++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index f1b1d4ef8e..1210087957 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -726,34 +726,43 @@ public: if (id_v >= this->vehgroups.size()) return; // click out of list bound const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; + + const Vehicle *v = nullptr; + switch (this->grouping) { case GB_NONE: { - const Vehicle *v = vehgroup.GetSingleVehicle(); - if (VehicleClicked(v)) break; - - 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; - - this->SetDirty(); + const Vehicle *v2 = vehgroup.GetSingleVehicle(); + if (VehicleClicked(v2)) break; + v = v2; break; } - case GB_SHARED_ORDERS: + case GB_SHARED_ORDERS: { assert(vehgroup.NumVehicles() > 0); - /* No drag-and-drop support for shared order grouping; we immediately open the shared orders window */ - ShowVehicleListWindow(vehgroup.vehicles_begin[0]); + v = vehgroup.vehicles_begin[0]; + /* + No VehicleClicked(v) support for now, because don't want + to enable any contextual actions except perhaps clicking/ctrl-clicking to clone orders. + */ break; + } default: NOT_REACHED(); } + if (v) { + 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; + + this->SetDirty(); + } break; } @@ -838,7 +847,7 @@ public: { switch (widget) { case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles - DoCommandP(0, DEFAULT_GROUP, this->vehicle_sel | (_ctrl_pressed ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE)); + DoCommandP(0, DEFAULT_GROUP, this->vehicle_sel | (_ctrl_pressed || this->grouping == GB_SHARED_ORDERS ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE)); this->vehicle_sel = INVALID_VEHICLE; this->group_over = INVALID_GROUP; @@ -855,7 +864,7 @@ public: uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); GroupID new_g = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index; - DoCommandP(0, new_g, vindex | (_ctrl_pressed ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr); + DoCommandP(0, new_g, vindex | (_ctrl_pressed || this->grouping == GB_SHARED_ORDERS ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr); break; } @@ -877,9 +886,17 @@ public: } break; } - case GB_SHARED_ORDERS: - /* Currently no drag-and-drop support when grouped by shared orders. Modify this if we want to support some drag-drop behaviour for shared order list items. */ - NOT_REACHED(); + + case GB_SHARED_ORDERS: { + const Vehicle *v = vehgroup.vehicles_begin[0]; + /* We do not support VehicleClicked() here since the contextual action may only make sense for individual vehicles */ + + if (vindex == v->index) { + ShowVehicleListWindow(v); + } + break; + } + default: NOT_REACHED(); } From 981c5402018bbe8f8d4593faf0fbbf712c34799d Mon Sep 17 00:00:00 2001 From: Bernard Teo Date: Sun, 20 Dec 2020 01:19:28 +0800 Subject: [PATCH 382/601] Change: Place "Group by" above "Sort by" in station window for consistency --- src/station_gui.cpp | 8 ++++---- src/widgets/station_widget.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 66a4605ea8..3cd4a42916 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -792,14 +792,14 @@ static const NWidgetPart _nested_station_view_widgets[] = { NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SORT_ORDER), SetMinimalSize(81, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_SORT_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), - EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_GROUP), SetMinimalSize(81, 12), SetFill(1, 1), SetDataTip(STR_STATION_VIEW_GROUP, 0x0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_GROUP_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER), EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SORT_ORDER), SetMinimalSize(81, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_SORT_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), + EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY, WID_SV_WAITING), SetMinimalSize(237, 44), SetResize(1, 10), SetScrollbar(WID_SV_SCROLLBAR), EndContainer(), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SV_SCROLLBAR), diff --git a/src/widgets/station_widget.h b/src/widgets/station_widget.h index 8ab89bbf31..491505e430 100644 --- a/src/widgets/station_widget.h +++ b/src/widgets/station_widget.h @@ -13,10 +13,10 @@ /** Widgets of the #StationViewWindow class. */ enum StationViewWidgets { WID_SV_CAPTION, ///< Caption of the window. - WID_SV_SORT_ORDER, ///< 'Sort order' button - WID_SV_SORT_BY, ///< 'Sort by' button WID_SV_GROUP, ///< label for "group by" WID_SV_GROUP_BY, ///< 'Group by' button + WID_SV_SORT_ORDER, ///< 'Sort order' button + WID_SV_SORT_BY, ///< 'Sort by' button WID_SV_WAITING, ///< List of waiting cargo. WID_SV_SCROLLBAR, ///< Scrollbar. WID_SV_ACCEPT_RATING_LIST, ///< List of accepted cargoes / rating of cargoes. From 6c3a5b5b17de97be292fc9442f6bd693973114ee Mon Sep 17 00:00:00 2001 From: Matt Kimber Date: Mon, 21 Dec 2020 22:46:38 +0000 Subject: [PATCH 383/601] Fix c02ef3e4: [NewGRF] Variable 0x44 was always HZB_TOWN_EDGE for road stops. (#8400) --- src/newgrf_roadtype.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/newgrf_roadtype.cpp b/src/newgrf_roadtype.cpp index c49faa59f1..3f6150cd36 100644 --- a/src/newgrf_roadtype.cpp +++ b/src/newgrf_roadtype.cpp @@ -45,7 +45,7 @@ const Town *t = nullptr; if (IsRoadDepotTile(this->tile)) { t = Depot::GetByTile(this->tile)->town; - } else if (IsTileType(this->tile, MP_ROAD)) { + } else { t = ClosestTownFromTile(this->tile, UINT_MAX); } return t != nullptr ? GetTownRadiusGroup(t, this->tile) : HZB_TOWN_EDGE; From d8c8f4e72d8a8f9306bc4e6a86c012dee740c8ca Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 22 Dec 2020 10:44:07 +0100 Subject: [PATCH 384/601] Fix: next 67 savegame versions are used in PatchPacks; skip them (#8411) Various of PatchPacks (Spring 2013, Joker, ChillPP) used versions slightly higher than ours. Of course, as time went by, this caught up with us, and we are now almost pushing a new version that would conflict with them. To avoid users creating unneeded issues about "why can I not load my savegame", lets be ahead of the curve and flat-out refuse to load them. Version-wise, this is totally fine. We have ~32k versions to go before we run out (0x8000 is masked by JGRPP; we should avoid using that). At the rate we bump savegames, this is not going to happen in any sane reality. --- src/lang/english.txt | 1 + src/saveload/saveload.cpp | 1 + src/saveload/saveload.h | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/lang/english.txt b/src/lang/english.txt index 2b96f19314..7d7af8d853 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4254,6 +4254,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is mad STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File not readable STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File not writeable STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data integrity check failed +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Savegame is made with a modified version STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Game was saved in version without tram support. All trams have been removed diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 5288f9047d..4f3b7e9914 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2689,6 +2689,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check) /* Is the version higher than the current? */ if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME); + if (_sl_version >= SLV_START_PATCHPACKS && _sl_version <= SLV_END_PATCHPACKS) SlError(STR_GAME_SAVELOAD_ERROR_PATCHPACK); break; } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 3581a55947..7fa91a5095 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -304,6 +304,22 @@ enum SaveLoadVersion : uint16 { SLV_ENDING_YEAR, ///< 218 PR#7747 v1.10 Configurable ending year. SLV_REMOVE_TOWN_CARGO_CACHE, ///< 219 PR#8258 Remove town cargo acceptance and production caches. + /* Patchpacks for a while considered it a good idea to jump a few versions + * above our version for their savegames. But as time continued, this gap + * has been closing, up to the point we would start to reuse versions from + * their patchpacks. This is not a problem from our perspective: the + * savegame will simply fail to load because they all contain chunks we + * cannot digest. But, this gives for ugly errors. As we have plenty of + * versions anyway, we simply skip the versions we know belong to + * patchpacks. This way we can present the user with a clean error + * indicate he is loading a savegame from a patchpack. + * For future patchpack creators: please follow a system like JGRPP, where + * the version is masked with 0x8000, and the true version is stored in + * its own chunk with feature toggles. + */ + SLV_START_PATCHPACKS, ///< 220 First known patchpack to use a version just above ours. + SLV_END_PATCHPACKS = 286, ///< 286 Last known patchpack to use a version just above ours. + SL_MAX_VERSION, ///< Highest possible saveload version }; From 547e5fdb65ae1c7909ef602a58085e5146782b42 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 22 Dec 2020 13:12:47 +0100 Subject: [PATCH 385/601] Fix 86e08aa: STR_CARGO_PLURAL_CANDY with cases was not renamed (#8412) --- src/lang/belarusian.txt | 10 +++++----- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 4 ++-- src/lang/estonian.txt | 2 +- src/lang/gaelic.txt | 6 +++--- src/lang/greek.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/latin.txt | 6 +++--- src/lang/lithuanian.txt | 12 ++++++------ src/lang/polish.txt | 12 ++++++------ src/lang/russian.txt | 4 ++-- src/lang/serbian.txt | 6 +++--- src/lang/slovak.txt | 2 +- src/lang/slovenian.txt | 4 ++-- src/lang/ukrainian.txt | 4 ++-- 15 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index e295b60282..9ded7fd19e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -167,11 +167,11 @@ STR_CARGO_PLURAL_TOYS.acc :цацкі STR_CARGO_PLURAL_TOYS.abl :цацкамі STR_CARGO_PLURAL_TOYS.pre :цацках STR_CARGO_PLURAL_SWEETS :{G=p}Цукеркi -STR_CARGO_PLURAL_CANDY.gen :цукерак -STR_CARGO_PLURAL_CANDY.dat :цукеркам -STR_CARGO_PLURAL_CANDY.acc :цукеркі -STR_CARGO_PLURAL_CANDY.abl :цукеркамі -STR_CARGO_PLURAL_CANDY.pre :цукерках +STR_CARGO_PLURAL_SWEETS.gen :цукерак +STR_CARGO_PLURAL_SWEETS.dat :цукеркам +STR_CARGO_PLURAL_SWEETS.acc :цукеркі +STR_CARGO_PLURAL_SWEETS.abl :цукеркамі +STR_CARGO_PLURAL_SWEETS.pre :цукерках STR_CARGO_PLURAL_COLA :{G=f}Кола STR_CARGO_PLURAL_COLA.gen :колы STR_CARGO_PLURAL_COLA.dat :коле diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3566934e5b..55e0b6b912 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -74,7 +74,7 @@ STR_CARGO_PLURAL_SUGAR.gen :šećera STR_CARGO_PLURAL_TOYS :Igračke STR_CARGO_PLURAL_TOYS.gen :igračaka STR_CARGO_PLURAL_SWEETS :Slatkiši -STR_CARGO_PLURAL_CANDY.gen :slatkiša +STR_CARGO_PLURAL_SWEETS.gen :slatkiša STR_CARGO_PLURAL_COLA :Cola STR_CARGO_PLURAL_COLA.gen :cole STR_CARGO_PLURAL_CANDYFLOSS :Šećerna vuna diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 0d0b8772d9..c76e07a8a4 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -103,8 +103,8 @@ STR_CARGO_PLURAL_TOYS :hračky STR_CARGO_PLURAL_TOYS.gen :hraček STR_CARGO_PLURAL_TOYS.big :Hračky STR_CARGO_PLURAL_SWEETS :bonbony -STR_CARGO_PLURAL_CANDY.gen :bonbonů -STR_CARGO_PLURAL_CANDY.big :Bonbony +STR_CARGO_PLURAL_SWEETS.gen :bonbonů +STR_CARGO_PLURAL_SWEETS.big :Bonbony STR_CARGO_PLURAL_COLA :kola STR_CARGO_PLURAL_COLA.gen :koly STR_CARGO_PLURAL_COLA.acc :kolu diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index eab1f86e34..c390fd6d66 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -73,7 +73,7 @@ STR_CARGO_PLURAL_SUGAR.g :Suhkru STR_CARGO_PLURAL_TOYS :Mänguasjad STR_CARGO_PLURAL_TOYS.g :Mänguasjade STR_CARGO_PLURAL_SWEETS :Maiustused -STR_CARGO_PLURAL_CANDY.g :Maiustuste +STR_CARGO_PLURAL_SWEETS.g :Maiustuste STR_CARGO_PLURAL_COLA :Koola STR_CARGO_PLURAL_COLA.g :Koola STR_CARGO_PLURAL_CANDYFLOSS :Suhkruvatt diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 852ebee8fa..d0bb4435a4 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -120,9 +120,9 @@ STR_CARGO_PLURAL_TOYS.nom :Dèideagan STR_CARGO_PLURAL_TOYS.gen :Dhèideagan STR_CARGO_PLURAL_TOYS.dat :Dèideagan STR_CARGO_PLURAL_SWEETS :{G=m}Mìlseanan -STR_CARGO_PLURAL_CANDY.nom :Mìlseanan -STR_CARGO_PLURAL_CANDY.gen :Mhìlseanan -STR_CARGO_PLURAL_CANDY.dat :Mìlseanan +STR_CARGO_PLURAL_SWEETS.nom :Mìlseanan +STR_CARGO_PLURAL_SWEETS.gen :Mhìlseanan +STR_CARGO_PLURAL_SWEETS.dat :Mìlseanan STR_CARGO_PLURAL_COLA :{G=m}Cola STR_CARGO_PLURAL_COLA.nom :Cola STR_CARGO_PLURAL_COLA.gen :Cola diff --git a/src/lang/greek.txt b/src/lang/greek.txt index c09aa806fe..3ca894c0a9 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -73,7 +73,7 @@ STR_CARGO_PLURAL_SUGAR.geniki :Ζάχαρης STR_CARGO_PLURAL_TOYS :{G=n}Παιχνίδια STR_CARGO_PLURAL_TOYS.geniki :Παιχνιδιών STR_CARGO_PLURAL_SWEETS :{G=n}Γλυκίσματα -STR_CARGO_PLURAL_CANDY.geniki :Γλυκισμάτων +STR_CARGO_PLURAL_SWEETS.geniki :Γλυκισμάτων STR_CARGO_PLURAL_COLA :{G=f}Κόλα STR_CARGO_PLURAL_COLA.geniki :Κόλας STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Μαλλιά της γριάς diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index c3ed93acc1..4fc1c45cde 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -73,7 +73,7 @@ STR_CARGO_PLURAL_SUGAR.t :cukrot STR_CARGO_PLURAL_TOYS :Játék STR_CARGO_PLURAL_TOYS.t :játékot STR_CARGO_PLURAL_SWEETS :Cukorka -STR_CARGO_PLURAL_CANDY.t :cukorkát +STR_CARGO_PLURAL_SWEETS.t :cukorkát STR_CARGO_PLURAL_COLA :Kóla STR_CARGO_PLURAL_COLA.t :kólát STR_CARGO_PLURAL_CANDYFLOSS :Vattacukor diff --git a/src/lang/latin.txt b/src/lang/latin.txt index a61630ede3..05f0b6abac 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -120,9 +120,9 @@ STR_CARGO_PLURAL_TOYS.gen :ludicrorum STR_CARGO_PLURAL_TOYS.acc :Ludicra STR_CARGO_PLURAL_TOYS.dat :Ludicris STR_CARGO_PLURAL_SWEETS :{G=np}Bellaria -STR_CARGO_PLURAL_CANDY.gen :bellariorum -STR_CARGO_PLURAL_CANDY.acc :Bellaria -STR_CARGO_PLURAL_CANDY.dat :Bellariis +STR_CARGO_PLURAL_SWEETS.gen :bellariorum +STR_CARGO_PLURAL_SWEETS.acc :Bellaria +STR_CARGO_PLURAL_SWEETS.dat :Bellariis STR_CARGO_PLURAL_COLA :{G=f}Cola STR_CARGO_PLURAL_COLA.gen :colae STR_CARGO_PLURAL_COLA.acc :Colam diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 8e78fb11d4..49219c9c21 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -195,12 +195,12 @@ STR_CARGO_PLURAL_TOYS.ka :žaislus STR_CARGO_PLURAL_TOYS.kuo :žaislais STR_CARGO_PLURAL_TOYS.kur :žaisluose STR_CARGO_PLURAL_SWEETS :Saldumynai -STR_CARGO_PLURAL_CANDY.kas :saldumynai -STR_CARGO_PLURAL_CANDY.ko :saldumynų -STR_CARGO_PLURAL_CANDY.kam :saldumynams -STR_CARGO_PLURAL_CANDY.ka :saldumynus -STR_CARGO_PLURAL_CANDY.kuo :saldumynais -STR_CARGO_PLURAL_CANDY.kur :saldumynuose +STR_CARGO_PLURAL_SWEETS.kas :saldumynai +STR_CARGO_PLURAL_SWEETS.ko :saldumynų +STR_CARGO_PLURAL_SWEETS.kam :saldumynams +STR_CARGO_PLURAL_SWEETS.ka :saldumynus +STR_CARGO_PLURAL_SWEETS.kuo :saldumynais +STR_CARGO_PLURAL_SWEETS.kur :saldumynuose STR_CARGO_PLURAL_COLA :Kola STR_CARGO_PLURAL_COLA.kas :kola STR_CARGO_PLURAL_COLA.ko :kolos diff --git a/src/lang/polish.txt b/src/lang/polish.txt index b7759eb719..d52d906291 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -189,12 +189,12 @@ STR_CARGO_PLURAL_TOYS.n :zabawkami STR_CARGO_PLURAL_TOYS.m :zabawkach STR_CARGO_PLURAL_TOYS.w :zabawki STR_CARGO_PLURAL_SWEETS :Słodycze -STR_CARGO_PLURAL_CANDY.d :słodyczy -STR_CARGO_PLURAL_CANDY.c :słodyczom -STR_CARGO_PLURAL_CANDY.b :słodycze -STR_CARGO_PLURAL_CANDY.n :słodyczami -STR_CARGO_PLURAL_CANDY.m :słodyczach -STR_CARGO_PLURAL_CANDY.w :słodycze +STR_CARGO_PLURAL_SWEETS.d :słodyczy +STR_CARGO_PLURAL_SWEETS.c :słodyczom +STR_CARGO_PLURAL_SWEETS.b :słodycze +STR_CARGO_PLURAL_SWEETS.n :słodyczami +STR_CARGO_PLURAL_SWEETS.m :słodyczach +STR_CARGO_PLURAL_SWEETS.w :słodycze STR_CARGO_PLURAL_COLA :Cola STR_CARGO_PLURAL_COLA.d :coli STR_CARGO_PLURAL_COLA.c :coli diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 24eef4e9ad..8ed26e1f4a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -97,8 +97,8 @@ STR_CARGO_PLURAL_TOYS :{G=p}Игруш STR_CARGO_PLURAL_TOYS.gen :игрушек STR_CARGO_PLURAL_TOYS.acc :игрушки STR_CARGO_PLURAL_SWEETS :{G=p}Конфеты -STR_CARGO_PLURAL_CANDY.gen :конфет -STR_CARGO_PLURAL_CANDY.acc :конфеты +STR_CARGO_PLURAL_SWEETS.gen :конфет +STR_CARGO_PLURAL_SWEETS.acc :конфеты STR_CARGO_PLURAL_COLA :{G=f}Кола STR_CARGO_PLURAL_COLA.gen :колы STR_CARGO_PLURAL_COLA.acc :колу diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index b6ec8e2d6e..3c3b6a2afb 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -120,9 +120,9 @@ STR_CARGO_PLURAL_TOYS.big :Igračke STR_CARGO_PLURAL_TOYS.gen :igračaka STR_CARGO_PLURAL_TOYS.aku :igračke STR_CARGO_PLURAL_SWEETS :slatkiši -STR_CARGO_PLURAL_CANDY.big :Slatkiši -STR_CARGO_PLURAL_CANDY.gen :slatkiša -STR_CARGO_PLURAL_CANDY.aku :slatkiše +STR_CARGO_PLURAL_SWEETS.big :Slatkiši +STR_CARGO_PLURAL_SWEETS.gen :slatkiša +STR_CARGO_PLURAL_SWEETS.aku :slatkiše STR_CARGO_PLURAL_COLA :kola STR_CARGO_PLURAL_COLA.big :Kola STR_CARGO_PLURAL_COLA.gen :kole diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 5a333b98c6..6fc4f02442 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -74,7 +74,7 @@ STR_CARGO_PLURAL_SUGAR.g :cukru STR_CARGO_PLURAL_TOYS :Hračky STR_CARGO_PLURAL_TOYS.g :hračiek STR_CARGO_PLURAL_SWEETS :Cukríky -STR_CARGO_PLURAL_CANDY.g :cukríkov +STR_CARGO_PLURAL_SWEETS.g :cukríkov STR_CARGO_PLURAL_COLA :Kofola STR_CARGO_PLURAL_COLA.g :kofoly STR_CARGO_PLURAL_CANDYFLOSS :Cukrová vata diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index e90de58c23..a83f3bb4d0 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -106,8 +106,8 @@ STR_CARGO_PLURAL_TOYS :Igrače STR_CARGO_PLURAL_TOYS.r :Igrač STR_CARGO_PLURAL_TOYS.d :Igračam STR_CARGO_PLURAL_SWEETS :Sladkarije -STR_CARGO_PLURAL_CANDY.r :Sladkarij -STR_CARGO_PLURAL_CANDY.d :Sladkarijam +STR_CARGO_PLURAL_SWEETS.r :Sladkarij +STR_CARGO_PLURAL_SWEETS.d :Sladkarijam STR_CARGO_PLURAL_COLA :Cockta STR_CARGO_PLURAL_COLA.r :Cockte STR_CARGO_PLURAL_COLA.d :Cockti diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index a0053615b4..7811c4e7f0 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -96,8 +96,8 @@ STR_CARGO_PLURAL_TOYS :іграшки STR_CARGO_PLURAL_TOYS.r :іграшок STR_CARGO_PLURAL_TOYS.z :іграшки STR_CARGO_PLURAL_SWEETS :солодощі -STR_CARGO_PLURAL_CANDY.r :солодощів -STR_CARGO_PLURAL_CANDY.z :солодощі +STR_CARGO_PLURAL_SWEETS.r :солодощів +STR_CARGO_PLURAL_SWEETS.z :солодощі STR_CARGO_PLURAL_COLA :кола STR_CARGO_PLURAL_COLA.r :коли STR_CARGO_PLURAL_COLA.z :колу From b7751c483e5545aa683baf0b9f09a0add34cfefd Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 22 Dec 2020 14:21:31 +0100 Subject: [PATCH 386/601] Feature: Influence industry production changes from GS (#7912) --- src/command.cpp | 3 ++ src/command_type.h | 1 + src/industry.h | 21 ++++++++++ src/industry_cmd.cpp | 51 +++++++++++++++++++++++- src/newgrf_industries.cpp | 3 ++ src/saveload/industry_sl.cpp | 1 + src/saveload/saveload.h | 2 + src/script/api/game_changelog.hpp | 4 ++ src/script/api/script_cargo.hpp | 1 + src/script/api/script_industry.cpp | 37 ++++++++++++++++++ src/script/api/script_industry.hpp | 63 ++++++++++++++++++++++++++++++ 11 files changed, 185 insertions(+), 2 deletions(-) diff --git a/src/command.cpp b/src/command.cpp index 453f305d38..9fbc6cae6a 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -97,6 +97,7 @@ CommandProc CmdInsertOrder; CommandProc CmdChangeServiceInt; CommandProc CmdBuildIndustry; +CommandProc CmdIndustryCtrl; CommandProc CmdSetCompanyManagerFace; CommandProc CmdSetCompanyColour; @@ -265,6 +266,8 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdChangeServiceInt, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_CHANGE_SERVICE_INT DEF_CMD(CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_INDUSTRY + DEF_CMD(CmdIndustryCtrl, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_INDUSTRY_CTRL + DEF_CMD(CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_MANAGER_FACE DEF_CMD(CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_COLOUR diff --git a/src/command_type.h b/src/command_type.h index 04dbfe893c..0620b96b63 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -230,6 +230,7 @@ enum Commands { CMD_CHANGE_SERVICE_INT, ///< change the server interval of a vehicle CMD_BUILD_INDUSTRY, ///< build a new industry + CMD_INDUSTRY_CTRL, ///< change industry properties CMD_SET_COMPANY_MANAGER_FACE, ///< set the manager's face of the company CMD_SET_COMPANY_COLOUR, ///< set the colour of the company diff --git a/src/industry.h b/src/industry.h index e82033dd13..feee6f2008 100644 --- a/src/industry.h +++ b/src/industry.h @@ -34,6 +34,26 @@ enum ProductionLevels { PRODLEVEL_MAXIMUM = 0x80, ///< the industry is running at full speed }; +/** + * Flags to control/override the behaviour of an industry. + * These flags are controlled by game scripts. + */ +enum IndustryControlFlags : byte { + /** No flags in effect */ + INDCTL_NONE = 0, + /** When industry production change is evaluated, rolls to decrease are ignored. */ + INDCTL_NO_PRODUCTION_DECREASE = 1 << 0, + /** When industry production change is evaluated, rolls to increase are ignored. */ + INDCTL_NO_PRODUCTION_INCREASE = 1 << 1, + /** + * Industry can not close regardless of production level or time since last delivery. + * This does not prevent a closure already announced. */ + INDCTL_NO_CLOSURE = 1 << 2, + /** Mask of all flags set */ + INDCTL_MASK = INDCTL_NO_PRODUCTION_DECREASE | INDCTL_NO_PRODUCTION_INCREASE | INDCTL_NO_CLOSURE, +}; +DECLARE_ENUM_AS_BIT_SET(IndustryControlFlags); + /** * Defines the internal data of a functional industry. */ @@ -59,6 +79,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { byte random_colour; ///< randomized colour of the industry, for display purpose Year last_prod_year; ///< last year of production byte was_cargo_delivered; ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry + IndustryControlFlags ctlflags; ///< flags overriding standard behaviours PartOfSubsidy part_of_subsidy; ///< NOSAVE: is this industry a source/destination of a subsidy? StationList stations_near; ///< NOSAVE: List of nearby stations. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index b8b92e5bf9..420244e6dc 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1753,6 +1753,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, i->was_cargo_delivered = false; i->last_prod_year = _cur_year; i->founder = founder; + i->ctlflags = INDCTL_NONE; i->construction_date = _date; i->construction_type = (_game_mode == GM_EDITOR) ? ICT_SCENARIO_EDITOR : @@ -2049,6 +2050,43 @@ CommandCost CmdBuildIndustry(TileIndex tile, DoCommandFlag flags, uint32 p1, uin return CommandCost(EXPENSES_OTHER, indspec->GetConstructionCost()); } +/** + * Change industry properties + * @param tile Unused. + * @param flags Type of operation. + * @param p1 IndustryID + * @param p2 various bitstuffed elements + * - p2 = (bit 0 - 7) - action to perform: + * 0 = set control flags + * - p2 = (bit 8 - 15) - IndustryControlFlags + * (only used with set control flags) + * @param text unused + * @return Empty cost or an error. + */ +CommandCost CmdIndustryCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + if (_current_company != OWNER_DEITY) return CMD_ERROR; + + Industry *ind = Industry::GetIfValid(p1); + if (ind == nullptr) return CMD_ERROR; + + uint8 action = GB(p2, 0, 8); + + switch (action) { + case 0: { + IndustryControlFlags ctlflags = (IndustryControlFlags)GB(p2, 8, 8) & INDCTL_MASK; + + if (flags & DC_EXEC) ind->ctlflags = ctlflags; + + break; + } + + default: + NOT_REACHED(); + } + + return CommandCost(); +} /** * Create a new industry of random layout. @@ -2659,7 +2697,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) } } } else if (_settings_game.economy.type == ET_SMOOTH) { - closeit = true; + closeit = !(i->ctlflags & (INDCTL_NO_CLOSURE | INDCTL_NO_PRODUCTION_DECREASE)); for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] == CT_INVALID) continue; uint32 r = Random(); @@ -2692,6 +2730,10 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) new_prod = Clamp(new_prod, 0, 16); } + /* If override flags are set, prevent actually changing production if any was decided on */ + if ((i->ctlflags & INDCTL_NO_PRODUCTION_DECREASE) && new_prod < old_prod) continue; + if ((i->ctlflags & INDCTL_NO_PRODUCTION_INCREASE) && new_prod > old_prod) continue; + /* Do not stop closing the industry when it has the lowest possible production rate */ if (new_prod == old_prod && old_prod > 1) { closeit = false; @@ -2711,6 +2753,10 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) } } + /* If override flags are set, prevent actually changing production if any was decided on */ + if ((i->ctlflags & INDCTL_NO_PRODUCTION_DECREASE) && (div > 0 || increment < 0)) return; + if ((i->ctlflags & INDCTL_NO_PRODUCTION_INCREASE) && (mul > 0 || increment > 0)) return; + if (!callback_enabled && (indspec->life_type & INDUSTRYLIFE_PROCESSING)) { if ( (byte)(_cur_year - i->last_prod_year) >= 5 && Chance16(1, original_economy ? 2 : 180)) { closeit = true; @@ -2728,6 +2774,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) while (div-- != 0 && !closeit) { if (i->prod_level == PRODLEVEL_MINIMUM) { closeit = true; + break; } else { i->prod_level = max(i->prod_level / 2, (int)PRODLEVEL_MINIMUM); // typecast to int required to please MSVC recalculate_multipliers = true; @@ -2750,7 +2797,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) if (recalculate_multipliers) i->RecomputeProductionMultipliers(); /* Close if needed and allowed */ - if (closeit && !CheckIndustryCloseDownProtection(i->type)) { + if (closeit && !CheckIndustryCloseDownProtection(i->type) && !(i->ctlflags & INDCTL_NO_CLOSURE)) { i->prod_level = PRODLEVEL_CLOSURE; SetWindowDirty(WC_INDUSTRY_VIEW, i->index); str = indspec->closure_text; diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index a8748a4953..2dbe907dee 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -248,6 +248,9 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout case 0x46: return this->industry->construction_date; // Date when built - long format - (in days) + /* Override flags from GS */ + case 0x47: return this->industry->ctlflags; + /* Get industry ID at offset param */ case 0x60: return GetIndustryIDAtOffset(GetNearbyTile(parameter, this->industry->location.tile, false), this->industry, this->ro.grffile->grfid); diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index f5b1464c1e..8f7301120b 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -56,6 +56,7 @@ static const SaveLoad _industry_desc[] = { SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8), + SLE_CONDVAR(Industry, ctlflags, SLE_UINT8, SLV_GS_INDUSTRY_CONTROL, SL_MAX_VERSION), SLE_CONDVAR(Industry, founder, SLE_UINT8, SLV_70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_date, SLE_INT32, SLV_70, SL_MAX_VERSION), diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 7fa91a5095..0b525570d7 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -320,6 +320,8 @@ enum SaveLoadVersion : uint16 { SLV_START_PATCHPACKS, ///< 220 First known patchpack to use a version just above ours. SLV_END_PATCHPACKS = 286, ///< 286 Last known patchpack to use a version just above ours. + SLV_GS_INDUSTRY_CONTROL, ///< 287 PR#7912 GS industry control. + SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index fc917a0120..abc9e9c35e 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -21,6 +21,10 @@ * \li GSEventStoryPageButtonClick * \li GSEventStoryPageTileSelect * \li GSEventStoryPageVehicleSelect + * \li GSIndustry::GetCargoLastAcceptedDate + * \li GSIndustry::GetControlFlags + * \li GSIndustry::GetLastProductionYear + * \li GSIndustry::SetControlFlags * \li GSStoryPage::MakePushButtonReference * \li GSStoryPage::MakeTileButtonReference * \li GSStoryPage::MakeVehicleButtonReference diff --git a/src/script/api/script_cargo.hpp b/src/script/api/script_cargo.hpp index 4aab97c70e..9ecd4cbfb2 100644 --- a/src/script/api/script_cargo.hpp +++ b/src/script/api/script_cargo.hpp @@ -57,6 +57,7 @@ public: /* Note: these values represent part of the in-game CargoTypes enum */ CT_AUTO_REFIT = ::CT_AUTO_REFIT, ///< Automatically choose cargo type when doing auto-refitting. CT_NO_REFIT = ::CT_NO_REFIT, ///< Do not refit cargo of a vehicle. + CT_INVALID = ::CT_INVALID, ///< An invalid cargo type. }; /** diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp index 4d1e91a3ce..c2b449b0ba 100644 --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -16,6 +16,7 @@ #include "../../station_base.h" #include "../../newgrf_industries.h" #include "table/strings.h" +#include #include "../../safeguards.h" @@ -204,3 +205,39 @@ return ::Industry::Get(industry_id)->type; } + +int32 ScriptIndustry::GetLastProductionYear(IndustryID industry_id) +{ + Industry *i = Industry::GetIfValid(industry_id); + if (i == nullptr) return 0; + return i->last_prod_year; +} + +ScriptDate::Date ScriptIndustry::GetCargoLastAcceptedDate(IndustryID industry_id, CargoID cargo_type) +{ + Industry *i = Industry::GetIfValid(industry_id); + if (i == nullptr) return ScriptDate::DATE_INVALID; + + if (cargo_type == CT_INVALID) { + return (ScriptDate::Date)std::accumulate(std::begin(i->last_cargo_accepted_at), std::end(i->last_cargo_accepted_at), 0, [](Date a, Date b) { return std::max(a, b); }); + } else { + int index = i->GetCargoAcceptedIndex(cargo_type); + if (index < 0) return ScriptDate::DATE_INVALID; + return (ScriptDate::Date)i->last_cargo_accepted_at[index]; + } +} + +uint32 ScriptIndustry::GetControlFlags(IndustryID industry_id) +{ + Industry *i = Industry::GetIfValid(industry_id); + if (i == nullptr) return 0; + return i->ctlflags; +} + +bool ScriptIndustry::SetControlFlags(IndustryID industry_id, uint32 control_flags) +{ + if (ScriptObject::GetCompany() != OWNER_DEITY) return false; + if (!IsValidIndustry(industry_id)) return false; + + return ScriptObject::DoCommand(0, industry_id, 0 | ((control_flags & ::INDCTL_MASK) << 8), CMD_INDUSTRY_CTRL); +} diff --git a/src/script/api/script_industry.hpp b/src/script/api/script_industry.hpp index 98c7d33ac3..2fbd861cc5 100644 --- a/src/script/api/script_industry.hpp +++ b/src/script/api/script_industry.hpp @@ -11,6 +11,8 @@ #define SCRIPT_INDUSTRY_HPP #include "script_object.hpp" +#include "script_date.hpp" +#include "../../industry.h" /** * Class that handles all industry related functions. @@ -25,6 +27,27 @@ public: CAS_TEMP_REFUSED, ///< The industry temporarily refuses to accept this CargoID but may do so again in the future. }; + /** + * Control flags for industry + * @api -ai + */ + enum IndustryControlFlags { + /** + * When industry production change is evaluated, rolls to decrease are ignored. + * This also prevents industry closure due to production dropping to the lowest level. + */ + INDCTL_NO_PRODUCTION_DECREASE = ::INDCTL_NO_PRODUCTION_DECREASE, + /** + * When industry production change is evaluated, rolls to increase are ignored. + */ + INDCTL_NO_PRODUCTION_INCREASE = ::INDCTL_NO_PRODUCTION_INCREASE, + /** + * Industry can not close regardless of production level or time since last delivery. + * This does not prevent a closure already announced. + */ + INDCTL_NO_CLOSURE = ::INDCTL_NO_CLOSURE, + }; + /** * Gets the number of industries. * @return The number of industries. @@ -196,6 +219,46 @@ public: * @return The IndustryType of the industry. */ static IndustryType GetIndustryType(IndustryID industry_id); + + /** + * Get the last year this industry had any production output. + * @param industry_id The index of the industry. + * @pre IsValidIndustry(industry_id). + * @return Year the industry last had production, 0 if error. + * @api -ai + */ + static int32 GetLastProductionYear(IndustryID industry_id); + + /** + * Get the last date this industry accepted any cargo delivery. + * @param industry_id The index of the industry. + * @param cargo_type The cargo to query, or CT_INVALID to query latest of all accepted cargoes. + * @pre IsValidIndustry(industry_id). + * @pre IsValidCargo(cargo_type) || cargo_type == CT_INVALID. + * @return Date the industry last received cargo from a delivery, or ScriptDate::DATE_INVALID on error. + * @api -ai + */ + static ScriptDate::Date GetCargoLastAcceptedDate(IndustryID industry_id, CargoID cargo_type); + + /** + * Get the current control flags for an industry. + * @param industry_id The index of the industry. + * @pre IsValidIndustry(industry_id). + * @return Bit flags of the IndustryControlFlags enumeration. + * @api -ai + */ + static uint32 GetControlFlags(IndustryID industry_id); + + /** + * Change the control flags for an industry. + * @param industry_id The index of the industry. + * @param control_flags New flags as a combination of IndustryControlFlags values. + * @pre IsValidIndustry(industry_id). + * @pre No ScriptCompanyMode may be in scope. + * @return True if the action succeeded. + * @api -ai + */ + static bool SetControlFlags(IndustryID industry_id, uint32 control_flags); }; #endif /* SCRIPT_INDUSTRY_HPP */ From 9a45a0f535e312cd97db12c3a2ec1068fa381136 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Tue, 22 Dec 2020 16:29:48 +0300 Subject: [PATCH 387/601] Feature: Set exclusive access to industry from GS (#8115) --- src/economy.cpp | 2 ++ src/economy_func.h | 2 +- src/industry.h | 2 ++ src/industry_cmd.cpp | 32 +++++++++++++++++++++- src/saveload/afterload.cpp | 8 ++++++ src/saveload/industry_sl.cpp | 2 ++ src/saveload/saveload.h | 2 +- src/script/api/game_changelog.hpp | 4 +++ src/script/api/script_industry.cpp | 41 ++++++++++++++++++++++++++++ src/script/api/script_industry.hpp | 44 +++++++++++++++++++++++++++++- src/station_cmd.cpp | 3 +- 11 files changed, 137 insertions(+), 5 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 7c801e854d..5e53334a0e 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1042,6 +1042,8 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n /* Check if industry temporarily refuses acceptance */ if (IndustryTemporarilyRefusesCargo(ind, cargo_type)) continue; + if (ind->exclusive_supplier != INVALID_OWNER && ind->exclusive_supplier != st->owner) continue; + /* Insert the industry into _cargo_delivery_destinations, if not yet contained */ include(_cargo_delivery_destinations, ind); diff --git a/src/economy_func.h b/src/economy_func.h index d26b344e9a..69980b4758 100644 --- a/src/economy_func.h +++ b/src/economy_func.h @@ -29,7 +29,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update); void StartupIndustryDailyChanges(bool init_counter); Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type); -uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, SourceID source_id, const StationList *all_stations); +uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, SourceID source_id, const StationList *all_stations, Owner exclusivity = INVALID_OWNER); void PrepareUnload(Vehicle *front_v); void LoadUnloadStation(Station *st); diff --git a/src/industry.h b/src/industry.h index feee6f2008..ea4d704a87 100644 --- a/src/industry.h +++ b/src/industry.h @@ -90,6 +90,8 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { uint8 construction_type; ///< Way the industry was constructed (@see IndustryConstructionType) Date last_cargo_accepted_at[INDUSTRY_NUM_INPUTS]; ///< Last day each cargo type was accepted by this industry byte selected_layout; ///< Which tile layout was used when creating the industry + Owner exclusive_supplier; ///< Which company has exclusive rights to deliver cargo (INVALID_OWNER = anyone) + Owner exclusive_consumer; ///< Which company has exclusive rights to take cargo (INVALID_OWNER = anyone) uint16 random; ///< Random value used for randomisation of all kinds of things diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 420244e6dc..92741e3f69 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -17,6 +17,7 @@ #include "town.h" #include "news_func.h" #include "cheat_type.h" +#include "company_base.h" #include "genworld.h" #include "tree_map.h" #include "newgrf_cargo.h" @@ -539,7 +540,7 @@ static bool TransportIndustryGoods(TileIndex tile) i->this_month_production[j] += cw; - uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, &i->stations_near); + uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, &i->stations_near, i->exclusive_consumer); i->this_month_transported[j] += am; moved_cargo |= (am != 0); @@ -946,6 +947,9 @@ static void ChangeTileOwner_Industry(TileIndex tile, Owner old_owner, Owner new_ /* If the founder merges, the industry was created by the merged company */ Industry *i = Industry::GetByTile(tile); if (i->founder == old_owner) i->founder = (new_owner == INVALID_OWNER) ? OWNER_NONE : new_owner; + + if (i->exclusive_supplier == old_owner) i->exclusive_supplier = new_owner; + if (i->exclusive_consumer == old_owner) i->exclusive_consumer = new_owner; } /** @@ -1764,6 +1768,9 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, * else, chosen layout + 1 */ i->selected_layout = (byte)(layout_index + 1); + i->exclusive_supplier = INVALID_OWNER; + i->exclusive_consumer = INVALID_OWNER; + i->prod_level = PRODLEVEL_DEFAULT; /* Call callbacks after the regular fields got initialised. */ @@ -2058,8 +2065,13 @@ CommandCost CmdBuildIndustry(TileIndex tile, DoCommandFlag flags, uint32 p1, uin * @param p2 various bitstuffed elements * - p2 = (bit 0 - 7) - action to perform: * 0 = set control flags + * 1 = set exclusive supplier + * 2 = set exclusive consumer * - p2 = (bit 8 - 15) - IndustryControlFlags * (only used with set control flags) + * - p2 = (bit 16 - 23) - CompanyID to set or INVALID_OWNER (available to everyone) or + * OWNER_NONE (neutral stations only) or OWNER_DEITY (no one) + * (only used with set exclusive supplier / consumer) * @param text unused * @return Empty cost or an error. */ @@ -2081,6 +2093,24 @@ CommandCost CmdIndustryCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint break; } + case 1: + case 2: { + Owner company_id = (Owner)GB(p2, 16, 8); + + if (company_id != OWNER_NONE && company_id != INVALID_OWNER && company_id != OWNER_DEITY + && !Company::IsValidID(company_id)) return CMD_ERROR; + + if (flags & DC_EXEC) { + if (action == 1) { + ind->exclusive_supplier = company_id; + } else { + ind->exclusive_consumer = company_id; + } + } + + break; + } + default: NOT_REACHED(); } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 7d1e70212a..c617348d73 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3125,6 +3125,14 @@ bool AfterLoadGame() } } + /* Make sure all industries exclusive supplier/consumer set correctly. */ + if (IsSavegameVersionBefore(SLV_GS_INDUSTRY_CONTROL)) { + for (Industry *i : Industry::Iterate()) { + i->exclusive_supplier = INVALID_OWNER; + i->exclusive_consumer = INVALID_OWNER; + } + } + /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */ Station::RecomputeCatchmentForAll(); diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 8f7301120b..99e25856c8 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -64,6 +64,8 @@ static const SaveLoad _industry_desc[] = { SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, SLV_73, SL_MAX_VERSION), + SLE_CONDVAR(Industry, exclusive_supplier, SLE_UINT8, SLV_GS_INDUSTRY_CONTROL, SL_MAX_VERSION), + SLE_CONDVAR(Industry, exclusive_consumer, SLE_UINT8, SLV_GS_INDUSTRY_CONTROL, SL_MAX_VERSION), SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, SLV_76, SLV_161), SLE_CONDREF(Industry, psa, REF_STORAGE, SLV_161, SL_MAX_VERSION), diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 0b525570d7..58a2919326 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -320,7 +320,7 @@ enum SaveLoadVersion : uint16 { SLV_START_PATCHPACKS, ///< 220 First known patchpack to use a version just above ours. SLV_END_PATCHPACKS = 286, ///< 286 Last known patchpack to use a version just above ours. - SLV_GS_INDUSTRY_CONTROL, ///< 287 PR#7912 GS industry control. + SLV_GS_INDUSTRY_CONTROL, ///< 287 PR#7912 and PR#8115 GS industry control. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index abc9e9c35e..1f43cdea1c 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -23,8 +23,12 @@ * \li GSEventStoryPageVehicleSelect * \li GSIndustry::GetCargoLastAcceptedDate * \li GSIndustry::GetControlFlags + * \li GSIndustry::GetExclusiveConsumer + * \li GSIndustry::GetExclusiveSupplier * \li GSIndustry::GetLastProductionYear * \li GSIndustry::SetControlFlags + * \li GSIndustry::SetExclusiveConsumer + * \li GSIndustry::SetExclusiveSupplier * \li GSStoryPage::MakePushButtonReference * \li GSStoryPage::MakeTileButtonReference * \li GSStoryPage::MakeVehicleButtonReference diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp index c2b449b0ba..14ba8e4022 100644 --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -10,7 +10,10 @@ #include "../../stdafx.h" #include "script_industry.hpp" #include "script_cargo.hpp" +#include "script_company.hpp" +#include "script_error.hpp" #include "script_map.hpp" +#include "../../company_base.h" #include "../../industry.h" #include "../../strings_func.h" #include "../../station_base.h" @@ -241,3 +244,41 @@ bool ScriptIndustry::SetControlFlags(IndustryID industry_id, uint32 control_flag return ScriptObject::DoCommand(0, industry_id, 0 | ((control_flags & ::INDCTL_MASK) << 8), CMD_INDUSTRY_CTRL); } + +/* static */ ScriptCompany::CompanyID ScriptIndustry::GetExclusiveSupplier(IndustryID industry_id) +{ + if (!IsValidIndustry(industry_id)) return ScriptCompany::COMPANY_INVALID; + + auto company_id = ::Industry::Get(industry_id)->exclusive_supplier; + if (!::Company::IsValidID(company_id)) return ScriptCompany::COMPANY_INVALID; + + return (ScriptCompany::CompanyID)((byte)company_id); +} + +/* static */ bool ScriptIndustry::SetExclusiveSupplier(IndustryID industry_id, ScriptCompany::CompanyID company_id) +{ + EnforcePrecondition(false, IsValidIndustry(industry_id)); + + auto company = ScriptCompany::ResolveCompanyID(company_id); + ::Owner owner = (company == ScriptCompany::COMPANY_INVALID ? ::INVALID_OWNER : (::Owner)company); + return ScriptObject::DoCommand(0, industry_id, 1 | (((uint8)owner) << 16), CMD_INDUSTRY_CTRL); +} + +/* static */ ScriptCompany::CompanyID ScriptIndustry::GetExclusiveConsumer(IndustryID industry_id) +{ + if (!IsValidIndustry(industry_id)) return ScriptCompany::COMPANY_INVALID; + + auto company_id = ::Industry::Get(industry_id)->exclusive_consumer; + if (!::Company::IsValidID(company_id)) return ScriptCompany::COMPANY_INVALID; + + return (ScriptCompany::CompanyID)((byte)company_id); +} + +/* static */ bool ScriptIndustry::SetExclusiveConsumer(IndustryID industry_id, ScriptCompany::CompanyID company_id) +{ + EnforcePrecondition(false, IsValidIndustry(industry_id)); + + auto company = ScriptCompany::ResolveCompanyID(company_id); + ::Owner owner = (company == ScriptCompany::COMPANY_INVALID ? ::INVALID_OWNER : (::Owner)company); + return ScriptObject::DoCommand(0, industry_id, 2 | (((uint8)owner) << 16), CMD_INDUSTRY_CTRL); +} diff --git a/src/script/api/script_industry.hpp b/src/script/api/script_industry.hpp index 2fbd861cc5..dac3d32fd7 100644 --- a/src/script/api/script_industry.hpp +++ b/src/script/api/script_industry.hpp @@ -10,8 +10,9 @@ #ifndef SCRIPT_INDUSTRY_HPP #define SCRIPT_INDUSTRY_HPP -#include "script_object.hpp" +#include "script_company.hpp" #include "script_date.hpp" +#include "script_object.hpp" #include "../../industry.h" /** @@ -259,6 +260,47 @@ public: * @api -ai */ static bool SetControlFlags(IndustryID industry_id, uint32 control_flags); + + /** + * Find out which company currently has the exclusive rights to deliver cargo to the industry. + * @param industry_id The index of the industry. + * @pre IsValidIndustry(industry_id). + * @return The company that has the exclusive rights. The value + * ScriptCompany::COMPANY_INVALID means that there are currently no + * exclusive rights given out to anyone. + */ + static ScriptCompany::CompanyID GetExclusiveSupplier(IndustryID industry_id); + + /** + * Sets or resets the company that has exclusive right to deliver cargo to the industry. + * @param industry_id The index of the industry. + * @param company_id The company to set (ScriptCompany::COMPANY_INVALID to reset). + * @pre IsValidIndustry(industry_id). + * @return True if the action succeeded. + * @api -ai + */ + static bool SetExclusiveSupplier(IndustryID industry_id, ScriptCompany::CompanyID company_id); + + /** + * Find out which company currently has the exclusive rights to take cargo from the industry. + * @param industry_id The index of the industry. + * @pre IsValidIndustry(industry_id). + * @return The company that has the exclusive rights. The value + * ScriptCompany::COMPANY_SPECTATOR means that there are currently no + * exclusive rights given out to anyone. + */ + static ScriptCompany::CompanyID GetExclusiveConsumer(IndustryID industry_id); + + /** + * Sets or resets the company that has exclusive right to take cargo from the industry. + * @param industry_id The index of the industry. + * @param company_id The company to set (ScriptCompany::COMPANY_INVALID to reset). + * @pre IsValidIndustry(industry_id). + * @return True if the action succeeded. + * @api -ai + */ + static bool SetExclusiveConsumer(IndustryID industry_id, ScriptCompany::CompanyID company_id); + }; #endif /* SCRIPT_INDUSTRY_HPP */ diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 7bce21353d..cd56dcb698 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4013,7 +4013,7 @@ static bool CanMoveGoodsToStation(const Station *st, CargoID type) return true; } -uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, SourceID source_id, const StationList *all_stations) +uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, SourceID source_id, const StationList *all_stations, Owner exclusivity) { /* Return if nothing to do. Also the rounding below fails for 0. */ if (all_stations->empty()) return 0; @@ -4024,6 +4024,7 @@ uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, Sourc std::vector used_stations; for (Station *st : *all_stations) { + if (exclusivity != INVALID_OWNER && exclusivity != st->owner) continue; if (!CanMoveGoodsToStation(st, type)) continue; /* Avoid allocating a vector if there is only one station to significantly From 0c5dc5d41eff0ac0a62dd67882a718bb3c99ec3a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 22 Jan 2019 18:31:08 +0000 Subject: [PATCH 388/601] Change: [Linkgraph] Pause the game when linkgraph jobs lag (#6470) Check if the job is still running two date fract ticks before it is due to join, and if so pause the game until its done. When loading a game, check if the game would block immediately due to a job which is scheduled to be joined within two date fract ticks, and if so pause the game until its done. This avoids the main thread being blocked on a thread join, which appears to the user as if the game is unresponsive, as the UI does not repaint and cannot be interacted with. Show if pause is due to link graph job in status bar, update network messages. This does not apply for network clients. --- src/lang/english.txt | 3 ++ src/linkgraph/linkgraphjob.cpp | 3 +- src/linkgraph/linkgraphjob.h | 13 +++++- src/linkgraph/linkgraphschedule.cpp | 62 ++++++++++++++++++++++++++++- src/linkgraph/linkgraphschedule.h | 4 ++ src/misc_cmd.cpp | 1 + src/network/network.cpp | 5 ++- src/openttd.cpp | 4 ++ src/openttd.h | 1 + src/saveload/linkgraph_sl.cpp | 5 +++ src/statusbar_gui.cpp | 3 +- 11 files changed, 98 insertions(+), 6 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 7d7af8d853..04399d9a45 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -780,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Display STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Show last message or news report STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSED * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSED (waiting for link graph update) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * * @@ -2217,11 +2218,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Game still paus STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Game still paused ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Game still paused ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Game still paused ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Game still paused ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Game unpaused ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :number of players STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :connecting clients STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :game script +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :waiting for link graph update ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :leaving STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {RAW_STRING} has joined the game diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index 2d7b407da7..c66ddeac79 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -37,7 +37,8 @@ LinkGraphJob::LinkGraphJob(const LinkGraph &orig) : * This is on purpose. */ link_graph(orig), settings(_settings_game.linkgraph), - join_date(_date + _settings_game.linkgraph.recalc_time) + join_date(_date + _settings_game.linkgraph.recalc_time), + job_completed(false) { } diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h index cd7ece4b1e..ab5e07fb18 100644 --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -13,6 +13,7 @@ #include "../thread.h" #include "linkgraph.h" #include +#include class LinkGraphJob; class Path; @@ -61,6 +62,7 @@ protected: Date join_date; ///< Date when the job is to be joined. NodeAnnotationVector nodes; ///< Extra node data necessary for link graph calculation. EdgeAnnotationMatrix edges; ///< Extra edge data necessary for link graph calculation. + std::atomic job_completed; ///< Is the job still running. This is accessed by multiple threads and reads may be stale. void EraseFlows(NodeID from); void JoinThread(); @@ -265,18 +267,25 @@ public: * settings have to be brutally const-casted in order to populate them. */ LinkGraphJob() : settings(_settings_game.linkgraph), - join_date(INVALID_DATE) {} + join_date(INVALID_DATE), job_completed(false) {} LinkGraphJob(const LinkGraph &orig); ~LinkGraphJob(); void Init(); + /** + * Check if job has actually finished. + * This is allowed to spuriously return an incorrect value. + * @return True if job has actually finished. + */ + inline bool IsJobCompleted() const { return this->job_completed.load(std::memory_order_acquire); } + /** * Check if job is supposed to be finished. * @return True if job should be finished by now, false if not. */ - inline bool IsFinished() const { return this->join_date <= _date; } + inline bool IsScheduledToBeJoined() const { return this->join_date <= _date; } /** * Get the date when the job should be finished. diff --git a/src/linkgraph/linkgraphschedule.cpp b/src/linkgraph/linkgraphschedule.cpp index 964744509e..2638b77ea8 100644 --- a/src/linkgraph/linkgraphschedule.cpp +++ b/src/linkgraph/linkgraphschedule.cpp @@ -14,6 +14,7 @@ #include "mcf.h" #include "flowmapper.h" #include "../framerate_type.h" +#include "../command_func.h" #include "../safeguards.h" @@ -48,6 +49,17 @@ void LinkGraphSchedule::SpawnNext() } } +/** + * Check if the next job is supposed to be finished, but has not yet completed. + * @return True if job should be finished by now but is still running, false if not. + */ +bool LinkGraphSchedule::IsJoinWithUnfinishedJobDue() const +{ + if (this->running.empty()) return false; + const LinkGraphJob *next = this->running.front(); + return next->IsScheduledToBeJoined() && !next->IsJobCompleted(); +} + /** * Join the next finished job, if available. */ @@ -55,7 +67,7 @@ void LinkGraphSchedule::JoinNext() { if (this->running.empty()) return; LinkGraphJob *next = this->running.front(); - if (!next->IsFinished()) return; + if (!next->IsScheduledToBeJoined()) return; this->running.pop_front(); LinkGraphID id = next->LinkGraphIndex(); delete next; // implicitly joins the thread @@ -75,6 +87,18 @@ void LinkGraphSchedule::JoinNext() for (uint i = 0; i < lengthof(instance.handlers); ++i) { instance.handlers[i]->Run(*job); } + + /* + * Readers of this variable in another thread may see an out of date value. + * However this is OK as this will only happen just as a job is completing, + * and the real synchronisation is provided by the thread join operation. + * In the worst case the main thread will be paused for longer than + * strictly necessary before joining. + * This is just a hint variable to avoid performing the join excessively + * early and blocking the main thread. + */ + + job->job_completed.store(true, std::memory_order_release); } /** @@ -135,6 +159,42 @@ LinkGraphSchedule::~LinkGraphSchedule() } } +/** + * Pause the game if in 2 _date_fract ticks, we would do a join with the next + * link graph job, but it is still running. + * The check is done 2 _date_fract ticks early instead of 1, as in multiplayer + * calls to DoCommandP are executed after a delay of 1 _date_fract tick. + * If we previously paused, unpause if the job is now ready to be joined with. + */ +void StateGameLoop_LinkGraphPauseControl() +{ + if (_pause_mode & PM_PAUSED_LINK_GRAPH) { + /* We are paused waiting on a job, check the job every tick. */ + if (!LinkGraphSchedule::instance.IsJoinWithUnfinishedJobDue()) { + DoCommandP(0, PM_PAUSED_LINK_GRAPH, 0, CMD_PAUSE); + } + } else if (_pause_mode == PM_UNPAUSED && + _date_fract == LinkGraphSchedule::SPAWN_JOIN_TICK - 2 && + _date % _settings_game.linkgraph.recalc_interval == _settings_game.linkgraph.recalc_interval / 2 && + LinkGraphSchedule::instance.IsJoinWithUnfinishedJobDue()) { + /* Perform check two _date_fract ticks before we would join, to make + * sure it also works in multiplayer. */ + DoCommandP(0, PM_PAUSED_LINK_GRAPH, 1, CMD_PAUSE); + } +} + +/** + * Pause the game on load if we would do a join with the next link graph job, + * but it is still running, and it would not be caught by a call to + * StateGameLoop_LinkGraphPauseControl(). + */ +void AfterLoad_LinkGraphPauseControl() +{ + if (LinkGraphSchedule::instance.IsJoinWithUnfinishedJobDue()) { + _pause_mode |= PM_PAUSED_LINK_GRAPH; + } +} + /** * Spawn or join a link graph job or compress a link graph if any link graph is * due to do so. diff --git a/src/linkgraph/linkgraphschedule.h b/src/linkgraph/linkgraphschedule.h index 62ca2b0c17..6a6dff697f 100644 --- a/src/linkgraph/linkgraphschedule.h +++ b/src/linkgraph/linkgraphschedule.h @@ -55,6 +55,7 @@ public: static void Clear(); void SpawnNext(); + bool IsJoinWithUnfinishedJobDue() const; void JoinNext(); void SpawnAll(); void ShiftDates(int interval); @@ -76,4 +77,7 @@ public: void Unqueue(LinkGraph *lg) { this->schedule.remove(lg); } }; +void StateGameLoop_LinkGraphPauseControl(); +void AfterLoad_LinkGraphPauseControl(); + #endif /* LINKGRAPHSCHEDULE_H */ diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp index 63dfb15253..2b32c06bfe 100644 --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -150,6 +150,7 @@ CommandCost CmdPause(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, case PM_PAUSED_ERROR: case PM_PAUSED_NORMAL: case PM_PAUSED_GAME_SCRIPT: + case PM_PAUSED_LINK_GRAPH: break; case PM_PAUSED_JOIN: diff --git a/src/network/network.cpp b/src/network/network.cpp index a100b6b959..da341f253f 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -342,7 +342,8 @@ void NetworkHandlePauseChange(PauseMode prev_mode, PauseMode changed_mode) case PM_PAUSED_NORMAL: case PM_PAUSED_JOIN: case PM_PAUSED_GAME_SCRIPT: - case PM_PAUSED_ACTIVE_CLIENTS: { + case PM_PAUSED_ACTIVE_CLIENTS: + case PM_PAUSED_LINK_GRAPH: { bool changed = ((_pause_mode == PM_UNPAUSED) != (prev_mode == PM_UNPAUSED)); bool paused = (_pause_mode != PM_UNPAUSED); if (!paused && !changed) return; @@ -355,6 +356,7 @@ void NetworkHandlePauseChange(PauseMode prev_mode, PauseMode changed_mode) if ((_pause_mode & PM_PAUSED_JOIN) != PM_UNPAUSED) SetDParam(++i, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS); if ((_pause_mode & PM_PAUSED_GAME_SCRIPT) != PM_UNPAUSED) SetDParam(++i, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT); if ((_pause_mode & PM_PAUSED_ACTIVE_CLIENTS) != PM_UNPAUSED) SetDParam(++i, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS); + if ((_pause_mode & PM_PAUSED_LINK_GRAPH) != PM_UNPAUSED) SetDParam(++i, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH); str = STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 + i; } else { switch (changed_mode) { @@ -362,6 +364,7 @@ void NetworkHandlePauseChange(PauseMode prev_mode, PauseMode changed_mode) case PM_PAUSED_JOIN: SetDParam(0, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS); break; case PM_PAUSED_GAME_SCRIPT: SetDParam(0, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT); break; case PM_PAUSED_ACTIVE_CLIENTS: SetDParam(0, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS); break; + case PM_PAUSED_LINK_GRAPH: SetDParam(0, STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH); break; default: NOT_REACHED(); } str = paused ? STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED : STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED; diff --git a/src/openttd.cpp b/src/openttd.cpp index 9cc5d2f205..e4fcf40e94 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1355,6 +1355,10 @@ static void CheckCaches() */ void StateGameLoop() { + if (!_networking || _network_server) { + StateGameLoop_LinkGraphPauseControl(); + } + /* don't execute the state loop during pause */ if (_pause_mode != PM_UNPAUSED) { PerformanceMeasurer::Paused(PFE_GAMELOOP); diff --git a/src/openttd.h b/src/openttd.h index 61cff24564..6568881c47 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -62,6 +62,7 @@ enum PauseMode : byte { PM_PAUSED_ERROR = 1 << 3, ///< A game paused because a (critical) error PM_PAUSED_ACTIVE_CLIENTS = 1 << 4, ///< A game paused for 'min_active_clients' PM_PAUSED_GAME_SCRIPT = 1 << 5, ///< A game paused by a game script + PM_PAUSED_LINK_GRAPH = 1 << 6, ///< A game paused due to the link graph schedule lagging /** Pause mode bits when paused for network reasons. */ PMB_PAUSED_NETWORK = PM_PAUSED_ACTIVE_CLIENTS | PM_PAUSED_JOIN, diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 29b685cf7d..aa3a2ff4b8 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -11,6 +11,7 @@ #include "../linkgraph/linkgraph.h" #include "../linkgraph/linkgraphjob.h" #include "../linkgraph/linkgraphschedule.h" +#include "../network/network.h" #include "../settings_internal.h" #include "saveload.h" @@ -245,6 +246,10 @@ void AfterLoadLinkGraphs() } LinkGraphSchedule::instance.SpawnAll(); + + if (!_networking || _network_server) { + AfterLoad_LinkGraphPauseControl(); + } } /** diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index a437f9fa8d..f97d0d4311 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -163,7 +163,8 @@ struct StatusBarWindow : Window { } else if (_do_autosave) { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER); } else if (_pause_mode != PM_UNPAUSED) { - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_PAUSED, TC_FROMSTRING, SA_HOR_CENTER); + StringID msg = (_pause_mode & PM_PAUSED_LINK_GRAPH) ? STR_STATUSBAR_PAUSED_LINK_GRAPH : STR_STATUSBAR_PAUSED; + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, msg, TC_FROMSTRING, SA_HOR_CENTER); } else if (this->ticker_scroll < TICKER_STOP && _statusbar_news_item != nullptr && _statusbar_news_item->string_id != 0) { /* Draw the scrolling news text */ if (!DrawScrollingStatusText(_statusbar_news_item, ScaleGUITrad(this->ticker_scroll), r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, r.bottom)) { From 7f0fefddcfbf4b16f22ec58b5cf3eac794ded43e Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 10 Mar 2019 19:20:11 +0000 Subject: [PATCH 389/601] Change: [Linkgraph] Only acquire thread join performance measurements on network clients Network servers and single player clients do not block on thread joins due to instead pausing shortly before the join is due. --- src/linkgraph/linkgraphschedule.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/linkgraph/linkgraphschedule.cpp b/src/linkgraph/linkgraphschedule.cpp index 2638b77ea8..87ab4818a1 100644 --- a/src/linkgraph/linkgraphschedule.cpp +++ b/src/linkgraph/linkgraphschedule.cpp @@ -15,6 +15,7 @@ #include "flowmapper.h" #include "../framerate_type.h" #include "../command_func.h" +#include "../network/network.h" #include "../safeguards.h" @@ -206,8 +207,13 @@ void OnTick_LinkGraph() if (offset == 0) { LinkGraphSchedule::instance.SpawnNext(); } else if (offset == _settings_game.linkgraph.recalc_interval / 2) { - PerformanceMeasurer framerate(PFE_GL_LINKGRAPH); - LinkGraphSchedule::instance.JoinNext(); + if (!_networking || _network_server) { + PerformanceMeasurer::SetInactive(PFE_GL_LINKGRAPH); + LinkGraphSchedule::instance.JoinNext(); + } else { + PerformanceMeasurer framerate(PFE_GL_LINKGRAPH); + LinkGraphSchedule::instance.JoinNext(); + } } } From cc8301449e4426dbd42622317ca772766a8386f7 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 22 Dec 2020 18:13:57 +0000 Subject: [PATCH 390/601] Update: Translations from eints korean: 2 changes by telk5093 catalan: 13 changes by perezdidac --- src/lang/afrikaans.txt | 2 ++ src/lang/arabic_egypt.txt | 2 ++ src/lang/basque.txt | 2 ++ src/lang/belarusian.txt | 2 ++ src/lang/brazilian_portuguese.txt | 2 ++ src/lang/bulgarian.txt | 2 ++ src/lang/catalan.txt | 19 +++++++++++++++---- src/lang/croatian.txt | 2 ++ src/lang/czech.txt | 2 ++ src/lang/danish.txt | 2 ++ src/lang/dutch.txt | 2 ++ src/lang/english_AU.txt | 2 ++ src/lang/english_US.txt | 2 ++ src/lang/esperanto.txt | 2 ++ src/lang/estonian.txt | 2 ++ src/lang/faroese.txt | 2 ++ src/lang/finnish.txt | 2 ++ src/lang/french.txt | 2 ++ src/lang/gaelic.txt | 2 ++ src/lang/galician.txt | 2 ++ src/lang/german.txt | 2 ++ src/lang/greek.txt | 2 ++ src/lang/hebrew.txt | 2 ++ src/lang/hungarian.txt | 2 ++ src/lang/icelandic.txt | 2 ++ src/lang/indonesian.txt | 2 ++ src/lang/irish.txt | 2 ++ src/lang/italian.txt | 2 ++ src/lang/japanese.txt | 2 ++ src/lang/korean.txt | 6 ++++-- src/lang/latin.txt | 2 ++ src/lang/latvian.txt | 2 ++ src/lang/lithuanian.txt | 2 ++ src/lang/luxembourgish.txt | 2 ++ src/lang/malay.txt | 2 ++ src/lang/norwegian_bokmal.txt | 2 ++ src/lang/norwegian_nynorsk.txt | 2 ++ src/lang/polish.txt | 2 ++ src/lang/portuguese.txt | 2 ++ src/lang/romanian.txt | 2 ++ src/lang/russian.txt | 2 ++ src/lang/serbian.txt | 2 ++ src/lang/simplified_chinese.txt | 2 ++ src/lang/slovak.txt | 2 ++ src/lang/slovenian.txt | 2 ++ src/lang/spanish.txt | 2 ++ src/lang/spanish_MX.txt | 2 ++ src/lang/swedish.txt | 2 ++ src/lang/tamil.txt | 2 ++ src/lang/thai.txt | 2 ++ src/lang/traditional_chinese.txt | 2 ++ src/lang/turkish.txt | 2 ++ src/lang/ukrainian.txt | 2 ++ src/lang/unfinished/chuvash.txt | 2 ++ src/lang/unfinished/frisian.txt | 2 ++ src/lang/unfinished/ido.txt | 2 ++ src/lang/unfinished/macedonian.txt | 2 ++ src/lang/unfinished/maltese.txt | 2 ++ src/lang/unfinished/marathi.txt | 2 ++ src/lang/unfinished/persian.txt | 2 ++ src/lang/unfinished/urdu.txt | 2 ++ src/lang/vietnamese.txt | 2 ++ src/lang/welsh.txt | 2 ++ 63 files changed, 141 insertions(+), 6 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 5ac444e61c..895c5214e4 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Afstand STR_SORT_BY_POPULATION :Bevolking STR_SORT_BY_RATING :Waardering +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Onderbreek spel STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Vinnig vooruit die spel diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index d86812afb1..a0df0f04e4 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -291,6 +291,8 @@ STR_SORT_BY_CARGO_CAPACITY :سعة الشح STR_SORT_BY_RANGE :مدى STR_SORT_BY_POPULATION :عدد السكان +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}ايقاف اللعبة STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}سرع اللعبه diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 3c84f8df62..07838daee4 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -308,6 +308,8 @@ STR_SORT_BY_RANGE :Irismena STR_SORT_BY_POPULATION :Biztanleria STR_SORT_BY_RATING :Balorazioa +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Jokoa pausatu STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Jokoa bizkortu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 9ded7fd19e..f82deae1ec 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -626,6 +626,8 @@ STR_SORT_BY_RANGE :Далёкас STR_SORT_BY_POPULATION :Насельніцтва STR_SORT_BY_RATING :Рэйтынґ +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Паўза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Паскорыць гульню diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 49d34f5bfe..ed2de430a8 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Alcance STR_SORT_BY_POPULATION :População STR_SORT_BY_RATING :Classificação +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Acelerar o jogo diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index c5a645caf8..a9a48bc093 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -312,6 +312,8 @@ STR_SORT_BY_RANGE :Обхват STR_SORT_BY_POPULATION :Население STR_SORT_BY_RATING :Рейтинг +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Бързо превъртане на играта diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index e2b4561029..fff9299934 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -195,6 +195,7 @@ STR_COLOUR_DEFAULT :Per defecte STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}cel·les/dia STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}cv STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv @@ -316,6 +317,8 @@ STR_SORT_BY_RANGE :Abast STR_SORT_BY_POPULATION :Població STR_SORT_BY_RATING :Qualificació +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Posa en pausa o reprèn la partida STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avança la partida el més ràpid possible @@ -1554,6 +1557,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Any de puntuaci STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Estableix l'any en què finalitza la partida i es puntua les companyies. Al final d'aquest any, la puntuació de la companyia es guarda i es mostra a la llista de classificació, però els jugadors poden continuar jugant.{}Si l'any de finalització és anterior a l'any d'inici, no es guardaran les puntuacions ni es mostrarà la llista de classificació. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai +STR_CONFIG_SETTING_ECONOMY_TYPE :Tipus d'economia: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Una economia suau implica canvis freqüents però petits en productivitat. En una economia congelada no hi ha canvis de productivitat ni tancament d'indústries. Aquesta configuració pot no tenir cap efecte si els tipus d'indústria venen predeterminats per un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suau +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :{G=Femenin}Congelada STR_CONFIG_SETTING_ALLOW_SHARES :Permet comprar participacions d'altres companyies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Permet comprar i vendre accions de les companyies. Les accions només estan disponibles per companyies d'una certa edat. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edat mínima de la companyia per negociar participacions: {STRING} @@ -1674,6 +1682,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quan es mostren STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Mètric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unitats del joc (cel·les/dia) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unitats de potència dels vehicles: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Quan es mostra la potència d'un vehicle a la interfície d'usuari, presenta-la en les unitats seleccionades @@ -1806,6 +1815,7 @@ STR_INTRO_TRANSLATION :{BLACK}A aquest # Quit window STR_QUIT_CAPTION :{WHITE}Surt +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Esteu segur que voleu sortir de l'OpenTTD? STR_QUIT_YES :{BLACK}Sí STR_QUIT_NO :{BLACK}No @@ -4725,10 +4735,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=Femenin}Mina ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Sense nom -STR_SV_TRAIN_NAME :{G=Masculin}Tren {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=Masculin}Automòbil {COMMA} -STR_SV_SHIP_NAME :{G=Masculin}Vaixell {COMMA} -STR_SV_AIRCRAFT_NAME :{G=Masculin}Avió {COMMA} +STR_SV_TRAIN_NAME :{G=Masculin}Tren #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=Masculin}Automòbil #{COMMA} +STR_SV_SHIP_NAME :{G=Masculin}Vaixell #{COMMA} +STR_SV_AIRCRAFT_NAME :{G=Masculin}Avió #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Nord @@ -5030,6 +5040,7 @@ STR_FORMAT_BUOY_NAME :Boia de {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Boia de {TOWN} #{COMMA} STR_FORMAT_COMPANY_NUM :{G=Femenin}(Companyia {COMMA}) STR_FORMAT_GROUP_NAME :{G=Masculin}Grup {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN}: {STRING} STR_FORMAT_WAYPOINT_NAME :Punt de pas de {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Punt de pas de {TOWN} #{COMMA} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 55e0b6b912..82f6902028 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -411,6 +411,8 @@ STR_SORT_BY_RANGE :Domet STR_SORT_BY_POPULATION :Stanovništvo STR_SORT_BY_RATING :Rejting +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Zaustavi igru STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Premotaj igru naprijed diff --git a/src/lang/czech.txt b/src/lang/czech.txt index c76e07a8a4..739de18919 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -390,6 +390,8 @@ STR_SORT_BY_RANGE :dosah STR_SORT_BY_POPULATION :Podle populace STR_SORT_BY_RATING :Hodnocení +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrychlit běh hry diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 95d65615ee..001010bf22 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Interval STR_SORT_BY_POPULATION :Indbyggertal STR_SORT_BY_RATING :Værdi +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Sæt spillet på pause STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kør spillet hurtigere diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 4f3e3c3ac5..49f861f6fd 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Bereik STR_SORT_BY_POPULATION :Aantal inwoners STR_SORT_BY_RATING :Waardering +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hiermee pauzeer je het spel STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Hiermee verhoog je de spelsnelheid diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index a4a2b405de..f5d1509d6b 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -302,6 +302,8 @@ STR_SORT_BY_RANGE :Range STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Rating +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Fast forward the game diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 73b1bf42b1..b4f33a2036 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Range STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Rating +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Fast forward the game diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 676314aa61..d2be60700f 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -304,6 +304,8 @@ STR_SORT_BY_CARGO_CAPACITY :Ŝarĝkapablo STR_SORT_BY_RANGE :Atingopovo STR_SORT_BY_POPULATION :Enloĝantaro +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Paŭzigu la ludon STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Rapide pluirigu la ludon diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index c390fd6d66..fe97b7df82 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -368,6 +368,8 @@ STR_SORT_BY_RANGE :Vahekaugus STR_SORT_BY_POPULATION :Rahvaarv STR_SORT_BY_RATING :Hinnang +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Seiska mäng STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kiirenda mängu diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 66ed873d64..d8b5c1f95f 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -292,6 +292,8 @@ STR_SORT_BY_RANGE :Vídd STR_SORT_BY_POPULATION :Fólkatal STR_SORT_BY_RATING :Virði +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Steðga spælinum STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Skunda undir spæli diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index b756e299c3..646eed3432 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Toimintasäde STR_SORT_BY_POPULATION :Asukasluku STR_SORT_BY_RATING :Arvio +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Tauko STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Nopeuta peliä diff --git a/src/lang/french.txt b/src/lang/french.txt index fba699ebb3..41c9efb34b 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -317,6 +317,8 @@ STR_SORT_BY_RANGE :Rayon d'action STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Qualité de service +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Mettre le jeu en pause STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rapide du jeu diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index d0bb4435a4..59980042de 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -498,6 +498,8 @@ STR_SORT_BY_RANGE :Dlùths STR_SORT_BY_POPULATION :Àireamh-shluaigh STR_SORT_BY_RATING :Rangachadh +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Cuir an geama na stad / a' dol STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Cuir an geama air adhart gu luath diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 5834e93d55..c8e82dee37 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Autonomía STR_SORT_BY_POPULATION :Poboación STR_SORT_BY_RATING :Puntuación +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar partida STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido da partida diff --git a/src/lang/german.txt b/src/lang/german.txt index 2cad372f9b..41724fc7fb 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Reichweite STR_SORT_BY_POPULATION :Bevölkerung STR_SORT_BY_RATING :Bewertung +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Spiel anhalten STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zeitraffer (Zeit vergeht schnellstmöglich) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 3ca894c0a9..1b20d0b7b8 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -373,6 +373,8 @@ STR_SORT_BY_RANGE :Εμβέλει STR_SORT_BY_POPULATION :Πληθυσμός STR_SORT_BY_RATING :Εκτίμηση +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Παύση παιχνιδιού STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Γρήγορη ταχύτητα παιχνιδιού diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 5a8f15312e..3d9254b199 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -324,6 +324,8 @@ STR_SORT_BY_RANGE :טווח STR_SORT_BY_POPULATION :אכלוסיה STR_SORT_BY_RATING :דרוג +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}השהה משחק STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}הרץ את הזמן במהירות diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 4fc1c45cde..ab9f5c37e0 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -378,6 +378,8 @@ STR_SORT_BY_RANGE :Hatótávolság STR_SORT_BY_POPULATION :Lakosság STR_SORT_BY_RATING :Értékelés +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Játék szüneteltetése STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Játék gyorsítása diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index eca04147e6..27a97d1270 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -292,6 +292,8 @@ STR_SORT_BY_RANGE :Drægni STR_SORT_BY_POPULATION :Fólksfjöldi STR_SORT_BY_RATING :Einkunn +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Stöðva leik STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Spóla leikinn áfram diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index dc1a20878f..21ee30b50b 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Jangkauan STR_SORT_BY_POPULATION :Populasi STR_SORT_BY_RATING :Peringkat +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hentikan sementara permainan STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Percepat maju waktu permainan diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 0658941a7d..5eda95ae04 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -310,6 +310,8 @@ STR_SORT_BY_RANGE :Raon STR_SORT_BY_POPULATION :Daonra STR_SORT_BY_RATING :Rátáil +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Cuir an cluiche ar sos STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Bog an cluiche ar aghaidh go scioptha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 770ddc41a0..74cc0acc51 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -317,6 +317,8 @@ STR_SORT_BY_RANGE :{G=f}Autonomia STR_SORT_BY_POPULATION :Popolazione STR_SORT_BY_RATING :Valutazione +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausa STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Aumenta la velocità di gioco diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 203a33ab38..30b9aca6ed 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -310,6 +310,8 @@ STR_SORT_BY_RANGE :航続距離 STR_SORT_BY_POPULATION :人口 STR_SORT_BY_RATING :レーティング +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}ゲームをポーズします STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}ゲームスピードを早くします diff --git a/src/lang/korean.txt b/src/lang/korean.txt index dfd20b2d5f..690907cb55 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -317,6 +317,8 @@ STR_SORT_BY_RANGE :항속거리 STR_SORT_BY_POPULATION :인구 STR_SORT_BY_RATING :등급 +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}게임을 일시 정지합니다. STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}게임 시간을 빠르게 가도록 합니다. @@ -2251,7 +2253,7 @@ STR_CONTENT_OPEN_URL :{BLACK}웹 사 STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}이 컨텐츠의 웹 사이트를 방문합니다 STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}다운로드 STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}선택한 콘텐츠의 다운로드를 시작합니다 -STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}다운로드 할 파일의 총 용량: {WHITE}{BYTES} +STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}다운로드할 파일의 총 용량: {WHITE}{BYTES} STR_CONTENT_DETAIL_TITLE :{SILVER}콘텐츠 정보 STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}이 콘텐츠를 선택하지 않았습니다 STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}이 콘텐츠를 다운로드하기 위해 선택하였습니다 @@ -2269,7 +2271,7 @@ STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{WHITE}{STRING} STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}필요한 요소: {WHITE}{STRING} STR_CONTENT_DETAIL_TAGS :{SILVER}태그: {WHITE}{STRING} STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD가 "zlib" 지원 기능이 없는 상태에서 빌드되었습니다... -STR_CONTENT_NO_ZLIB_SUB :{WHITE}... 콘텐츠를 다운로드 할 수 없습니다! +STR_CONTENT_NO_ZLIB_SUB :{WHITE}... 콘텐츠를 다운로드할 수 없습니다! # Order of these is important! STR_CONTENT_TYPE_BASE_GRAPHICS :{G=m}기본 그래픽 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 05f0b6abac..7a8679dcd5 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -500,6 +500,8 @@ STR_SORT_BY_RANGE :Distantia volat STR_SORT_BY_POPULATION :Numero Incolarum STR_SORT_BY_RATING :Censione +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Ludum intermittere STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Ludum adcelerare diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index e14040c1a4..2167b56fdc 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -318,6 +318,8 @@ STR_SORT_BY_RANGE :apgabala STR_SORT_BY_POPULATION :iedzīvotāju skaita STR_SORT_BY_RATING :vērtējuma +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzēt spēli STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Paātrināta spēle diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 49219c9c21..b91c6a471e 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -506,6 +506,8 @@ STR_SORT_BY_RANGE :atstumą STR_SORT_BY_POPULATION :populiaciją STR_SORT_BY_RATING :reitingą +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pristabdyti žaidimą STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Pagreitinti žaidimą diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f73c886e49..595cb1dc16 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Längt STR_SORT_BY_POPULATION :Bevölkerung STR_SORT_BY_RATING :Rating +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Spill pausen STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Spill schnell lafe loossen diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 9cfa8578f7..0b61bdaf56 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -295,6 +295,8 @@ STR_SORT_BY_CARGO_CAPACITY :Muatan Kargo STR_SORT_BY_RANGE :Jarak STR_SORT_BY_POPULATION :Jumlah Penduduk +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Henti Sebentar Permainan STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Rancakkan permainan diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index f51737db28..76a9d49e38 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -317,6 +317,8 @@ STR_SORT_BY_RANGE :Rekkevidde STR_SORT_BY_POPULATION :Folketall STR_SORT_BY_RATING :Rangering +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Sett spillet på pause STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Dobbel hastighet på spillet diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index adf49f5051..9ae7bdfbfc 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -312,6 +312,8 @@ STR_SORT_BY_RANGE :Rekkevidde STR_SORT_BY_POPULATION :Innbyggjartal STR_SORT_BY_RATING :Vurdering +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Dobbel fart på spelet diff --git a/src/lang/polish.txt b/src/lang/polish.txt index d52d906291..34a674a772 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -695,6 +695,8 @@ STR_SORT_BY_RANGE :Zasięg STR_SORT_BY_POPULATION :Liczba mieszkańców STR_SORT_BY_RATING :Ocena +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Szybkie przemijanie czasu w grze diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index a98e24b917..f468725ecf 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -314,6 +314,8 @@ STR_SORT_BY_RANGE :Alcance STR_SORT_BY_POPULATION :População STR_SORT_BY_RATING :Classificação +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausa STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Aumentar velocidade do jogo diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index c79feefab0..6aabc5dfc3 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -313,6 +313,8 @@ STR_SORT_BY_RANGE :Raza de acțiun STR_SORT_BY_POPULATION :Populaţia STR_SORT_BY_RATING :Cotaţie +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauză joc STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Măreşte viteza de trecere a timpului diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 8ed26e1f4a..66ab819360 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -442,6 +442,8 @@ STR_SORT_BY_RANGE :Дальнос STR_SORT_BY_POPULATION :Население STR_SORT_BY_RATING :Рейтинг +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Ускорить игру diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 3c3b6a2afb..4b5d1ce3f6 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -498,6 +498,8 @@ STR_SORT_BY_RANGE :Dometu STR_SORT_BY_POPULATION :Naseljenosti STR_SORT_BY_RATING :Rejtingu +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauziranje partije STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Ubrzavanje igre diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 1b113ac767..dc26d6b43b 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :航行距离 STR_SORT_BY_POPULATION :人口 STR_SORT_BY_RATING :等级 +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}暂停游戏 STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}快速游戏模式 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 6fc4f02442..3c5a3da3e2 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -380,6 +380,8 @@ STR_SORT_BY_RANGE :Rozsah STR_SORT_BY_POPULATION :Populácia STR_SORT_BY_RATING :Hodnotenie +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pozastaviť hru STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrýchliť priebeh hry diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index a83f3bb4d0..8fb879315e 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -463,6 +463,8 @@ STR_SORT_BY_RANGE :Domet STR_SORT_BY_POPULATION :Prebivalstvo STR_SORT_BY_RATING :Ocena +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Premor STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Hitro naprej diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 05c2ad5129..22715e1666 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Alcance STR_SORT_BY_POPULATION :Población STR_SORT_BY_RATING :Calificación +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar juego STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido del juego diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index ee9c8ff37e..05beb7eb09 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Alcance STR_SORT_BY_POPULATION :Población STR_SORT_BY_RATING :Evaluación +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Poner en pausa STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 6f83e5d461..4875627f6e 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Räckvidd STR_SORT_BY_POPULATION :Folkmängd STR_SORT_BY_RATING :Värdering +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausa spelet STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Snabbspola spelet diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 4e7c33b86d..1f43ad1f88 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -309,6 +309,8 @@ STR_SORT_BY_RANGE :வரையற STR_SORT_BY_POPULATION :மக்கள் தொகை STR_SORT_BY_RATING :மதிப்பீடு +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}இடை நிறுத்து STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}அதி வேகமாக விளையாடு diff --git a/src/lang/thai.txt b/src/lang/thai.txt index bbc964690a..7d0a21e6da 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -303,6 +303,8 @@ STR_SORT_BY_RANGE :ช่วง STR_SORT_BY_POPULATION :ประชากร STR_SORT_BY_RATING :ความพึงพอใจ +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}หยุดเกมชั่วคราว STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}เร่งความเร็วเกม diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 85d8b1de4d..1be89fc1a9 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -310,6 +310,8 @@ STR_SORT_BY_RANGE :範圍 STR_SORT_BY_POPULATION :人口 STR_SORT_BY_RATING :評價 +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}暫停遊戲 STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}快轉遊戲 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index d9d664e957..b9c5a8c3c4 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -316,6 +316,8 @@ STR_SORT_BY_RANGE :Menzil STR_SORT_BY_POPULATION :Nüfus STR_SORT_BY_RATING :Değerlendirme +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Oyunu durdur STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Oyunu hızlandır diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 7811c4e7f0..f1cc85fcb1 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -440,6 +440,8 @@ STR_SORT_BY_RANGE :за дальн STR_SORT_BY_POPULATION :за населенням STR_SORT_BY_RATING :за рейтингом +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Прискорити гру diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 701e9aa97b..58b66ecfdf 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -203,6 +203,8 @@ STR_SORT_BY_COST :Хак STR_SORT_BY_POWER :Хӑватлӑх STR_SORT_BY_POPULATION :Ҫынисем +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Вӑййи тӑхтав STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Вӑййи хӑвӑртлат diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 57f55e83bf..8c5957937d 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -310,6 +310,8 @@ STR_SORT_BY_RANGE :Beryk STR_SORT_BY_POPULATION :Ynwenners STR_SORT_BY_RATING :Rang +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Spul skoftsjen STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Tiid hurder rinne litte diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index d089320735..4637e7369f 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -255,6 +255,8 @@ STR_SORT_BY_FACILITY :Stacion-tipo STR_SORT_BY_POWER :Povo STR_SORT_BY_POPULATION :Populo +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzas ludo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Selekti diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 3884677880..12e81d3588 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -290,6 +290,8 @@ STR_SORT_BY_RANGE :опсег STR_SORT_BY_POPULATION :Населеност STR_SORT_BY_RATING :Рејтинг +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Паузирај ја играта STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Брзо нанапред играта diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index fccf5f42d1..af23b5ab47 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -241,6 +241,8 @@ STR_SORT_BY_CARGO_CAPACITY :Kapaċita ta' m STR_SORT_BY_RANGE :Kemm Twassal STR_SORT_BY_POPULATION :Popolazzjoni +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Waqfa temporanja mil-logħba STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Għaġġel il-loghba diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index 488c016bc7..9519aeb7b5 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -291,6 +291,8 @@ STR_SORT_BY_RANGE :प्रका STR_SORT_BY_POPULATION :लोकसंख्या STR_SORT_BY_RATING :धारा +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK} खेळ स्थगित करा STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}जलद खेळ अग्रेषित diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index ffebcc9045..e342772d3e 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -300,6 +300,8 @@ STR_SORT_BY_RANGE :بازه STR_SORT_BY_POPULATION :جمعیت STR_SORT_BY_RATING :نرخ +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}وقفه موقت بازی STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}بالا بردن سرعت بازی diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 37edeb27eb..481ceb13be 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -298,6 +298,8 @@ STR_SORT_BY_CARGO_CAPACITY :سامان کی STR_SORT_BY_RANGE :پہنچ STR_SORT_BY_POPULATION :آبادی +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK} کھیل میں وقفھ لیجیئے STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK} کھیل کو تیزی سے بڑھایئں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index aed29fab1a..6e1cf35b12 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -315,6 +315,8 @@ STR_SORT_BY_RANGE :Tầm xa STR_SORT_BY_POPULATION :Dân số STR_SORT_BY_RATING :Đánh giá +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Tạm dừng trò chơi STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Tua nhanh trò chơi diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 8f68d17a78..0fbb9efe9f 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -310,6 +310,8 @@ STR_SORT_BY_RANGE :Maes teithio STR_SORT_BY_POPULATION :Poblogaeth STR_SORT_BY_RATING :Gradd +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Oedi'r gêm STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Cyflymu'r gêm From 3f606691a8f94e7626327ccd6b7293b3d39da743 Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 22 Dec 2020 22:39:24 +0100 Subject: [PATCH 391/601] Add: [GitHub] PR template. (#8414) --- .github/PULL_REQUEST_TEMPLATE.md | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..1949f6f1f9 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,47 @@ +## Motivation / Problem + + + + +## Description + + + + +## Limitations + + + + +## Checklist for review + +Some things are not automated, and forgotten often. This list is a reminder for the reviewers. +* The bug fix is important enough to be backported? (label: 'backport requested') +* This PR affects the save game format? (label 'savegame upgrade') +* This PR affects the GS/AI API? (label 'needs review: Script API') + * ai_changelog.hpp, gs_changelog.hpp need updating. + * The compatibility wrappers (compat_*.nut) need updating. +* This PR affects the NewGRF API? (label 'needs review: NewGRF') + * [PR must be added to API tracker](https://wiki.openttd.org/en/Development/NewGRF/Specification%20Status) From 2e6f37ecf14aadc5669ed2662e08e923bfe093a7 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 23 Dec 2020 18:17:50 +0000 Subject: [PATCH 392/601] Update: Translations from eints arabic (egypt): 15 changes by AviationGamerX korean: 15 changes by telk5093 finnish: 12 changes by hpiirai --- src/lang/arabic_egypt.txt | 15 +++++++++++++++ src/lang/finnish.txt | 13 ++++++++++++- src/lang/korean.txt | 19 +++++++++++++++---- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index a0df0f04e4..4e105d4bdb 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -448,9 +448,11 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :توقل كونسول STR_ABOUT_MENU_AI_DEBUG :مكتشف اخطاء الذكاء الصناعي STR_ABOUT_MENU_SCREENSHOT :صورة من الشاشة - Ctrl-S - +STR_ABOUT_MENU_SHOW_FRAMERATE :سرعة عرض الإطارات STR_ABOUT_MENU_ABOUT_OPENTTD :حول 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :موائم العفريتات STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :اضهار /اخفاء مربح الحوارات/الخيارات +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :تبديل ألوان الكتل المتسخة ############ range ends here ############ range for ordinal numbers used for the place in the highscore window @@ -1079,6 +1081,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :يسار STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :متوسط STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين +STR_CONFIG_SETTING_CONSTRUCTION_SPEED ::سرعة البناء {STRING} +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS ::تعطلات العربة {STRING} STR_CONFIG_SETTING_AUTOSLOPE :السماح بتحريك الأرض تحت المباني, الطرق, الخ : {STRING} STR_CONFIG_SETTING_CATCHMENT :السماح بحدود اكثر واقعية للمحطات بحسب الحجم: {STRING} @@ -1127,6 +1131,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :لكل العر STR_CONFIG_SETTING_WARN_INCOME_LESS :حذر عندما يكون الدخل سالبا :{STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :المركبات لا تنتهي صلاحيتها ابدا : {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE :جدد العربات عندما تصبح قديمة : {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :عند التمكين ، يتم استبدال العربة التي اقتربت من نهاية عمرها عند اكتمال شروط التجديد STR_CONFIG_SETTING_AUTORENEW_MONEY :التجديد التلقائي عند توفر السيولة الدنيا للتجديد: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL :أعرض عدد السكان مع الاسم على العلامة: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :سمك الخطوط في العرض: {STRING} @@ -1251,6 +1256,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح ب STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes قبل تعليق الاسكربت: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :فترات الصيانة بالنسبة المئوية : {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT ::مدة فحص الطائرة الإفتراضي{STRING} STR_CONFIG_SETTING_NOSERVICE :الغاء الصيانة عندما يكون التعطيل للمركبات غير مفعل: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS :السماح بتحديد سرعة العربات: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :تعطيل سكة القطار الكهربائي: {STRING} @@ -1339,6 +1345,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف ال +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :م) متري) STR_CONFIG_SETTING_GRAPHICS :رسوميات {ORANGE} STR_CONFIG_SETTING_SOUND :{ORANGE}الصوت @@ -2177,6 +2184,8 @@ STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}اعرض STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}اعرض المصانع التي تمد و تقبل البضائع STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}اربط بالخريطة المصغرة STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}اعرض المصانع المختارة في الخرائط المصغرة ايضا. +STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}اختر البضائع +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}اختر الصناعة # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}معلومات ارض @@ -2200,6 +2209,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}اسم STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}الشحنة المقبولة: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA} /8 {STRING}) +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}:نوع الطريق {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}حدود سرعة سكة الحديد: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}حدود سرعه الطريق: {LTBLUE}{VELOCITY} @@ -2795,6 +2805,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}وسط STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}نسبة الانتاج: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}:يتطلب STR_CONFIG_GAME_PRODUCTION :{WHITE}تغيير الانتاج مضاعف من 8 الى 2040 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}غير مستوى الانتاج{}نسبة مئوية حتى 800%. @@ -2904,6 +2915,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}شراء STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}شراء سفينة STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}شراء طائرة +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}شراء العربة وتجديد بضائعها STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة الموضحة STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة @@ -2923,6 +2935,7 @@ STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}اعاد +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK} تبيدل بين إخفاء / عرض نوع الطائرة STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}اعادة تسمية عربات القطار STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}اعادة تسمية العربة @@ -3050,6 +3063,7 @@ STR_REPLACE_ELRAIL_VEHICLES :سكة حديد STR_REPLACE_MONORAIL_VEHICLES :عربات احادية السكة STR_REPLACE_MAGLEV_VEHICLES :مركبات ممغنطة +STR_REPLACE_TRAM_VEHICLES :مركبات الترام STR_REPLACE_REMOVE_WAGON :{BLACK} إزالة العربات: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK} المحافظة على طول القطار بازالة عربات ابتداء من المقدمة عند التبديل - عندما يكون التبدل ينتج قطارا اطول. @@ -3628,6 +3642,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... يم STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... يمكن بنائة في الغابات المطيرة فقط STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... يمكن بنائة في المناطق الصحراوية فقط STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... يبنى فقط في المدن +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... لا يمكن بناؤها إلا بقرب وسط المدن STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... يمكن بنائه في المناطق المنخفضة فقط STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... يمكن بنائة على اطراف الخريطة فقط STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... يمكن زراعة الغابة فوق خط الثلج فقط diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 646eed3432..6f0758deea 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -315,8 +315,15 @@ STR_SORT_BY_CARGO_CAPACITY :Rahtikapasiteet STR_SORT_BY_RANGE :Toimintasäde STR_SORT_BY_POPULATION :Asukasluku STR_SORT_BY_RATING :Arvio +STR_SORT_BY_NUM_VEHICLES :Kulkuneuvojen määrä +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kokonaistuotto viime vuonna +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Kokonaistuotto tänä vuonna +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Keskimääräinen tuotto viime vuonna +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Keskimääräinen tuotto tänä vuonna # Group by options for vehicle list +STR_GROUP_BY_NONE :Ei mitään +STR_GROUP_BY_SHARED_ORDERS :Jaetut käskyt # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Tauko @@ -773,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Näytä STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näytä viimeisin viesti tai uutisraportti STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * TAUKO * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * TAUKO (odotetaan yhteyskuvaajan päivittymistä) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTITALLENNUS STR_STATUSBAR_SAVING_GAME :{RED}* * TALLENNETAAN PELIÄ * * @@ -2210,11 +2218,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Peli yhä pysä STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Peli yhä pysäytetty ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Peli yhä pysäytetty ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Peli yhä pysäytetty ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Peli yhä pysäytetty ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Peliä jatketaan ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :pelaajien määrä STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :yhdistäviä pelaajia STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuaalinen STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :peliskripti +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :odotetaan yhteyskuvaajan päivittymistä ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :poistutaan STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} on liittynyt peliin @@ -4243,10 +4253,11 @@ STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tiedosto STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Sisäinen virhe: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus – {STRING} -STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemalla versiolla +STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemmalla versiolla STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Tiedostoa ei voi lukea STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Tiedostoa ei voi kirjoittaa STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Tietojen varmistustarkistus epäonnistui +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Tallennus on tehty muokatulla versiolla STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 690907cb55..12f4257cb1 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -316,8 +316,15 @@ STR_SORT_BY_CARGO_CAPACITY :화물 수송 STR_SORT_BY_RANGE :항속거리 STR_SORT_BY_POPULATION :인구 STR_SORT_BY_RATING :등급 +STR_SORT_BY_NUM_VEHICLES :차량 수 +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :작년 총 이익 +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :올해 총 이익 +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :작년 평균 이익 +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :올해 평균 이익 # Group by options for vehicle list +STR_GROUP_BY_NONE :없음 +STR_GROUP_BY_SHARED_ORDERS :공유된 경로 # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}게임을 일시 정지합니다. @@ -774,6 +781,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}모든 STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}마지막 메시지/뉴스 보기 STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * 일시 정지 * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * 일시 정지됨 (연결 상태가 업데이트되기를 기다리는 중) * * STR_STATUSBAR_AUTOSAVE :{RED}자동 저장 STR_STATUSBAR_SAVING_GAME :{RED}* * 게임 저장 중 * * @@ -2207,15 +2215,17 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}마지 STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} ############ Leave those lines in this order!! STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :게임이 일시 정지되었습니다. ({STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :게임이 아직 일시 정지된 상태입니다. ({STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :게임이 아직 일시 정지된 상태입니다 ({STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :게임이 재개되었습니다. ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :플레이하는 사람 수 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :접속자와 연결중 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :수동 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :게임 스크립트 +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :연결 상태가 업데이트되기를 기다리는 중 ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :게임 종료 STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} 님이 입장하셨습니다 @@ -4248,6 +4258,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :상위 버전 STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :파일을 읽을 수 없습니다 STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :파일을 쓸 수 없습니다 STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :데이터 무결성 검사에 실패하였습니다 +STR_GAME_SAVELOAD_ERROR_PATCHPACK :수정된 버전의 게임 저장 파일입니다 STR_GAME_SAVELOAD_NOT_AVAILABLE :<사용 불가능> STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}전차를 지원하지 않는 버전으로 게임이 저장되었습니다. 모든 전차는 제거되었습니다. From ad47e3d9e6d07e5ee60a53ff53a8671058680da7 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 24 Dec 2020 18:19:47 +0000 Subject: [PATCH 393/601] Update: Translations from eints finnish: 1 change by hpiirai --- src/lang/finnish.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 6f0758deea..712643addc 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4257,7 +4257,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on te STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Tiedostoa ei voi lukea STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Tiedostoa ei voi kirjoittaa STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Tietojen varmistustarkistus epäonnistui -STR_GAME_SAVELOAD_ERROR_PATCHPACK :Tallennus on tehty muokatulla versiolla +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Tallennus on tehty muunnellulla versiolla STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu From 94d629d79bcd623a5c77daa3db742cd8fd43d7b4 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 24 Dec 2020 23:36:36 +0000 Subject: [PATCH 394/601] Change: [Linkgraph] Allow job threads to be aborted early when clearing schedule (#8416) When link graph jobs are cleared due to abandoning the game or exiting, flag the job as aborted. The link graph job running in a separate thread checks the aborted flag periodically and terminates processing early if set. This reduces the delay at game abandon or exit if a long-running job would otherwise still be running. --- src/linkgraph/linkgraphjob.cpp | 8 +++++++- src/linkgraph/linkgraphjob.h | 18 +++++++++++++++++- src/linkgraph/linkgraphschedule.cpp | 3 ++- src/linkgraph/mcf.cpp | 4 ++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index c66ddeac79..e23c23b479 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -38,7 +38,8 @@ LinkGraphJob::LinkGraphJob(const LinkGraph &orig) : link_graph(orig), settings(_settings_game.linkgraph), join_date(_date + _settings_game.linkgraph.recalc_time), - job_completed(false) + job_completed(false), + job_aborted(false) { } @@ -92,6 +93,11 @@ LinkGraphJob::~LinkGraphJob() * Accessing other pools may be invalid. */ if (CleaningPool()) return; + /* If the job has been aborted, the job state is invalid. + * This should never be reached, as once the job has been marked as aborted + * the only valid job operation is to clear the LinkGraphJob pool. */ + assert(!this->IsJobAborted()); + /* Link graph has been merged into another one. */ if (!LinkGraph::IsValidID(this->link_graph.index)) return; diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h index ab5e07fb18..7643659212 100644 --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -63,6 +63,7 @@ protected: NodeAnnotationVector nodes; ///< Extra node data necessary for link graph calculation. EdgeAnnotationMatrix edges; ///< Extra edge data necessary for link graph calculation. std::atomic job_completed; ///< Is the job still running. This is accessed by multiple threads and reads may be stale. + std::atomic job_aborted; ///< Has the job been aborted. This is accessed by multiple threads and reads may be stale. void EraseFlows(NodeID from); void JoinThread(); @@ -267,7 +268,7 @@ public: * settings have to be brutally const-casted in order to populate them. */ LinkGraphJob() : settings(_settings_game.linkgraph), - join_date(INVALID_DATE), job_completed(false) {} + join_date(INVALID_DATE), job_completed(false), job_aborted(false) {} LinkGraphJob(const LinkGraph &orig); ~LinkGraphJob(); @@ -281,6 +282,21 @@ public: */ inline bool IsJobCompleted() const { return this->job_completed.load(std::memory_order_acquire); } + /** + * Check if job has been aborted. + * This is allowed to spuriously return false incorrectly, but is not allowed to incorrectly return true. + * @return True if job has been aborted. + */ + inline bool IsJobAborted() const { return this->job_aborted.load(std::memory_order_acquire); } + + /** + * Abort job. + * The job may exit early at the next available opportunity. + * After this method has been called the state of the job is undefined, and the only valid operation + * is to join the thread and discard the job data. + */ + inline void AbortJob() { this->job_aborted.store(true, std::memory_order_release); } + /** * Check if job is supposed to be finished. * @return True if job should be finished by now, false if not. diff --git a/src/linkgraph/linkgraphschedule.cpp b/src/linkgraph/linkgraphschedule.cpp index 87ab4818a1..ce28ec3d85 100644 --- a/src/linkgraph/linkgraphschedule.cpp +++ b/src/linkgraph/linkgraphschedule.cpp @@ -86,6 +86,7 @@ void LinkGraphSchedule::JoinNext() /* static */ void LinkGraphSchedule::Run(LinkGraphJob *job) { for (uint i = 0; i < lengthof(instance.handlers); ++i) { + if (job->IsJobAborted()) return; instance.handlers[i]->Run(*job); } @@ -119,7 +120,7 @@ void LinkGraphSchedule::SpawnAll() /* static */ void LinkGraphSchedule::Clear() { for (JobList::iterator i(instance.running.begin()); i != instance.running.end(); ++i) { - (*i)->JoinThread(); + (*i)->AbortJob(); } instance.running.clear(); instance.schedule.clear(); diff --git a/src/linkgraph/mcf.cpp b/src/linkgraph/mcf.cpp index c8c031ea3b..ea10409417 100644 --- a/src/linkgraph/mcf.cpp +++ b/src/linkgraph/mcf.cpp @@ -528,7 +528,7 @@ MCF1stPass::MCF1stPass(LinkGraphJob &job) : MultiCommodityFlow(job) finished_sources[source] = !source_demand_left; this->CleanupPaths(source, paths); } - } while (more_loops || this->EliminateCycles()); + } while ((more_loops || this->EliminateCycles()) && !job.IsJobAborted()); } /** @@ -544,7 +544,7 @@ MCF2ndPass::MCF2ndPass(LinkGraphJob &job) : MultiCommodityFlow(job) uint accuracy = job.Settings().accuracy; bool demand_left = true; std::vector finished_sources(size); - while (demand_left) { + while (demand_left && !job.IsJobAborted()) { demand_left = false; for (NodeID source = 0; source < size; ++source) { if (finished_sources[source]) continue; From 04e572933d3752ee23d14206a78e3d944ca42c2f Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Fri, 25 Dec 2020 02:36:45 +0300 Subject: [PATCH 395/601] Fix: Don't lower tree density if spreading is not enabled (#8413) --- src/tree_cmd.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index cdc9869207..8c7f9ea31f 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -681,7 +681,7 @@ static void TileLoop_Trees(TileIndex tile) break; case 1: // add a tree - if (GetTreeCount(tile) < 4) { + if (GetTreeCount(tile) < 4 && CanPlantExtraTrees(tile)) { AddTreeCount(tile, 1); SetTreeGrowth(tile, 0); break; @@ -713,13 +713,13 @@ static void TileLoop_Trees(TileIndex tile) break; case 6: // final stage of tree destruction - if (GetTreeCount(tile) > 1) { + if (!CanPlantExtraTrees(tile)) { + /* if trees can't spread just plant a new one to prevent deforestation */ + SetTreeGrowth(tile, 0); + } else if (GetTreeCount(tile) > 1) { /* more than one tree, delete it */ AddTreeCount(tile, -1); SetTreeGrowth(tile, 3); - } else if (!CanPlantExtraTrees(tile)) { - /* if trees can't spread just plant a new one to prevent deforestation */ - SetTreeGrowth(tile, 0); } else { /* just one tree, change type into MP_CLEAR */ switch (GetTreeGround(tile)) { From 22b9dec9603bf2a06fb13347b49527c7920e59dc Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Fri, 25 Dec 2020 02:36:54 +0300 Subject: [PATCH 396/601] Feature: Add an option to disable tree growth completely (#8415) --- src/lang/english.txt | 7 ++++--- src/table/settings.ini | 4 ++-- src/tree_cmd.cpp | 20 ++++++++++++-------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 04399d9a45..93d5352ed2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1620,9 +1620,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In game placement of trees: {STRING2} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :None {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Only in rain forests -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Everywhere +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Grow but don't spread {RED}(breaks lumber mill) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Grow but only spread in rain forests +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Grow and spread everywhere +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Don't grow, don't spread {RED}(breaks lumber mill) STR_CONFIG_SETTING_TOOLBAR_POS :Position of main toolbar: {STRING2} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal position of the main toolbar at the top of the screen diff --git a/src/table/settings.ini b/src/table/settings.ini index cca6a99bf8..f082567661 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2391,10 +2391,10 @@ from = SLV_132 guiflags = SGF_MULTISTRING def = 2 min = 0 -max = 2 +max = 3 str = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT strhelp = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT -strval = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE +strval = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD cat = SC_BASIC [SDT_VAR] diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 8c7f9ea31f..c40df4394c 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -42,9 +42,10 @@ enum TreePlacer { /** Where to place trees while in-game? */ enum ExtraTreePlacement { - ETP_NONE, ///< Place trees on no tiles - ETP_RAINFOREST, ///< Place trees only on rainforest tiles - ETP_ALL, ///< Place trees on all tiles + ETP_NO_SPREAD, ///< Grow trees on tiles that have them but don't spread to new ones + ETP_SPREAD_RAINFOREST, ///< Grow trees on tiles that have them, only spread to new ones in rainforests + ETP_SPREAD_ALL, ///< Grow trees and spread them without restrictions + ETP_NO_GROWTH_NO_SPREAD, ///< Don't grow trees and don't spread them at all }; /** Determines when to consider building more trees. */ @@ -635,8 +636,8 @@ static void TileLoopTreesAlps(TileIndex tile) static bool CanPlantExtraTrees(TileIndex tile) { return ((_settings_game.game_creation.landscape == LT_TROPIC && GetTropicZone(tile) == TROPICZONE_RAINFOREST) ? - _settings_game.construction.extra_tree_placement != ETP_NONE : - _settings_game.construction.extra_tree_placement == ETP_ALL); + (_settings_game.construction.extra_tree_placement == ETP_SPREAD_ALL || _settings_game.construction.extra_tree_placement == ETP_SPREAD_RAINFOREST) : + _settings_game.construction.extra_tree_placement == ETP_SPREAD_ALL); } static void TileLoop_Trees(TileIndex tile) @@ -662,6 +663,9 @@ static void TileLoop_Trees(TileIndex tile) MarkTileDirtyByTile(tile); } } + + if (_settings_game.construction.extra_tree_placement == ETP_NO_GROWTH_NO_SPREAD) return; + if (GetTreeCounter(tile) < 15) { AddTreeCounter(tile, 1); return; @@ -755,8 +759,8 @@ static void TileLoop_Trees(TileIndex tile) void OnTick_Trees() { - /* Don't place trees if that's not allowed */ - if (_settings_game.construction.extra_tree_placement == ETP_NONE) return; + /* Don't spread trees if that's not allowed */ + if (_settings_game.construction.extra_tree_placement == ETP_NO_SPREAD || _settings_game.construction.extra_tree_placement == ETP_NO_GROWTH_NO_SPREAD) return; uint32 r; TileIndex tile; @@ -771,7 +775,7 @@ void OnTick_Trees() } /* byte underflow */ - if (--_trees_tick_ctr != 0 || _settings_game.construction.extra_tree_placement != ETP_ALL) return; + if (--_trees_tick_ctr != 0 || _settings_game.construction.extra_tree_placement == ETP_SPREAD_RAINFOREST) return; /* place a tree at a random spot */ r = Random(); From 7bdfb382a89145ea3ce6c89992eacd0ec676babd Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Thu, 24 Dec 2020 18:37:13 -0500 Subject: [PATCH 397/601] Change: Towns don't build dead-end road bridges (#8401) --- src/town_cmd.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 374601cad2..ff63b613f5 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1087,6 +1087,48 @@ static bool GrowTownWithRoad(const Town *t, TileIndex tile, RoadBits rcmd) return false; } +/** + * Checks if a town road can be continued on the other side of a bridge. + * + * @param end_tile The end tile of the bridge + * @param bridge_dir The direction of the bridge + * @return true if the road can be continued, else false + */ +static bool CanRoadContinueAfterBridge(const Town* t, const TileIndex end_tile, const DiagDirection bridge_dir) +{ + const int delta = TileOffsByDiagDir(bridge_dir); // +1 tile in the direction of the bridge + TileIndex next_tile = end_tile + delta; // The tile beyond the bridge + RoadBits rcmd = DiagDirToRoadBits(ReverseDiagDir(bridge_dir)); + RoadType rt = GetTownRoadType(t); + + /* Before we try anything, make sure the tile is on the map and not the void. */ + if (!IsValidTile(next_tile)) return false; + + /* If the next tile is a bridge or tunnel, allow if it's a road bridge/tunnel continuing in the same direction. */ + if (IsTileType(next_tile, MP_TUNNELBRIDGE)) { + return GetTunnelBridgeTransportType(next_tile) == TRANSPORT_ROAD && GetTunnelBridgeDirection(next_tile) == bridge_dir; + } + + /* If the next tile is a station, allow if it's a road station facing the proper direction. Otherwise return false. */ + if (IsTileType(next_tile, MP_STATION)) { + /* If the next tile is a road station, allow if it's facing the same direction, otherwise disallow. */ + return IsRoadStop(next_tile) && GetRoadStopDir(next_tile) == ReverseDiagDir(bridge_dir); + } + + /* If the next tile is a road depot, allow if it's facing the new bridge. */ + if (IsTileType(next_tile, MP_ROAD)) { + return IsRoadDepot(next_tile) && GetRoadDepotDirection(next_tile) == ReverseDiagDir(bridge_dir); + } + + /* If the next tile is a railroad track, check if towns are allowed to build level crossings. + * If level crossing are not allowed, reject the bridge. Else allow DoCommand to determine if the rail track is buildable. */ + if (IsTileType(next_tile, MP_RAILWAY) && !_settings_game.economy.allow_town_level_crossings) return false; + + /* If a road tile can be built, the bridge is allowed. + * If not, the bridge is rejected. */ + return DoCommand(next_tile, rcmd | (rt << 4), t->index, DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD).Succeeded(); +} + /** * Grows the town with a bridge. * At first we check if a bridge is reasonable. @@ -1136,9 +1178,12 @@ static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDi } while (IsValidTile(bridge_tile) && (IsWaterTile(bridge_tile) || IsPlainRailTile(bridge_tile) || (IsNormalRoadTile(bridge_tile) && GetDisallowedRoadDirections(bridge_tile) != DRD_NONE))); } - /* no water tiles in between? */ + /* Don't allow a bridge where the start and end tiles are adjacent with no span between. */ if (bridge_length == 1) return false; + /* Make sure the road can be continued past the bridge. At this point, bridge_tile holds the end tile of the bridge. */ + if (!CanRoadContinueAfterBridge(t, bridge_tile, bridge_dir)) return false; + for (uint8 times = 0; times <= 22; times++) { byte bridge_type = RandomRange(MAX_BRIDGES - 1); @@ -1154,7 +1199,6 @@ static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDi return false; } - /** * Checks whether at least one surrounding roads allows to build a house here * From 2bb691f50e79164d2dfc63a2b0103893314df90f Mon Sep 17 00:00:00 2001 From: frosch Date: Thu, 24 Dec 2020 19:00:53 +0100 Subject: [PATCH 398/601] Change: Remove the LAN/Internet combobox from the server list in favour of adding two separate search buttons. --- src/lang/english.txt | 12 +++--- src/network/network_gui.cpp | 71 ++++++------------------------------ src/settings_type.h | 1 - src/table/settings.ini | 9 ----- src/widgets/network_widget.h | 5 +-- 5 files changed, 19 insertions(+), 79 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 93d5352ed2..1683604aac 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1947,10 +1947,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}This is the name other players will identify you by @@ -1991,8 +1987,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Join gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh the server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Search network for a server +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Search internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Search internet for public servers +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Search LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Search local area network for servers STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Add server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adds a server to the list which will always be checked for running games STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -2009,6 +2007,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible +STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised +STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 47bf8fb69c..b6449b5246 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -55,15 +55,6 @@ static const StringID _connection_types_dropdown[] = { INVALID_STRING_ID }; -/** - * Advertisement options in the server list - */ -static const StringID _lan_internet_types_dropdown[] = { - STR_NETWORK_SERVER_LIST_ADVERTISED_NO, - STR_NETWORK_SERVER_LIST_ADVERTISED_YES, - INVALID_STRING_ID -}; - static std::vector _language_dropdown; void SortNetworkLanguages() @@ -503,27 +494,12 @@ public: this->last_sorting = this->servers.GetListing(); } - void SetStringParameters(int widget) const override - { - switch (widget) { - case WID_NG_CONN_BTN: - SetDParam(0, _lan_internet_types_dropdown[_settings_client.network.lan_internet]); - break; - } - } - void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { - case WID_NG_CONN_BTN: - *size = maxdim(*size, maxdim(GetStringBoundingBox(_lan_internet_types_dropdown[0]), GetStringBoundingBox(_lan_internet_types_dropdown[1]))); - size->width += padding.width; - size->height += padding.height; - break; - case WID_NG_MATRIX: resize->height = WD_MATRIX_TOP + max(GetSpriteSize(SPR_BLOT).height, (uint)FONT_HEIGHT_NORMAL) + WD_MATRIX_BOTTOM; - size->height = 10 * resize->height; + size->height = 12 * resize->height; break; case WID_NG_LASTJOINED: @@ -560,10 +536,6 @@ public: SetDParamMaxValue(0, 5); *size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT)); break; - - case WID_NG_DETAILS_SPACER: - size->height = 20 + 12 * FONT_HEIGHT_NORMAL; - break; } } @@ -627,7 +599,8 @@ public: this->GetWidget(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == nullptr || !sel->online || sel->info.grfconfig == nullptr || !sel->info.version_compatible || sel->info.compatible); #ifdef __EMSCRIPTEN__ - this->SetWidgetDisabledState(WID_NG_FIND, true); + this->SetWidgetDisabledState(WID_NG_SEARCH_INTERNET, true); + this->SetWidgetDisabledState(WID_NG_SEARCH_LAN, true); this->SetWidgetDisabledState(WID_NG_ADD, true); this->SetWidgetDisabledState(WID_NG_START, true); #endif @@ -715,10 +688,6 @@ public: DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME); break; - case WID_NG_CONN_BTN: // 'Connection' droplist - ShowDropDownMenu(this, _lan_internet_types_dropdown, _settings_client.network.lan_internet, WID_NG_CONN_BTN, 0, 0); // do it for widget WID_NSS_CONN_BTN - break; - case WID_NG_NAME: // Sort by name case WID_NG_CLIENTS: // Sort by connected clients case WID_NG_MAPSIZE: // Sort by map size @@ -763,11 +732,12 @@ public: break; } - case WID_NG_FIND: // Find server automatically - switch (_settings_client.network.lan_internet) { - case 0: NetworkUDPSearchGame(); break; - case 1: NetworkUDPQueryMasterServer(); break; - } + case WID_NG_SEARCH_INTERNET: + NetworkUDPQueryMasterServer(); + break; + + case WID_NG_SEARCH_LAN: + NetworkUDPSearchGame(); break; case WID_NG_ADD: // Add a server @@ -805,20 +775,6 @@ public: } } - void OnDropdownSelect(int widget, int index) override - { - switch (widget) { - case WID_NG_CONN_BTN: - _settings_client.network.lan_internet = index; - break; - - default: - NOT_REACHED(); - } - - this->SetDirty(); - } - /** * Some data on this window has become invalid. * @param data Information about the changed data. @@ -964,12 +920,6 @@ static const NWidgetPart _nested_network_game_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(10, 7, 10), /* LEFT SIDE */ NWidget(NWID_VERTICAL), SetPIP(0, 7, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 7, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_CONNECTION), SetDataTip(STR_NETWORK_SERVER_LIST_ADVERTISED, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NG_CONN_BTN), - SetDataTip(STR_BLACK_STRING, STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP), - NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, 7, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_FILTER_LABEL), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_FILTER), SetMinimalSize(251, 12), SetFill(1, 0), SetResize(1, 0), @@ -1029,7 +979,8 @@ static const NWidgetPart _nested_network_game_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 7, 4), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_FIND), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_FIND_SERVER, STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_SEARCH_INTERNET), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET, STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_SEARCH_LAN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN, STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_ADD), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_ADD_SERVER, STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_START), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_START_SERVER, STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BUTTON_CANCEL, STR_NULL), diff --git a/src/settings_type.h b/src/settings_type.h index 2dbca59d82..5729a50bea 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -255,7 +255,6 @@ struct NetworkSettings { char rcon_password[NETWORK_PASSWORD_LENGTH]; ///< password for rconsole (server side) char admin_password[NETWORK_PASSWORD_LENGTH]; ///< password for the admin network bool server_advertise; ///< advertise the server to the masterserver - uint8 lan_internet; ///< search on the LAN or internet for servers char client_name[NETWORK_CLIENT_NAME_LENGTH]; ///< name of the player (as client) char default_company_pass[NETWORK_PASSWORD_LENGTH]; ///< default password for new companies in encrypted form char connect_to_ip[NETWORK_HOSTNAME_LENGTH]; ///< default for the "Add server" query diff --git a/src/table/settings.ini b/src/table/settings.ini index f082567661..320786751a 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -3801,15 +3801,6 @@ flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NETWORK_ONLY def = false -[SDTC_VAR] -var = network.lan_internet -type = SLE_UINT8 -flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC -guiflags = SGF_NETWORK_ONLY -def = 1 -min = 0 -max = 1 - [SDTC_STR] var = network.client_name type = SLE_STRB diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index 23ea95a61a..8372b6360d 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -14,8 +14,6 @@ enum NetworkGameWidgets { WID_NG_MAIN, ///< Main panel. - WID_NG_CONNECTION, ///< Label in front of connection droplist. - WID_NG_CONN_BTN, ///< 'Connection' droplist button. WID_NG_CLIENT_LABEL, ///< Label in front of client name edit box. WID_NG_CLIENT, ///< Panel with editbox to set client name. WID_NG_FILTER_LABEL, ///< Label in front of the filter/search edit box. @@ -45,7 +43,8 @@ enum NetworkGameWidgets { WID_NG_NEWGRF_MISSING, ///< 'Find missing NewGRF online' button. WID_NG_NEWGRF_MISSING_SEL, ///< Selection widget for the above button. - WID_NG_FIND, ///< 'Find server' button. + WID_NG_SEARCH_INTERNET, ///< 'Search internet server' button. + WID_NG_SEARCH_LAN, ///< 'Search LAN server' button. WID_NG_ADD, ///< 'Add server' button. WID_NG_START, ///< 'Start server' button. WID_NG_CANCEL, ///< 'Cancel' button. From ba49fa3b820923512b26b7ec184c33aa3016e1dd Mon Sep 17 00:00:00 2001 From: frosch Date: Thu, 24 Dec 2020 19:05:45 +0100 Subject: [PATCH 399/601] Codechange: Rename strings to match their usage. --- src/lang/afrikaans.txt | 4 ++-- src/lang/belarusian.txt | 4 ++-- src/lang/brazilian_portuguese.txt | 4 ++-- src/lang/bulgarian.txt | 4 ++-- src/lang/catalan.txt | 4 ++-- src/lang/croatian.txt | 4 ++-- src/lang/czech.txt | 4 ++-- src/lang/danish.txt | 4 ++-- src/lang/dutch.txt | 4 ++-- src/lang/english.txt | 4 ++-- src/lang/english_AU.txt | 4 ++-- src/lang/english_US.txt | 4 ++-- src/lang/estonian.txt | 4 ++-- src/lang/finnish.txt | 4 ++-- src/lang/french.txt | 4 ++-- src/lang/gaelic.txt | 4 ++-- src/lang/galician.txt | 4 ++-- src/lang/german.txt | 4 ++-- src/lang/greek.txt | 4 ++-- src/lang/hebrew.txt | 4 ++-- src/lang/hungarian.txt | 4 ++-- src/lang/indonesian.txt | 4 ++-- src/lang/irish.txt | 4 ++-- src/lang/italian.txt | 4 ++-- src/lang/japanese.txt | 4 ++-- src/lang/korean.txt | 4 ++-- src/lang/latin.txt | 4 ++-- src/lang/latvian.txt | 4 ++-- src/lang/lithuanian.txt | 4 ++-- src/lang/luxembourgish.txt | 4 ++-- src/lang/norwegian_bokmal.txt | 4 ++-- src/lang/norwegian_nynorsk.txt | 4 ++-- src/lang/polish.txt | 4 ++-- src/lang/portuguese.txt | 4 ++-- src/lang/romanian.txt | 4 ++-- src/lang/russian.txt | 4 ++-- src/lang/serbian.txt | 4 ++-- src/lang/simplified_chinese.txt | 4 ++-- src/lang/slovak.txt | 4 ++-- src/lang/slovenian.txt | 4 ++-- src/lang/spanish.txt | 4 ++-- src/lang/spanish_MX.txt | 4 ++-- src/lang/swedish.txt | 4 ++-- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 4 ++-- src/lang/traditional_chinese.txt | 4 ++-- src/lang/turkish.txt | 4 ++-- src/lang/ukrainian.txt | 4 ++-- src/lang/unfinished/frisian.txt | 4 ++-- src/lang/unfinished/persian.txt | 2 +- src/lang/vietnamese.txt | 4 ++-- src/lang/welsh.txt | 4 ++-- src/network/network_gui.cpp | 4 ++-- 53 files changed, 104 insertions(+), 104 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 895c5214e4..25d1946b71 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1921,8 +1921,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multispeler -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Openbaar -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Speler naam: diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index f82deae1ec..31487bb3e6 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2231,8 +2231,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Зьмя # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сеткавая гульня -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Інтэрнэт -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтэрнэт +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Не STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Так STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Імя гульца: diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index ed2de430a8..3662a8861e 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1931,8 +1931,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador -STR_NETWORK_SERVER_LIST_ADVERTISED :[BLACK}Publicado -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :[BLACK}Publicado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Não STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sim STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome: diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index a9a48bc093..5c0abd5196 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1842,8 +1842,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмен # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Рекламирана -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Рекламирана +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Не STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Да STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч: diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index fff9299934..bb3651958c 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1939,8 +1939,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Anunciat -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciat +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom del jugador: diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 82f6902028..796a412eb1 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2026,8 +2026,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promijen # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Više igrača -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Sa oglasima -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sa oglasima +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 739de18919..1118c22a7b 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2017,8 +2017,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Změnit # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Vypsané -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Vypsané +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ano STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jméno hráče: diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 001010bf22..0ac79a126b 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1930,8 +1930,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ændre s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netværksspil -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Offentlig -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Offentlig +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nej STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spiller navn: diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 49f861f6fd..99471fe9bf 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1930,8 +1930,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netwerkspel -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Openbaar -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelersnaam: diff --git a/src/lang/english.txt b/src/lang/english.txt index 1683604aac..a735eace9d 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2007,8 +2007,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index f5d1509d6b..593291f62a 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1850,8 +1850,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b4f33a2036..b978cb7a05 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1928,8 +1928,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index fe97b7df82..9f86f5f930 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1944,8 +1944,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaheta k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mitmikmäng -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Reklaamitav -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklaamitav +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jah STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Mängija nimi: diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 712643addc..9c107ce812 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1946,8 +1946,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaihda s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Moninpeli -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Mainostettu -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Mainostettu +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Kyllä STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi diff --git a/src/lang/french.txt b/src/lang/french.txt index 41c9efb34b..10668d93af 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1939,8 +1939,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Modifier # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijoueurs -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Publiée -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiée +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Oui STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom du joueur{NBSP}: diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 59980042de..44f3a378e7 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2087,8 +2087,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Atharrai # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ioma-chluicheadair -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Sanasaichte -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sanasaichte +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Gun sanasachadh STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sanasaichte STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm cluicheadair: diff --git a/src/lang/galician.txt b/src/lang/galician.txt index c8e82dee37..2cedd87f1c 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1923,8 +1923,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia-l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multixogador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Anunciado -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Si STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do xogador: diff --git a/src/lang/german.txt b/src/lang/german.txt index 41724fc7fb..41ece7a738 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1916,8 +1916,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatte # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mehrspieler -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Angekündigt -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Zwischen öffentlich angekündigtem (Internet) und nicht angekündigtem (Local Area Network, LAN) Spiel wählen +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Angekündigt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Zwischen öffentlich angekündigtem (Internet) und nicht angekündigtem (Local Area Network, LAN) Spiel wählen STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nein STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spielername: diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 1b20d0b7b8..e1be46f15f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2016,8 +2016,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Αλλα # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Παιχνίδι πολλών παικτών -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Διαφημιζόμενο -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Διαφημιζόμενο +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Όχι STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ναι STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Όνομα παίκτη: diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 3d9254b199..061f988e2c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1901,8 +1901,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK} שנה # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}משחק רשת -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}מפורסם -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}מפורסם +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :לא STR_NETWORK_SERVER_LIST_ADVERTISED_YES :כן STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK} :שם השחקן diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index ab9f5c37e0..43ae63d8bf 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1994,8 +1994,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Nyakkend # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hálózati játék -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Hírdetett -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hírdetett +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nem STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Igen STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Játékos neve: diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 21ee30b50b..d74b18ec99 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1930,8 +1930,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ubah das # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Bermain bersama -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Diiklankan -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Diiklankan +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Tidak STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ya STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nama pemain: diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 5eda95ae04..1bd2cc2413 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1875,8 +1875,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Athraigh # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ilimreoirí -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Fógartha -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Fógartha +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Níl STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Tá STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm imreora: diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 74cc0acc51..c78fd56183 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1954,8 +1954,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multigiocatore -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Pubblico -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Pubblico +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sì STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome giocatore: diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 30b9aca6ed..27df32cc5c 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1875,8 +1875,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}ネク # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}マルチプレイヤーゲーム -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}ゲーム公示 -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}ゲーム公示 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます STR_NETWORK_SERVER_LIST_ADVERTISED_NO :非公示 STR_NETWORK_SERVER_LIST_ADVERTISED_YES :公示 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}プレイヤー名: diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 12f4257cb1..e3135c023a 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1947,8 +1947,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}넥타 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}멀티 플레이 -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}공개 여부 -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하십시오. +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}공개 여부 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하십시오. STR_NETWORK_SERVER_LIST_ADVERTISED_NO :아니요 STR_NETWORK_SERVER_LIST_ADVERTISED_YES :예 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}플레이어 이름: diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 7a8679dcd5..d218e55b7e 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2094,8 +2094,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mutare f # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Modus Plurium Lusorum -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Ostensum -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ostensum +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ita STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nomen lusoris: diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 2167b56fdc..863a52f2a3 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1942,8 +1942,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mainīt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Vairākspēlētāju spēle -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Izsludināt -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Izsludināt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nē STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jā STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spēlētāja vārds: diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index b91c6a471e..f211546ea7 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2104,8 +2104,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Pakeisti # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Žaidimas tinkle -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Reklamuoti -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Pasirinkite tarp reklamuojamo (internetas) ir nereklamuojamo (Vietinis Tinklas, LAN) žaidimo +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklamuoti +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pasirinkite tarp reklamuojamo (internetas) ir nereklamuojamo (Vietinis Tinklas, LAN) žaidimo STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Taip STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Žaidėjo vardas: diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 595cb1dc16..749c7e12ba 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1929,8 +1929,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Ugekënnegt -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Wiel tëschent engem ugekënnegten (Internet) an net ugekënnegten (LAN) Spill +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ugekënnegt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wiel tëschent engem ugekënnegten (Internet) an net ugekënnegten (LAN) Spill STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jo STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spillernumm: diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 76a9d49e38..4dd19b613a 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1931,8 +1931,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Endre sl # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Flerspiller -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Annonsert -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Velg mellom et utlyst (internett) og et ikke utlyst (Lokalnettverk, LAN) spill +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Annonsert +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Velg mellom et utlyst (internett) og et ikke utlyst (Lokalnettverk, LAN) spill STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nei STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spillernavn: diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 9ae7bdfbfc..51ca5aa742 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1799,8 +1799,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Byt slip # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Fleirspelar -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Kunngjort -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Vel mellom spel på internett (kunngjort) og spel på lokalt nett (ikkje kunngjort) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Kunngjort +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vel mellom spel på internett (kunngjort) og spel på lokalt nett (ikkje kunngjort) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nei STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelarnamn: diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 34a674a772..c20f2894a0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2318,8 +2318,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmień k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Gra wieloosobowa -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Publiczny -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Wybierz między rozgrywkami reklamowanymi (internetowymi) a niereklamowanymi (w sieci lokalnej LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiczny +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wybierz między rozgrywkami reklamowanymi (internetowymi) a niereklamowanymi (w sieci lokalnej LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nie STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Tak STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nazwa gracza: diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index f468725ecf..1619365a93 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1918,8 +1918,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mudar gr # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Anunciado -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Escolher entre jogo público (internet) e privado (Área de Rede Local, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolher entre jogo público (internet) e privado (Área de Rede Local, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Não STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sim STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do jogador: diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 6aabc5dfc3..132b9bc32a 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1868,8 +1868,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Schimbă # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Publicat -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publicat +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nu STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Numele jucătorului: diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 66ab819360..e4d40051da 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2090,8 +2090,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Изме # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сетевая игра -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Интернет -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Выберите между игрой через Интернет, либо в локальной сети +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Интернет +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберите между игрой через Интернет, либо в локальной сети STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Нет STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Да STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Имя игрока: diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 4b5d1ce3f6..5fb756a846 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2082,8 +2082,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promena # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mrežna partija -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK} Sa reklamama -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Odaberite između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK} Sa reklamama +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberite između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index dc26d6b43b..e9dd7b7bbf 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1930,8 +1930,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}选择 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}联机游戏 -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}发布到互联网 -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}选择是否将游戏发布到官方服务器列表。发布的话,可以让互联网上的玩家找到你的服务器并加入游戏,否则进行局域网内的游戏。 +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}发布到互联网 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}选择是否将游戏发布到官方服务器列表。发布的话,可以让互联网上的玩家找到你的服务器并加入游戏,否则进行局域网内的游戏。 STR_NETWORK_SERVER_LIST_ADVERTISED_NO :否 STR_NETWORK_SERVER_LIST_ADVERTISED_YES :是 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}玩家名称: diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 3c5a3da3e2..34546b11ef 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2006,8 +2006,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmeniť # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hra pre viac hráčov -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Zverejnené -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Vyberte medzi zverejnenou (internet) alebo nezverejnenou (lokálna sieť, LAN) hrou +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Zverejnené +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyberte medzi zverejnenou (internet) alebo nezverejnenou (lokálna sieť, LAN) hrou STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nie STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Áno STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Meno hráča: diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 8fb879315e..c493b1d239 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2031,8 +2031,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Spremeni # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Več igralcev -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Oglaševano -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Izberi med oglaševano (internet) in neoglaševano (Local Area Network, LAN) igro +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Oglaševano +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izberi med oglaševano (internet) in neoglaševano (Local Area Network, LAN) igro STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igralca: diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 22715e1666..662a067452 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1931,8 +1931,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambiar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Público -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Permite escoger entre una partida pública (internet) y una partida privada (LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permite escoger entre una partida pública (internet) y una partida privada (LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nombre del jugador: diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 05beb7eb09..ab4340fb46 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1931,8 +1931,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambiar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Público -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Permitir escoger entre una partida pública (Internet) y una partida privada (LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permitir escoger entre una partida pública (Internet) y una partida privada (LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nombre del jugador: diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 4875627f6e..3380d9985b 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1930,8 +1930,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ändra s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Flera spelare -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Publikt -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Välj mellan ett publikt (internet) eller icke publikt (Local Area Network. LAN) spel +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publikt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Välj mellan ett publikt (internet) eller icke publikt (Local Area Network. LAN) spel STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nej STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelarnamn: diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 1f43ad1f88..8d6f31b66b 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1720,7 +1720,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Tie அ # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}பல்வீரர் -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}விளம்பரப்படுத்தப்பட்ட +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}விளம்பரப்படுத்தப்பட்ட STR_NETWORK_SERVER_LIST_ADVERTISED_NO :இல்லை STR_NETWORK_SERVER_LIST_ADVERTISED_YES :ஆம் STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}விளையாடுபவரின் பெயர்: diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 7d0a21e6da..6974910256 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1824,8 +1824,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}เป # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}เล่นหลายคน -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}การประกาศ -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}เลือกระหว่างการโฆษณา (internet) หรือไม่โฆษณา (Local Area Network, LAN) เกม +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}การประกาศ +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}เลือกระหว่างการโฆษณา (internet) หรือไม่โฆษณา (Local Area Network, LAN) เกม STR_NETWORK_SERVER_LIST_ADVERTISED_NO :ไม่ใช่ STR_NETWORK_SERVER_LIST_ADVERTISED_YES :ใช่ STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}ชื่อผู้เล่น: diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 1be89fc1a9..4378e68def 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1878,8 +1878,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}改變 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}多人遊戲 -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}已啟用宣傳 -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}選擇是否在互聯網上宣傳此遊戲 +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}已啟用宣傳 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}選擇是否在互聯網上宣傳此遊戲 STR_NETWORK_SERVER_LIST_ADVERTISED_NO :否 STR_NETWORK_SERVER_LIST_ADVERTISED_YES :是 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}玩家名稱: diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index b9c5a8c3c4..dabcf38102 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1931,8 +1931,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Kravatı # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Çok Oyunculu -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Duyurulan -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Duyurulan (internet) ve duyurulmayan (yerel ağ, LAN) oyun türlerinden birini seçin +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Duyurulan +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Duyurulan (internet) ve duyurulmayan (yerel ağ, LAN) oyun türlerinden birini seçin STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Hayır STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Evet STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Oyuncu adı: diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index f1cc85fcb1..80957f3b30 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2058,8 +2058,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Змін # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Мережева гра -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Інтернет -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Вибір між рекламованою (інтернет) і не рекламованою (локальна мережа, LAN) грою +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтернет +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Вибір між рекламованою (інтернет) і не рекламованою (локальна мережа, LAN) грою STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ні STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Так STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ім'я гравця: diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 8c5957937d..cf8cbb22a2 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1800,8 +1800,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Feroarje # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertearre -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tusken in advertearre (ynternet) of in net-advertearre (LAN) spul +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertearre +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tusken in advertearre (ynternet) of in net-advertearre (LAN) spul STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Namme fan spieler: diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index e342772d3e..186f60e93a 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1590,7 +1590,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}تغیی # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}چندنفره -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}تبلیغ دار +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}تبلیغ دار STR_NETWORK_SERVER_LIST_ADVERTISED_NO :خیر STR_NETWORK_SERVER_LIST_ADVERTISED_YES :بله STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}نام بازیگر: diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 6e1cf35b12..2d02f45952 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1932,8 +1932,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Thay đ # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ván Chơi Mạng -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Đã quảng bá -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Lựa chọn ván chơi quảng bá (ra ngoài internet) và không quảng bá (Local Area Network, LAN) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Đã quảng bá +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Lựa chọn ván chơi quảng bá (ra ngoài internet) và không quảng bá (Local Area Network, LAN) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Không STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Có STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Tên người chơi: diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 0fbb9efe9f..2f6048c31c 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1883,8 +1883,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Newid te # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Amlchwaraewr -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Hysbys -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Dewis rhwyd gêm a hysbysebir (rhyngrwyd) neu un anhysbys (rhwydwaith leol) +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hysbys +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dewis rhwyd gêm a hysbysebir (rhyngrwyd) neu un anhysbys (rhwydwaith leol) STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Na STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ia STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Enw chwaraewr: diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index b6449b5246..cd57e9af9f 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1248,8 +1248,8 @@ static const NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_ADVERTISED, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP), + NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_ADVERTISED_LABEL, STR_NULL), + NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_LANGUAGE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN, STR_NULL), From 7b515fa0e287e45aee8281f44ea357498b22020f Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 25 Dec 2020 13:07:40 +0000 Subject: [PATCH 400/601] Update: Translations from eints --- src/lang/afrikaans.txt | 11 ++--------- src/lang/arabic_egypt.txt | 5 ----- src/lang/basque.txt | 7 ------- src/lang/belarusian.txt | 11 ++--------- src/lang/brazilian_portuguese.txt | 11 ++--------- src/lang/bulgarian.txt | 11 ++--------- src/lang/catalan.txt | 11 ++--------- src/lang/croatian.txt | 11 ++--------- src/lang/czech.txt | 11 ++--------- src/lang/danish.txt | 11 ++--------- src/lang/dutch.txt | 11 ++--------- src/lang/english_AU.txt | 11 ++--------- src/lang/english_US.txt | 11 ++--------- src/lang/esperanto.txt | 5 ----- src/lang/estonian.txt | 11 ++--------- src/lang/faroese.txt | 4 ---- src/lang/finnish.txt | 11 ++--------- src/lang/french.txt | 11 ++--------- src/lang/gaelic.txt | 11 ++--------- src/lang/galician.txt | 11 ++--------- src/lang/german.txt | 11 ++--------- src/lang/greek.txt | 11 ++--------- src/lang/hebrew.txt | 11 ++--------- src/lang/hungarian.txt | 11 ++--------- src/lang/icelandic.txt | 5 ----- src/lang/indonesian.txt | 11 ++--------- src/lang/irish.txt | 11 ++--------- src/lang/italian.txt | 11 ++--------- src/lang/japanese.txt | 11 ++--------- src/lang/korean.txt | 11 ++--------- src/lang/latin.txt | 11 ++--------- src/lang/latvian.txt | 11 ++--------- src/lang/lithuanian.txt | 11 ++--------- src/lang/luxembourgish.txt | 11 ++--------- src/lang/malay.txt | 5 ----- src/lang/norwegian_bokmal.txt | 11 ++--------- src/lang/norwegian_nynorsk.txt | 11 ++--------- src/lang/polish.txt | 11 ++--------- src/lang/portuguese.txt | 11 ++--------- src/lang/romanian.txt | 11 ++--------- src/lang/russian.txt | 11 ++--------- src/lang/serbian.txt | 11 ++--------- src/lang/simplified_chinese.txt | 11 ++--------- src/lang/slovak.txt | 11 ++--------- src/lang/slovenian.txt | 11 ++--------- src/lang/spanish.txt | 11 ++--------- src/lang/spanish_MX.txt | 11 ++--------- src/lang/swedish.txt | 11 ++--------- src/lang/tamil.txt | 9 +-------- src/lang/thai.txt | 11 ++--------- src/lang/traditional_chinese.txt | 11 ++--------- src/lang/turkish.txt | 11 ++--------- src/lang/ukrainian.txt | 11 ++--------- src/lang/unfinished/chuvash.txt | 3 --- src/lang/unfinished/frisian.txt | 10 ++-------- src/lang/unfinished/ido.txt | 1 - src/lang/unfinished/persian.txt | 9 +-------- src/lang/unfinished/urdu.txt | 5 ----- src/lang/vietnamese.txt | 11 ++--------- src/lang/welsh.txt | 11 ++--------- 60 files changed, 100 insertions(+), 496 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 25d1946b71..27c04099c3 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1598,9 +1598,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineêre STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Binne speletjie plasing van bome: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheer die ewekansige voorkoms van bome tydens die spel. Dit kan 'n invloed op nywerhede hê wat staatmaak op die groei van bome, byvoorbeeld hout meulens -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Geen {RED}(breek timmerhout meul) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Slegs in reënwoude -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Orals STR_CONFIG_SETTING_TOOLBAR_POS :Posisie van hoof werktuigbaan: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horisontale posisie van die hoof nutsbalk aan die bokant van die skerm @@ -1921,10 +1918,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multispeler -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Speler naam: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Die is die naam waarmee ander spelers sal jou aanwys @@ -1965,8 +1958,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Verbind STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Vervris verskaffer STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Vervris die verskaffer inligting -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Soek bediener -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Versoek netwerk vir 'n verskaffer STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Voeg bediender by STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Voeg 'n verskaffer by die lys wat altyd ondersoek sal word vir speletjies wat reeds aan die gang is STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Begin bediener @@ -1983,6 +1974,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Die spel STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Stel wagwoord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskerm jou spel met 'n wagwoord as jy wil dit nie publieke toepassing laat wees nie +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Klient{P "" e} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 4e105d4bdb..7f342e7b3c 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1316,9 +1316,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :مسموح STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :مسموح - نمط مدينة قابل للتعديل STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :اضافة الاشجار اثناء اللعب: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :بدون {RED}-المشغولات الخشبية معطل- -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :الغابات الماطرة فقط -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :كل مكان STR_CONFIG_SETTING_TOOLBAR_POS :موقع شريط الأدوات الرئيسي: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :موقع شريط المعلومات: {STRING} @@ -1594,8 +1591,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}أنضم STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}حدث الخادم STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}حدث معلومات الخادم -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}إبحث عن خوادم -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}أبحث في الشبكة عن خادم STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}اضف خادم - سيرفر STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}اضف خادم (سيرفر) و الذي سوف يفحص اذا كان هناك لعبة قيد التشغيل حاليا STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}أبدأ الخادم diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 07838daee4..9e63803637 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1499,9 +1499,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Gaitua herrien STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Zuhaitzen landaketa jokoan: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Jokoa bitartean zuhaitzen ausazko landatzea kontrolatu. Zuhaitzen landatzean oinarritzen diren industriei eragin dezake, zerrategiei adibidez -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ezer ez {RED}(Paisai tropikalean zerrategiak hautsiko ditu) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Bakarrik basoetan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Leku guztietan STR_CONFIG_SETTING_TOOLBAR_POS :Tresna barra nagusiaren kokapena: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Tresna barra nagusia posizio horizontalean pantailaren goiko aldean @@ -1794,8 +1791,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Aldatu k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijokalaria -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ez -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Bai STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jokalariaren izena: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Izen honen bidez ezagutua izango zara beste jokalarien artean @@ -1836,8 +1831,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Jokoan s STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Zerbitzaria freskatu STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Zerbitzariaren informazioa freskatu -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Zerbitzaria bilatu -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Sarean zerbitzariak bilatu STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Zerbitzaria gehitu STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Zerrendara zerbitzari bat gehitu martxa dauden jokoak bilatuko dituena STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Zerbitzari bat sortu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 31487bb3e6..c297aefdf3 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1907,9 +1907,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінейна STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Расстаноўка дрэваў у гульні: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Кантроль адвольнага з'яўленьня дрэваў падчас гульні. Гэта можа закрануць прадпрыемствы, якія залежаць ад росту дрэваў, напрыклад, пільні. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :адключана {RED}(пільні ня змогуць працаваць) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :толькі ў трапічных джунґлях -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :усюды STR_CONFIG_SETTING_TOOLBAR_POS :Разьмяшчэньне галоўнай панэлі: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Гарызантальнае разьмяшчэньне галоўнай панэлі інструмэнтаў зьверху экрана. @@ -2231,10 +2228,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Зьмя # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сеткавая гульня -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтэрнэт -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Не -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Так STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Імя гульца: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Гэта ваша імя, якое будзе бачна іншым гульцам @@ -2275,8 +2268,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Далу STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Абнавіць сэрвэр STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Абнавіць iнфармацыю аб сэрвэры -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Знайсьці сэрвэр -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Знайсьці сэрвэры, якія зараз ёсьць у сетцы STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Дадаць сэрвэр STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Дадаць сэрвэр у сьпіс, які будзе аўтаматычна правярацца на ідучыя гульні STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Запуск сэрвэра @@ -2293,6 +2284,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Усталяваць пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Абараніце вашу гульню паролем, калі ня хочаце рабіць яе публічна даступнай +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтэрнэт +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы STR_NETWORK_START_SERVER_UNADVERTISED :Не STR_NETWORK_START_SERVER_ADVERTISED :Так STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клiент{P "" ы аў} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 3662a8861e..97a5f59fab 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1607,9 +1607,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Posicionamento de árvores: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o nascimento aleatório de árvores durante o jogo. Isso pode afetar indústrias que dependem do crescimento de árvores, como serrarias -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nenhum {RED}(extingue a serraria) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Apenas nas florestas tropicais -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Em todo o lugar STR_CONFIG_SETTING_TOOLBAR_POS :Posição da barra de ferramentas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal da barra de ferramentas principal no topo da tela @@ -1931,10 +1928,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :[BLACK}Publicado -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Não -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sim STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Este é o nome pelo qual os outros jogadores irão te identificar @@ -1975,8 +1968,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entrar n STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atualizar dados STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atualiza as informações sobre o servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Localizar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Pesquisar por um servidor na rede STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adicionar servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona um servidor à lista que será sempre verificada se existem jogos ocorrendo STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor @@ -1993,6 +1984,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir senha STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que seja publicamente acessível +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :[BLACK}Publicado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Não STR_NETWORK_START_SERVER_ADVERTISED :Sim STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 5c0abd5196..99183c8498 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1548,9 +1548,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Разреше STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Разпределяне на дърветата в гората: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Контролирайте случайното появяване на дървета по време на игра. Това може да засегне промишленостите, които зависят от растежа на дървета, като например дърводелниците -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Без {RED}(разваля дъскорезницата) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Само в дъждовни гори -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Навсякъде STR_CONFIG_SETTING_TOOLBAR_POS :Позиция на лентата за инструменти: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Хоризонтално позициониране на основната лента в горната част на екрана @@ -1842,10 +1839,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмен # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Рекламирана -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Не -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Да STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Чрез това име другите играчи ще ви идентифицират @@ -1886,8 +1879,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Прис STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Обновяване сървъра STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обновява информацията за съръра -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Търсене на сървър -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Претърсване на мрежата за сървър STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добави сървър STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добяви сървър към списакът, който винаги ще бъде проверяван за активни игри. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Пускане на сървър @@ -1904,6 +1895,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Имет STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Поставяне на парола STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Рекламирана +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН STR_NETWORK_START_SERVER_UNADVERTISED :Не STR_NETWORK_START_SERVER_ADVERTISED :Да STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index bb3651958c..872ed5974b 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1613,9 +1613,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Disposició de nous arbres durant la partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla l'aparició aleatòria dels arbres durant una partida. Això podria afectar a les indústries que es basen en el creixement dels arbres, per exemple les serradores -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Cap {RED}(inhabilita la serradora) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Només a les selves tropicals -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :A tot arreu STR_CONFIG_SETTING_TOOLBAR_POS :Posició de la barra d'eines principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posició horitzontal de la barra principal a la part superior de la pantalla @@ -1939,10 +1936,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciat -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom del jugador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Aquest és el nom amb el que els altres jugadors t'identificaran @@ -1983,8 +1976,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Connecta STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualitza servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualitza la informació del servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Busca servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cercant un servidor a la xarxa STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Afegeix un servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Afegeix un servidor a la llista que sempre es comprovarà per buscar partides en marxa STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Inicia el servidor @@ -2001,6 +1992,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}El nom d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Posa una contrasenya STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegeix la teva partida amb una contrasenya si no vols que sigui accessible a desconeguts +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciat +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 796a412eb1..66b02221e2 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1702,9 +1702,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearno STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Smještaj drveća u igri: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroliraj nasumično pojavljivanje stabala tijekom igre. Ovo može utjecati na industrije koje ovise o rastu stabala, npr. pilane -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nigdje {RED}(uništava pilanu) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Samo u kišnim šumama -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Posvuda STR_CONFIG_SETTING_TOOLBAR_POS :Položaj glavne alatne trake: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Vodoravna pozicija glavne alatne trake na vrhu zaslona @@ -2026,10 +2023,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promijen # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Više igrača -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sa oglasima -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ovo je ime po kojem će te drugi igrači raspoznavati @@ -2070,8 +2063,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pridruž STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Osvježi poslužitelj STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Osvježi podatke o poslužitelju -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Pronađi poslužitelj -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Pronađi poslužitelje u mreži STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Dodaj poslužitelj STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Dodaje poslužitelj na popis koji će uvijek biti provjeren postoje li igre u tijeku. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Pokreni poslužitelj @@ -2088,6 +2079,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Ime igre STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Postavi zaporku STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sa oglasima +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klijen{P t ta ata} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 1118c22a7b..41b3020ade 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1693,9 +1693,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineární STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Umístění stromů ve hře: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Náhodné umisťování stromů během hry. Může ovlivnit průmysl závisející na růstu stromů, například pily. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Žádné {RED}(nefunguje pila) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Jen v deštných pralesech -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Všude STR_CONFIG_SETTING_TOOLBAR_POS :Umístění hlavní lišty: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontální pozice hlavního panelu v horní části obrazovky @@ -2017,10 +2014,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Změnit # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Vypsané -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ano STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jméno hráče: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Podle tohoto jména tě ostatní hráči poznají @@ -2061,8 +2054,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Přidat STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Obnovit info STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Znovu načte informace o serveru -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Najít server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Hledat server v síti STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Přidat server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Přidá server do seznamu, ve kterém se budou hledat běžící hry STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Spustit server @@ -2079,6 +2070,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Jméno h STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastavit heslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Svoji hru si můžeš ochránit heslem, když nechceš, aby se ti do ni hlásili jiní lidé +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Vypsané +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Ano STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ů} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 0ac79a126b..892782abcd 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1606,9 +1606,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Placering af træer i spillet: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroller den tilfældige fremkomst af træer i løbet af spillet. Dette vil påvirke industrier der afhænger træers vækst, f.eks. savværker -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ingen {RED}(ødelægger træfabrik) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Kun i regnskove -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Alle steder STR_CONFIG_SETTING_TOOLBAR_POS :Placering af værktøjslinje: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horisontal placering af hovedværktøjlinjen i toppen af skærmen @@ -1930,10 +1927,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ændre s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netværksspil -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Offentlig -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nej -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spiller navn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dette er det navn, som andre spillere vil kende dig ved @@ -1974,8 +1967,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Tilslut STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Genopfrisk server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Genopfrisk serverens info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Søg netværket for en server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Tilføj server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Tilføjer en server til listen, som altid vil blive tjekket for kørerende spil. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -1992,6 +1983,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Navnet v STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sæt kodeord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Offentlig +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil STR_NETWORK_START_SERVER_UNADVERTISED :Nej STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 99471fe9bf..1ff98d11da 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1606,9 +1606,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineair STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Geen {RED}(houtzagerijen werken niet) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Alleen in regenwouden -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Overal STR_CONFIG_SETTING_TOOLBAR_POS :Positie van algemene knoppenbalk: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale positie van de algemene taakbalk aan de bovenkant van het scherm. @@ -1930,10 +1927,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netwerkspel -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelersnaam: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dit is de naam waarmee andere spelers je herkennen @@ -1974,8 +1967,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Meespele STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ververs server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ververs de informatie over deze server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Server zoeken -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Zoek op het netwerk naar een server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Voeg server toe STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Voegt een server toe aan de lijst die altijd gecontroleerd zal worden op draaiende spellen STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -1992,6 +1983,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De speln STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwoord instellen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beveilig je spel met een wachtwoord als je niet wilt dat dit algemeen toegankelijk is +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 593291f62a..44efedb7f7 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1532,9 +1532,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In game placement of trees: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :None {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Only in rain forests -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Everywhere STR_CONFIG_SETTING_TOOLBAR_POS :Position of main toolbar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal position of the main toolbar at the top of the screen @@ -1850,10 +1847,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}This is the name other players will identify you by @@ -1894,8 +1887,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Join gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh the server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Search network for a server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Add server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adds a server to the list which will always be checked for running games STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -1912,6 +1903,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b978cb7a05..38d01204f4 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1604,9 +1604,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In-game placement of trees: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :None {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Only in rain forests -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Everywhere STR_CONFIG_SETTING_TOOLBAR_POS :Position of main toolbar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal position of the main toolbar at the top of the screen @@ -1928,10 +1925,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}This is the name other players will identify you by @@ -1972,8 +1965,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Join gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh the server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Search network for a server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Add server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adds a server to the list which will always be checked for running games STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -1990,6 +1981,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index d2be60700f..0adcf0b115 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1326,9 +1326,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :permesate STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :permesate, kutimo urbomapo STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :En ludo metanta de arbojn: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :neniu {RED}(rompas ligno muelilo) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :nur en tropika praarbaroj -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ĉie STR_CONFIG_SETTING_TOOLBAR_POS :Loko de ĉefa ilbreto: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :Loko de kondiĉbaro: {STRING} @@ -1574,8 +1571,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Aliĝu a STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refreŝigu servilon STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refreŝigu servilajn informojn -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Trovu servilon -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Serĉu reton por servilo STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Aldonu servilon STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Aldonas servilon al la listo kiu ĉiam estos kontrolata pri kurantaj ludoj STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Startu servilon diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 9f86f5f930..74b827f3f4 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1621,9 +1621,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Lubatud, koos l STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Mängu jooksul kasvavad puud: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Juhib suvalist puude kasvu mängu jooksul. See seade võib mõjutada osade tööstuste tööd, mis sõltuvad puude kasvust (näiteks saekaater) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ei {RED}(saeveski ei tööta) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Ainult vihmametsades -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Igal pool STR_CONFIG_SETTING_TOOLBAR_POS :Peamine tarvikuriba paikneb: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Tarvikuriba rõhtne paiknemine ekraani ülaosas @@ -1944,10 +1941,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaheta k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mitmikmäng -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklaamitav -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jah STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Mängija nimi: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Teised mängijad tunnevad sind selle nime järgi @@ -1988,8 +1981,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liitu m STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Uuenda andmeid STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Serveri info värskendamine -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Uuenda loendit -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Uuenda võrgus asuvate serverite loendit STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Sisesta server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Sisesta loendisse uus server, milles toimuvaid mänge jälgida STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tee server @@ -2006,6 +1997,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Serveril STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Määra salasõna STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Et server ei oleks avalik, kaitse oma mäng salasõnaga +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklaamitav +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu STR_NETWORK_START_SERVER_UNADVERTISED :Jah STR_NETWORK_START_SERVER_ADVERTISED :Jah STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index d8b5c1f95f..0b2c1fa2b8 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1697,8 +1697,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Broyt sl # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hópspæl -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spælara navn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Hetta er navni aðrir spælarir fara at kenna teg vi @@ -1739,8 +1737,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Tak lut STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Endurnýggja servara STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Endurnýggja kunning um servara -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Finn servara -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Leita eftir servara á netverki STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Legg servara aftrat STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Leggur ein servara til listan sum altíð verður kannaður fyri koyrandi spøl STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Set servara í gongd diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 9c107ce812..254621dce4 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1620,9 +1620,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Puiden istutus pelissä: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ei ollenkaan {RED}(rikkoo sahan) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Vain sademetsiin -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Kaikkialle STR_CONFIG_SETTING_TOOLBAR_POS :Päätyökalupalkin sijainti: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ruudun yläreunassa olevan työkalupalkin sijainti vaakasuunnassa @@ -1946,10 +1943,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaihda s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Moninpeli -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Mainostettu -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Kyllä STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla @@ -1990,8 +1983,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liity pe STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Päivitä STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Etsi palvelin -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Etsi palvelin verkosta STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Lisää palvelin STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lisää palvelin listaan, joka käydään läpi aina uusia pelejä haettaessa STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Käynnistä palvelin @@ -2008,6 +1999,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi nä STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Mainostettu +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli STR_NETWORK_START_SERVER_UNADVERTISED :Ei STR_NETWORK_START_SERVER_ADVERTISED :Kyllä STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta} diff --git a/src/lang/french.txt b/src/lang/french.txt index 10668d93af..6b08754c75 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1613,9 +1613,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linéaire STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plantation d'arbres durant la partie{NBSP}: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Contrôle l'apparition aléatoire des arbres durant la partie. Cela peut affecter les industries qui dépendent de la croissance des arbres, par exemple les scieries -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nulle part {RED}(les scieries ne fonctionneront plus) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Seulement dans les forêts tropicales -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Partout STR_CONFIG_SETTING_TOOLBAR_POS :Position de la barre d'outils principale{NBSP}: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Position horizontale de la barre d'outils principale en haut de l'écran @@ -1939,10 +1936,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Modifier # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijoueurs -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiée -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Oui STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom du joueur{NBSP}: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ceci est le nom sous lequel vous serez connu des autres joueurs @@ -1983,8 +1976,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Rejoindr STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualiser STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualiser les informations sur le serveur -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Trouver un serveur -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Chercher un serveur sur le réseau STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Ajouter un serveur STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ajouter un serveur à la liste de ceux parmi lesquels des parties en cours seront toujours cherchées STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Démarrer le serveur @@ -2001,6 +1992,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Les autr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Choisir le mot de passe STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protégez votre partie avec un mot de passe si vous ne souhaitez pas que d'autres l'utilisent +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiée +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Non STR_NETWORK_START_SERVER_ADVERTISED :Oui STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 44f3a378e7..3db73e8bb0 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1763,9 +1763,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Ceadaichte, co- STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Cur nan craobh sa gheama: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Cùm smachd air na craobhan a nochdas sa gheama air thuaiream. Dh'fhaoidte gun toir seo buaidh air gnìomhachasan a tha an eisimeil fàs nan craobhan a leithid muileannan-fiodha -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Chan eil gin {RED}(brisidh seo muileannan-fiodha) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Ann an coilltean-uisge a-mhàin -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Àite sam bith STR_CONFIG_SETTING_TOOLBAR_POS :Ionad a' phrìomh bhàir-inneal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ionad còmhnard a' phrìomh bhàir-inneal air barr na sgrìn @@ -2087,10 +2084,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Atharrai # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ioma-chluicheadair -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sanasaichte -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Gun sanasachadh -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sanasaichte STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm cluicheadair: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Seo an t-ainm leis an aithnich cluicheadairean eile thu @@ -2131,8 +2124,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Gabh sa STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ath-nuadhaich am frithealaiche STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ath-nuadhaich fiosrachadh an fhrithealaiche -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Lorg frithealaiche -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Lorg san lìonraidh airson frithealaiche STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Cuir frithealaiche ris STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Cuiridh seo frithealaiche ris an liosta gus an tèid sùil a thoirt air airson geamannan nan ruith STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tòisich frithealaiche @@ -2149,6 +2140,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Thèid a STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Suidhich facal-faire STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Dìon an geama agad le facal-faire ach nach eil e ri fhaighinn gu poblach +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sanasaichte +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Chan eil STR_NETWORK_START_SERVER_ADVERTISED :Tha STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P chliant chliant cliantan cliant} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 2cedd87f1c..82c7be26a3 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1599,9 +1599,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Colocación de árbores durante a partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla a aparición aleatoria de árbores durante a partida. Isto pode afectar ás industrias que dependan do crecemento arbóreo, por exemplo o serradoiro -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ningún {RED}(rompe o serradoiro) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Só nos bosques -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :En todas partes STR_CONFIG_SETTING_TOOLBAR_POS :Posición da barra de ferramentas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posición horizontal da barra de ferramentas principal da parte superior da pantalla @@ -1923,10 +1920,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia-l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multixogador -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Si STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do xogador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Este é o nome polo que te identificarán os outros xogadores @@ -1967,8 +1960,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Unirse STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualizar servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualiza-la información do servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Procurar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Buscar un servidor na rede STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Engadir servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Engade un servidor á lista que será comprobado sempre para buscar partidas. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor @@ -1985,6 +1976,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contrasinal STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protexe a túa partida cun contrasinal se non queres ser accesible públicamente +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Non STR_NETWORK_START_SERVER_ADVERTISED :Si STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} diff --git a/src/lang/german.txt b/src/lang/german.txt index 41ece7a738..d5fa23a4b7 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1592,9 +1592,6 @@ 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 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nirgends {RED}(macht Sägemühle nutzlos) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Nur im Regenwald -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :überall STR_CONFIG_SETTING_TOOLBAR_POS :Position der Werkzeugleiste: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale Position der Bauleiste am oberen Bildschirmrand @@ -1916,10 +1913,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatte # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mehrspieler -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Angekündigt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Zwischen öffentlich angekündigtem (Internet) und nicht angekündigtem (Local Area Network, LAN) Spiel wählen -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nein -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spielername: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dieser Name dient zur Identifizierung anderen Spielern gegenüber @@ -1960,8 +1953,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Spiel be STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Aktualisieren STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Aktualisiert die Serverinformationen -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Server suchen -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Netzwerk nach einem Server durchsuchen STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Server hinzufügen STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Fügt einen Server zu der Liste von Servern hinzu, die immer nach laufenden Spielen kontrolliert werden STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Server starten @@ -1978,6 +1969,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Der Name STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Passwort setzen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Ein Passwort verhindert, dass unbefugte Leute beitreten +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Angekündigt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Zwischen öffentlich angekündigtem (Internet) und nicht angekündigtem (Local Area Network, LAN) Spiel wählen STR_NETWORK_START_SERVER_UNADVERTISED :Nein STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Teilnehmer diff --git a/src/lang/greek.txt b/src/lang/greek.txt index e1be46f15f..e60bdf374e 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1692,9 +1692,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Γραμμικ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Τοποθέτηση δέντρων εντός παιχνιδιού: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Έλεγχος της τυχαίας εμφάνισης δέντρων κατά τη διάρκεια του παιχνιδιού. Αυτό είναι πιθανό να επηρεάσει βιομηχανίες που εξαρτώνται από την ανάπτυξη των δέντρων, όπως για παράδειγμα οι υλοτομίες -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Κανένα {RED}(καταστρέφει το ξυλουργείο) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Μόνο σε τροπικά δάση -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Παντού STR_CONFIG_SETTING_TOOLBAR_POS :Θέση κύριας εργαλειοθήκης: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Οριζόντια τοποθέτηση της κύριας γραμμής εργαλείων στο επάνω μέρος της οθόνης @@ -2016,10 +2013,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Αλλα # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Παιχνίδι πολλών παικτών -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Διαφημιζόμενο -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Όχι -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ναι STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Όνομα παίκτη: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Αυτό είναι το όνομα με το οποίο θα σας αναγνωρίζουν οι άλλοι παίκτες @@ -2060,8 +2053,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Συμμ STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ανανέωση διακομιστή STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ανανεώση πληροφοριών του διακομιστή -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Αναζήτηση διακομιστή -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Ψάξτε το δίκτυο για ένα διακομιστή STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Προσθήκη διακομιστή STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Προσθέτει ένα διακομιστή στη λίστα ο οποίος θα ελέγχεται κάθε φορά για ενεργά παιχνίδια. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Εκκίνηση διακομιστή @@ -2078,6 +2069,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Το ό STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Θέση κωδικού STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Προστατέψτε το παιχνίδι με έναν κωδικό εάν δε θέλετε να είναι δημοσίως προσβάσιμο +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Διαφημιζόμενο +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι STR_NETWORK_START_SERVER_UNADVERTISED :Όχι STR_NETWORK_START_SERVER_ADVERTISED :Ναι STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} συμπαίκτ{P ης ες} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 061f988e2c..2d59515113 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1578,9 +1578,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :מותר, מת STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :מיקום עצים במהלך המשחק: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :שלוט בהופעה אקראית של עצים במהלך המשחק. זה עלול להשפיע על תעשיות המסתמכות על צמיחת עצים, לדוגמא מנסרות -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ללא {RED}(שובר מנסרת עץ) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :רק ביערות גשם -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :בכל מקום STR_CONFIG_SETTING_TOOLBAR_POS :{STRING} :מיקום הסרגל העיקרי STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :מיקום אופקי של סרגל הכלים הראשי בראש המסך @@ -1901,10 +1898,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK} שנה # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}משחק רשת -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}מפורסם -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :לא -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :כן STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK} :שם השחקן STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}זהו שמך כפי שיצפה ע"י המשתתפים האחרים @@ -1945,8 +1938,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}הצטר STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}רענן שרת STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}רענן את המידע המוצג לגבי השרת -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}אתר שרת -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}סרוק את הרשת לאיתור שרת STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}הוסף שרת STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}מוסיף שרת לרשימה שתמיד תבדק למשחקים פעילים. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}הפעל שרת @@ -1963,6 +1954,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}השם STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}קבע סיסמה STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}הגן על המשחק שלך עם סיסמה אם אתה לא רוצה שהוא יהיה זמין לכולם +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}מפורסם +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :לא STR_NETWORK_START_SERVER_ADVERTISED :כן STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} לקוח{P "" "ות"} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 43ae63d8bf..1d543d19b6 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1670,9 +1670,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineáris STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Játékbeli faelhelyezkedés: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Fák véletlenszerű megjelenésének szabályozása a játék során. Ez befolyásolhatja a gazdasági épületeket, melyek a fák növekedésétől függnek, mint a favágók -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :sehol {RED}(favágók ellehetetlenítése) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :csak esőerdőkben -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :mindenhol STR_CONFIG_SETTING_TOOLBAR_POS :A fő eszközsor helye: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :A fő eszközsor vízszintes elhelyezésének beállítása a képernyő tetején @@ -1994,10 +1991,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Nyakkend # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hálózati játék -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hírdetett -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nem -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Igen STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Játékos neve: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}A többi játékos ilyen néven fog ismerni Téged. @@ -2038,8 +2031,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Csatlako STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Szerver frissítése STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Szerver infó frissítése -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Szerver keresése -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Szerver keresése a hálózaton STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Szerver hozzáadása STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Hozzáadja a szervert a listához, így később gyorsabban tudsz hozzá csatlakozni STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Szerver indítása @@ -2056,6 +2047,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}A játé STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Jelszó beállítása STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Védd le a játékodat jelszóval, ha nem akarod hogy illetéktelenek csatlakozzanak +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hírdetett +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. STR_NETWORK_START_SERVER_UNADVERTISED :Nem STR_NETWORK_START_SERVER_ADVERTISED :Igen STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliens diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 27a97d1270..283221e8fb 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1487,9 +1487,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Leyft, sérsni STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Staðsetning trjáa í leik: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Stjórnar hvernig tré birtast meðan á leiknum stendur. Þessi stilling getur haft áhrif á iðnað sem byggir á trjám, til dæmis timburverksmiðjur -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Engin {RED}(skemmir timburverksmiðjur) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :aðeins í regnskógum -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :allstaðar STR_CONFIG_SETTING_TOOLBAR_POS :Staðsetning tækjasláar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Lárétt staða aðal tækjasláar efst á skjánum @@ -1778,8 +1775,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Tengjast STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Endurnýja þjón STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Endurnýja upplýsingar um þjón -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Finna þjón -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Leita að þjónum á neti STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Bæta við þjóni STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Bætir þjóni við listann, hann mun alltaf vera athugaður þegar leitað er eftir leikjum í gangi STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Hefja þjón diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index d74b18ec99..dbf51e6df2 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1606,9 +1606,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linier STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Penempatan pohon dalam permainan: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Mengendalikan kemunculan pohon dalam permainan. Ini akan berefek pada industri yang memerlukan pohon, contohnya pengolahan kayu gelondongan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Tidak ada {RED}(memotong Pabrik Pengolahan Kayu Gelondongan) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Hanya pada hutan hujan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Dimanapun STR_CONFIG_SETTING_TOOLBAR_POS :Posisi toolbar utama: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posisi horizontal toolbar utama di bagian atas layar @@ -1930,10 +1927,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ubah das # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Bermain bersama -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Diiklankan -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Tidak -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ya STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nama pemain: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ini adalah nama yang akan terlihat oleh pemain lain @@ -1974,8 +1967,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Bergabun STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Cek server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Periksa lagi status server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Cari server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cari jaringan server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Tambah server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Daftarkan server baru yang akan dipantau aktivitasnya STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Mulai server @@ -1992,6 +1983,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nama per STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Atur kata sandi STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Lindungi permainan ini dengan kata kunci jika anda tidak ingin membiarkannya terbuka untuk umum +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Diiklankan +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Tidak STR_NETWORK_START_SERVER_ADVERTISED :Ya STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klien diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 1bd2cc2413..63fbce5b6e 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1553,9 +1553,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :ceadaithe, leag STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Áit a chuirtear crainnte sa chluiche: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Rialaigh an áit a gcuirfear na crainn go fánach i rith an chluiche. D'fhéadfadh tionchar a bheith aige seo ar thionscail a bhíonn ag brath ar fhás na gcrann, muilte adhmaid mar shampla -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ná dean{RED}(bristear an muileann adhmaid) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :i bhforaois bháistí amháin -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :gach áit STR_CONFIG_SETTING_TOOLBAR_POS :Suíomh an phríomhbharra uirlisí: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Suíomh cothrománach an phríomhbharra uirlise ag barr an scáileáin @@ -1875,10 +1872,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Athraigh # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ilimreoirí -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Fógartha -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Níl -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Tá STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm imreora: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Seo an t-ainm faoina mbeidh imreoirí eile in ann tú a aithint @@ -1919,8 +1912,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Téigh i STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Athnuaigh an freastalaí STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Athnuaigh faisnéis an fhreastalaí -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Aimsigh freastalaí -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cuardaigh líonra le haghaidh freastalaí STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Cuir freastalaí leis STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Cuirtear freastalaí leis an liosta a sheiceálfar i gcónaí le haghaidh cluichí ar rith. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tosaigh freastalaí @@ -1937,6 +1928,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Taispeá STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Socraigh pasfhocal STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Cosain do chluiche le pasfhocal más mian leat nach mbeidh rochtain phoiblí air +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Fógartha +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Níl STR_NETWORK_START_SERVER_ADVERTISED :Tá STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P ch ch ch gc c}lia{P "" "" "" "" i}nt diff --git a/src/lang/italian.txt b/src/lang/italian.txt index c78fd56183..f25f4dc493 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1630,9 +1630,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineare STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Collocazione di alberi durante la partita: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlla la comparsa casuale di alberi durante una partita. Può influenzare le industrie che dipendono dalla crescita degli alberi, come le segherie -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nessuna {RED}(funzionamento errato segherie) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Solo nelle foreste pluviali -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ovunque STR_CONFIG_SETTING_TOOLBAR_POS :Posizione barra degli strumenti principale: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posizione orizzontale della barra degli strumenti principale sul bordo superiore dello schermo @@ -1954,10 +1951,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multigiocatore -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Pubblico -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sì STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome giocatore: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Questo è il nome con cui si verrà identificati dagli altri giocatori @@ -1998,8 +1991,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entra ne STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Aggiorna STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Aggiorna le informazioni sul server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Trova server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cerca un server sulla rete STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Aggiungi server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Aggiunge un server alla lista di server in cui cercare sempre partite in corso STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Avvia server @@ -2016,6 +2007,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Il nome STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Imposta password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegge la partita con una password in modo che non sia accessibile pubblicamente +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Pubblico +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Sì STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 27df32cc5c..d94701aa88 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1553,9 +1553,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :有効(道路 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :樹木の自然成長: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :ゲーム中、ランダムに生えてくる樹種を設定します。設定によっては樹木の生育に依存する産業に悪影響が生じる可能性があります(「不可」にした場合、亜熱帯地域の伐採所を機能させ続けるためには手動で植林し続ける必要があります) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :不能 {RED}(亜熱帯地域の伐採所に影響) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :熱帯雨林地帯のみ -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :全地域 STR_CONFIG_SETTING_TOOLBAR_POS :メインツールバーの位置: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :画面上のメインツールバーの位置を決めます @@ -1875,10 +1872,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}ネク # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}マルチプレイヤーゲーム -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}ゲーム公示 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :非公示 -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :公示 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}プレイヤー名: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}他のプレーヤーがあなたを特定するために使う名前です @@ -1919,8 +1912,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}ゲー STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}サーバーを更新 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}サーバー情報を更新します -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}サーバーを検索 -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}ネットワーク上のサーバーを検索します STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}サーバーを追加 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}検索時、常に稼働確認するサーバーのリストに追加します STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}サーバーを開始 @@ -1937,6 +1928,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}ゲー STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}パスワードを設定 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}ゲームをパスワードで保護することができます。一般から公然とアクセスされたくない場合等に設定します +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}ゲーム公示 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます STR_NETWORK_START_SERVER_UNADVERTISED :非公示 STR_NETWORK_START_SERVER_ADVERTISED :公示 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}接続者数: {NUM} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index e3135c023a..33382de3f6 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1621,9 +1621,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :선형 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :게임 진행 중에 나무가 자동적으로 번식: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :게임 중에 나무가 자동적으로 번식하는지 여부를 조절합니다. 이 설정을 조정하면, 아열대 기후의 벌목소처럼 나무의 성장에 의존하는 산업시설에 영향을 끼칠 수 있습니다. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :자라지 않음 {RED}(제재소에 의해 벌목될 수 있음) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :열대 우림 지역에서만 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :어디서나 STR_CONFIG_SETTING_TOOLBAR_POS :주메뉴의 위치: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :주 메뉴가 화면 상단의 어느 위치에 표시될지를 선택합니다. @@ -1947,10 +1944,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}넥타 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}멀티 플레이 -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}공개 여부 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하십시오. -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :아니요 -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :예 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}플레이어 이름: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}다른 사람들에게 보여줄 당신의 이름입니다. @@ -1991,8 +1984,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}게임 STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}새로고침 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}서버 정보를 새로 고칩니다. -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}서버 검색 -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}네트워크에 등록되어 있는 서버를 검색합니다. STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}서버 추가 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}서버를 목록에 수동으로 추가합니다. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}서버 열기 @@ -2009,6 +2000,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}멀티 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}비밀번호 설정 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}서버에 공개적으로 접근하는 것을 막고 싶을 때 비밀번호를 걸어 보호합니다. +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}공개 여부 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하십시오. STR_NETWORK_START_SERVER_UNADVERTISED :아니요 STR_NETWORK_START_SERVER_ADVERTISED :예 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM}명 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index d218e55b7e..98ebc4fc04 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1770,9 +1770,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearis STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Positio arborum in ludo: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Quomodo arbores apparent intra ludum. Forsitan industriae afficiuntur quibus necesse sunt arbores, e.g. castra lignatorum -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nulla {RED}(rumpit castra lignatorum) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Modo in silvis plivualibus -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ubique STR_CONFIG_SETTING_TOOLBAR_POS :Locus primariae arcae instrumentorum: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Locus horizontalis arcae instrumentorum primariae apud apicem fenestrae @@ -2094,10 +2091,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mutare f # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Modus Plurium Lusorum -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ostensum -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ita STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nomen lusoris: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Hoc est nomen tuum aliis lusoribus visibile @@ -2138,8 +2131,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Ludum iu STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Servatrum instaurare STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Iterum arcessere indicia servatri -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Servatrum quaerere -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Quarere servatrum in rete STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Addere servatrum STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Addit servatrum indici quod semper inspicetur si ludus activus insit STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Servatrum incohare @@ -2156,6 +2147,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Hoc ludi STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Elige tesseram STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Custodire tessera ludum tuum, si non vis publicos iungere +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ostensum +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Non STR_NETWORK_START_SERVER_ADVERTISED :Ita STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} clien{P s tes} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 863a52f2a3..175367f5a2 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1614,9 +1614,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Koku izvietojums spēlē: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Vadīt nejaušu koku parādīšanos spēles laikā. Tas var ietekmēt no kokaudzēšanas atkarīgas ražotnes, piemēram kokzāģētavas -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :nav {RED}(nedarbosies kokzāģētavas) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :tikai lietusmežos -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :visur STR_CONFIG_SETTING_TOOLBAR_POS :Galvenās rīkjoslas novietojums: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Galvenās rīkjoslas horizontālais novietojums ekrāna augšējā daļā @@ -1942,10 +1939,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mainīt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Vairākspēlētāju spēle -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Izsludināt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nē -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jā STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spēlētāja vārds: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pēc šā vārda jūs atpazīs citi spēlētāji @@ -1986,8 +1979,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pievieno STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atsvaidzināt serveri STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atsvaidzināt servera informāciju -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Atrast serveri -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Meklēt serveri tīklā STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pievienot serveri STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Pievienot serveri sarakstam, kurš vienmēr tiks pārbaudīts vai tajā nav palaistas spēles STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Palaist serveri @@ -2004,6 +1995,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spēles STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Uzstādīt paroli STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Aizsargā jūsu spēli ar paroli, ja nevēlaties lai tā būtu publiski pieejama +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Izsludināt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli STR_NETWORK_START_SERVER_UNADVERTISED :Nē STR_NETWORK_START_SERVER_ADVERTISED :Jā STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} spēlētāj{P s i u} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index f211546ea7..d1916d07d8 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1768,9 +1768,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Leista, pasirin STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Savaiminis medžių atsiradimas: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Savaiminio medžių išdygimo nuostatos. Atkreipkite dėmesį, kad šios nuostatos gali paveikti kai kurių pramonės įmonių, pvz., lentpjūvių, darbą -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :nėra {RED}(trukdo lentpjūvėms) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :tik tropiniuose miškuose -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Visur STR_CONFIG_SETTING_TOOLBAR_POS :Pagrindinės įrankių juostos pozicija: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Pagrindinės įrankių lentelės horizontali padėtis ekrano viršuje @@ -2104,10 +2101,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Pakeisti # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Žaidimas tinkle -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklamuoti -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pasirinkite tarp reklamuojamo (internetas) ir nereklamuojamo (Vietinis Tinklas, LAN) žaidimo -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Taip STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Žaidėjo vardas: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Tai vardas, pagal kurį kiti žaidėjai jus atpažins @@ -2148,8 +2141,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Jungtis STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atnaujinti serverį STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atnaujinti serverio informaciją -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Rasti serveri -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Ieškoti serverio STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pridėti serverį STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Prideda serverį į sąrašą, kuris tikrinamas ieškant žaidimų STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Sukurti serverį @@ -2166,6 +2157,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Žaidimo STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nustatyti slaptažodi STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Apsaugokite savo žaidimą slaptažodžiu, jei nenorite, kad jis būtų viešai prieinamas +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklamuoti +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pasirinkite tarp reklamuojamo (internetas) ir nereklamuojamo (Vietinis Tinklas, LAN) žaidimo STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Taip STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P as ai ų} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 749c7e12ba..3fc8b4afcd 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1605,9 +1605,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Bamplazéirung: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontrolléiert zoufälleg Optauche vu Beem während dem Spill. Dëst kann Industrie beaflossen, déi op d'Wuessen vu Beem ugewisen sinn -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Keng{RED}(zerstéiert Bauholzfabrik) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Nëmmen am Reebësch -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Iwwerall STR_CONFIG_SETTING_TOOLBAR_POS :Positioun vun der Haapt-Toolbar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal Positioun vun der Haapt-Toolbar uewen um Schierm @@ -1929,10 +1926,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ugekënnegt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wiel tëschent engem ugekënnegten (Internet) an net ugekënnegten (LAN) Spill -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jo STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spillernumm: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Daat ass den Numm mat deem iech déi aner Spiller Identifizéieren kënnen @@ -1973,8 +1966,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Spill b STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Server erneieren STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Serverinfo erneieren -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Server sichen -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Am Netzwierk no engem Server sichen STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Server bäisetzen STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Setzt en Server op d'Lëscht wou ëmmer no enger Partie gesicht gëtt STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Server starten @@ -1991,6 +1982,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Den Numm STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Passwuert setzen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}En Passwuert fir d'Spill setzen, dass et net Public accessibel ass +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ugekënnegt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wiel tëschent engem ugekënnegten (Internet) an net ugekënnegten (LAN) Spill STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Jo STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Spiller diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 0b61bdaf56..cdd0056ade 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1395,9 +1395,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dibenarkan STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dibenarkan, susunan bandar sendiri STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Peletakan pokok-pokok dalam permainan: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Tiada {RED}(kilang kayu tidak berfungsi) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Hanya di hutan hujan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Setiap tempat STR_CONFIG_SETTING_TOOLBAR_POS :Kedudukan palang alat utama: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :Kedudukan bar status: {STRING} @@ -1677,8 +1674,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Sertai p STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Kemaskini STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Kemaskini maklumat pelayan -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Cari pelayan -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cari rangkaian untuk pelayan STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Tambah pelayan STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Memasukkan pelayan ke dalam senarai yang sentiasa akan disemak untuk permainan yang sedang berjalan. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Mulakan pelayan diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 4dd19b613a..b715bd6c29 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1607,9 +1607,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plassering av trær i spillet: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroll tilfeldige utseender til tre under spillet. Dette kan påvirke industrier som avhenger av trevekst, for eksempel trelast -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ingen {RED}(ødelegger sagbruk) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Kun i regnskog -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Overalt STR_CONFIG_SETTING_TOOLBAR_POS :Plassering av hovedverktøylinje: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horisontal posisjon av hoved verktøylinjen på toppen av skjermen @@ -1931,10 +1928,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Endre sl # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Flerspiller -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Annonsert -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Velg mellom et utlyst (internett) og et ikke utlyst (Lokalnettverk, LAN) spill -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spillernavn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dette er navnet andre spillere vil identifisere deg med @@ -1975,8 +1968,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Bli med STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Oppdater tjener STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Oppdater tjenerinfo -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Finn tjenere -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Søk på nettverket etter en tjener STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Legg til tjener STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Legger til en tjener til listen som alltid vil bli sjekket for aktive spill. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start tjener @@ -1993,6 +1984,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spillnav STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sett passord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt ditt spill med et passord hvis du ikke vil at hvem som helst skal bli med på det +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Annonsert +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Velg mellom et utlyst (internett) og et ikke utlyst (Lokalnettverk, LAN) spill STR_NETWORK_START_SERVER_UNADVERTISED :Nei STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 51ca5aa742..d380c3bf3d 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1489,9 +1489,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :tillete STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :tillete, eigendefinert oppsett av by STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plassering av tre i spelet: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ingen {RED}(øydelegg sagbruk) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :kun i regnskogen -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :over alt STR_CONFIG_SETTING_TOOLBAR_POS :Plassering av hovudverktøylinje: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Plassering av verktøylinja øvst på skjermen @@ -1799,10 +1796,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Byt slip # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Fleirspelar -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Kunngjort -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vel mellom spel på internett (kunngjort) og spel på lokalt nett (ikkje kunngjort) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelarnamn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dette er namnet andre spelarar vil identifisere deg med @@ -1843,8 +1836,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Bli med STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Oppdater tenar STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Oppdater tenarinformasjon -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Finn tenar -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Søk på nettverket etter ein tenar STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Legg til tenar STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Legg til ein tenar i lista over tenarar som alltid vil verte sjekka for aktive spel. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start tenar @@ -1861,6 +1852,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spelnamn STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set passord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt spelet ditt med passord så ikkje kven som helst kan verte med på det +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Kunngjort +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vel mellom spel på internett (kunngjort) og spel på lokalt nett (ikkje kunngjort) STR_NETWORK_START_SERVER_UNADVERTISED :Nei STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index c20f2894a0..7aa527522a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1992,9 +1992,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Liniowy STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Rozmieszczenie drzew w grze: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Losowe pojawianie się drzew podczas gry. Może mieć to wpływ na zakłady opierające się na wyrastaniu drzew, np. tartaki -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Brak {RED}(tartaki nie działają) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Tylko w lasach deszczowych -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Wszędzie STR_CONFIG_SETTING_TOOLBAR_POS :Pozycja głównego paska narzędzi: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Pozioma pozycja głównego paska narzędzi na górze ekranu @@ -2318,10 +2315,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmień k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Gra wieloosobowa -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiczny -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wybierz między rozgrywkami reklamowanymi (internetowymi) a niereklamowanymi (w sieci lokalnej LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nie -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Tak STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nazwa gracza: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}To jest nazwa pod którą będą Cię widzieć inni gracze @@ -2362,8 +2355,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Przyłą STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Odśwież serwer STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Odśwież informacje o serwerze -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Znajdź serwery -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Przeszukuje sieć w poszukiwaniu serwera STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Dodaj serwer STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Dodaj serwer do listy, która będzie przeszukiwana w poszukiwaniu uruchomionych gier STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Uruchom serwer @@ -2380,6 +2371,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nazwa gr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Ustaw hasło STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zabezpiecz grę hasłem jeśli nie chcesz, by była publicznie dostępna +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiczny +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wybierz między rozgrywkami reklamowanymi (internetowymi) a niereklamowanymi (w sieci lokalnej LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Nie STR_NETWORK_START_SERVER_ADVERTISED :Tak STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" ów ów} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 1619365a93..c5a64b04af 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1594,9 +1594,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Criação de árvores no decorrer do jogo: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar o aparecimento aleatório de árvores durante o jogo. Isto poderá afectar indústrias que dependem do crescimento de árvores, como as madeireiras -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nenhuma {RED}(Serrações ficam inactivas) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Apenas em florestas húmidas -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Em todo o lado STR_CONFIG_SETTING_TOOLBAR_POS :Posição da barra de ferramentas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal da barra de ferramentas principal no topo do ecrã @@ -1918,10 +1915,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mudar gr # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolher entre jogo público (internet) e privado (Área de Rede Local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Não -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sim STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do jogador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Este é o nome pelo qual os outros jogadores o irão identificar @@ -1962,8 +1955,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entrar n STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Renovar servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Renovar a informação do servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Localizar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Pesquisar por um servidor na rede STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adicionar servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona um servidor à lista que será sempre verificado se existem jogos a decorrer. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor @@ -1980,6 +1971,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir palavra-chave STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que pessoas indesejadas se juntem +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolher entre jogo público (internet) e privado (Área de Rede Local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Não STR_NETWORK_START_SERVER_ADVERTISED :Sim STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 132b9bc32a..671c754fef 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1558,9 +1558,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :permis, aspect STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Poziţionarea copacilor în joc: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlează apariția aleatoare a copacilor în joc. Este posibil ca această opțiune să afecteze industrii care depind de creșterea copacilor, cum ar fi fabricile de cherestea -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :niciunul {RED}(afectează producţia fabricii de cherestea) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :doar în pădurile tropicale -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :peste tot STR_CONFIG_SETTING_TOOLBAR_POS :Poziţia barei principale de instrumente: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Poziţia orizontală a barei principale în partea de sus a ecranului @@ -1868,10 +1865,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Schimbă # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publicat -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nu -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Numele jucătorului: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Acesta este numele prin care te vor identifica ceilalţi @@ -1912,8 +1905,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Intră STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualizează serverul STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualizează informaţiile despre server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Caută server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Caută un server în reţea STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adaugă un server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adaugă un server la lista care va fi verificată pentru jocuri active STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Porneşte serverul @@ -1930,6 +1921,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Numele j STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Pune parolă STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protejează-ţi jocul cu o parolă dacă nu vrei să intre jucători neautorizaţi +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publicat +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game STR_NETWORK_START_SERVER_UNADVERTISED :Nu STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} clien{P t ţi} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index e4d40051da..cb62c61674 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1764,9 +1764,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :линейна STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Размножение деревьев в игре: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Настройка возможности самостоятельного размножения деревьев в игре. Это может влиять на работоспособность некоторых предприятий, например, лесопилок. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :отключена {RED}(лесопилки не смогут работать) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :только в тропических лесах -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :везде STR_CONFIG_SETTING_TOOLBAR_POS :Положение главной панели инструментов: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Горизонтальное расположение основной панели инструментов в верхней части экрана @@ -2090,10 +2087,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Изме # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сетевая игра -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Интернет -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберите между игрой через Интернет, либо в локальной сети -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Нет -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Да STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Имя игрока: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Это имя, которое будет видно другим игрокам @@ -2134,8 +2127,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Прис STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Обновить сервер STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обновить информацию о сервере -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Обновить -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Обновить список серверов, которые сейчас есть в сети STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добавить сервер STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добавить сервер в список, который будет автоматически проверяться на идущие игры STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Запуск сервера @@ -2152,6 +2143,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Установить пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитите вашу игру паролем, если не хотите, чтобы к ней могли подключиться посторонние. +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Интернет +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберите между игрой через Интернет, либо в локальной сети STR_NETWORK_START_SERVER_UNADVERTISED :Нет STR_NETWORK_START_SERVER_ADVERTISED :Да STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" а ов} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 5fb756a846..0ae68ef944 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1760,9 +1760,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :dozvoljeno, zas STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Rasejavanje drveća tokom partije: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontrola nasumične pojave drveća u toku igre. Ovo može uticati na industrije koje zavise o rastu drveća, na primer pilana -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :{G=srednji}nikakvo {RED}(onesposobljava rad drvnih kombinata) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :samo u tropskim šumama -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :svuda STR_CONFIG_SETTING_TOOLBAR_POS :Lokacija glavne trake sa alatima: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontalna pozicija glavne trake s alatkama na vrhu ekrana @@ -2082,10 +2079,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promena # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mrežna partija -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK} Sa reklamama -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberite između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Sa ovim imenom će Vas drugi igrači (pre)poznavati @@ -2126,8 +2119,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Priklju STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ažuriranje servera STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ažurirajte podatke sa servera -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Pronađi server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Pretražuje mrežu kako bi pronašao servere STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Dodaj server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Dodaje server na spisak na kojem se uvek proverava za aktivne partije STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Pokreni server @@ -2144,6 +2135,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Naziv pa STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Postavi lozinku STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Ukoliko ne želite da bude javno dostupna zaštitite Vašu partiju lozinkom +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK} Sa reklamama +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberite između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} igrač{P "" a a} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index e9dd7b7bbf..dd83159435 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1606,9 +1606,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :线性 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :树木自动生长: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :控制游戏中数目的随机生长,这将影响依赖树木的工业,比如木材厂 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :无 {RED}(损坏伐木场) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :仅在雨林中 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :任意地点 STR_CONFIG_SETTING_TOOLBAR_POS :主工具栏位置:{STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :主工具栏在屏幕上方的位置 @@ -1930,10 +1927,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}选择 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}联机游戏 -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}发布到互联网 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}选择是否将游戏发布到官方服务器列表。发布的话,可以让互联网上的玩家找到你的服务器并加入游戏,否则进行局域网内的游戏。 -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :否 -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :是 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}玩家名称: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}其他玩家将通过该名字来认识您 @@ -1974,8 +1967,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}加入 STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}刷新服务器 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}刷新服务器信息 -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}搜索服务器 -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}在网络上搜索服务器 STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}添加服务器 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}添加一个永远显示在列表中的服务器 STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}启动服务器 @@ -1992,6 +1983,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}游戏 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}设置密码: STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}如果不希望你的游戏被外人加入,请设置一个密码 +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}发布到互联网 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}选择是否将游戏发布到官方服务器列表。发布的话,可以让互联网上的玩家找到你的服务器并加入游戏,否则进行局域网内的游戏。 STR_NETWORK_START_SERVER_UNADVERTISED :否 STR_NETWORK_START_SERVER_ADVERTISED :是 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} 客户端 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 34546b11ef..5cae9d56ca 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1680,9 +1680,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineárne STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Umiestnenie stromov počas hry: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Riadi náhodný výskyt stromov počas hry. Toto môže ovplyvniť priemysel úzko spojený s rastom stromov ako napríklad Píla. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :žiadne {RED}(znefunkční pílu) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Len v dažďových pralesoch -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :všade STR_CONFIG_SETTING_TOOLBAR_POS :Pozícia hlavného menu: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontálna poloha hlavného ovládacieho panela na vrchu obrazovky @@ -2006,10 +2003,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmeniť # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hra pre viac hráčov -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Zverejnené -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyberte medzi zverejnenou (internet) alebo nezverejnenou (lokálna sieť, LAN) hrou -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nie -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Áno STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Meno hráča: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Toto je meno podla ktoreho vas ostatny identifikuju @@ -2050,8 +2043,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pripojit STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Obnoviť server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Obnovit info o serveri -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Nájsť server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Hladať server po sieti STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pridať server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Pridá server do zoznamu, v ktorom sa vždy budú hľadať prebiehajúce hry STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Spustiť server @@ -2068,6 +2059,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Názov h STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastaviť heslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zabezpeč hru heslom, ak nechceš povoliť verejný prístup +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Zverejnené +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyberte medzi zverejnenou (internet) alebo nezverejnenou (lokálna sieť, LAN) hrou STR_NETWORK_START_SERVER_UNADVERTISED :Nie STR_NETWORK_START_SERVER_ADVERTISED :Áno STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ov} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index c493b1d239..c5fffee40f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1708,9 +1708,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dovoljeno, obli STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Sajenje dreves znotraj igre: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Nadziraj naključne vrste dreves med igro. To lahko vpliva na industrije, ki so odvisne od rasti dreves, na primer gozdarski obrat. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nikjer {RED}(onemogoči gozdarski obrat) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Samo v deževnih gozovih -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Povsod STR_CONFIG_SETTING_TOOLBAR_POS :Pozicija glavne orodne vrstice: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Vodoravna pozicija glavne orodne vrstice na vrhu zaslona. @@ -2031,10 +2028,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Spremeni # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Več igralcev -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Oglaševano -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izberi med oglaševano (internet) in neoglaševano (Local Area Network, LAN) igro -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igralca: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}To je ime, po katerem te prepoznajo drugi igralci @@ -2075,8 +2068,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pridruž STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Osveži strežnik STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Osveži informacije strežnika -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Najdi strežnik -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Poišči strežnik na mreži STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Dodaj strežnik STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Doda strežnik na seznam, ki bo vedno preverjen za pognane igre STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Poženi strežnik @@ -2093,6 +2084,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Ime bo p STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastavi geslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zaščiti igro z geslom, če želiš preprečiti dostop nepovabljenim +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Oglaševano +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izberi med oglaševano (internet) in neoglaševano (Local Area Network, LAN) igro STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} gost{P "" a i ov} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 662a067452..0de446fce2 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1607,9 +1607,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Crecimiento de árboles durante el juego: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla la aparición aleatoria de árboles durante la partida. Esto puede afectar a industrias que dependen del crecimiento de árboles, como los aserraderos -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ninguno {RED}(rompe aserradero subtropical) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Solo en selva -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Cualquier parte STR_CONFIG_SETTING_TOOLBAR_POS :Posición de la barra de herramientas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posicionamiento horizontal de la barra de herramientas principal en la parte superior de la pantalla @@ -1931,10 +1928,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambiar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permite escoger entre una partida pública (internet) y una partida privada (LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nombre del jugador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Este es el nombre con el que otros jugadores le identificarán @@ -1975,8 +1968,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Unirme a STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Recargar servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Recargar información del servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Buscar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Buscar en la red servidores STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Añadir servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Añade el servidor a una lista que siempre será comprobada para buscar juegos en marcha STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Comenzar servidor @@ -1993,6 +1984,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}La parti STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contraseña STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protege tu juego con una contraseña si no quieres que otras personas se unan a él +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permite escoger entre una partida pública (internet) y una partida privada (LAN) STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index ab4340fb46..0f4038bb7b 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1607,9 +1607,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Crecimiento de árboles durante la partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar la aparición aleatoria de árboles durante la partida. Esto puede afectar industrias que dependen del crecimiento de árboles, como los aserraderos -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ninguno {RED}(inutiliza aserraderos) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Solo en selva -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Cualquier parte STR_CONFIG_SETTING_TOOLBAR_POS :Posición de la barra de herramientas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posición horizontal de la barra de herramientas principal en la parte superior de la pantalla @@ -1931,10 +1928,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambiar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permitir escoger entre una partida pública (Internet) y una partida privada (LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nombre del jugador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Nombre con el que otros jugadores te identificarán @@ -1975,8 +1968,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Unirse a STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Volver a cargar servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Volver a cargar información del servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Buscar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Buscar servidor en la red STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Añadir servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Añadir el servidor a una lista que siempre será analizada en busca de partidas activas STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor @@ -1993,6 +1984,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}La parti STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contraseña STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteger la partida con una contraseña para prevenir el acceso a otras personas +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permitir escoger entre una partida pública (Internet) y una partida privada (LAN) STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 3380d9985b..4e815f3d9a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1606,9 +1606,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linjär STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Placering av träd i spelläge: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontrollera den slumpmässiga uppkomsten av träd under spelets gång. Detta kan påverka industrier som är beroende av växande träd, till exempel sågverk -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Inga {RED}(förstör sågverk) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Bara i regnskogar -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Överallt STR_CONFIG_SETTING_TOOLBAR_POS :Verktygsradens position: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Verktygsradens horisontella position i skärmens överkant @@ -1930,10 +1927,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ändra s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Flera spelare -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publikt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Välj mellan ett publikt (internet) eller icke publikt (Local Area Network. LAN) spel -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nej -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelarnamn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Namnet som andra spelare kommer se dej som @@ -1974,8 +1967,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Gå med STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Uppdatera server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Uppdatera server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Leta server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Sök i nätverket efter en server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Lägg till server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lägg till en server till listan som alltid kommer kontrolleras för aktiva spel STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Starta server @@ -1992,6 +1983,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Namnet p STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Bestäm lösenord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Skydda spelet med ett lösenord så att inte andra än dem som har lösenordet kan gå med i spelet +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publikt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Välj mellan ett publikt (internet) eller icke publikt (Local Area Network. LAN) spel STR_NETWORK_START_SERVER_UNADVERTISED :Nej STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 8d6f31b66b..d40a5fe1db 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1446,9 +1446,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :நேரிய STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :ஆட்டத்தின் போது மரங்களை நடுதல்: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :விளையாட்டின் போது மரங்களின் சீரற்ற தோற்றத்தைக் கட்டுப்படுத்தவும். இது மர வளர்ச்சியை நம்பியுள்ள தொழில்களை பாதிக்கலாம், எடுத்துக்காட்டாக மரம் வெட்டுதல் ஆலைகள் -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ஒன்றுமில்லை {RED}(மர மில்லை உடைக்கும்) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :மழைக் காடுகளில் மட்டும் -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :எங்கும் STR_CONFIG_SETTING_TOOLBAR_POS :முக்கிய toolbarஇன் அமைப்பு இடம்: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :status barஇன் அமைப்பு இடம்: {STRING} @@ -1720,9 +1717,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Tie அ # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}பல்வீரர் -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}விளம்பரப்படுத்தப்பட்ட -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :இல்லை -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :ஆம் STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}விளையாடுபவரின் பெயர்: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}இந்தப் பெயரில் பிறர் உன்னை அறிவர் @@ -1762,8 +1756,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}ஆட STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}சர்வரினை புதுப்பிக்கவும் STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}சர்வரின் விவரத்தினை புதுப்பிக்கவும் -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}சர்வரினைத் தேடு -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}சர்வரினை இணையத்தில் தேடு STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}சர்வரினை இணை STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}சர்வரினை ஆரம்பி STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}தங்களின் சர்வரினை ஆரம்பிக்கவும் @@ -1776,6 +1768,7 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}பு STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}விளையாட்டு பெயர்: STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}கடவுச்சொல்லினை அமைக்கவும் +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}விளம்பரப்படுத்தப்பட்ட STR_NETWORK_START_SERVER_UNADVERTISED :இல்லை STR_NETWORK_START_SERVER_ADVERTISED :ஆம் STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} விளையாடுபவர்{P "" கள்} diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 6974910256..f22411433d 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1514,9 +1514,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :ยอม, ร STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :การปลูกป่า: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :ควบคุมการสุ่มการเจริญเติบโตของต้นไม้ระหว่างเล่นเกม -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ไม่มี {RED}(ไม่มีโรงเลื่อยไม้) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :เฉพาะในป่าฝนเท่านั้น -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :ทุกหนทุกแห่ง STR_CONFIG_SETTING_TOOLBAR_POS :ตำแหน่งแถบเครื่องมือหลัก: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :ตำแหน่งของปุ่มเครื่องมือต่างๆด้านบนของจอภาพ @@ -1824,10 +1821,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}เป # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}เล่นหลายคน -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}การประกาศ -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}เลือกระหว่างการโฆษณา (internet) หรือไม่โฆษณา (Local Area Network, LAN) เกม -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :ไม่ใช่ -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :ใช่ STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}ชื่อผู้เล่น: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}เป็นชื่อที่ผู้เล่นคนอื่นจะมองเห็น @@ -1868,8 +1861,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}เข STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}เรียกดูเซิร์ฟเวอร์ใหม่ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}เรียกดูข้อมูลเซิร์ฟเวอร์ใหม่ -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}หาเซิร์ฟเวอร์ -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}ค้นหาเซิร์ฟเวอร์ในเครือข่าย STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}เพิ่มเซิร์ฟเวอร์ STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}เพิ่มเซิร์ฟเวอร์เข้าไปในรายการซึ่งจะถูกตรวจสอบเพื่อเข้าเล่นเกม STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}เริ่มเซิร์ฟเวอร์ใหม่ @@ -1886,6 +1877,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}ชื STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}กำหนดรหัสผ่าน STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}ป้องกันเกมด้วยรหัสผ่านหากไม่ต้องการให้มีการเข้าร่วมจากบุคคลทั่วไป +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}การประกาศ +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}เลือกระหว่างการโฆษณา (internet) หรือไม่โฆษณา (Local Area Network, LAN) เกม STR_NETWORK_START_SERVER_UNADVERTISED :ไม่ใช่ STR_NETWORK_START_SERVER_ADVERTISED :ใช่ STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} ลูกข่าย diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 4378e68def..6a1bc71d61 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1555,9 +1555,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :允許,可自 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :遊戲中產生樹木的地點:{STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :控制遊戲內是否隨意種植樹木。此選項可能會影響一些依賴樹木的工業 (例如熱帶氣候的伐木場) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :不產生 {RED}(伐木場會停止運作) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :只在雨林區產生 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :到處產生 STR_CONFIG_SETTING_TOOLBAR_POS :主工具列位置:{STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :設定主工具列在螢幕頂部的位置 @@ -1878,10 +1875,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}改變 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}多人遊戲 -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}已啟用宣傳 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}選擇是否在互聯網上宣傳此遊戲 -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :否 -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :是 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}玩家名稱: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}這是其他玩家辨認您的名稱 @@ -1922,8 +1915,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}加入 STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}更新伺服器 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}更新伺服器資訊 -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}尋找伺服器 -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}尋找網路上的伺服器 STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}新增伺服器 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}在清單新增會檢查遊戲進行的伺服器 STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}起動伺服器 @@ -1940,6 +1931,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}遊戲 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}設定密碼 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}如果您不想讓大眾連線的話,可以用密碼保護遊戲 +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}已啟用宣傳 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}選擇是否在互聯網上宣傳此遊戲 STR_NETWORK_START_SERVER_UNADVERTISED :否 STR_NETWORK_START_SERVER_ADVERTISED :是 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} 玩家 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index dabcf38102..d050df7cdc 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1607,9 +1607,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Doğrusal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Oyunda ağaç dikme: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Oyundaki rastgele ağaçların görünümünü kontrol eder. Bu, ağaçların büyümesine bağımlı olan endüstrileri etkileyebilir, örneğin keresteciler gibi -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Hiçbiri {RED}(kauçuk fabrikasını yok eder) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Yalnız yağmur ormanlarında -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Her yerde STR_CONFIG_SETTING_TOOLBAR_POS :Ana araç çubuğu konumu: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ekranın üst kısmındaki ana araç çubuğunun yatay konumu @@ -1931,10 +1928,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Kravatı # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Çok Oyunculu -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Duyurulan -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Duyurulan (internet) ve duyurulmayan (yerel ağ, LAN) oyun türlerinden birini seçin -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Hayır -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Evet STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Oyuncu adı: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Oyuncuların görecegi adınızı seçin @@ -1975,8 +1968,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Oyuna gi STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Sunucuyu tazele STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Sunucu bilgisini tazele -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Sunucu bul -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Sunucu bulmak için bir agi ara STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Sunucu ekle STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Her zaman çalışan oyunlarına bakabilmek için bir sunucu ekle STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Sunucu başlat @@ -1993,6 +1984,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Bu oyun STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Parola koy STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Erişimi kısıtlamak için oyuna parola koy +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Duyurulan +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Duyurulan (internet) ve duyurulmayan (yerel ağ, LAN) oyun türlerinden birini seçin STR_NETWORK_START_SERVER_UNADVERTISED :Hayır STR_NETWORK_START_SERVER_ADVERTISED :Evet STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} istemci diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 80957f3b30..20fd218ae5 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1734,9 +1734,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінійна STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Поява дерев під час гри: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Налаштування випадкової появи дерев на карті в процесі гри. Ця настройка також впливає на відповідні підприємства, такі як лісопилки. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Відсутня {RED}(зупиняє лісопилки) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Тільки у тропіках -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Скрізь STR_CONFIG_SETTING_TOOLBAR_POS :Позиція головного меню: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Горизонтальна позиція основної панелі інструментів. @@ -2058,10 +2055,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Змін # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Мережева гра -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтернет -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Вибір між рекламованою (інтернет) і не рекламованою (локальна мережа, LAN) грою -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ні -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Так STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ім'я гравця: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ім'я, за яким тебе розпізнаватимуть інші гравці @@ -2102,8 +2095,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Приє STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Оновити сервер STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Оновити інформацію про сервер -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Знайти сервер -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Пошук мережі для сервера STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Додати сервер STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Додає сервер до списку, який завжди буде перевірятись на поточні ігри STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Створити сервер @@ -2120,6 +2111,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Встановити пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Захистіть вашу гру паролем, якщо не бажаєте загального доступу +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтернет +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Вибір між рекламованою (інтернет) і не рекламованою (локальна мережа, LAN) грою STR_NETWORK_START_SERVER_UNADVERTISED :Ні STR_NETWORK_START_SERVER_ADVERTISED :Так STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клієнт{P "" а ів} diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 58b66ecfdf..2c340098e1 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -611,8 +611,6 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :чӑн STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ҫук {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :таҫта та STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ҫук STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Вӑрах @@ -755,7 +753,6 @@ STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}ХИР STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Сервер ҫӗнет -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Сервер туп STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Сервер хуш STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Сервер пуҫ diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index cf8cbb22a2..d6fa9b60d6 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1527,9 +1527,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tastean STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tastean, oanpast strittepatroan STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Bouen fan beamen yn it spul: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Gjin {RED}(brekt houtseachmûne) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Allinich yn reinwâlden -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Oerol STR_CONFIG_SETTING_TOOLBAR_POS :Plak fan de haad wurkbalk: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :Posysje fan statusbalke: {STRING} @@ -1800,10 +1797,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Feroarje # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertearre -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tusken in advertearre (ynternet) of in net-advertearre (LAN) spul -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Namme fan spieler: STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Namme @@ -1835,7 +1828,6 @@ STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}FERKEAR STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Meidwaan mei spul STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Laad tsjinner ynfo opnij -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Server sykje STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Tsjinner tafoegje STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start tsjinner STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Start dien eigen tsjinner @@ -1849,6 +1841,8 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start in STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spulnamme: STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwurd ynstelle +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertearre +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tusken in advertearre (ynternet) of in net-advertearre (LAN) spul STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliïnt{P "" en} diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 4637e7369f..0deccf4c09 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -555,7 +555,6 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :omnube diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 186f60e93a..05a2131cb5 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1340,9 +1340,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :مجاز STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :آزاد و با نمایه دلخواه STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :محل قرارگرفتن درخت‌ها: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :هیچکدام{RED}(سبب تعطیلی صنعت چوب والوار می‌شود) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :فقط در جنگلهای بارانی -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :همه جا STR_CONFIG_SETTING_TOOLBAR_POS :محل نوار ابزار اصلی: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :محل نوار وضعیت: {STRING} @@ -1590,9 +1587,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}تغیی # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}چندنفره -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}تبلیغ دار -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :خیر -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :بله STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}نام بازیگر: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}این نامی است که بقیه بازیگران شما را به آن نام می شناسند @@ -1633,8 +1627,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}الحا STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}تازه سازی سرویس دهنده STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}تازه سازی اطلاعات سرویس دهنده -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}جستجوی سرویس دهنده -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}جستجو در شبکه برای سرویس دهنده STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}اضافه کردن سرویس دهنده STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}اضافه کردن یک سرویس دهنده به لیست که هربار برای بازی در حال اجرا آزمایش می گردد STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}اجرای سرویس دهنده @@ -1651,6 +1643,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}بازی STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}ثبت رمز STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}اگر بازی برای استفاده همگان نیست، بازی خود را با رمز محافظت کنید +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}تبلیغ دار STR_NETWORK_START_SERVER_UNADVERTISED :خیر STR_NETWORK_START_SERVER_ADVERTISED :بله STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} سرویس گیرنده diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 481ceb13be..4197bb681b 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1267,9 +1267,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :اجازت ہے STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :اپنی مرضی کے شہر کے پھیلاو کی اجازت ہے STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :کھیل میں درخت لگانے کی اجازت: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :کوئی نہیں {RED}(لکڑ مل ٹوٹ گئی) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :صرف بارش کے جنگلوں میں -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :ہر جگہ STR_CONFIG_SETTING_TOOLBAR_POS :بنیادی ٹول بار کی جگہ: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :حالات کی پٹی: {STRING} @@ -1526,8 +1523,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}کھیل STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}سرور کو تازہ کریں STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}سرور کی معلومات کو تازہ کریں -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}سرور ڈھونڈیں -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}سرور کے لئے نیٹ ورک تلاش کریں STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}سرور شامل کریں STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}سرور کو اس فہرست میں شامل کریں جو ہمیشہ کھیل شروع کرنے کے لئے پرکھی جاتی ہے STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}سرور شروع کریں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 2d02f45952..ecfa0bdf79 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1608,9 +1608,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Tuyến tính STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Trồng cây trong trò chơi: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Điều khiển sự xuất hiện tự dộng của cây cối khi đang chơi. Điều này có thể ảnh hưởng đến những nhà máy dựa vào cây cối, ví dự như nhà máy chế biến gỗgỗ -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :không có {RED}(nhà máy chế biến gỗ bị ngưng) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Chỉ trong rừng nhiệt đới -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Mọi nơi STR_CONFIG_SETTING_TOOLBAR_POS :Vị trí của thanh công cụ chính: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Vị trí nằm ngang của thanh công cụ chính ở phía trên màn hình @@ -1932,10 +1929,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Thay đ # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ván Chơi Mạng -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Đã quảng bá -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Lựa chọn ván chơi quảng bá (ra ngoài internet) và không quảng bá (Local Area Network, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Không -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Có STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Tên người chơi: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Đây là tên khác mà người chơi sẽ nhận ra bạn @@ -1976,8 +1969,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Vào gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh thông tin server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Tìm server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Tìm server trong mạng STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Thêm server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Thêm server vào danh sách luôn được chọn khi chạy game. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tạo server @@ -1994,6 +1985,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Tên c STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Đặt mật khẩu STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bảo vệ game của bạn bằng mật khẩu nếu bạn không muốn người khác vào tùy tiện +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Đã quảng bá +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Lựa chọn ván chơi quảng bá (ra ngoài internet) và không quảng bá (Local Area Network, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Không STR_NETWORK_START_SERVER_ADVERTISED :Có STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} máy trạm diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 2f6048c31c..fea52d6ffd 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1559,9 +1559,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Caniatáu, cynl STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Gosod coed mewn gêm: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Rheoli ymddangosiad coed ar hap yn ystod y gêm. Gall hyn effeithio ar ddiwydiannau sy'n ddibynnol ar dyfiant coed, megis melinau coed -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Dim {RED}(yn torri'r felin goed) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Mewn glawgoedwigoedd yn unig -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Pob man STR_CONFIG_SETTING_TOOLBAR_POS :Safle'r prif far offer: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Lleoliad llorweddol y brif bar offer ar frig y sgrin @@ -1883,10 +1880,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Newid te # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Amlchwaraewr -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hysbys -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dewis rhwyd gêm a hysbysebir (rhyngrwyd) neu un anhysbys (rhwydwaith leol) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Na -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ia STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Enw chwaraewr: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Byddwch chi'n ymddangos i'r chwaraewyr eraill dan yr enw hwn @@ -1927,8 +1920,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Ymuno â STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Adnewyddu'r gweinydd STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Adnewyddu'r wybodaeth am y gweinydd -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Canfod gweinydd -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Chwilio'r rhwydwaith am weinydd STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Ychwanegu gweinydd STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ychwanegu gweinydd i'r rhestr a gaiff ei wirio bob tro am gemau sy'n rhedeg STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Dechrau gweinydd @@ -1945,6 +1936,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Bydd y g STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Gosod cyfrinair STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Diogelwch eich gêm â chyfrinair os nad ydych am i fynediad ato fod yn gyhoeddus +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hysbys +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dewis rhwyd gêm a hysbysebir (rhyngrwyd) neu un anhysbys (rhwydwaith leol) STR_NETWORK_START_SERVER_UNADVERTISED :Na STR_NETWORK_START_SERVER_ADVERTISED :Ia STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} gwestai From 8c0e4ab07fdd01c0fe7eba9e74214289195cd238 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 17:03:31 +0100 Subject: [PATCH 401/601] Doc: for over 10 years now, we do not load the exact AI version first (#8431) See commit fae34ee7 for details. The documentation simply never got updated. --- src/script/api/script_controller.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/script/api/script_controller.hpp b/src/script/api/script_controller.hpp index 79cb65a74f..c6b07232db 100644 --- a/src/script/api/script_controller.hpp +++ b/src/script/api/script_controller.hpp @@ -23,7 +23,6 @@ * script that matches to the specified version as close as possible. It tries * (from first to last, stopping as soon as the attempt succeeds) * - * - load the exact same version of the same script, * - load the latest version of the same script that supports loading data from * the saved version (the version of saved data must be equal or greater * than ScriptInfo::MinVersionToLoad), From 29e3331055a784ead663b62a67ef13b0112af1df Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 14:44:28 +0100 Subject: [PATCH 402/601] Codechange: move block a bit lower to increase readability It was rather confusing that "library_name" was calculated, and then not used to do the FindLibrary() call. Flipping those two blocks around makes it a bit more sane to read. --- src/script/api/script_controller.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/script/api/script_controller.cpp b/src/script/api/script_controller.cpp index 461a6c61be..adfcf2acdc 100644 --- a/src/script/api/script_controller.cpp +++ b/src/script/api/script_controller.cpp @@ -111,11 +111,6 @@ ScriptController::~ScriptController() Squirrel *engine = ScriptObject::GetActiveInstance()->engine; HSQUIRRELVM vm = engine->GetVM(); - /* Internally we store libraries as 'library.version' */ - char library_name[1024]; - seprintf(library_name, lastof(library_name), "%s.%d", library, version); - strtolower(library_name); - ScriptInfo *lib = ScriptObject::GetActiveInstance()->FindLibrary(library, version); if (lib == nullptr) { char error[1024]; @@ -123,6 +118,11 @@ ScriptController::~ScriptController() throw sq_throwerror(vm, error); } + /* Internally we store libraries as 'library.version' */ + char library_name[1024]; + seprintf(library_name, lastof(library_name), "%s.%d", library, version); + strtolower(library_name); + /* Get the current table/class we belong to */ HSQOBJECT parent; sq_getstackobj(vm, 1, &parent); From 4319d31036a243cce860511a1b543461c9677f41 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 15:22:40 +0100 Subject: [PATCH 403/601] Fix #6468: don't store version of AIs-started-via-console in name You can do: "startai myai.3", which starts version 3 of "myai". This is very useful for testing save/load code between different versions of your AI. However, when using this syntax, the AI got saved as "myai.3" as name of the AI, instead of "myai". This caused several problems, like indicating to the user the AI could not be found, but still load the AI. But in all cases, the AI never got the chance to load the saved data, making the whole reason this exists pointless. By splitting the name and version already in the console command, the code becomes simpler and AIs started this way now follow the normal flow after initialization. --- src/ai/ai_scanner.cpp | 16 +++++----------- src/console_cmds.cpp | 19 ++++++++++++++++++- src/game/game_scanner.cpp | 16 +++++----------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index ee14fd2147..aeb5b50fae 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -101,20 +101,10 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo strecpy(ai_name, nameParam, lastof(ai_name)); strtolower(ai_name); - AIInfo *info = nullptr; - int version = -1; - if (versionParam == -1) { /* We want to load the latest version of this AI; so find it */ if (this->info_single_list.find(ai_name) != this->info_single_list.end()) return static_cast(this->info_single_list[ai_name]); - - /* If we didn't find a match AI, maybe the user included a version */ - char *e = strrchr(ai_name, '.'); - if (e == nullptr) return nullptr; - *e = '\0'; - e++; - versionParam = atoi(e); - /* Continue, like we were calling this function with a version. */ + return nullptr; } if (force_exact_match) { @@ -123,8 +113,12 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo seprintf(ai_name_tmp, lastof(ai_name_tmp), "%s.%d", ai_name, versionParam); strtolower(ai_name_tmp); if (this->info_list.find(ai_name_tmp) != this->info_list.end()) return static_cast(this->info_list[ai_name_tmp]); + return nullptr; } + AIInfo *info = nullptr; + int version = -1; + /* See if there is a compatible AI which goes by that name, with the highest * version which allows loading the requested version */ ScriptInfoList::iterator it = this->info_list.begin(); diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 2f678b2fc7..e87232b365 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1172,7 +1172,24 @@ DEF_CONSOLE_CMD(ConStartAI) AIConfig *config = AIConfig::GetConfig((CompanyID)n); if (argc >= 2) { - config->Change(argv[1], -1, true); + config->Change(argv[1], -1, false); + + /* If the name is not found, and there is a dot in the name, + * try again with the assumption everything right of the dot is + * the version the user wants to load. */ + if (!config->HasScript()) { + char *name = stredup(argv[1]); + char *e = strrchr(name, '.'); + if (e != nullptr) { + *e = '\0'; + e++; + + int version = atoi(e); + config->Change(name, version, true); + } + free(name); + } + if (!config->HasScript()) { IConsoleWarning("Failed to load the specified AI"); return true; diff --git a/src/game/game_scanner.cpp b/src/game/game_scanner.cpp index 68efa350c2..6bcba4455e 100644 --- a/src/game/game_scanner.cpp +++ b/src/game/game_scanner.cpp @@ -40,20 +40,10 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo strecpy(game_name, nameParam, lastof(game_name)); strtolower(game_name); - GameInfo *info = nullptr; - int version = -1; - if (versionParam == -1) { /* We want to load the latest version of this Game script; so find it */ if (this->info_single_list.find(game_name) != this->info_single_list.end()) return static_cast(this->info_single_list[game_name]); - - /* If we didn't find a match Game script, maybe the user included a version */ - char *e = strrchr(game_name, '.'); - if (e == nullptr) return nullptr; - *e = '\0'; - e++; - versionParam = atoi(e); - /* Continue like we were calling this function with a version. */ + return nullptr; } if (force_exact_match) { @@ -62,8 +52,12 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo seprintf(game_name_tmp, lastof(game_name_tmp), "%s.%d", game_name, versionParam); strtolower(game_name_tmp); if (this->info_list.find(game_name_tmp) != this->info_list.end()) return static_cast(this->info_list[game_name_tmp]); + return nullptr; } + GameInfo *info = nullptr; + int version = -1; + /* See if there is a compatible Game script which goes by that name, with the highest * version which allows loading the requested version */ ScriptInfoList::iterator it = this->info_list.begin(); From 9add62796c91c8eb7dd971cb21c8cdeba49cadfa Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 25 Dec 2020 18:16:29 +0000 Subject: [PATCH 404/601] Update: Translations from eints finnish: 10 changes by hpiirai --- src/lang/finnish.txt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 254621dce4..6a81b13454 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1619,7 +1619,11 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Neliöllinen (a STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Puiden istutus pelissä: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin, jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat. +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Puut kasvavat, mutta eivät leviä {RED}(rikkoo sahan) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Puut kasvavat, mutta leviävät vain sademetsissä +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Puut kasvavat ja leviävät kaikkialla +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Puut eivät kasva eivätkä leviä {RED}(rikkoo sahan) STR_CONFIG_SETTING_TOOLBAR_POS :Päätyökalupalkin sijainti: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ruudun yläreunassa olevan työkalupalkin sijainti vaakasuunnassa @@ -1983,6 +1987,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liity pe STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Päivitä STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Etsi internetistä +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Etsi julkisia palvelimia internetistä +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Etsi lähiverkosta +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Etsi palvelimia lähiverkosta STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Lisää palvelin STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lisää palvelin listaan, joka käydään läpi aina uusia pelejä haettaessa STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Käynnistä palvelin @@ -4720,7 +4728,7 @@ STR_INDUSTRY_NAME_WATER_SUPPLY :Lähde STR_INDUSTRY_NAME_WATER_TOWER :Vesitorni STR_INDUSTRY_NAME_FACTORY_2 :Tehdas STR_INDUSTRY_NAME_FARM_2 :Maatila -STR_INDUSTRY_NAME_LUMBER_MILL :Hakkuualue +STR_INDUSTRY_NAME_LUMBER_MILL :Saha STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :Hattarametsä STR_INDUSTRY_NAME_CANDY_FACTORY :Karkkitehdas STR_INDUSTRY_NAME_BATTERY_FARM :Paristomaatila From f66baa444ff5575b2b40e3bfd514cdb463f6f560 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 19:38:18 +0100 Subject: [PATCH 405/601] Codechange: use C++11 constructs for for-each loops (#8432) --- src/ai/ai_gui.cpp | 25 +++++++++-------- src/ai/ai_scanner.cpp | 17 ++++++----- src/game/game_scanner.cpp | 13 ++++----- src/script/api/script_controller.cpp | 12 ++++---- src/script/script_config.cpp | 42 ++++++++++++++-------------- src/script/script_info.cpp | 32 ++++++++++----------- src/script/script_scanner.cpp | 25 ++++++++--------- 7 files changed, 81 insertions(+), 85 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index d61cfea0dc..078bde4e14 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -87,8 +87,8 @@ struct AIListWindow : public Window { if (GetConfig(slot)->HasScript()) { ScriptInfo *info = GetConfig(slot)->GetInfo(); int i = 0; - for (ScriptInfoList::const_iterator it = this->info_list->begin(); it != this->info_list->end(); it++, i++) { - if ((*it).second == info) { + for (const auto &item : *this->info_list) { + if (item.second == info) { this->selected = i; break; } @@ -127,10 +127,11 @@ struct AIListWindow : public Window { DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y + WD_MATRIX_TOP, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); y += this->line_height; } - ScriptInfoList::const_iterator it = this->info_list->begin(); - for (int i = 1; it != this->info_list->end(); i++, it++) { + int i = 1; + for (const auto &item : *this->info_list) { + i++; if (this->vscroll->IsVisible(i)) { - DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); + DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); y += this->line_height; } } @@ -138,9 +139,10 @@ struct AIListWindow : public Window { } case WID_AIL_INFO_BG: { AIInfo *selected_info = nullptr; - ScriptInfoList::const_iterator it = this->info_list->begin(); - for (int i = 1; selected_info == nullptr && it != this->info_list->end(); i++, it++) { - if (this->selected == i - 1) selected_info = static_cast((*it).second); + int i = 1; + for (const auto &item : *this->info_list) { + i++; + if (this->selected == i - 1) selected_info = static_cast(item.second); } /* Some info about the currently selected AI. */ if (selected_info != nullptr) { @@ -334,11 +336,10 @@ struct AISettingsWindow : public Window { { visible_settings.clear(); - ScriptConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin(); - for (; it != this->ai_config->GetConfigList()->end(); it++) { - bool no_hide = (it->flags & SCRIPTCONFIG_DEVELOPER) == 0; + for (const auto &item : *this->ai_config->GetConfigList()) { + bool no_hide = (item.flags & SCRIPTCONFIG_DEVELOPER) == 0; if (no_hide || _settings_client.gui.ai_developer_tools) { - visible_settings.push_back(&(*it)); + visible_settings.push_back(&item); } } diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index aeb5b50fae..1431a2820b 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -61,8 +61,8 @@ void AIScannerInfo::RegisterAPI(class Squirrel *engine) AIInfo *AIScannerInfo::SelectRandomAI() const { uint num_random_ais = 0; - for (ScriptInfoList::const_iterator it = this->info_single_list.begin(); it != this->info_single_list.end(); it++) { - AIInfo *i = static_cast((*it).second); + for (const auto &item : info_single_list) { + AIInfo *i = static_cast(item.second); if (i->UseAsRandomAI()) num_random_ais++; } @@ -121,11 +121,10 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo /* See if there is a compatible AI which goes by that name, with the highest * version which allows loading the requested version */ - ScriptInfoList::iterator it = this->info_list.begin(); - for (; it != this->info_list.end(); it++) { - AIInfo *i = static_cast((*it).second); + for (const auto &item : this->info_list) { + AIInfo *i = static_cast(item.second); if (strcasecmp(ai_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) { - version = (*it).second->GetVersion(); + version = item.second->GetVersion(); info = i; } } @@ -158,8 +157,8 @@ AILibrary *AIScannerLibrary::FindLibrary(const char *library, int version) strtolower(library_name); /* Check if the library + version exists */ - ScriptInfoList::iterator iter = this->info_list.find(library_name); - if (iter == this->info_list.end()) return nullptr; + ScriptInfoList::iterator it = this->info_list.find(library_name); + if (it == this->info_list.end()) return nullptr; - return static_cast((*iter).second); + return static_cast((*it).second); } diff --git a/src/game/game_scanner.cpp b/src/game/game_scanner.cpp index 6bcba4455e..1935b78137 100644 --- a/src/game/game_scanner.cpp +++ b/src/game/game_scanner.cpp @@ -60,11 +60,10 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo /* See if there is a compatible Game script which goes by that name, with the highest * version which allows loading the requested version */ - ScriptInfoList::iterator it = this->info_list.begin(); - for (; it != this->info_list.end(); it++) { - GameInfo *i = static_cast((*it).second); + for (const auto &item : this->info_list) { + GameInfo *i = static_cast(item.second); if (strcasecmp(game_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) { - version = (*it).second->GetVersion(); + version = item.second->GetVersion(); info = i; } } @@ -97,8 +96,8 @@ GameLibrary *GameScannerLibrary::FindLibrary(const char *library, int version) strtolower(library_name); /* Check if the library + version exists */ - ScriptInfoList::iterator iter = this->info_list.find(library_name); - if (iter == this->info_list.end()) return nullptr; + ScriptInfoList::iterator it = this->info_list.find(library_name); + if (it == this->info_list.end()) return nullptr; - return static_cast((*iter).second); + return static_cast((*it).second); } diff --git a/src/script/api/script_controller.cpp b/src/script/api/script_controller.cpp index adfcf2acdc..e74f27e4a4 100644 --- a/src/script/api/script_controller.cpp +++ b/src/script/api/script_controller.cpp @@ -77,9 +77,9 @@ ScriptController::ScriptController(CompanyID company) : ScriptController::~ScriptController() { - for (LoadedLibraryList::iterator iter = this->loaded_library.begin(); iter != this->loaded_library.end(); iter++) { - free((*iter).second); - free((*iter).first); + for (const auto &item : this->loaded_library) { + free(item.second); + free(item.first); } this->loaded_library.clear(); @@ -129,9 +129,9 @@ ScriptController::~ScriptController() char fake_class[1024]; - LoadedLibraryList::iterator iter = controller->loaded_library.find(library_name); - if (iter != controller->loaded_library.end()) { - strecpy(fake_class, (*iter).second, lastof(fake_class)); + LoadedLibraryList::iterator it = controller->loaded_library.find(library_name); + if (it != controller->loaded_library.end()) { + strecpy(fake_class, (*it).second, lastof(fake_class)); } else { int next_number = ++controller->loaded_library_count; diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index 4ebd049161..8de141e662 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -32,9 +32,9 @@ void ScriptConfig::Change(const char *name, int version, bool force_exact_match, if (_game_mode == GM_NORMAL && this->info != nullptr) { /* If we're in an existing game and the Script is changed, set all settings * for the Script that have the random flag to a random value. */ - for (ScriptConfigItemList::const_iterator it = this->info->GetConfigList()->begin(); it != this->info->GetConfigList()->end(); it++) { - if ((*it).flags & SCRIPTCONFIG_RANDOM) { - this->SetSetting((*it).name, InteractiveRandomRange((*it).max_value + 1 - (*it).min_value) + (*it).min_value); + for (const auto &item : *this->info->GetConfigList()) { + if (item.flags & SCRIPTCONFIG_RANDOM) { + this->SetSetting(item.name, InteractiveRandomRange(item.max_value + 1 - item.min_value) + item.min_value); } } this->AddRandomDeviation(); @@ -49,8 +49,8 @@ ScriptConfig::ScriptConfig(const ScriptConfig *config) this->config_list = nullptr; this->is_random = config->is_random; - for (SettingValueList::const_iterator it = config->settings.begin(); it != config->settings.end(); it++) { - this->settings[stredup((*it).first)] = (*it).second; + for (const auto &item : config->settings) { + this->settings[stredup(item.first)] = item.second; } this->AddRandomDeviation(); } @@ -79,24 +79,24 @@ const ScriptConfigItemList *ScriptConfig::GetConfigList() void ScriptConfig::ClearConfigList() { - for (SettingValueList::iterator it = this->settings.begin(); it != this->settings.end(); it++) { - free((*it).first); + for (const auto &item : this->settings) { + free(item.first); } this->settings.clear(); } void ScriptConfig::AnchorUnchangeableSettings() { - for (ScriptConfigItemList::const_iterator it = this->GetConfigList()->begin(); it != this->GetConfigList()->end(); it++) { - if (((*it).flags & SCRIPTCONFIG_INGAME) == 0) { - this->SetSetting((*it).name, this->GetSetting((*it).name)); + for (const auto &item : *this->GetConfigList()) { + if ((item.flags & SCRIPTCONFIG_INGAME) == 0) { + this->SetSetting(item.name, this->GetSetting(item.name)); } } } int ScriptConfig::GetSetting(const char *name) const { - SettingValueList::const_iterator it = this->settings.find(name); + const auto it = this->settings.find(name); if (it == this->settings.end()) return this->info->GetSettingDefaultValue(name); return (*it).second; } @@ -111,7 +111,7 @@ void ScriptConfig::SetSetting(const char *name, int value) value = Clamp(value, config_item->min_value, config_item->max_value); - SettingValueList::iterator it = this->settings.find(name); + const auto it = this->settings.find(name); if (it != this->settings.end()) { (*it).second = value; } else { @@ -121,17 +121,17 @@ void ScriptConfig::SetSetting(const char *name, int value) void ScriptConfig::ResetSettings() { - for (SettingValueList::iterator it = this->settings.begin(); it != this->settings.end(); it++) { - free((*it).first); + for (const auto &item : this->settings) { + free(item.first); } this->settings.clear(); } void ScriptConfig::AddRandomDeviation() { - for (ScriptConfigItemList::const_iterator it = this->GetConfigList()->begin(); it != this->GetConfigList()->end(); it++) { - if ((*it).random_deviation != 0) { - this->SetSetting((*it).name, InteractiveRandomRange((*it).random_deviation * 2 + 1) - (*it).random_deviation + this->GetSetting((*it).name)); + for (const auto &item : *this->GetConfigList()) { + if (item.random_deviation != 0) { + this->SetSetting(item.name, InteractiveRandomRange(item.random_deviation * 2 + 1) - item.random_deviation + this->GetSetting(item.name)); } } } @@ -186,16 +186,16 @@ void ScriptConfig::SettingsToString(char *string, const char *last) const { char *s = string; *s = '\0'; - for (SettingValueList::const_iterator it = this->settings.begin(); it != this->settings.end(); it++) { + for (const auto &item : this->settings) { char no[10]; - seprintf(no, lastof(no), "%d", (*it).second); + seprintf(no, lastof(no), "%d", item.second); /* Check if the string would fit in the destination */ - size_t needed_size = strlen((*it).first) + 1 + strlen(no); + size_t needed_size = strlen(item.first) + 1 + strlen(no); /* If it doesn't fit, skip the next settings */ if (string + needed_size > last) break; - s = strecat(s, (*it).first, last); + s = strecat(s, item.first, last); s = strecat(s, "=", last); s = strecat(s, no, last); s = strecat(s, ",", last); diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index 53a8fb30ef..4eebd548d3 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -20,14 +20,14 @@ ScriptInfo::~ScriptInfo() { /* Free all allocated strings */ - for (ScriptConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { - free((*it).name); - free((*it).description); - if (it->labels != nullptr) { - for (auto &lbl_map : *(*it).labels) { + for (const auto &item : this->config_list) { + free(item.name); + free(item.description); + if (item.labels != nullptr) { + for (auto &lbl_map : *item.labels) { free(lbl_map.second); } - delete it->labels; + delete item.labels; } } this->config_list.clear(); @@ -232,8 +232,8 @@ SQInteger ScriptInfo::AddLabels(HSQUIRRELVM vm) ValidateString(setting_name); ScriptConfigItem *config = nullptr; - for (ScriptConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { - if (strcmp((*it).name, setting_name) == 0) config = &(*it); + for (auto &item : this->config_list) { + if (strcmp(item.name, setting_name) == 0) config = &item; } if (config == nullptr) { @@ -284,22 +284,22 @@ const ScriptConfigItemList *ScriptInfo::GetConfigList() const const ScriptConfigItem *ScriptInfo::GetConfigItem(const char *name) const { - for (ScriptConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { - if (strcmp((*it).name, name) == 0) return &(*it); + for (const auto &item : this->config_list) { + if (strcmp(item.name, name) == 0) return &item; } return nullptr; } int ScriptInfo::GetSettingDefaultValue(const char *name) const { - for (ScriptConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { - if (strcmp((*it).name, name) != 0) continue; + for (const auto &item : this->config_list) { + if (strcmp(item.name, name) != 0) continue; /* The default value depends on the difficulty level */ switch (GetGameSettings().script.settings_profile) { - case SP_EASY: return (*it).easy_value; - case SP_MEDIUM: return (*it).medium_value; - case SP_HARD: return (*it).hard_value; - case SP_CUSTOM: return (*it).custom_value; + case SP_EASY: return item.easy_value; + case SP_MEDIUM: return item.medium_value; + case SP_HARD: return item.hard_value; + case SP_CUSTOM: return item.custom_value; default: NOT_REACHED(); } } diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp index e33f233f7b..dc3feb58c7 100644 --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -103,14 +103,12 @@ void ScriptScanner::RescanDir() void ScriptScanner::Reset() { - ScriptInfoList::iterator it = this->info_list.begin(); - for (; it != this->info_list.end(); it++) { - free((*it).first); - delete (*it).second; + for (const auto &item : this->info_list) { + free(item.first); + delete item.second; } - it = this->info_single_list.begin(); - for (; it != this->info_single_list.end(); it++) { - free((*it).first); + for (const auto &item : this->info_single_list) { + free(item.first); } this->info_list.clear(); @@ -171,9 +169,8 @@ char *ScriptScanner::GetConsoleList(char *p, const char *last, bool newest_only) { p += seprintf(p, last, "List of %s:\n", this->GetScannerName()); const ScriptInfoList &list = newest_only ? this->info_single_list : this->info_list; - ScriptInfoList::const_iterator it = list.begin(); - for (; it != list.end(); it++) { - ScriptInfo *i = (*it).second; + for (const auto &item : list) { + ScriptInfo *i = item.second; p += seprintf(p, last, "%10s (v%d): %s\n", i->GetName(), i->GetVersion(), i->GetDescription()); } p += seprintf(p, last, "\n"); @@ -273,16 +270,16 @@ static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, S bool ScriptScanner::HasScript(const ContentInfo *ci, bool md5sum) { - for (ScriptInfoList::iterator it = this->info_list.begin(); it != this->info_list.end(); it++) { - if (IsSameScript(ci, md5sum, (*it).second, this->GetDirectory())) return true; + for (const auto &item : this->info_list) { + if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return true; } return false; } const char *ScriptScanner::FindMainScript(const ContentInfo *ci, bool md5sum) { - for (ScriptInfoList::iterator it = this->info_list.begin(); it != this->info_list.end(); it++) { - if (IsSameScript(ci, md5sum, (*it).second, this->GetDirectory())) return (*it).second->GetMainScript(); + for (const auto &item : this->info_list) { + if (IsSameScript(ci, md5sum, item.second, this->GetDirectory())) return item.second->GetMainScript(); } return nullptr; } From e6e91a345c1d802f0bb1da04e1d6f4ed843e4c8a Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 19:57:13 +0100 Subject: [PATCH 406/601] Fix f66baa44: index was off by one (#8433) i++ in the 3rd part of a for() is post, not pre. Oops. --- src/ai/ai_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 078bde4e14..23d1e81b70 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -127,7 +127,7 @@ struct AIListWindow : public Window { DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y + WD_MATRIX_TOP, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); y += this->line_height; } - int i = 1; + int i = 0; for (const auto &item : *this->info_list) { i++; if (this->vscroll->IsVisible(i)) { @@ -139,7 +139,7 @@ struct AIListWindow : public Window { } case WID_AIL_INFO_BG: { AIInfo *selected_info = nullptr; - int i = 1; + int i = 0; for (const auto &item : *this->info_list) { i++; if (this->selected == i - 1) selected_info = static_cast(item.second); From 79cb9efa7f7adb250fd25bee2200165ddd77817e Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 25 Dec 2020 20:36:14 +0100 Subject: [PATCH 407/601] Change: Always apply inflation from 1920 to 2090, no matter the game start year. (#7589) --- src/economy.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/economy.cpp b/src/economy.cpp index 5e53334a0e..3af220d96a 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -722,7 +722,7 @@ bool AddInflation(bool check_year) * inflation doesn't add anything after that either; it even makes playing * it impossible due to the diverging cost and income rates. */ - if (check_year && (_cur_year - _settings_game.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return true; + if (check_year && (_cur_year < ORIGINAL_BASE_YEAR || _cur_year >= ORIGINAL_MAX_YEAR)) return true; if (_economy.inflation_prices == MAX_INFLATION || _economy.inflation_payment == MAX_INFLATION) return true; @@ -914,6 +914,14 @@ void StartupEconomy() _economy.infl_amount_pr = max(0, _settings_game.difficulty.initial_interest - 1); _economy.fluct = GB(Random(), 0, 8) + 168; + if (_settings_game.economy.inflation) { + /* Apply inflation that happened before our game start year. */ + int months = (min(_cur_year, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR) * 12; + for (int i = 0; i < months; i++) { + AddInflation(false); + } + } + /* Set up prices */ RecomputePrices(); From e0b953b80404b37cc5b85a2b88ce0c548ebbc2c8 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 20:04:48 +0100 Subject: [PATCH 408/601] Fix: [Emscripten] compile with exceptions enabled, as our AIs depend on it Also parts of the saveload code does, and some other places. This does slow down builds, but for most computers this will not be measurable. At least, the ones I had access to I could not find a difference in FPS, mainly as that is heavily limited by the Hz of the screens of the computer. Either way, it is better to have a full functional game than a fast one in my opinion --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca2284ffc1..bbde268c4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -242,6 +242,8 @@ if(EMSCRIPTEN) # Allow heap-growth, and start with a bigger memory size. target_link_libraries(WASM::WASM INTERFACE "-s ALLOW_MEMORY_GROWTH=1") target_link_libraries(WASM::WASM INTERFACE "-s INITIAL_MEMORY=33554432") + target_link_libraries(WASM::WASM INTERFACE "-s DISABLE_EXCEPTION_CATCHING=0") + add_definitions(-s DISABLE_EXCEPTION_CATCHING=0) # Export functions to Javascript. target_link_libraries(WASM::WASM INTERFACE "-s EXPORTED_FUNCTIONS='[\"_main\", \"_em_openttd_add_server\"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") From 6aef1164a4c34d17b60acfb99e61117f35749c98 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Fri, 25 Dec 2020 20:06:37 +0100 Subject: [PATCH 409/601] Fix: [Emscripten] using TIC/TOC on this platform is silly Stop throwing a warning about this, as it is not likely we will ever implement it. --- src/cpu.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cpu.cpp b/src/cpu.cpp index 87aa841324..bafa0f7352 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -66,6 +66,12 @@ uint64 ottd_rdtsc() # define RDTSC_AVAILABLE #endif +#if defined(__EMSCRIPTEN__) && !defined(RDTSC_AVAILABLE) +/* On emscripten doing TIC/TOC would be ill-advised */ +uint64 ottd_rdtsc() {return 0;} +# define RDTSC_AVAILABLE +#endif + /* In all other cases we have no support for rdtsc. No major issue, * you just won't be able to profile your code with TIC()/TOC() */ #if !defined(RDTSC_AVAILABLE) From f2d78b11ddc50cea53a8c84e3584319ba5dd0e7b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 26 Dec 2020 13:48:57 +0100 Subject: [PATCH 410/601] Fix: [Actions] cmakeBuildType is only used with CMakeListsTxtBasic (#8435) We use CMakeListsTxtAdvanced, and as such, we have to do this our self via "-DCMAKE_BUILD_TYPE=RelWithDebInfo". Otherwise we are producing Debug builds instead of Release builds. Oops. --- .github/workflows/release.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 965fe1bf61..275a994d99 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -479,8 +479,7 @@ jobs: useVcpkgToolchainFile: false buildDirectory: '${{ github.workspace }}/build-host' buildWithCMakeArgs: '--target tools' - cmakeBuildType: RelWithDebInfo - cmakeAppendedArgs: ' -GNinja -DOPTION_TOOLS_ONLY=ON' + cmakeAppendedArgs: ' -GNinja -DOPTION_TOOLS_ONLY=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo' - name: Install MSVC problem matcher uses: ammaraskar/msvc-problem-matcher@master @@ -492,8 +491,7 @@ jobs: cmakeListsOrSettingsJson: CMakeListsTxtAdvanced useVcpkgToolchainFile: true buildDirectory: '${{ github.workspace }}/build' - cmakeBuildType: RelWithDebInfo - cmakeAppendedArgs: ' -GNinja -DOPTION_USE_NSIS=ON -DHOST_BINARY_DIR=${{ github.workspace }}/build-host' + cmakeAppendedArgs: ' -GNinja -DOPTION_USE_NSIS=ON -DHOST_BINARY_DIR=${{ github.workspace }}/build-host -DCMAKE_BUILD_TYPE=RelWithDebInfo' - name: Build (without installer) if: needs.source.outputs.is_tag != 'true' || matrix.arch == 'arm64' @@ -502,8 +500,7 @@ jobs: cmakeListsOrSettingsJson: CMakeListsTxtAdvanced useVcpkgToolchainFile: true buildDirectory: '${{ github.workspace }}/build' - cmakeBuildType: RelWithDebInfo - cmakeAppendedArgs: ' -GNinja -DHOST_BINARY_DIR=${{ github.workspace }}/build-host' + cmakeAppendedArgs: ' -GNinja -DHOST_BINARY_DIR=${{ github.workspace }}/build-host -DCMAKE_BUILD_TYPE=RelWithDebInfo' - name: Create bundles shell: bash From 8fa2a67f6b486d4169cdf0a3782782f8e71e04ad Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 26 Dec 2020 13:54:00 +0100 Subject: [PATCH 411/601] Fix f66baa44: for-loop is no longer increasing "i" During conversion it was overlooked that the for-loop used to do this. Oops. --- src/ai/ai_gui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 23d1e81b70..f1ee03fc17 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -92,6 +92,8 @@ struct AIListWindow : public Window { this->selected = i; break; } + + i++; } } } From 2c8c6d423c32bef374d12664c062ed1daf60a981 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 26 Dec 2020 18:16:26 +0000 Subject: [PATCH 412/601] Update: Translations from eints korean: 18 changes by telk5093 --- src/lang/korean.txt | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 33382de3f6..0a8612ca07 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1243,7 +1243,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :선로의 어 STR_CONFIG_SETTING_SIGNALSIDE_LEFT :왼쪽에 STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :진행 방향에 STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :오른쪽에 -STR_CONFIG_SETTING_SHOWFINANCES :연말에 자동으로 재정 창을 띄움: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES :연말에 자동으로 재정 창을 띄우기: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :이 설정을 켜면. 회사의 재정 상태를 확인하기 쉽도록 매년 말에 재정 창이 자동으로 뜹니다. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :새로 지정하는 경로는 기본적으로 '직행'으로 처리: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :일반적으로 차량은 경로 상에 있는 모든 역에 정차하게 되어있습니다. 이 설정을 켜면, 차량이 마지막 목적지까지 정차없이 모든 역을 통과할 것입니다. 이 설정은 새로 경로를 지정하는 차량에만 적용되는 점을 알아두십시오. 하지만 각 차량의 경로는 두 가지 방법 중에 원하는 대로 다시 설정할 수 있습니다. @@ -1292,7 +1292,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에 STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다. -STR_CONFIG_SETTING_WARN_LOST_VEHICLE :차량이 길을 잃으면 경고: {STRING} +STR_CONFIG_SETTING_WARN_LOST_VEHICLE :차량이 길을 잃으면 경고하기: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :다음 목적지로 가기 위한 경로를 찾을 수 없는 차량이 있으면 뉴스 메시지로 알려줍니다. STR_CONFIG_SETTING_ORDER_REVIEW :차량의 경로를 검사: {STRING} STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :이 설정을 켜면, 차량의 경로를 주기적으로 검사하여 문제가 발견되면 뉴스 메시지로 알려줍니다. @@ -1316,7 +1316,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :오류 메시 STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA}초 동안 STR_CONFIG_SETTING_HOVER_DELAY :도움말 보이기: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :마우스를 올려놓았을 때 도움말이 뜨는데 걸리는 시간을 설정합니다. 마우스 오른쪽 클릭으로 바로 뜨도록 할 수도 있습니다. -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :마우스를 {COMMA}밀리초 동안 올려놓기 (1밀리초 = 1/1000초) +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :마우스를 {COMMA}밀리초 동안 올려놓기 STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :마우스 오른쪽 클릭 STR_CONFIG_SETTING_POPULATION_IN_LABEL :도시 이름 옆에 도시의 인구 수를 표시함: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :도시 이름 옆에 도시의 인구 수를 표시합니다. @@ -1367,7 +1367,7 @@ STR_CONFIG_SETTING_STATION_SPREAD :역의 최대 STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :역의 최대 크기를 설정합니다. 값이 높으면 게임이 느려질 수도 있습니다. STR_CONFIG_SETTING_SERVICEATHELIPAD :헬리콥터를 발착장에서 자동으로 점검: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :공항에 격납고가 없어도 헬리콥터가 공항에 착륙할 때마다 점검을 하도록 합니다. -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :철도/도로/항만/공항 건설창을 띄울 때 지형 편집창도 같이 띄움: {STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :철도/도로/항만/공항 건설창을 띄울 때 지형 편집창도 같이 띄우기: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :수송 시설과 관련된 건설 창을 열 때 지형 편집 창을 같이 엽니다. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :소형지도 창에 표시될 땅의 색상: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :소형지도 창에 사용할 지형의 색상을 선택합니다. @@ -1417,7 +1417,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :창 내부를 STR_CONFIG_SETTING_AUTOSAVE :자동 저장: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :게임을 자동으로 저장할 간격을 선택하십시오. -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :저장 파일의 이름으로 {STRING} 날짜 형식을 사용합니다. +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :저장 파일 이름으로 {STRING} 날짜 형식을 사용 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :게임 저장 파일 이름에 사용할 날짜 형식을 선택합니다. STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :긴 (2012년 1월 1일) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :짧은 (2012.01.01) @@ -1501,7 +1501,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :멀티 플레 STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :게임 스크립트가 중지되기 직전에 계산할 수 있는 최대 횟수: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :게임 스크립트가 한 단계에서 계산할 수 있는 최대 계산 횟수를 설정합니다. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :스크립트당 최대 메모리 사용량: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :강제로 종료되기 전에 단일 스크립트가 사용할 수 있는 메모리의 양입니다. 크기가 큰 맵에서는 값을 크게 설정해야할 수도 있습니다. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :스크립트 하나가 강제 종료되기 전까지 사용할 수 있는 메모리의 양입니다. 크기가 큰 맵에서는 값을 크게 설정해야할 수도 있습니다. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :신뢰도에 따른 정비 설정: {STRING} @@ -1572,7 +1572,7 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :부드러움 STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :멈춤 STR_CONFIG_SETTING_ALLOW_SHARES :다른 회사의 지분을 사는 것을 허용: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :이 설정을 켜면, 회사의 지분을 거래할 수 있게 됩니다. 회사의 지분을 거래하려면 해당 회사가 어느 정도 오래되어야 합니다. -STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING}년 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :지분을 사고 팔기 위해 필요한 회사의 최소 나이를 설정합니다. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :환승시 벌어들이는 중간 수익의 비율: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :더 많은 수익을 내기 위해, 수송 관계상 중간 구간에게 주어진 수익의 비율을 설정합니다. @@ -1583,7 +1583,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :드래그할 STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :신호기를 CTRL+드래그 하여 설치할 때의 행동을 선택합니다. 이 설정을 끄면, 신호기가 없는 긴 폐색을 만들지 않기 위해 터널이나 다리 주변에 먼저 신호기가 설치될 것입니다. 이 설정을 켜면, 신호기는 터널/다리와 상관없이 매 n개의 칸마다 설치될 것입니다. STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :전자식 신호기의 사용: {STRING}년 이후에 STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신호기를 사용할 수 있는 연도를 설정합니다. 이 이전에는 구식 신호기만 사용 가능합니다. (두 신호기는 기능적으로는 동일하고 모습만 다릅니다.) -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :신호기 설치시 신호기 선택 창을 띄움: {STRING} +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :신호기 설치시 신호기 선택 창을 띄우기: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :설치할 신호기 종류를 고를 수 있는 신호기 선택 창을 표시합니다. 이 설정을 끄면, 신호기 선택 창 없이 CTRL+클릭 만으로 신호기의 종류를 바꿔야 합니다. STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :기본적으로 만들 신호기 종류: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :기본으로 설치할 신호기의 종류를 선택합니다. @@ -1619,8 +1619,12 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :선형 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :게임 진행 중에 나무가 자동적으로 번식: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :게임 중에 나무가 자동적으로 번식하는지 여부를 조절합니다. 이 설정을 조정하면, 아열대 기후의 벌목소처럼 나무의 성장에 의존하는 산업시설에 영향을 끼칠 수 있습니다. +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :나무의 성장과 확장: {STRING} +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :게임 플레이 중 나무의 성장과 확장 여부를 조절합니다. 이 설정을 조정하면, 아열대 기후의 벌목소처럼 나무의 성장에 의존하는 산업시설에 영향을 끼칠 수 있습니다. +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :성장은 하되 확장은 안 함 {RED}(제재소가 멈출 수 있음) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :성장은 하되 열대 우림에서만 확장함 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :어디서나 성장하고 확장함 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :성장과 확장 모두 안 함 {RED}(제재소가 멈출 수 있음) STR_CONFIG_SETTING_TOOLBAR_POS :주메뉴의 위치: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :주 메뉴가 화면 상단의 어느 위치에 표시될지를 선택합니다. @@ -1984,6 +1988,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}게임 STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}새로고침 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}서버 정보를 새로 고칩니다. +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}인터넷 검색 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}인터넷에서 공개 서버를 검색합니다 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}LAN 검색 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}로컬 영역 네트워크에서 서버를 검색합니다 STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}서버 추가 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}서버를 목록에 수동으로 추가합니다. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}서버 열기 From 4d0f19406b8ab841f920fc1206796be90d7643ea Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 28 Jun 2020 13:43:17 +0200 Subject: [PATCH 413/601] Fix: Wrong tree sprite in tree toolbar --- src/tree_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index 5a1da825b1..72d40af3e8 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -29,7 +29,7 @@ void PlaceTreesRandomly(); /** Tree Sprites with their palettes */ const PalSpriteID tree_sprites[] = { - { 1621, PAL_NONE }, { 1587, PAL_NONE }, { 1656, PAL_NONE }, { 1579, PAL_NONE }, + { 1621, PAL_NONE }, { 1635, PAL_NONE }, { 1656, PAL_NONE }, { 1579, PAL_NONE }, { 1607, PAL_NONE }, { 1593, PAL_NONE }, { 1614, PAL_NONE }, { 1586, PAL_NONE }, { 1663, PAL_NONE }, { 1677, PAL_NONE }, { 1691, PAL_NONE }, { 1705, PAL_NONE }, { 1711, PAL_NONE }, { 1746, PAL_NONE }, { 1753, PAL_NONE }, { 1732, PAL_NONE }, From e0ee2d530aaa7bcf0bf80012f27024337d0ac4e7 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 22 Jun 2020 18:48:51 +0200 Subject: [PATCH 414/601] Change: Switch tree GUI to use dynamically generated buttons This makes it look a bit better in climates with fewer tree types. --- src/tree_gui.cpp | 249 ++++++++++++++++++++------------------ src/widgets/tree_widget.h | 14 +-- 2 files changed, 134 insertions(+), 129 deletions(-) diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index 72d40af3e8..58edf563b2 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -15,6 +15,8 @@ #include "company_base.h" #include "command_func.h" #include "sound_func.h" +#include "strings_func.h" +#include "zoom_func.h" #include "tree_map.h" #include "widgets/tree_widget.h" @@ -41,91 +43,111 @@ const PalSpriteID tree_sprites[] = { { 1978, PAL_NONE }, { 1985, PALETTE_TO_RED, }, { 1992, PALETTE_TO_PALE_GREEN }, { 1999, PALETTE_TO_YELLOW }, { 2006, PALETTE_TO_RED } }; +/** + * Calculate the maximum size of all tree sprites + * @return Dimension of the largest tree sprite + */ +static Dimension GetMaxTreeSpriteSize() +{ + const uint16 base = _tree_base_by_landscape[_settings_game.game_creation.landscape]; + const uint16 count = _tree_count_by_landscape[_settings_game.game_creation.landscape]; + + Dimension size, this_size; + Point offset; + /* Avoid to use it uninitialized */ + size.width = 32; // default width - WD_FRAMERECT_LEFT + size.height = 39; // default height - BUTTON_BOTTOM_OFFSET + offset.x = 0; + offset.y = 0; + + for (int i = base; i < base + count; i++) { + if (i >= (int)lengthof(tree_sprites)) return size; + this_size = GetSpriteSize(tree_sprites[i].sprite, &offset); + size.width = max(size.width, 2 * max(this_size.width, -offset.x)); + size.height = max(size.height, max(this_size.height, -offset.y)); + } + + return size; +} + /** * The build trees window. */ class BuildTreesWindow : public Window { - uint16 base; ///< Base tree number used for drawing the window. - uint16 count; ///< Number of different trees available. - TreeType tree_to_plant; ///< Tree number to plant, \c TREE_INVALID for a random tree. + /** Visual Y offset of tree root from the bottom of the tree type buttons */ + static const int BUTTON_BOTTOM_OFFSET = 7; + + int tree_to_plant; ///< Tree number to plant, \c TREE_INVALID for a random tree. + + /** + * Update the GUI and enable/disable planting to reflect selected options. + */ + void UpdateMode() + { + this->RaiseButtons(); + + const int current_tree = this->tree_to_plant; + + if (this->tree_to_plant >= 0) { + /* Activate placement */ + if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP); + SetObjectToPlace(SPR_CURSOR_TREE, PAL_NONE, HT_RECT, this->window_class, this->window_number); + this->tree_to_plant = current_tree; // SetObjectToPlace may call ResetObjectToPlace which may reset tree_to_plant to -1 + } else { + /* Deactivate placement */ + ResetObjectToPlace(); + } + + if (this->tree_to_plant == TREE_INVALID) { + this->LowerWidget(WID_BT_TYPE_RANDOM); + } else if (this->tree_to_plant >= 0) { + this->LowerWidget(WID_BT_TYPE_BUTTON_FIRST + this->tree_to_plant); + } + + this->SetDirty(); + } public: - BuildTreesWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) + BuildTreesWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), tree_to_plant(-1) { this->InitNested(window_number); ResetObjectToPlace(); - } - /** - * Calculate the maximum size of all tree sprites - * @return Dimension of the largest tree sprite - */ - Dimension GetMaxTreeSpriteSize() - { - Dimension size, this_size; - Point offset; - /* Avoid to use it uninitialized */ - size.width = 32; // default width - 2 - size.height = 39; // default height - 7 - offset.x = 0; - offset.y = 0; - - for (int i = this->base; i < this->base + this->count; i++) { - if (i >= (int)lengthof(tree_sprites)) return size; - this_size = GetSpriteSize(tree_sprites[i].sprite, &offset); - size.width = max(size.width, 2 * max(this_size.width, -offset.x)); - size.height = max(size.height, max(this_size.height, -offset.y)); + /* Show scenario editor tools in editor */ + auto *se_tools = this->GetWidget(WID_BT_SE_PANE); + if (_game_mode != GM_EDITOR) { + se_tools->SetDisplayedPlane(SZSP_HORIZONTAL); + this->ReInit(); } - - return size; } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { - if (widget >= WID_BT_TYPE_11 && widget <= WID_BT_TYPE_34) { + if (widget >= WID_BT_TYPE_BUTTON_FIRST) { + /* Ensure tree type buttons are sized after the largest tree type */ Dimension d = GetMaxTreeSpriteSize(); - /* Allow some pixels extra width and height */ size->width = d.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; - size->height = d.height + WD_FRAMERECT_RIGHT + WD_FRAMERECT_BOTTOM + 7; // we need some more space - return; - } - - if (widget != WID_BT_MANY_RANDOM) return; - - if (_game_mode != GM_EDITOR) { - size->width = 0; - size->height = 0; + size->height = d.height + WD_FRAMERECT_RIGHT + WD_FRAMERECT_BOTTOM + ScaleGUITrad(BUTTON_BOTTOM_OFFSET); // we need some more space } } void DrawWidget(const Rect &r, int widget) const override { - if (widget < WID_BT_TYPE_11 || widget > WID_BT_TYPE_34 || widget - WID_BT_TYPE_11 >= this->count) return; - - int i = this->base + widget - WID_BT_TYPE_11; - /* Trees "grow" in the centre on the bottom line of the buttons */ - DrawSprite(tree_sprites[i].sprite, tree_sprites[i].pal, (r.left + r.right) / 2 + WD_FRAMERECT_LEFT, r.bottom - 7); + if (widget >= WID_BT_TYPE_BUTTON_FIRST) { + const int index = widget - WID_BT_TYPE_BUTTON_FIRST; + /* Trees "grow" in the centre on the bottom line of the buttons */ + DrawSprite(tree_sprites[index].sprite, tree_sprites[index].pal, (r.left + r.right) / 2 + WD_FRAMERECT_LEFT, r.bottom - ScaleGUITrad(BUTTON_BOTTOM_OFFSET)); + } } void OnClick(Point pt, int widget, int click_count) override { switch (widget) { - case WID_BT_TYPE_11: case WID_BT_TYPE_12: case WID_BT_TYPE_13: case WID_BT_TYPE_14: - case WID_BT_TYPE_21: case WID_BT_TYPE_22: case WID_BT_TYPE_23: case WID_BT_TYPE_24: - case WID_BT_TYPE_31: case WID_BT_TYPE_32: case WID_BT_TYPE_33: case WID_BT_TYPE_34: - if (widget - WID_BT_TYPE_11 >= this->count) break; - - if (HandlePlacePushButton(this, widget, SPR_CURSOR_TREE, HT_RECT)) { - this->tree_to_plant = (TreeType)(this->base + widget - WID_BT_TYPE_11); - } - break; - case WID_BT_TYPE_RANDOM: // tree of random type. - if (HandlePlacePushButton(this, WID_BT_TYPE_RANDOM, SPR_CURSOR_TREE, HT_RECT)) { - this->tree_to_plant = TREE_INVALID; - } + this->tree_to_plant = this->tree_to_plant == TREE_INVALID ? -1 : TREE_INVALID; + this->UpdateMode(); break; case WID_BT_MANY_RANDOM: // place trees randomly over the landscape @@ -133,6 +155,14 @@ public: PlaceTreesRandomly(); MarkWholeScreenDirty(); break; + + default: + if (widget >= WID_BT_TYPE_BUTTON_FIRST) { + const int index = widget - WID_BT_TYPE_BUTTON_FIRST; + this->tree_to_plant = this->tree_to_plant == index ? -1 : index; + this->UpdateMode(); + } + break; } } @@ -149,26 +179,53 @@ public: void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1 && select_proc == DDSP_PLANT_TREES) { - DoCommandP(end_tile, this->tree_to_plant, start_tile, - CMD_PLANT_TREE | CMD_MSG(STR_ERROR_CAN_T_PLANT_TREE_HERE)); + DoCommandP(end_tile, this->tree_to_plant, start_tile, CMD_PLANT_TREE | CMD_MSG(STR_ERROR_CAN_T_PLANT_TREE_HERE)); } } - /** - * Initialize the window data - */ - void OnInit() override - { - this->base = _tree_base_by_landscape[_settings_game.game_creation.landscape]; - this->count = _tree_count_by_landscape[_settings_game.game_creation.landscape]; - } - void OnPlaceObjectAbort() override { - this->RaiseButtons(); + this->tree_to_plant = -1; + this->UpdateMode(); } }; +/** + * Make widgets for the current available tree types. + * This does not use a NWID_MATRIX or WWT_MATRIX control as those are more difficult to + * get producing the correct result than dynamically building the widgets is. + * @see NWidgetFunctionType + */ +static NWidgetBase *MakeTreeTypeButtons(int *biggest_index) +{ + const byte type_base = _tree_base_by_landscape[_settings_game.game_creation.landscape]; + const byte type_count = _tree_count_by_landscape[_settings_game.game_creation.landscape]; + + /* Toyland has 9 tree types, which look better in 3x3 than 4x3 */ + const int num_columns = type_count == 9 ? 3 : 4; + const int num_rows = CeilDiv(type_count, num_columns); + byte cur_type = type_base; + + NWidgetVertical *vstack = new NWidgetVertical(NC_EQUALSIZE); + vstack->SetPIP(0, 1, 0); + + for (int row = 0; row < num_rows; row++) { + NWidgetHorizontal *hstack = new NWidgetHorizontal(NC_EQUALSIZE); + hstack->SetPIP(0, 1, 0); + vstack->Add(hstack); + for (int col = 0; col < num_columns; col++) { + if (cur_type > type_base + type_count) break; + NWidgetBackground *button = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_BUTTON_FIRST + cur_type); + button->SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP); + hstack->Add(button); + *biggest_index = WID_BT_TYPE_BUTTON_FIRST + cur_type; + cur_type++; + } + } + + return vstack; +} + static const NWidgetPart _nested_build_trees_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), @@ -177,58 +234,16 @@ static const NWidgetPart _nested_build_trees_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), - NWidget(NWID_SPACER), SetMinimalSize(0, 2), - NWidget(NWID_HORIZONTAL), - NWidget(NWID_SPACER), SetMinimalSize(2, 0), - NWidget(NWID_VERTICAL), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_11), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_12), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_13), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_14), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), + NWidget(NWID_VERTICAL), SetPadding(2), + NWidgetFunction(MakeTreeTypeButtons), + NWidget(NWID_SPACER), SetMinimalSize(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_TYPE_RANDOM), SetDataTip(STR_TREES_RANDOM_TYPE, STR_TREES_RANDOM_TYPE_TOOLTIP), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BT_SE_PANE), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetMinimalSize(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BT_MANY_RANDOM), SetDataTip(STR_TREES_RANDOM_TREES_BUTTON, STR_TREES_RANDOM_TREES_TOOLTIP), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_21), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_22), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_23), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_24), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_31), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_32), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_33), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(1, 0), - NWidget(WWT_PANEL, COLOUR_GREY, WID_BT_TYPE_34), SetMinimalSize(34, 46), SetDataTip(0x0, STR_PLANT_TREE_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_TYPE_RANDOM), SetMinimalSize(139, 12), SetDataTip(STR_TREES_RANDOM_TYPE, STR_TREES_RANDOM_TYPE_TOOLTIP), - NWidget(NWID_SPACER), SetMinimalSize(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BT_MANY_RANDOM), SetMinimalSize(139, 12), SetDataTip(STR_TREES_RANDOM_TREES_BUTTON, STR_TREES_RANDOM_TREES_TOOLTIP), - NWidget(NWID_SPACER), SetMinimalSize(0, 2), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(2, 0), EndContainer(), EndContainer(), }; diff --git a/src/widgets/tree_widget.h b/src/widgets/tree_widget.h index 7da9fa4a84..7474667a80 100644 --- a/src/widgets/tree_widget.h +++ b/src/widgets/tree_widget.h @@ -12,20 +12,10 @@ /** Widgets of the #BuildTreesWindow class. */ enum BuildTreesWidgets { - WID_BT_TYPE_11, ///< Tree 1st column 1st row. - WID_BT_TYPE_12, ///< Tree 1st column 2nd row. - WID_BT_TYPE_13, ///< Tree 1st column 3rd row. - WID_BT_TYPE_14, ///< Tree 1st column 4th row. - WID_BT_TYPE_21, ///< Tree 2st column 1st row. - WID_BT_TYPE_22, ///< Tree 2st column 2nd row. - WID_BT_TYPE_23, ///< Tree 2st column 3rd row. - WID_BT_TYPE_24, ///< Tree 2st column 4th row. - WID_BT_TYPE_31, ///< Tree 3st column 1st row. - WID_BT_TYPE_32, ///< Tree 3st column 2nd row. - WID_BT_TYPE_33, ///< Tree 3st column 3rd row. - WID_BT_TYPE_34, ///< Tree 3st column 4th row. WID_BT_TYPE_RANDOM, ///< Button to build random type of tree. + WID_BT_SE_PANE, ///< Selection pane to show/hide scenario editor tools. WID_BT_MANY_RANDOM, ///< Button to build many random trees. + WID_BT_TYPE_BUTTON_FIRST, ///< First tree type selection button. (This must be last in the enum.) }; #endif /* WIDGETS_TREE_WIDGET_H */ From 2d9fa81bd08425d64ab40ff377d9711aae39b6d5 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Fri, 26 Jun 2020 21:30:18 +0200 Subject: [PATCH 415/601] Feature: Plant clumps of trees in editor by dragging on the landscape --- src/lang/english.txt | 8 ++++- src/tilehighlight_func.h | 1 + src/tree_cmd.cpp | 47 ++++++++++++++++++++++++- src/tree_gui.cpp | 74 ++++++++++++++++++++++++++++++++++++--- src/viewport.cpp | 27 ++++++++++++-- src/widgets/tree_widget.h | 3 ++ src/window_gui.h | 3 +- 7 files changed, 153 insertions(+), 10 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index a735eace9d..63f36588a6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2542,13 +2542,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Size: {G STR_OBJECT_CLASS_LTHS :Lighthouses STR_OBJECT_CLASS_TRNS :Transmitters -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trees STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Grove +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forest +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land Generation diff --git a/src/tilehighlight_func.h b/src/tilehighlight_func.h index a6e8a38155..c980931d7d 100644 --- a/src/tilehighlight_func.h +++ b/src/tilehighlight_func.h @@ -22,6 +22,7 @@ void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowC void ResetObjectToPlace(); void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method); +void VpStartDragging(ViewportDragDropSelectionProcess process); void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process); void VpSetPresizeRange(TileIndex from, TileIndex to); void VpSetPlaceSizingLimit(int limit); diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index c40df4394c..60eb781f58 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -290,6 +290,51 @@ void PlaceTreesRandomly() } } +/** + * Place some trees in a radius around a tile. + * The trees are placed in an quasi-normal distribution around the indicated tile, meaning that while + * the radius does define a square, the distribution inside the square will be roughly circular. + * @note This function the interactive RNG and must only be used in editor and map generation. + * @param tile Tile to place trees around. + * @param treetype Type of trees to place. Must be a valid tree type for the climate. + * @param radius Maximum distance (on each axis) from tile to place trees. + * @param count Maximum number of trees to place. + * @return Number of trees actually placed. + */ +uint PlaceTreeGroupAroundTile(TileIndex tile, TreeType treetype, uint radius, uint count) +{ + assert(treetype < TREE_TOYLAND + TREE_COUNT_TOYLAND); + const bool allow_desert = treetype == TREE_CACTUS; + uint planted = 0; + + for (; count > 0; count--) { + /* Simple quasi-normal distribution with range [-radius; radius) */ + auto mkcoord = [&]() -> int32 { + const uint32 rand = InteractiveRandom(); + const int32 dist = GB(rand, 0, 8) + GB(rand, 8, 8) + GB(rand, 16, 8) + GB(rand, 24, 8); + const int32 scu = dist * radius / 512; + return scu - radius; + }; + const int32 xofs = mkcoord(); + const int32 yofs = mkcoord(); + const TileIndex tile_to_plant = TileAddWrap(tile, xofs, yofs); + if (tile_to_plant != INVALID_TILE) { + if (IsTileType(tile_to_plant, MP_TREES) && GetTreeCount(tile_to_plant) < 4) { + AddTreeCount(tile_to_plant, 1); + SetTreeGrowth(tile_to_plant, 0); + MarkTileDirtyByTile(tile_to_plant, 0); + planted++; + } else if (CanPlantTreesOnTile(tile_to_plant, allow_desert)) { + PlantTreesOnTile(tile_to_plant, treetype, 0, 3); + MarkTileDirtyByTile(tile_to_plant, 0); + planted++; + } + } + } + + return planted; +} + /** * Place new trees. * @@ -349,7 +394,7 @@ CommandCost CmdPlantTree(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 switch (GetTileType(tile)) { case MP_TREES: /* no more space for trees? */ - if (_game_mode != GM_EDITOR && GetTreeCount(tile) == 4) { + if (GetTreeCount(tile) == 4) { msg = STR_ERROR_TREE_ALREADY_HERE; continue; } diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index 58edf563b2..ee94c35afa 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -14,6 +14,7 @@ #include "company_func.h" #include "company_base.h" #include "command_func.h" +#include "core/random_func.hpp" #include "sound_func.h" #include "strings_func.h" #include "zoom_func.h" @@ -28,6 +29,7 @@ #include "safeguards.h" void PlaceTreesRandomly(); +uint PlaceTreeGroupAroundTile(TileIndex tile, TreeType treetype, uint radius, uint count); /** Tree Sprites with their palettes */ const PalSpriteID tree_sprites[] = { @@ -79,7 +81,14 @@ class BuildTreesWindow : public Window /** Visual Y offset of tree root from the bottom of the tree type buttons */ static const int BUTTON_BOTTOM_OFFSET = 7; + enum PlantingMode { + PM_NORMAL, + PM_FOREST_SM, + PM_FOREST_LG, + }; + int tree_to_plant; ///< Tree number to plant, \c TREE_INVALID for a random tree. + PlantingMode mode; ///< Current mode for planting /** * Update the GUI and enable/disable planting to reflect selected options. @@ -106,15 +115,35 @@ class BuildTreesWindow : public Window this->LowerWidget(WID_BT_TYPE_BUTTON_FIRST + this->tree_to_plant); } + switch (this->mode) { + case PM_NORMAL: this->LowerWidget(WID_BT_MODE_NORMAL); break; + case PM_FOREST_SM: this->LowerWidget(WID_BT_MODE_FOREST_SM); break; + case PM_FOREST_LG: this->LowerWidget(WID_BT_MODE_FOREST_LG); break; + default: NOT_REACHED(); + } + this->SetDirty(); } + void DoPlantForest(TileIndex tile) + { + TreeType treetype = (TreeType)this->tree_to_plant; + if (this->tree_to_plant == TREE_INVALID) { + treetype = (TreeType)(InteractiveRandomRange(_tree_count_by_landscape[_settings_game.game_creation.landscape]) + _tree_base_by_landscape[_settings_game.game_creation.landscape]); + } + const uint radius = this->mode == PM_FOREST_LG ? 12 : 5; + const uint count = this->mode == PM_FOREST_LG ? 12 : 5; + PlaceTreeGroupAroundTile(tile, treetype, radius, count); + } + public: - BuildTreesWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), tree_to_plant(-1) + BuildTreesWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), tree_to_plant(-1), mode(PM_NORMAL) { this->InitNested(window_number); ResetObjectToPlace(); + this->LowerWidget(WID_BT_MODE_NORMAL); + /* Show scenario editor tools in editor */ auto *se_tools = this->GetWidget(WID_BT_SE_PANE); if (_game_mode != GM_EDITOR) { @@ -156,6 +185,23 @@ public: MarkWholeScreenDirty(); break; + case WID_BT_MODE_NORMAL: + this->mode = PM_NORMAL; + this->UpdateMode(); + break; + + case WID_BT_MODE_FOREST_SM: + assert(_game_mode == GM_EDITOR); + this->mode = PM_FOREST_SM; + this->UpdateMode(); + break; + + case WID_BT_MODE_FOREST_LG: + assert(_game_mode == GM_EDITOR); + this->mode = PM_FOREST_LG; + this->UpdateMode(); + break; + default: if (widget >= WID_BT_TYPE_BUTTON_FIRST) { const int index = widget - WID_BT_TYPE_BUTTON_FIRST; @@ -168,17 +214,31 @@ public: void OnPlaceObject(Point pt, TileIndex tile) override { - VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_PLANT_TREES); + if (_game_mode != GM_EDITOR && this->mode == PM_NORMAL) { + VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_PLANT_TREES); + } else { + VpStartDragging(DDSP_PLANT_TREES); + } } void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { - VpSelectTilesWithMethod(pt.x, pt.y, select_method); + if (_game_mode != GM_EDITOR && this->mode == PM_NORMAL) { + VpSelectTilesWithMethod(pt.x, pt.y, select_method); + } else { + TileIndex tile = TileVirtXY(pt.x, pt.y); + + if (this->mode == PM_NORMAL) { + DoCommandP(tile, this->tree_to_plant, tile, CMD_PLANT_TREE); + } else { + this->DoPlantForest(tile); + } + } } void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { - if (pt.x != -1 && select_proc == DDSP_PLANT_TREES) { + if (_game_mode != GM_EDITOR && this->mode == PM_NORMAL && pt.x != -1 && select_proc == DDSP_PLANT_TREES) { DoCommandP(end_tile, this->tree_to_plant, start_tile, CMD_PLANT_TREE | CMD_MSG(STR_ERROR_CAN_T_PLANT_TREE_HERE)); } } @@ -240,6 +300,12 @@ static const NWidgetPart _nested_build_trees_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_TYPE_RANDOM), SetDataTip(STR_TREES_RANDOM_TYPE, STR_TREES_RANDOM_TYPE_TOOLTIP), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BT_SE_PANE), NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetMinimalSize(0, 1), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_MODE_NORMAL), SetFill(1, 0), SetDataTip(STR_TREES_MODE_NORMAL_BUTTON, STR_TREES_MODE_NORMAL_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_MODE_FOREST_SM), SetFill(1, 0), SetDataTip(STR_TREES_MODE_FOREST_SM_BUTTON, STR_TREES_MODE_FOREST_SM_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_BT_MODE_FOREST_LG), SetFill(1, 0), SetDataTip(STR_TREES_MODE_FOREST_LG_BUTTON, STR_TREES_MODE_FOREST_LG_TOOLTIP), + EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BT_MANY_RANDOM), SetDataTip(STR_TREES_RANDOM_TREES_BUTTON, STR_TREES_RANDOM_TREES_TOOLTIP), EndContainer(), diff --git a/src/viewport.cpp b/src/viewport.cpp index e9e8d34dac..7c5fd93b3e 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2674,6 +2674,18 @@ void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDrag _special_mouse_mode = WSM_SIZING; } +/** Drag over the map while holding the left mouse down. */ +void VpStartDragging(ViewportDragDropSelectionProcess process) +{ + _thd.select_method = VPM_X_AND_Y; + _thd.select_proc = process; + _thd.selstart.x = 0; + _thd.selstart.y = 0; + _thd.next_drawstyle = HT_RECT; + + _special_mouse_mode = WSM_DRAGGING; +} + void VpSetPlaceSizingLimit(int limit) { _thd.sizelimit = limit; @@ -3283,7 +3295,7 @@ calc_heightdiff_single_direction:; */ EventState VpHandlePlaceSizingDrag() { - if (_special_mouse_mode != WSM_SIZING) return ES_NOT_HANDLED; + if (_special_mouse_mode != WSM_SIZING && _special_mouse_mode != WSM_DRAGGING) return ES_NOT_HANDLED; /* stop drag mode if the window has been closed */ Window *w = _thd.GetCallbackWnd(); @@ -3294,13 +3306,22 @@ EventState VpHandlePlaceSizingDrag() /* while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() ) */ if (_left_button_down) { + if (_special_mouse_mode == WSM_DRAGGING) { + /* Only register a drag event when the mouse moved. */ + if (_thd.new_pos.x == _thd.selstart.x && _thd.new_pos.y == _thd.selstart.y) return ES_HANDLED; + _thd.selstart.x = _thd.new_pos.x; + _thd.selstart.y = _thd.new_pos.y; + } + w->OnPlaceDrag(_thd.select_method, _thd.select_proc, GetTileBelowCursor()); return ES_HANDLED; } - /* mouse button released.. - * keep the selected tool, but reset it to the original mode. */ + /* Mouse button released. */ _special_mouse_mode = WSM_NONE; + if (_special_mouse_mode == WSM_DRAGGING) return ES_HANDLED; + + /* Keep the selected tool, but reset it to the original mode. */ HighLightStyle others = _thd.place_mode & ~(HT_DRAG_MASK | HT_DIR_MASK); if ((_thd.next_drawstyle & HT_DRAG_MASK) == HT_RECT) { _thd.place_mode = HT_RECT | others; diff --git a/src/widgets/tree_widget.h b/src/widgets/tree_widget.h index 7474667a80..2cfc38ad40 100644 --- a/src/widgets/tree_widget.h +++ b/src/widgets/tree_widget.h @@ -14,6 +14,9 @@ enum BuildTreesWidgets { WID_BT_TYPE_RANDOM, ///< Button to build random type of tree. WID_BT_SE_PANE, ///< Selection pane to show/hide scenario editor tools. + WID_BT_MODE_NORMAL, ///< Select normal/rectangle planting mode. + WID_BT_MODE_FOREST_SM, ///< Select small forest planting mode. + WID_BT_MODE_FOREST_LG, ///< Select large forest planting mode. WID_BT_MANY_RANDOM, ///< Button to build many random trees. WID_BT_TYPE_BUTTON_FIRST, ///< First tree type selection button. (This must be last in the enum.) }; diff --git a/src/window_gui.h b/src/window_gui.h index b389db5a6e..b03f5bbcad 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -903,9 +903,10 @@ extern bool _mouse_hovering; /** Mouse modes. */ enum SpecialMouseMode { WSM_NONE, ///< No special mouse mode. - WSM_DRAGDROP, ///< Dragging an object. + WSM_DRAGDROP, ///< Drag&drop an object. WSM_SIZING, ///< Sizing mode. WSM_PRESIZE, ///< Presizing mode (docks, tunnels). + WSM_DRAGGING, ///< Dragging mode (trees). }; extern SpecialMouseMode _special_mouse_mode; From 5a5d613ee38ea90f235ec7d8c0388bbb52707155 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 25 Dec 2020 21:55:13 +0100 Subject: [PATCH 416/601] Change: Disable changing the inflation setting in network games. --- src/table/settings.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/src/table/settings.ini b/src/table/settings.ini index 320786751a..b75dd0ff28 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1283,6 +1283,7 @@ proc = DeleteSelectStationWindow [SDT_BOOL] base = GameSettings var = economy.inflation +guiflags = SGF_NO_NETWORK def = true str = STR_CONFIG_SETTING_INFLATION strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT From 1478fa93b344fc25000725dd143109e4def24f0b Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Fri, 25 Dec 2020 12:36:13 +0100 Subject: [PATCH 417/601] Add: [NewGRF] Patch flag to test if inflation is on or off. --- src/newgrf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index aa48022265..097e68ae22 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8389,7 +8389,8 @@ static void InitializeGRFSpecial() | (1 << 0x1E) // variablerunningcosts | (1 << 0x1F); // any switch is on - _ttdpatch_flags[4] = (1 << 0x00); // larger persistent storage + _ttdpatch_flags[4] = (1 << 0x00) // larger persistent storage + | ((_settings_game.economy.inflation ? 1 : 0) << 0x01); // inflation is on } /** Reset and clear all NewGRF stations */ From d8605ad18da2a00fceb72b38325374b341ac6f16 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 27 Dec 2020 00:13:56 +0100 Subject: [PATCH 418/601] Codechange: Replace FOR_VEHICLE_ORDERS with range-based for loops --- src/autoreplace_cmd.cpp | 3 +- src/industry_cmd.cpp | 3 +- src/order_backup.cpp | 3 +- src/order_base.h | 2 -- src/order_cmd.cpp | 32 ++++++----------- src/order_gui.cpp | 3 +- src/saveload/afterload.cpp | 3 +- src/script/api/script_vehiclelist.cpp | 8 ++--- src/station_cmd.cpp | 3 +- src/vehicle_base.h | 49 +++++++++++++++++++++++++++ src/vehiclelist.cpp | 8 ++--- 11 files changed, 69 insertions(+), 48 deletions(-) diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 4b444ae196..e3639742ff 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -179,9 +179,8 @@ static bool VerifyAutoreplaceRefitForOrders(const Vehicle *v, EngineID engine_ty CargoTypes union_refit_mask_a = GetUnionOfArticulatedRefitMasks(v->engine_type, false); CargoTypes union_refit_mask_b = GetUnionOfArticulatedRefitMasks(engine_type, false); - const Order *o; const Vehicle *u = (v->type == VEH_TRAIN) ? v->First() : v; - FOR_VEHICLE_ORDERS(u, o) { + for (const Order *o : u->Orders()) { if (!o->IsRefit() || o->IsAutoRefit()) continue; CargoID cargo_type = o->GetRefitCargo(); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 92741e3f69..816146212f 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2609,8 +2609,7 @@ static int WhoCanServiceIndustry(Industry *ind) * We cannot check the first of shared orders only, since the first vehicle in such a chain * may have a different cargo type. */ - const Order *o; - FOR_VEHICLE_ORDERS(v, o) { + for (const Order *o : v->Orders()) { if (o->IsType(OT_GOTO_STATION) && !(o->GetUnloadType() & OUFB_TRANSFER)) { /* Vehicle visits a station to load or unload */ Station *st = Station::Get(o->GetDestination()); diff --git a/src/order_backup.cpp b/src/order_backup.cpp index d537d8ce5c..000df56540 100644 --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -56,8 +56,7 @@ OrderBackup::OrderBackup(const Vehicle *v, uint32 user) Order **tail = &this->orders; /* Count the number of orders */ - const Order *order; - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { Order *copy = new Order(); copy->AssignOrder(*order); *tail = copy; diff --git a/src/order_base.h b/src/order_base.h index ba4959c0f3..923e67d423 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -392,6 +392,4 @@ public: void DebugCheckSanity() const; }; -#define FOR_VEHICLE_ORDERS(v, order) for (order = (v->orders.list == nullptr) ? nullptr : v->orders.list->GetFirstOrder(); order != nullptr; order = order->next) - #endif /* ORDER_BASE_H */ diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 1e9e8f2f3b..c9fa919890 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -969,8 +969,7 @@ void InsertOrder(Vehicle *v, Order *new_o, VehicleOrderID sel_ord) /* As we insert an order, the order to skip to will be 'wrong'. */ VehicleOrderID cur_order_id = 0; - Order *order; - FOR_VEHICLE_ORDERS(v, order) { + for (Order *order : v->Orders()) { if (order->IsType(OT_CONDITIONAL)) { VehicleOrderID order_id = order->GetConditionSkipToOrder(); if (order_id >= sel_ord) { @@ -1090,8 +1089,7 @@ void DeleteOrder(Vehicle *v, VehicleOrderID sel_ord) /* As we delete an order, the order to skip to will be 'wrong'. */ VehicleOrderID cur_order_id = 0; - Order *order = nullptr; - FOR_VEHICLE_ORDERS(v, order) { + for (Order *order : v->Orders()) { if (order->IsType(OT_CONDITIONAL)) { VehicleOrderID order_id = order->GetConditionSkipToOrder(); if (order_id >= sel_ord) { @@ -1225,8 +1223,7 @@ CommandCost CmdMoveOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } /* As we move an order, the order to skip to will be 'wrong'. */ - Order *order; - FOR_VEHICLE_ORDERS(v, order) { + for (Order *order : v->Orders()) { if (order->IsType(OT_CONDITIONAL)) { VehicleOrderID order_id = order->GetConditionSkipToOrder(); if (order_id == moving_order) { @@ -1560,9 +1557,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* Is the vehicle already in the shared list? */ if (src->FirstShared() == dst->FirstShared()) return CMD_ERROR; - const Order *order; - - FOR_VEHICLE_ORDERS(src, order) { + for (const Order *order : src->Orders()) { if (!OrderGoesToStation(dst, order)) continue; /* Allow copying unreachable destinations if they were already unreachable for the source. @@ -1613,8 +1608,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* Trucks can't copy all the orders from busses (and visa versa), * and neither can helicopters and aircraft. */ - const Order *order; - FOR_VEHICLE_ORDERS(src, order) { + for (const Order *order : src->Orders()) { if (OrderGoesToStation(dst, order) && !CanVehicleUseStation(dst, Station::Get(order->GetDestination()))) { return_cmd_error(STR_ERROR_CAN_T_COPY_SHARE_ORDER); @@ -1632,7 +1626,6 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } if (flags & DC_EXEC) { - const Order *order; Order *first = nullptr; Order **order_dst; @@ -1642,7 +1635,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 DeleteVehicleOrders(dst, true, dst->GetNumOrders() != src->GetNumOrders()); order_dst = &first; - FOR_VEHICLE_ORDERS(src, order) { + for (const Order *order : src->Orders()) { *order_dst = new Order(); (*order_dst)->AssignOrder(*order); order_dst = &(*order_dst)->next; @@ -1749,13 +1742,12 @@ void CheckOrders(const Vehicle *v) /* Only check every 20 days, so that we don't flood the message log */ if (v->owner == _local_company && v->day_counter % 20 == 0) { - const Order *order; StringID message = INVALID_STRING_ID; /* Check the order list */ int n_st = 0; - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { /* Dummy order? */ if (order->IsType(OT_DUMMY)) { message = STR_NEWS_VEHICLE_HAS_VOID_ORDER; @@ -1829,7 +1821,7 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination, bool /* Clear the order from the order-list */ int id = -1; - FOR_VEHICLE_ORDERS(v, order) { + for (Order *order : v->Orders()) { id++; restart: @@ -1879,9 +1871,7 @@ restart: */ bool Vehicle::HasDepotOrder() const { - const Order *order; - - FOR_VEHICLE_ORDERS(this, order) { + for (const Order *order : this->Orders()) { if (order->IsType(OT_GOTO_DEPOT)) return true; } @@ -1940,9 +1930,7 @@ uint16 GetServiceIntervalClamped(uint interval, bool ispercent) */ static bool CheckForValidOrders(const Vehicle *v) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { switch (order->GetType()) { case OT_GOTO_STATION: case OT_GOTO_DEPOT: diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 4edf994f78..5529a8331e 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -793,8 +793,7 @@ public: if (_settings_client.gui.quick_goto && v->owner == _local_company) { /* If there are less than 2 station, make Go To active. */ int station_orders = 0; - const Order *order; - FOR_VEHICLE_ORDERS(v, order) { + for(const Order *order : v->Orders()) { if (order->IsType(OT_GOTO_STATION)) station_orders++; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index c617348d73..4eab99c883 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1733,8 +1733,7 @@ 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); + for (Order *order : v->Orders()) order->SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS); } } } else if (IsSavegameVersionBefore(SLV_94)) { diff --git a/src/script/api/script_vehiclelist.cpp b/src/script/api/script_vehiclelist.cpp index 58c03ff9a9..3a4d2d135b 100644 --- a/src/script/api/script_vehiclelist.cpp +++ b/src/script/api/script_vehiclelist.cpp @@ -31,9 +31,7 @@ ScriptVehicleList_Station::ScriptVehicleList_Station(StationID station_id) for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && v->IsPrimaryVehicle()) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT)) && order->GetDestination() == station_id) { this->AddItem(v->index); break; @@ -81,9 +79,7 @@ ScriptVehicleList_Depot::ScriptVehicleList_Depot(TileIndex tile) for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && v->IsPrimaryVehicle() && v->type == type) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == dest) { this->AddItem(v->index); break; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index cd56dcb698..64a7adca8e 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2486,8 +2486,7 @@ bool HasStationInUse(StationID station, bool include_company, CompanyID company) { for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == company) == include_company) { - const Order *order; - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT)) && order->GetDestination() == station) { return true; } diff --git a/src/vehicle_base.h b/src/vehicle_base.h index bc72c6bbfd..019c94a29a 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -969,6 +969,55 @@ public: return v; } + + /** + * Iterator to iterate orders + * Supports deletion of current order + */ + struct OrderIterator { + typedef Order value_type; + typedef Order* pointer; + typedef Order& reference; + typedef size_t difference_type; + typedef std::forward_iterator_tag iterator_category; + + explicit OrderIterator(OrderList *list) : list(list), prev(nullptr) + { + this->order = (this->list == nullptr) ? nullptr : this->list->GetFirstOrder(); + } + + bool operator==(const OrderIterator &other) const { return this->order == other.order; } + bool operator!=(const OrderIterator &other) const { return !(*this == other); } + Order * operator*() const { return this->order; } + OrderIterator & operator++() + { + this->prev = (this->prev == nullptr) ? this->list->GetFirstOrder() : this->prev->next; + this->order = (this->prev == nullptr) ? nullptr : this->prev->next; + return *this; + } + + private: + OrderList *list; + Order *order; + Order *prev; + }; + + /** + * Iterable ensemble of orders + */ + struct IterateWrapper { + OrderList *list; + IterateWrapper(OrderList *list = nullptr) : list(list) {} + OrderIterator begin() { return OrderIterator(this->list); } + OrderIterator end() { return OrderIterator(nullptr); } + bool empty() { return this->begin() == this->end(); } + }; + + /** + * Returns an iterable ensemble of orders of a vehicle + * @return an iterable ensemble of orders of a vehicle + */ + IterateWrapper Orders() const { return IterateWrapper(this->orders.list); } }; /** diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index de37e3abae..79df540cf4 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -118,9 +118,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli case VL_STATION_LIST: for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == vli.vtype && v->IsPrimaryVehicle()) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT) || order->IsType(OT_IMPLICIT)) && order->GetDestination() == vli.index) { list->push_back(v); @@ -165,9 +163,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli case VL_DEPOT_LIST: for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == vli.vtype && v->IsPrimaryVehicle()) { - const Order *order; - - FOR_VEHICLE_ORDERS(v, order) { + for (const Order *order : v->Orders()) { if (order->IsType(OT_GOTO_DEPOT) && !(order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && order->GetDestination() == vli.index) { list->push_back(v); break; From 52f3abba6ef2e5a69b58cf71fdcdaa75d603b062 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 27 Dec 2020 09:56:43 +0000 Subject: [PATCH 419/601] Cleanup: Remove unnecessary assert_tcompile macro --- src/cargopacket.cpp | 4 ++-- src/cmd_helper.h | 6 +++--- src/stdafx.h | 7 +------ 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index f5f7c0c033..08b72ec462 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -556,8 +556,8 @@ void VehicleCargoList::InvalidateCache() template uint VehicleCargoList::Reassign(uint max_move, TileOrStationID) { - assert_tcompile(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); - assert_tcompile(Tfrom - Tto == 1 || Tto - Tfrom == 1); + assert_compile(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); + assert_compile(Tfrom - Tto == 1 || Tto - Tfrom == 1); max_move = min(this->action_counts[Tfrom], max_move); this->action_counts[Tfrom] -= max_move; this->action_counts[Tto] += max_move; diff --git a/src/cmd_helper.h b/src/cmd_helper.h index ee5d445c28..a505c1fd8b 100644 --- a/src/cmd_helper.h +++ b/src/cmd_helper.h @@ -24,9 +24,9 @@ template static inline T Extract(U v) { /* Check if there are enough bits in v */ - assert_tcompile(N == EnumPropsT::num_bits); - assert_tcompile(S + N <= sizeof(U) * 8); - assert_tcompile(EnumPropsT::end <= (1 << N)); + assert_compile(N == EnumPropsT::num_bits); + assert_compile(S + N <= sizeof(U) * 8); + assert_compile(EnumPropsT::end <= (1 << N)); U masked = GB(v, S, N); return IsInsideMM(masked, EnumPropsT::begin, EnumPropsT::end) ? (T)masked : EnumPropsT::invalid; } diff --git a/src/stdafx.h b/src/stdafx.h index c421c55aa2..5b9281a28c 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -348,19 +348,14 @@ typedef unsigned char byte; # define PERSONAL_DIR "" #endif -/* Compile time assertions. Prefer c++0x static_assert(). - * Older compilers cannot evaluate some expressions at compile time, - * typically when templates are involved, try assert_tcompile() in those cases. */ +/* Compile time assertions. Prefer c++0x static_assert(). */ #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600) # define assert_compile(expr) static_assert(expr, #expr ) -# define assert_tcompile(expr) assert_compile(expr) #elif defined(__OS2__) /* Disabled for OS/2 */ # define assert_compile(expr) -# define assert_tcompile(expr) assert_compile(expr) #else # define assert_compile(expr) typedef int __ct_assert__[1 - 2 * !(expr)] -# define assert_tcompile(expr) assert(expr) #endif /* Check if the types have the bitsizes like we are using them */ From eb74179c6d66921d2946e4a93e41a5de0af4a4ac Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 5 Sep 2016 01:15:09 +0100 Subject: [PATCH 420/601] Codechange: Unconditionally use static_assert We're well past having to support non-C++11 compliant compilers now. --- src/stdafx.h | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/stdafx.h b/src/stdafx.h index 5b9281a28c..9b9f4c6a94 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -348,15 +348,7 @@ typedef unsigned char byte; # define PERSONAL_DIR "" #endif -/* Compile time assertions. Prefer c++0x static_assert(). */ -#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600) -# define assert_compile(expr) static_assert(expr, #expr ) -#elif defined(__OS2__) - /* Disabled for OS/2 */ -# define assert_compile(expr) -#else -# define assert_compile(expr) typedef int __ct_assert__[1 - 2 * !(expr)] -#endif +#define assert_compile(expr) static_assert(expr, #expr) /* Check if the types have the bitsizes like we are using them */ assert_compile(sizeof(uint64) == 8); From 5cf28be742581d335ecb0c270e8039ee8ed9ccf0 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 5 Sep 2016 01:18:09 +0100 Subject: [PATCH 421/601] Codechange: Add support for verbose asserts --- src/openttd.cpp | 2 +- src/stdafx.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index e4fcf40e94..33f65314d1 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -129,7 +129,7 @@ void CDECL usererror(const char *s, ...) void CDECL error(const char *s, ...) { va_list va; - char buf[512]; + char buf[2048]; va_start(va, s); vseprintf(buf, lastof(buf), s, va); diff --git a/src/stdafx.h b/src/stdafx.h index 9b9f4c6a94..00dd1322ac 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -430,6 +430,9 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); /* Asserts are enabled if NDEBUG isn't defined or WITH_ASSERT is defined. */ #if !defined(NDEBUG) || defined(WITH_ASSERT) # define OTTD_ASSERT +# define assert_msg(expression, msg, ...) if (!(expression)) error("Assertion failed at line %i of %s: %s\n\t" msg, __LINE__, __FILE__, #expression, __VA_ARGS__); +#else +# define assert_msg(expression, msg, ...) #endif #if defined(OPENBSD) From fc52d3df5010994083c858fef01fa2926de951ad Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 10 Mar 2016 00:13:58 +0000 Subject: [PATCH 422/601] Codechange: Use likely/__builtin_expect for assertion macros --- src/stdafx.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/stdafx.h b/src/stdafx.h index 00dd1322ac..332f1a3eea 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -417,6 +417,14 @@ assert_compile(SIZE_MAX >= UINT32_MAX); # define CloseConnection OTTD_CloseConnection #endif /* __APPLE__ */ +#ifdef __GNUC__ +# define likely(x) __builtin_expect(!!(x), 1) +# define unlikely(x) __builtin_expect(!!(x), 0) +#else +# define likely(x) (x) +# define unlikely(x) (x) +#endif + void NORETURN CDECL usererror(const char *str, ...) WARN_FORMAT(1, 2); void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); #define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__) @@ -424,13 +432,13 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); /* For non-debug builds with assertions enabled use the special assertion handler. */ #if defined(NDEBUG) && defined(WITH_ASSERT) # undef assert -# define assert(expression) if (!(expression)) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); +# define assert(expression) if (unlikely(!(expression))) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); #endif /* Asserts are enabled if NDEBUG isn't defined or WITH_ASSERT is defined. */ #if !defined(NDEBUG) || defined(WITH_ASSERT) # define OTTD_ASSERT -# define assert_msg(expression, msg, ...) if (!(expression)) error("Assertion failed at line %i of %s: %s\n\t" msg, __LINE__, __FILE__, #expression, __VA_ARGS__); +# define assert_msg(expression, msg, ...) if (unlikely(!(expression))) error("Assertion failed at line %i of %s: %s\n\t" msg, __LINE__, __FILE__, #expression, __VA_ARGS__); #else # define assert_msg(expression, msg, ...) #endif From 0e017f62330c09bc8c5a69f3e8424645726de560 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 8 Sep 2016 18:38:53 +0100 Subject: [PATCH 423/601] Codechange: Enable FINAL, (un)likely, __attribute__ when building with clang --- src/stdafx.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/stdafx.h b/src/stdafx.h index 332f1a3eea..c99d7a2771 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -111,7 +111,7 @@ #endif /* Stuff for GCC */ -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) # define NORETURN __attribute__ ((noreturn)) # define CDECL # define __int64 long long @@ -134,7 +134,7 @@ # else # define FALLTHROUGH # endif -#endif /* __GNUC__ */ +#endif /* __GNUC__ || __clang__ */ #if defined(__WATCOMC__) # define NORETURN @@ -417,13 +417,13 @@ assert_compile(SIZE_MAX >= UINT32_MAX); # define CloseConnection OTTD_CloseConnection #endif /* __APPLE__ */ -#ifdef __GNUC__ +#if defined(__GNUC__) || defined(__clang__) # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __builtin_expect(!!(x), 0) #else # define likely(x) (x) # define unlikely(x) (x) -#endif +#endif /* __GNUC__ || __clang__ */ void NORETURN CDECL usererror(const char *str, ...) WARN_FORMAT(1, 2); void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); From 46ff7d918b09878b6fe6bf504112425ad2ba49c2 Mon Sep 17 00:00:00 2001 From: cirdan Date: Sat, 8 Dec 2012 19:01:56 +0100 Subject: [PATCH 424/601] Cleanup: Remove save-only autolength flag from economy chunk handlers CH_AUTO_LENGTH is only used when saving chunks; it makes no sense to set it for chunks without a save handler. --- src/saveload/economy_sl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp index 637d2529c6..a7d1819468 100644 --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -98,7 +98,7 @@ static void Ptrs_CAPY() extern const ChunkHandler _economy_chunk_handlers[] = { { 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY}, - { 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF | CH_AUTO_LENGTH}, - { 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF | CH_AUTO_LENGTH}, + { 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF }, + { 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF }, { 'ECMY', Save_ECMY, Load_ECMY, nullptr, nullptr, CH_RIFF | CH_LAST}, }; From 395a5d9991b500c681ff384f8d3b4e153e687abb Mon Sep 17 00:00:00 2001 From: cirdan Date: Sat, 8 Dec 2012 19:21:55 +0100 Subject: [PATCH 425/601] Cleanup: Remove unused ChunkType flag CH_AUTO_LENGTH CH_AUTO_LENGTH is no longer used anywhere, so remove all code that depends on it. --- src/saveload/saveload.cpp | 32 -------------------------------- src/saveload/saveload.h | 1 - 2 files changed, 33 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 4f3b7e9914..3471a8295e 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1753,32 +1753,6 @@ static void SlLoadCheckChunk(const ChunkHandler *ch) } } -/** - * Stub Chunk handlers to only calculate length and do nothing else. - * The intended chunk handler that should be called. - */ -static ChunkSaveLoadProc *_stub_save_proc; - -/** - * Stub Chunk handlers to only calculate length and do nothing else. - * Actually call the intended chunk handler. - * @param arg ignored parameter. - */ -static inline void SlStubSaveProc2(void *arg) -{ - _stub_save_proc(); -} - -/** - * Stub Chunk handlers to only calculate length and do nothing else. - * Call SlAutoLenth with our stub save proc that will eventually - * call the intended chunk handler. - */ -static void SlStubSaveProc() -{ - SlAutolength(SlStubSaveProc2, nullptr); -} - /** * Save a chunk of data (eg. vehicles, stations, etc.). Each chunk is * prefixed by an ID identifying it, followed by data, and terminator where appropriate @@ -1794,12 +1768,6 @@ static void SlSaveChunk(const ChunkHandler *ch) SlWriteUint32(ch->id); DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); - if (ch->flags & CH_AUTO_LENGTH) { - /* Need to calculate the length. Solve that by calling SlAutoLength in the save_proc. */ - _stub_save_proc = proc; - proc = SlStubSaveProc; - } - _sl.block_mode = ch->flags & CH_TYPE_MASK; switch (ch->flags & CH_TYPE_MASK) { case CH_RIFF: diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 58a2919326..a153b36301 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -409,7 +409,6 @@ enum ChunkType { CH_SPARSE_ARRAY = 2, CH_TYPE_MASK = 3, CH_LAST = 8, ///< Last chunk in this array. - CH_AUTO_LENGTH = 16, }; /** From 860c270c73048b4930ac8cbebcd60be746eb9782 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 27 Dec 2020 10:44:22 +0000 Subject: [PATCH 426/601] Codechange: Replace assert_compile macro with static_assert --- src/blitter/32bpp_sse2.hpp | 2 +- src/cargomonitor.h | 4 ++-- src/cargopacket.cpp | 4 ++-- src/cheat_gui.cpp | 2 +- src/cmd_helper.h | 6 +++--- src/command.cpp | 2 +- src/company_gui.cpp | 2 +- src/company_manager_face.h | 2 +- src/console_cmds.cpp | 2 +- src/core/math_func.hpp | 2 +- src/core/pool_type.hpp | 2 +- src/economy.cpp | 2 +- src/effectvehicle.cpp | 6 +++--- src/engine.cpp | 2 +- src/fileio.cpp | 2 +- src/gamelog.cpp | 4 ++-- src/genworld_gui.cpp | 6 +++--- src/gfx.cpp | 2 +- src/gfx_type.h | 2 +- src/gfxinit.cpp | 2 +- src/goal.cpp | 2 +- src/graph_gui.cpp | 4 ++-- src/ground_vehicle.cpp | 4 ++-- src/house.h | 2 +- src/industry_gui.cpp | 6 +++--- src/landscape.cpp | 2 +- src/language.h | 2 +- src/linkgraph/linkgraph_gui.cpp | 2 +- src/map_type.h | 2 +- src/misc/fixedsizearray.hpp | 2 +- src/misc_gui.cpp | 2 +- src/music.cpp | 2 +- src/network/core/os_abstraction.h | 4 ++-- src/network/core/tcp_admin.cpp | 8 ++++---- src/network/network.cpp | 10 +++++----- src/network/network_admin.cpp | 4 ++-- src/network/network_chat_gui.cpp | 2 +- src/network/network_client.cpp | 4 ++-- src/network/network_server.cpp | 10 +++++----- src/newgrf.cpp | 4 ++-- src/newgrf_airporttiles.cpp | 2 +- src/newgrf_engine.cpp | 2 +- src/newgrf_station.cpp | 6 +++--- src/newgrf_storage.h | 2 +- src/news_gui.cpp | 2 +- src/openttd.cpp | 2 +- src/order_cmd.cpp | 4 ++-- src/rail_cmd.cpp | 2 +- src/road_cmd.cpp | 2 +- src/roadveh_cmd.cpp | 2 +- src/saveload/afterload.cpp | 2 +- src/saveload/gamelog_sl.cpp | 2 +- src/saveload/oldloader.cpp | 2 +- src/saveload/oldloader.h | 2 +- src/saveload/saveload.cpp | 2 +- src/screenshot.cpp | 8 ++++---- src/settings_gui.cpp | 2 +- src/signal.cpp | 2 +- src/sound.cpp | 2 +- src/spritecache.cpp | 4 ++-- src/stdafx.h | 12 +++++------- src/strings_func.h | 2 +- src/table/airport_defaults.h | 2 +- src/table/airporttiles.h | 2 +- src/table/newgrf_debug_data.h | 2 +- src/table/pricebase.h | 2 +- src/table/sprites.h | 10 +++++----- src/table/station_land.h | 2 +- src/table/town_land.h | 4 ++-- src/table/train_cmd.h | 6 +++--- src/textfile_gui.cpp | 2 +- src/town_cmd.cpp | 2 +- src/vehicle.cpp | 8 ++++---- src/vehicle_gui.cpp | 16 ++++++++-------- src/vehiclelist.cpp | 2 +- src/video/dedicated_v.cpp | 2 +- src/viewport_sprite_sorter_sse4.cpp | 2 +- 77 files changed, 133 insertions(+), 135 deletions(-) diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index 4103eed487..12105516f8 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -31,7 +31,7 @@ public: uint8 m; uint8 v; }; - assert_compile(sizeof(MapValue) == 2); + static_assert(sizeof(MapValue) == 2); /** Helper for creating specialised functions for specific optimisations. */ enum ReadMode { diff --git a/src/cargomonitor.h b/src/cargomonitor.h index 9a6a0c44d8..31053c46cb 100644 --- a/src/cargomonitor.h +++ b/src/cargomonitor.h @@ -48,8 +48,8 @@ enum CargoCompanyBits { CCB_COMPANY_LENGTH = 4, ///< Number of bits of the company field. }; -assert_compile(NUM_CARGO <= (1 << CCB_CARGO_TYPE_LENGTH)); -assert_compile(MAX_COMPANIES <= (1 << CCB_COMPANY_LENGTH)); +static_assert(NUM_CARGO <= (1 << CCB_CARGO_TYPE_LENGTH)); +static_assert(MAX_COMPANIES <= (1 << CCB_COMPANY_LENGTH)); /** diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index 08b72ec462..eafab6880e 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -556,8 +556,8 @@ void VehicleCargoList::InvalidateCache() template uint VehicleCargoList::Reassign(uint max_move, TileOrStationID) { - assert_compile(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); - assert_compile(Tfrom - Tto == 1 || Tto - Tfrom == 1); + static_assert(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); + static_assert(Tfrom - Tto == 1 || Tto - Tfrom == 1); max_move = min(this->action_counts[Tfrom], max_move); this->action_counts[Tfrom] -= max_move; this->action_counts[Tto] += max_move; diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 7290414c00..344e15e636 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -192,7 +192,7 @@ static const CheatEntry _cheats_ui[] = { {SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat }, }; -assert_compile(CHT_NUM_CHEATS == lengthof(_cheats_ui)); +static_assert(CHT_NUM_CHEATS == lengthof(_cheats_ui)); /** Widget definitions of the cheat GUI. */ static const NWidgetPart _nested_cheat_widgets[] = { diff --git a/src/cmd_helper.h b/src/cmd_helper.h index a505c1fd8b..ceb4d4bd9b 100644 --- a/src/cmd_helper.h +++ b/src/cmd_helper.h @@ -24,9 +24,9 @@ template static inline T Extract(U v) { /* Check if there are enough bits in v */ - assert_compile(N == EnumPropsT::num_bits); - assert_compile(S + N <= sizeof(U) * 8); - assert_compile(EnumPropsT::end <= (1 << N)); + static_assert(N == EnumPropsT::num_bits); + static_assert(S + N <= sizeof(U) * 8); + static_assert(EnumPropsT::end <= (1 << N)); U masked = GB(v, S, N); return IsInsideMM(masked, EnumPropsT::begin, EnumPropsT::end) ? (T)masked : EnumPropsT::invalid; } diff --git a/src/command.cpp b/src/command.cpp index 9fbc6cae6a..de5f8397d5 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -430,7 +430,7 @@ bool IsCommandAllowedWhilePaused(uint32 cmd) CMDPL_NO_ACTIONS, ///< CMDT_SERVER_SETTING CMDPL_NO_ACTIONS, ///< CMDT_CHEAT }; - assert_compile(lengthof(command_type_lookup) == CMDT_END); + static_assert(lengthof(command_type_lookup) == CMDT_END); assert(IsValidCommand(cmd)); return _game_mode == GM_EDITOR || command_type_lookup[_command_proc_table[cmd & CMD_ID_MASK].type] <= _settings_game.construction.command_pause_level; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 14567b1de7..e0bafda877 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2438,7 +2438,7 @@ struct CompanyWindow : Window if (amounts[0] + amounts[1] + amounts[2] + amounts[3] == 0) { DrawString(r.left, r.right, y, STR_COMPANY_VIEW_VEHICLES_NONE); } else { - assert_compile(lengthof(amounts) == lengthof(_company_view_vehicle_count_strings)); + static_assert(lengthof(amounts) == lengthof(_company_view_vehicle_count_strings)); for (uint i = 0; i < lengthof(amounts); i++) { if (amounts[i] != 0) { diff --git a/src/company_manager_face.h b/src/company_manager_face.h index 2f16656d56..fe6365a121 100644 --- a/src/company_manager_face.h +++ b/src/company_manager_face.h @@ -83,7 +83,7 @@ static const CompanyManagerFaceBitsInfo _cmf_info[] = { /* CMFV_GLASSES */ { 31, 1, { 2, 2, 2, 2 }, { 0x347, 0x347, 0x3AE, 0x3AE } } ///< Depends on CMFV_HAS_GLASSES }; /** Make sure the table's size is right. */ -assert_compile(lengthof(_cmf_info) == CMFV_END); +static_assert(lengthof(_cmf_info) == CMFV_END); /** * Gets the company manager's face bits for the given company manager's face variable diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index e87232b365..d2066df2b7 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1760,7 +1760,7 @@ struct ConsoleContentCallback : public ContentCallback { static void OutputContentState(const ContentInfo *const ci) { static const char * const types[] = { "Base graphics", "NewGRF", "AI", "AI library", "Scenario", "Heightmap", "Base sound", "Base music", "Game script", "GS library" }; - assert_compile(lengthof(types) == CONTENT_TYPE_END - CONTENT_TYPE_BEGIN); + static_assert(lengthof(types) == CONTENT_TYPE_END - CONTENT_TYPE_BEGIN); static const char * const states[] = { "Not selected", "Selected", "Dep Selected", "Installed", "Unknown" }; static const TextColour state_to_colour[] = { CC_COMMAND, CC_INFO, CC_INFO, CC_WHITE, CC_ERROR }; diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index d36dc55f9c..55061066a5 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -112,7 +112,7 @@ static inline T Align(const T x, uint n) template static inline T *AlignPtr(T *x, uint n) { - assert_compile(sizeof(size_t) == sizeof(void *)); + static_assert(sizeof(size_t) == sizeof(void *)); return reinterpret_cast(Align((size_t)x, n)); } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 9e6fc8fecd..e847dfbb72 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -80,7 +80,7 @@ private: template struct Pool : PoolBase { /* Ensure Tmax_size is within the bounds of Tindex. */ - assert_compile((uint64)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); + static_assert((uint64)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); static const size_t MAX_SIZE = Tmax_size; ///< Make template parameter accessible from outside diff --git a/src/economy.cpp b/src/economy.cpp index 3af220d96a..c73012096a 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1258,7 +1258,7 @@ void PrepareUnload(Vehicle *front_v) assert(front_v->cargo_payment == nullptr); /* One CargoPayment per vehicle and the vehicle limit equals the * limit in number of CargoPayments. Can't go wrong. */ - assert_compile(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); + static_assert(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); assert(CargoPayment::CanAllocateItem()); front_v->cargo_payment = new CargoPayment(front_v); diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp index f11a92e5d6..82054acc66 100644 --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -546,7 +546,7 @@ static EffectInitProc * const _effect_init_procs[] = { SmokeInit, // EV_BREAKDOWN_SMOKE_AIRCRAFT SmokeInit, // EV_COPPER_MINE_SMOKE }; -assert_compile(lengthof(_effect_init_procs) == EV_END); +static_assert(lengthof(_effect_init_procs) == EV_END); /** Functions for controlling effect vehicles at each tick. */ static EffectTickProc * const _effect_tick_procs[] = { @@ -563,7 +563,7 @@ static EffectTickProc * const _effect_tick_procs[] = { SmokeTick, // EV_BREAKDOWN_SMOKE_AIRCRAFT SmokeTick, // EV_COPPER_MINE_SMOKE }; -assert_compile(lengthof(_effect_tick_procs) == EV_END); +static_assert(lengthof(_effect_tick_procs) == EV_END); /** Transparency options affecting the effects. */ static const TransparencyOption _effect_transparency_options[] = { @@ -580,7 +580,7 @@ static const TransparencyOption _effect_transparency_options[] = { TO_INVALID, // EV_BREAKDOWN_SMOKE_AIRCRAFT TO_INDUSTRIES, // EV_COPPER_MINE_SMOKE }; -assert_compile(lengthof(_effect_transparency_options) == EV_END); +static_assert(lengthof(_effect_transparency_options) == EV_END); /** diff --git a/src/engine.cpp b/src/engine.cpp index 311a936ed4..68e44c8ae2 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -62,7 +62,7 @@ const uint8 _engine_offsets[4] = { lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info), }; -assert_compile(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info) + lengthof(_orig_aircraft_vehicle_info) == lengthof(_orig_engine_info)); +static_assert(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info) + lengthof(_orig_aircraft_vehicle_info) == lengthof(_orig_engine_info)); const uint EngineOverrideManager::NUM_DEFAULT_ENGINES = _engine_counts[VEH_TRAIN] + _engine_counts[VEH_ROAD] + _engine_counts[VEH_SHIP] + _engine_counts[VEH_AIRCRAFT]; diff --git a/src/fileio.cpp b/src/fileio.cpp index e294a82929..e409d9d2a4 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -238,7 +238,7 @@ static const char * const _subdirs[] = { "game" PATHSEP "library" PATHSEP, "screenshot" PATHSEP, }; -assert_compile(lengthof(_subdirs) == NUM_SUBDIRS); +static_assert(lengthof(_subdirs) == NUM_SUBDIRS); const char *_searchpaths[NUM_SEARCHPATHS]; TarList _tar_list[NUM_SUBDIRS]; diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 156dfe6287..d1a9ab038f 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -45,7 +45,7 @@ static const char * GetGamelogRevisionString() { /* Allocate a buffer larger than necessary (git revision hash is 40 bytes) to avoid truncation later */ static char gamelog_revision[48] = { 0 }; - assert_compile(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH); + static_assert(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH); if (IsReleasedVersion()) { return _openttd_revision; @@ -167,7 +167,7 @@ static const char * const la_text[] = { "emergency savegame", }; -assert_compile(lengthof(la_text) == GLAT_END); +static_assert(lengthof(la_text) == GLAT_END); /** * Information about the presence of a Grf at a certain point during gamelog history diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 154097e722..4f1524f8ab 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -304,7 +304,7 @@ static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_N static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, INVALID_STRING_ID}; static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH, INVALID_STRING_ID}; -assert_compile(lengthof(_num_inds) == ID_END + 1); +static_assert(lengthof(_num_inds) == ID_END + 1); struct GenerateLandscapeWindow : public Window { uint widget_id; @@ -1166,7 +1166,7 @@ static const StringID _generation_class_table[] = { STR_GENERATION_PREPARING_SCRIPT, STR_GENERATION_PREPARING_GAME }; -assert_compile(lengthof(_generation_class_table) == GWP_CLASS_COUNT); +static_assert(lengthof(_generation_class_table) == GWP_CLASS_COUNT); static void AbortGeneratingWorldCallback(Window *w, bool confirmed) @@ -1268,7 +1268,7 @@ void ShowGenerateWorldProgress() static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uint total) { static const int percent_table[] = {0, 5, 14, 17, 20, 40, 60, 65, 80, 85, 95, 99, 100 }; - assert_compile(lengthof(percent_table) == GWP_CLASS_COUNT + 1); + static_assert(lengthof(percent_table) == GWP_CLASS_COUNT + 1); assert(cls < GWP_CLASS_COUNT); /* Do not run this function if we aren't in a thread */ diff --git a/src/gfx.cpp b/src/gfx.cpp index 8027dad265..c0a2efc315 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1681,7 +1681,7 @@ void UpdateCursorSize() /* Ignore setting any cursor before the sprites are loaded. */ if (GetMaxSpriteID() == 0) return; - assert_compile(lengthof(_cursor.sprite_seq) == lengthof(_cursor.sprite_pos)); + static_assert(lengthof(_cursor.sprite_seq) == lengthof(_cursor.sprite_pos)); assert(_cursor.sprite_count <= lengthof(_cursor.sprite_seq)); for (uint i = 0; i < _cursor.sprite_count; ++i) { const Sprite *p = GetSprite(GB(_cursor.sprite_seq[i].sprite, 0, SPRITE_WIDTH), ST_NORMAL); diff --git a/src/gfx_type.h b/src/gfx_type.h index ab802c45e4..3b9f04d9e8 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -199,7 +199,7 @@ union Colour { } }; -assert_compile(sizeof(Colour) == sizeof(uint32)); +static_assert(sizeof(Colour) == sizeof(uint32)); /** Available font sizes */ diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 95c9540959..f4d1a7b03f 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -150,7 +150,7 @@ void CheckExternalFiles() if (sounds_set->GetNumInvalid() != 0) { add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name.c_str()); - assert_compile(SoundsSet::NUM_FILES == 1); + static_assert(SoundsSet::NUM_FILES == 1); /* No need to loop each file, as long as there is only a single * sound file. */ add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", sounds_set->files->filename, SoundsSet::CheckMD5(sounds_set->files, BASESET_DIR) == MD5File::CR_MISMATCH ? "corrupt" : "missing", sounds_set->files->missing_warning); diff --git a/src/goal.cpp b/src/goal.cpp index 02ec85255f..954d2f7bf7 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -248,7 +248,7 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint CompanyID company = (CompanyID)GB(p1, 16, 8); ClientID client = (ClientID)GB(p1, 16, 16); - assert_compile(GOAL_QUESTION_BUTTON_COUNT < 29); + static_assert(GOAL_QUESTION_BUTTON_COUNT < 29); uint32 button_mask = GB(p2, 0, GOAL_QUESTION_BUTTON_COUNT); byte type = GB(p2, 29, 2); bool is_client = HasBit(p2, 31); diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index d454d8a9b5..3d6d2a3a36 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -289,7 +289,7 @@ protected: /* the colours and cost array of GraphDrawer must accommodate * both values for cargo and companies. So if any are higher, quit */ - assert_compile(GRAPH_MAX_DATASETS >= (int)NUM_CARGO && GRAPH_MAX_DATASETS >= (int)MAX_COMPANIES); + static_assert(GRAPH_MAX_DATASETS >= (int)NUM_CARGO && GRAPH_MAX_DATASETS >= (int)MAX_COMPANIES); assert(this->num_vert_lines > 0); byte grid_colour = _colour_gradient[COLOUR_GREY][4]; @@ -1527,7 +1527,7 @@ static NWidgetBase *MakePerformanceDetailPanels(int *biggest_index) STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP, }; - assert_compile(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN); + static_assert(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN); NWidgetVertical *vert = new NWidgetVertical(NC_EQUALSIZE); for (int widnum = WID_PRD_SCORE_FIRST; widnum <= WID_PRD_SCORE_LAST; widnum++) { diff --git a/src/ground_vehicle.cpp b/src/ground_vehicle.cpp index 74095fc576..0f1915c964 100644 --- a/src/ground_vehicle.cpp +++ b/src/ground_vehicle.cpp @@ -191,8 +191,8 @@ bool GroundVehicle::IsChainInDepot() const { const T *v = this->First(); /* Is the front engine stationary in the depot? */ - assert_compile((int)TRANSPORT_RAIL == (int)VEH_TRAIN); - assert_compile((int)TRANSPORT_ROAD == (int)VEH_ROAD); + static_assert((int)TRANSPORT_RAIL == (int)VEH_TRAIN); + static_assert((int)TRANSPORT_ROAD == (int)VEH_ROAD); if (!IsDepotTypeTile(v->tile, (TransportType)Type) || v->cur_speed != 0) return false; /* Check whether the rest is also already trying to enter the depot. */ diff --git a/src/house.h b/src/house.h index 7d3b8dc5e8..f381fc1e0b 100644 --- a/src/house.h +++ b/src/house.h @@ -64,7 +64,7 @@ enum HouseZonesBits { HZB_TOWN_CENTRE, HZB_END, }; -assert_compile(HZB_END == 5); +static_assert(HZB_END == 5); DECLARE_POSTFIX_INCREMENT(HouseZonesBits) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index caa18c8e3e..ed770ed043 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -145,7 +145,7 @@ enum CargoSuffixInOut { template static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, const TC &cargoes, TS &suffixes) { - assert_compile(lengthof(cargoes) <= lengthof(suffixes)); + static_assert(lengthof(cargoes) <= lengthof(suffixes)); if (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) { /* Reworked behaviour with new many-in-many-out scheme */ @@ -2201,8 +2201,8 @@ private: } }; -assert_compile(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); -assert_compile(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); +static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); +static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); int CargoesField::small_height; ///< Height of the header row. int CargoesField::normal_height; ///< Height of the non-header rows. diff --git a/src/landscape.cpp b/src/landscape.cpp index 33afd5163c..6dddbfd70f 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -811,7 +811,7 @@ void RunTileLoop() static const uint32 feedbacks[] = { 0xD8F, 0x1296, 0x2496, 0x4357, 0x8679, 0x1030E, 0x206CD, 0x403FE, 0x807B8, 0x1004B2, 0x2006A8, 0x4004B2, 0x800B87 }; - assert_compile(lengthof(feedbacks) == 2 * MAX_MAP_SIZE_BITS - 2 * MIN_MAP_SIZE_BITS + 1); + static_assert(lengthof(feedbacks) == 2 * MAX_MAP_SIZE_BITS - 2 * MIN_MAP_SIZE_BITS + 1); const uint32 feedback = feedbacks[MapLogX() + MapLogY() - 2 * MIN_MAP_SIZE_BITS]; /* We update every tile every 256 ticks, so divide the map size by 2^8 = 256 */ diff --git a/src/language.h b/src/language.h index aec5d9c85f..269b22c246 100644 --- a/src/language.h +++ b/src/language.h @@ -86,7 +86,7 @@ struct LanguagePackHeader { } }; /** Make sure the size is right. */ -assert_compile(sizeof(LanguagePackHeader) % 4 == 0); +static_assert(sizeof(LanguagePackHeader) % 4 == 0); /** Metadata about a single language. */ struct LanguageMetadata : public LanguagePackHeader { diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index b5fbc50ff7..fa4002e2b8 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -454,7 +454,7 @@ static const NWidgetPart _nested_linkgraph_legend_widgets[] = { EndContainer() }; -assert_compile(WID_LGL_SATURATION_LAST - WID_LGL_SATURATION_FIRST == +static_assert(WID_LGL_SATURATION_LAST - WID_LGL_SATURATION_FIRST == lengthof(LinkGraphOverlay::LINK_COLOURS) - 1); static WindowDesc _linkgraph_legend_desc( diff --git a/src/map_type.h b/src/map_type.h index 453186d88e..f34f137c64 100644 --- a/src/map_type.h +++ b/src/map_type.h @@ -24,7 +24,7 @@ struct Tile { byte m5; ///< General purpose }; -assert_compile(sizeof(Tile) == 8); +static_assert(sizeof(Tile) == 8); /** * Data that is stored per tile. Also used Tile for this. diff --git a/src/misc/fixedsizearray.hpp b/src/misc/fixedsizearray.hpp index db6c7808b3..a36a810f27 100644 --- a/src/misc/fixedsizearray.hpp +++ b/src/misc/fixedsizearray.hpp @@ -67,7 +67,7 @@ public: FixedSizeArray() { /* Ensure the size won't overflow. */ - assert_compile(C < (SIZE_MAX - HeaderSize) / Tsize); + static_assert(C < (SIZE_MAX - HeaderSize) / Tsize); /* allocate block for header + items (don't construct items) */ data = (T*)((MallocT(HeaderSize + C * Tsize)) + HeaderSize); diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index f7345416c1..17a460bf55 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -681,7 +681,7 @@ struct TooltipsWindow : public Window { this->parent = parent; this->string_id = str; - assert_compile(sizeof(this->params[0]) == sizeof(params[0])); + static_assert(sizeof(this->params[0]) == sizeof(params[0])); assert(paramcount <= lengthof(this->params)); if (paramcount > 0) memcpy(this->params, params, sizeof(this->params[0]) * paramcount); this->paramcount = paramcount; diff --git a/src/music.cpp b/src/music.cpp index 131651e55c..66ac2b511b 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -83,7 +83,7 @@ static const char * const _music_file_names[] = { "ezy_0", "ezy_1", "ezy_2", "ezy_3", "ezy_4", "ezy_5", "ezy_6", "ezy_7", "ezy_8", "ezy_9", }; /** Make sure we aren't messing things up. */ -assert_compile(lengthof(_music_file_names) == NUM_SONGS_AVAILABLE); +static_assert(lengthof(_music_file_names) == NUM_SONGS_AVAILABLE); template /* static */ const char * const *BaseSet::file_names = _music_file_names; diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index 8aa072aefb..836cfeae8f 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -210,7 +210,7 @@ static inline bool SetNoDelay(SOCKET d) } /* Make sure these structures have the size we expect them to be */ -assert_compile(sizeof(in_addr) == 4); ///< IPv4 addresses should be 4 bytes. -assert_compile(sizeof(in6_addr) == 16); ///< IPv6 addresses should be 16 bytes. +static_assert(sizeof(in_addr) == 4); ///< IPv4 addresses should be 4 bytes. +static_assert(sizeof(in6_addr) == 16); ///< IPv6 addresses should be 16 bytes. #endif /* NETWORK_CORE_OS_ABSTRACTION_H */ diff --git a/src/network/core/tcp_admin.cpp b/src/network/core/tcp_admin.cpp index 98227e0199..c72583f553 100644 --- a/src/network/core/tcp_admin.cpp +++ b/src/network/core/tcp_admin.cpp @@ -18,10 +18,10 @@ #include "../../safeguards.h" /* Make sure that these enums match. */ -assert_compile((int)CRR_MANUAL == (int)ADMIN_CRR_MANUAL); -assert_compile((int)CRR_AUTOCLEAN == (int)ADMIN_CRR_AUTOCLEAN); -assert_compile((int)CRR_BANKRUPT == (int)ADMIN_CRR_BANKRUPT); -assert_compile((int)CRR_END == (int)ADMIN_CRR_END); +static_assert((int)CRR_MANUAL == (int)ADMIN_CRR_MANUAL); +static_assert((int)CRR_AUTOCLEAN == (int)ADMIN_CRR_AUTOCLEAN); +static_assert((int)CRR_BANKRUPT == (int)ADMIN_CRR_BANKRUPT); +static_assert((int)CRR_END == (int)ADMIN_CRR_END); /** * Create the admin handler for the given socket. diff --git a/src/network/network.cpp b/src/network/network.cpp index da341f253f..907f158420 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -43,7 +43,7 @@ bool _ddc_fastforward = true; #endif /* DEBUG_DUMP_COMMANDS */ /** Make sure both pools have the same size. */ -assert_compile(NetworkClientInfoPool::MAX_SIZE == NetworkClientSocketPool::MAX_SIZE); +static_assert(NetworkClientInfoPool::MAX_SIZE == NetworkClientSocketPool::MAX_SIZE); /** The pool with client information. */ NetworkClientInfoPool _networkclientinfo_pool("NetworkClientInfo"); @@ -80,8 +80,8 @@ uint8 _network_advertise_retries; ///< The number of advertisement retries w CompanyMask _network_company_passworded; ///< Bitmask of the password status of all companies. /* Check whether NETWORK_NUM_LANDSCAPES is still in sync with NUM_LANDSCAPE */ -assert_compile((int)NETWORK_NUM_LANDSCAPES == (int)NUM_LANDSCAPE); -assert_compile((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH); +static_assert((int)NETWORK_NUM_LANDSCAPES == (int)NUM_LANDSCAPE); +static_assert((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH); extern NetworkUDPSocketHandler *_udp_client_socket; ///< udp client socket extern NetworkUDPSocketHandler *_udp_server_socket; ///< udp server socket @@ -322,7 +322,7 @@ StringID GetNetworkErrorMsg(NetworkErrorCode err) STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP, STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN, }; - assert_compile(lengthof(network_error_strings) == NETWORK_ERROR_END); + static_assert(lengthof(network_error_strings) == NETWORK_ERROR_END); if (err >= (ptrdiff_t)lengthof(network_error_strings)) err = NETWORK_ERROR_GENERAL; @@ -920,7 +920,7 @@ void NetworkGameLoop() if (*p == ' ') p++; cp = CallocT(1); int company; - assert_compile(sizeof(cp->text) == 128); + static_assert(sizeof(cp->text) == 128); int ret = sscanf(p, "%x; %x; %x; %x; %x; %x; %x; \"%127[^\"]\"", &next_date, &next_date_fract, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text); /* There are 8 pieces of data to read, however the last is a * string that might or might not exist. Ignore it if that diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index f304740a6a..007722ec69 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -54,7 +54,7 @@ static const AdminUpdateFrequency _admin_update_type_frequencies[] = { ADMIN_FREQUENCY_AUTOMATIC, ///< ADMIN_UPDATE_GAMESCRIPT }; /** Sanity check. */ -assert_compile(lengthof(_admin_update_type_frequencies) == ADMIN_UPDATE_END); +static_assert(lengthof(_admin_update_type_frequencies) == ADMIN_UPDATE_END); /** * Create a new socket for the server side of the admin network. @@ -86,7 +86,7 @@ ServerNetworkAdminSocketHandler::~ServerNetworkAdminSocketHandler() bool accept = !StrEmpty(_settings_client.network.admin_password) && _network_admins_connected < MAX_ADMINS; /* We can't go over the MAX_ADMINS limit here. However, if we accept * the connection, there has to be space in the pool. */ - assert_compile(NetworkAdminSocketPool::MAX_SIZE == MAX_ADMINS); + static_assert(NetworkAdminSocketPool::MAX_SIZE == MAX_ADMINS); assert(!accept || ServerNetworkAdminSocketHandler::CanAllocateItem()); return accept; } diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 07348c0484..e0f3bf57c3 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -31,7 +31,7 @@ /** The draw buffer must be able to contain the chat message, client name and the "[All]" message, * some spaces and possible translations of [All] to other languages. */ -assert_compile((int)DRAW_STRING_BUFFER >= (int)NETWORK_CHAT_LENGTH + NETWORK_NAME_LENGTH + 40); +static_assert((int)DRAW_STRING_BUFFER >= (int)NETWORK_CHAT_LENGTH + NETWORK_NAME_LENGTH + 40); /** Spacing between chat lines. */ static const uint NETWORK_CHAT_LINE_SPACING = 3; diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index dc593eacd7..eb5c4cbb35 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -324,7 +324,7 @@ const char *_network_join_server_password = nullptr; const char *_network_join_company_password = nullptr; /** Make sure the server ID length is the same as a md5 hash. */ -assert_compile(NETWORK_SERVER_ID_LENGTH == 16 * 2 + 1); +static_assert(NETWORK_SERVER_ID_LENGTH == 16 * 2 + 1); /*********** * Sending functions @@ -682,7 +682,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p STR_NETWORK_ERROR_TIMEOUT_MAP, // NETWORK_ERROR_TIMEOUT_MAP STR_NETWORK_ERROR_TIMEOUT_JOIN, // NETWORK_ERROR_TIMEOUT_JOIN }; - assert_compile(lengthof(network_error_strings) == NETWORK_ERROR_END); + static_assert(lengthof(network_error_strings) == NETWORK_ERROR_END); NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8(); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index c82c51cfd4..1454991a8c 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -41,9 +41,9 @@ DECLARE_POSTFIX_INCREMENT(ClientID) static ClientID _network_client_id = CLIENT_ID_FIRST; /** Make very sure the preconditions given in network_type.h are actually followed */ -assert_compile(MAX_CLIENT_SLOTS > MAX_CLIENTS); +static_assert(MAX_CLIENT_SLOTS > MAX_CLIENTS); /** Yes... */ -assert_compile(NetworkClientSocketPool::MAX_SIZE == MAX_CLIENT_SLOTS); +static_assert(NetworkClientSocketPool::MAX_SIZE == MAX_CLIENT_SLOTS); /** The pool with clients. */ NetworkClientSocketPool _networkclientsocket_pool("NetworkClientSocket"); @@ -223,7 +223,7 @@ ServerNetworkGameSocketHandler::ServerNetworkGameSocketHandler(SOCKET s) : Netwo /* The Socket and Info pools need to be the same in size. After all, * each Socket will be associated with at most one Info object. As * such if the Socket was allocated the Info object can as well. */ - assert_compile(NetworkClientSocketPool::MAX_SIZE == NetworkClientInfoPool::MAX_SIZE); + static_assert(NetworkClientSocketPool::MAX_SIZE == NetworkClientInfoPool::MAX_SIZE); } /** @@ -311,7 +311,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta /* We can't go over the MAX_CLIENTS limit here. However, the * pool must have place for all clients and ourself. */ - assert_compile(NetworkClientSocketPool::MAX_SIZE == MAX_CLIENTS + 1); + static_assert(NetworkClientSocketPool::MAX_SIZE == MAX_CLIENTS + 1); assert(!accept || ServerNetworkGameSocketHandler::CanAllocateItem()); return accept; } @@ -1962,7 +1962,7 @@ void NetworkServerShowStatusToConsole() "ready", "active" }; - assert_compile(lengthof(stat_str) == NetworkClientSocket::STATUS_END); + static_assert(lengthof(stat_str) == NetworkClientSocket::STATUS_END); for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { NetworkClientInfo *ci = cs->GetInfo(); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 097e68ae22..2663a34705 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -503,7 +503,7 @@ static StringID TTDPStringIDToOTTDStringIDMapping(StringID str) assert(!IsInsideMM(str, 0xD000, 0xD7FF)); #define TEXTID_TO_STRINGID(begin, end, stringid, stringend) \ - assert_compile(stringend - stringid == end - begin); \ + static_assert(stringend - stringid == end - begin); \ if (str >= begin && str <= end) return str + (stringid - begin) /* We have some changes in our cargo strings, resulting in some missing. */ @@ -8728,7 +8728,7 @@ GRFFile::GRFFile(const GRFConfig *config) /* Copy the initial parameter list * 'Uninitialised' parameters are zeroed as that is their default value when dynamically creating them. */ - assert_compile(lengthof(this->param) == lengthof(config->param) && lengthof(this->param) == 0x80); + static_assert(lengthof(this->param) == lengthof(config->param) && lengthof(this->param) == 0x80); assert(config->num_params <= lengthof(config->param)); this->param_end = config->num_params; diff --git a/src/newgrf_airporttiles.cpp b/src/newgrf_airporttiles.cpp index 3059174a86..a437fb596a 100644 --- a/src/newgrf_airporttiles.cpp +++ b/src/newgrf_airporttiles.cpp @@ -37,7 +37,7 @@ AirportTileOverrideManager _airporttile_mngr(NEW_AIRPORTTILE_OFFSET, NUM_AIRPORT { /* should be assert(gfx < lengthof(tiles)), but that gives compiler warnings * since it's always true if the following holds: */ - assert_compile(MAX_UVALUE(StationGfx) + 1 == lengthof(tiles)); + static_assert(MAX_UVALUE(StationGfx) + 1 == lengthof(tiles)); return &AirportTileSpec::tiles[gfx]; } diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index db2f5ac43c..efc9873af4 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1313,7 +1313,7 @@ void FillNewGRFVehicleCache(const Vehicle *v) { 0x43, NCVV_COMPANY_INFORMATION }, { 0x4D, NCVV_POSITION_IN_VEHICLE }, }; - assert_compile(NCVV_END == lengthof(cache_entries)); + static_assert(NCVV_END == lengthof(cache_entries)); /* Resolve all the variables, so their caches are set. */ for (size_t i = 0; i < lengthof(cache_entries); i++) { diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 19f32bd754..d607f8bd05 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -431,9 +431,9 @@ uint32 Station::GetNewGRFVariable(const ResolverObject &object, byte variable, b case 0x64: return ge->HasVehicleEverTriedLoading() ? ge->last_speed | (ge->last_age << 8) : 0xFF00; case 0x65: return GB(ge->status, GoodsEntry::GES_ACCEPTANCE, 1) << 3; case 0x69: { - assert_compile((int)GoodsEntry::GES_EVER_ACCEPTED + 1 == (int)GoodsEntry::GES_LAST_MONTH); - assert_compile((int)GoodsEntry::GES_EVER_ACCEPTED + 2 == (int)GoodsEntry::GES_CURRENT_MONTH); - assert_compile((int)GoodsEntry::GES_EVER_ACCEPTED + 3 == (int)GoodsEntry::GES_ACCEPTED_BIGTICK); + static_assert((int)GoodsEntry::GES_EVER_ACCEPTED + 1 == (int)GoodsEntry::GES_LAST_MONTH); + static_assert((int)GoodsEntry::GES_EVER_ACCEPTED + 2 == (int)GoodsEntry::GES_CURRENT_MONTH); + static_assert((int)GoodsEntry::GES_EVER_ACCEPTED + 3 == (int)GoodsEntry::GES_ACCEPTED_BIGTICK); return GB(ge->status, GoodsEntry::GES_EVER_ACCEPTED, 4); } } diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index 61206a587b..ff322c9445 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -228,6 +228,6 @@ struct PersistentStorage : PersistentStorageArray, PersistentStorage } }; -assert_compile(cpp_lengthof(OldPersistentStorage, storage) <= cpp_lengthof(PersistentStorage, storage)); +static_assert(cpp_lengthof(OldPersistentStorage, storage) <= cpp_lengthof(PersistentStorage, storage)); #endif /* NEWGRF_STORAGE_H */ diff --git a/src/news_gui.cpp b/src/news_gui.cpp index a3f73d7296..e98f76da9d 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -244,7 +244,7 @@ static NewsTypeData _news_type_data[] = { NewsTypeData("news_display.general", 60, SND_BEGIN ), ///< NT_GENERAL }; -assert_compile(lengthof(_news_type_data) == NT_END); +static_assert(lengthof(_news_type_data) == NT_END); /** * Return the news display option. diff --git a/src/openttd.cpp b/src/openttd.cpp index 33f65314d1..89cc15c35a 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -424,7 +424,7 @@ struct AfterNewGRFScan : NewGRFScanCallback { { /* Visual C++ 2015 fails compiling this line (AfterNewGRFScan::generation_seed undefined symbol) * if it's placed outside a member function, directly in the struct body. */ - assert_compile(sizeof(generation_seed) == sizeof(_settings_game.game_creation.generation_seed)); + static_assert(sizeof(generation_seed) == sizeof(_settings_game.game_creation.generation_seed)); } virtual void OnNewGRFsScanned() diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index c9fa919890..b8ba7ab901 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -34,8 +34,8 @@ /* DestinationID must be at least as large as every these below, because it can * be any of them */ -assert_compile(sizeof(DestinationID) >= sizeof(DepotID)); -assert_compile(sizeof(DestinationID) >= sizeof(StationID)); +static_assert(sizeof(DestinationID) >= sizeof(DepotID)); +static_assert(sizeof(DestinationID) >= sizeof(StationID)); OrderPool _order_pool("Order"); INSTANTIATE_POOL_METHODS(Order) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 162fe97799..a714415326 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -62,7 +62,7 @@ enum SignalOffsets { */ void ResetRailTypes() { - assert_compile(lengthof(_original_railtypes) <= lengthof(_railtypes)); + static_assert(lengthof(_original_railtypes) <= lengthof(_railtypes)); uint i = 0; for (; i < lengthof(_original_railtypes); i++) _railtypes[i] = _original_railtypes[i]; diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index b8aee88d60..bac6f8e1f4 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -61,7 +61,7 @@ RoadTypes _roadtypes_type; */ void ResetRoadTypes() { - assert_compile(lengthof(_original_roadtypes) <= lengthof(_roadtypes)); + static_assert(lengthof(_original_roadtypes) <= lengthof(_roadtypes)); uint i = 0; for (; i < lengthof(_original_roadtypes); i++) _roadtypes[i] = _original_roadtypes[i]; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 261af7042b..0e490fbc21 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -60,7 +60,7 @@ static const uint16 _roadveh_full_adder[] = { 0, 16, 16, 0, 8, 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 }; -assert_compile(lengthof(_roadveh_images) == lengthof(_roadveh_full_adder)); +static_assert(lengthof(_roadveh_images) == lengthof(_roadveh_full_adder)); template <> bool IsValidImageIndex(uint8 image_index) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 4eab99c883..329152ab27 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2182,7 +2182,7 @@ bool AfterLoadGame() 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 * assert() in Pool::GetNew() happy by calling CanAllocateItem(). */ - assert_compile(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); + static_assert(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); assert(CargoPayment::CanAllocateItem()); Vehicle *v = *iter; if (v->cargo_payment == nullptr) v->cargo_payment = new CargoPayment(v); diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp index 576bfa5bc7..6bff1b154c 100644 --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -100,7 +100,7 @@ static const SaveLoad * const _glog_desc[] = { _glog_emergency_desc, }; -assert_compile(lengthof(_glog_desc) == GLCT_END); +static_assert(lengthof(_glog_desc) == GLCT_END); static void Load_GLOG_common(LoggedAction *&gamelog_action, uint &gamelog_actions) { diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 5dac33777d..0c2c7f80bc 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -243,7 +243,7 @@ static inline bool CheckOldSavegameType(FILE *f, char *temp, const char *last, u static SavegameType DetermineOldSavegameType(FILE *f, char *title, const char *last) { - assert_compile(TTD_HEADER_SIZE >= TTO_HEADER_SIZE); + static_assert(TTD_HEADER_SIZE >= TTO_HEADER_SIZE); char temp[TTD_HEADER_SIZE] = "Unknown"; SavegameType type = SGT_TTO; diff --git a/src/saveload/oldloader.h b/src/saveload/oldloader.h index fcc7be4be0..1600a9ac22 100644 --- a/src/saveload/oldloader.h +++ b/src/saveload/oldloader.h @@ -93,7 +93,7 @@ struct OldChunks { }; /* If it fails, check lines above.. */ -assert_compile(sizeof(TileIndex) == 4); +static_assert(sizeof(TileIndex) == 4); extern uint _bump_assert_value; byte ReadByte(LoadgameState *ls); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 3471a8295e..bfbf1957b8 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1142,7 +1142,7 @@ static size_t ReferenceToInt(const void *obj, SLRefType rt) */ static void *IntToReference(size_t index, SLRefType rt) { - assert_compile(sizeof(size_t) <= sizeof(void *)); + static_assert(sizeof(size_t) <= sizeof(void *)); assert(_sl.action == SLA_PTRS); diff --git a/src/screenshot.cpp b/src/screenshot.cpp index b7abab8fc7..b832e2224b 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -81,7 +81,7 @@ PACK(struct BitmapFileHeader { uint32 reserved; uint32 off_bits; }); -assert_compile(sizeof(BitmapFileHeader) == 14); +static_assert(sizeof(BitmapFileHeader) == 14); /** BMP Info Header (stored in little endian) */ struct BitmapInfoHeader { @@ -90,13 +90,13 @@ struct BitmapInfoHeader { uint16 planes, bitcount; uint32 compression, sizeimage, xpels, ypels, clrused, clrimp; }; -assert_compile(sizeof(BitmapInfoHeader) == 40); +static_assert(sizeof(BitmapInfoHeader) == 40); /** Format of palette data in BMP header */ struct RgbQuad { byte blue, green, red, reserved; }; -assert_compile(sizeof(RgbQuad) == 4); +static_assert(sizeof(RgbQuad) == 4); /** * Generic .BMP writer @@ -419,7 +419,7 @@ struct PcxHeader { uint16 height; byte filler[54]; }; -assert_compile(sizeof(PcxHeader) == 128); +static_assert(sizeof(PcxHeader) == 128); /** * Generic .PCX file image writer. diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index c7dd0cb140..77be428c9d 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1783,7 +1783,7 @@ static const StringID _game_settings_restrict_dropdown[] = { STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT, // RM_CHANGED_AGAINST_DEFAULT STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW, // RM_CHANGED_AGAINST_NEW }; -assert_compile(lengthof(_game_settings_restrict_dropdown) == RM_END); +static_assert(lengthof(_game_settings_restrict_dropdown) == RM_END); /** Warnings about hidden search results. */ enum WarnHiddenResult { diff --git a/src/signal.cpp b/src/signal.cpp index 9b17e51dcb..d6795e3b5c 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -25,7 +25,7 @@ static const uint SIG_TBD_SIZE = 256; ///< number of intersections - open nod static const uint SIG_GLOB_SIZE = 128; ///< number of open blocks (block can be opened more times until detected) static const uint SIG_GLOB_UPDATE = 64; ///< how many items need to be in _globset to force update -assert_compile(SIG_GLOB_UPDATE <= SIG_GLOB_SIZE); +static_assert(SIG_GLOB_UPDATE <= SIG_GLOB_SIZE); /** incidating trackbits with given enterdir */ static const TrackBits _enterdir_to_trackbits[DIAGDIR_END] = { diff --git a/src/sound.cpp b/src/sound.cpp index 0d15473095..73c0b22e37 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -188,7 +188,7 @@ static void StartSound(SoundID sound_id, float pan, uint volume) static const byte _vol_factor_by_zoom[] = {255, 255, 255, 190, 134, 87}; -assert_compile(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_COUNT); +static_assert(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_COUNT); static const byte _sound_base_vol[] = { 128, 90, 128, 128, 128, 128, 128, 128, diff --git a/src/spritecache.cpp b/src/spritecache.cpp index da0ca80484..3eceb38de5 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -618,9 +618,9 @@ void DupSprite(SpriteID old_spr, SpriteID new_spr) static const size_t S_FREE_MASK = sizeof(size_t) - 1; /* to make sure nobody adds things to MemBlock without checking S_FREE_MASK first */ -assert_compile(sizeof(MemBlock) == sizeof(size_t)); +static_assert(sizeof(MemBlock) == sizeof(size_t)); /* make sure it's a power of two */ -assert_compile((sizeof(size_t) & (sizeof(size_t) - 1)) == 0); +static_assert((sizeof(size_t) & (sizeof(size_t) - 1)) == 0); static inline MemBlock *NextBlock(MemBlock *block) { diff --git a/src/stdafx.h b/src/stdafx.h index c99d7a2771..dca0e6c6f3 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -348,14 +348,12 @@ typedef unsigned char byte; # define PERSONAL_DIR "" #endif -#define assert_compile(expr) static_assert(expr, #expr) - /* Check if the types have the bitsizes like we are using them */ -assert_compile(sizeof(uint64) == 8); -assert_compile(sizeof(uint32) == 4); -assert_compile(sizeof(uint16) == 2); -assert_compile(sizeof(uint8) == 1); -assert_compile(SIZE_MAX >= UINT32_MAX); +static_assert(sizeof(uint64) == 8); +static_assert(sizeof(uint32) == 4); +static_assert(sizeof(uint16) == 2); +static_assert(sizeof(uint8) == 1); +static_assert(SIZE_MAX >= UINT32_MAX); #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 diff --git a/src/strings_func.h b/src/strings_func.h index 6ef36dafc6..2019b8b369 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -84,7 +84,7 @@ public: offset(0), num_param(Tnum_param) { - assert_compile(sizeof(data[0]) == sizeof(uint64)); + static_assert(sizeof(data[0]) == sizeof(uint64)); } /** diff --git a/src/table/airport_defaults.h b/src/table/airport_defaults.h index ec30874f71..dce71843a5 100644 --- a/src/table/airport_defaults.h +++ b/src/table/airport_defaults.h @@ -406,7 +406,7 @@ extern const AirportSpec _origin_airport_specs[] = { AS_GENERIC(&_airportfta_oilrig, nullptr, _default_airports_rotation, 0, nullptr, 0, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), }; -assert_compile(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs)); +static_assert(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs)); const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, nullptr, _default_airports_rotation, 0, nullptr, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false); diff --git a/src/table/airporttiles.h b/src/table/airporttiles.h index d4fb3d968e..0393cf7a5f 100644 --- a/src/table/airporttiles.h +++ b/src/table/airporttiles.h @@ -104,7 +104,7 @@ static const AirportTileSpec _origin_airporttile_specs[] = { AT(3, 1), // APT_GRASS_FENCE_NE_FLAG_2 }; -assert_compile(NEW_AIRPORTTILE_OFFSET == lengthof(_origin_airporttile_specs)); +static_assert(NEW_AIRPORTTILE_OFFSET == lengthof(_origin_airporttile_specs)); #undef AT_NOANIM #undef AT diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index d14415051c..4e5abaff5b 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -620,4 +620,4 @@ static const NIFeature * const _nifeatures[] = { &_nif_tramtype, // GSF_TRAMTYPES &_nif_town, // GSF_FAKE_TOWNS }; -assert_compile(lengthof(_nifeatures) == GSF_FAKE_END); +static_assert(lengthof(_nifeatures) == GSF_FAKE_END); diff --git a/src/table/pricebase.h b/src/table/pricebase.h index 5051254a38..27af6a370e 100644 --- a/src/table/pricebase.h +++ b/src/table/pricebase.h @@ -80,4 +80,4 @@ extern const PriceBaseSpec _price_base_specs[] = { { 100, PCAT_RUNNING, GSF_END, PR_STATION_VALUE }, ///< PR_INFRASTRUCTURE_STATION { 5000, PCAT_RUNNING, GSF_END, PR_BUILD_STATION_AIRPORT}, ///< PR_INFRASTRUCTURE_AIRPORT }; -assert_compile(lengthof(_price_base_specs) == PR_END); +static_assert(lengthof(_price_base_specs) == PR_END); diff --git a/src/table/sprites.h b/src/table/sprites.h index 64f628e5d1..7d9f980ef1 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -1545,11 +1545,11 @@ enum SpriteMasks { PALETTE_MASK = MAX_PALETTES - 1, ///< The mask for the auxiliary sprite (the one that takes care of recolouring) }; -assert_compile( (1 << TRANSPARENT_BIT & SPRITE_MASK) == 0 ); -assert_compile( (1 << RECOLOUR_BIT & SPRITE_MASK) == 0 ); -assert_compile( TRANSPARENT_BIT != RECOLOUR_BIT ); -assert_compile( (1 << TRANSPARENT_BIT & PALETTE_MASK) == 0); -assert_compile( (1 << RECOLOUR_BIT & PALETTE_MASK) == 0 ); +static_assert( (1 << TRANSPARENT_BIT & SPRITE_MASK) == 0 ); +static_assert( (1 << RECOLOUR_BIT & SPRITE_MASK) == 0 ); +static_assert( TRANSPARENT_BIT != RECOLOUR_BIT ); +static_assert( (1 << TRANSPARENT_BIT & PALETTE_MASK) == 0); +static_assert( (1 << RECOLOUR_BIT & PALETTE_MASK) == 0 ); static const PaletteID PAL_NONE = 0; diff --git a/src/table/station_land.h b/src/table/station_land.h index 6b4b2267ac..8429914f32 100644 --- a/src/table/station_land.h +++ b/src/table/station_land.h @@ -988,7 +988,7 @@ static const DrawTileSprites _station_display_datas_waypoint[] = { /* Default waypoint is also drawn as fallback for NewGRF waypoints. * As these are drawn/build like stations, they may use the same number of layouts. */ -assert_compile(lengthof(_station_display_datas_rail) == lengthof(_station_display_datas_waypoint)); +static_assert(lengthof(_station_display_datas_rail) == lengthof(_station_display_datas_waypoint)); static const DrawTileSprites * const _station_display_datas[] = { _station_display_datas_rail, diff --git a/src/table/town_land.h b/src/table/town_land.h index 80a181baa3..92292f6203 100644 --- a/src/table/town_land.h +++ b/src/table/town_land.h @@ -1788,7 +1788,7 @@ static const DrawBuildingsTileStruct _town_draw_tile_data[] = { }; #undef M /** Make sure we have the right number of elements: 4 variants * 4 build stages for each house */ -assert_compile(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4); +static_assert(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4); /** * Describes the data that defines each house in the game @@ -2276,4 +2276,4 @@ static const HouseSpec _original_house_specs[] = { #undef MS /** Make sure we have the right number of elements: one entry for each house */ -assert_compile(lengthof(_original_house_specs) == NEW_HOUSE_OFFSET); +static_assert(lengthof(_original_house_specs) == NEW_HOUSE_OFFSET); diff --git a/src/table/train_cmd.h b/src/table/train_cmd.h index cc53582f8d..f9419990b9 100644 --- a/src/table/train_cmd.h +++ b/src/table/train_cmd.h @@ -63,6 +63,6 @@ static const byte _wagon_full_adder[] = { 32, 32 }; -assert_compile(lengthof(_engine_sprite_base) == lengthof(_engine_sprite_and)); -assert_compile(lengthof(_engine_sprite_base) == lengthof(_engine_sprite_add)); -assert_compile(lengthof(_engine_sprite_base) == lengthof(_wagon_full_adder)); +static_assert(lengthof(_engine_sprite_base) == lengthof(_engine_sprite_and)); +static_assert(lengthof(_engine_sprite_base) == lengthof(_engine_sprite_add)); +static_assert(lengthof(_engine_sprite_base) == lengthof(_wagon_full_adder)); diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 3519c27508..7b728e9b2c 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -390,7 +390,7 @@ const char *GetTextfile(TextfileType type, Subdirectory dir, const char *filenam "changelog", "license", }; - assert_compile(lengthof(prefixes) == TFT_END); + static_assert(lengthof(prefixes) == TFT_END); const char *prefix = prefixes[type]; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index ff63b613f5..8928ffdbf9 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1877,7 +1877,7 @@ CommandCost CmdFoundTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 static const byte price_mult[][TSZ_RANDOM + 1] = {{ 15, 25, 40, 25 }, { 20, 35, 55, 35 }}; /* multidimensional arrays have to have defined length of non-first dimension */ - assert_compile(lengthof(price_mult[0]) == 4); + static_assert(lengthof(price_mult[0]) == 4); CommandCost cost(EXPENSES_OTHER, _price[PR_BUILD_TOWN]); byte mult = price_mult[city][size]; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 3ed7cb1b00..e014944a9f 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1935,7 +1935,7 @@ static PaletteID GetEngineColourMap(EngineID engine_type, CompanyID company, Eng uint16 callback = GetVehicleCallback(CBID_VEHICLE_COLOUR_MAPPING, 0, 0, engine_type, v); /* Failure means "use the default two-colour" */ if (callback != CALLBACK_FAILED) { - assert_compile(PAL_NONE == 0); // Returning 0x4000 (resp. 0xC000) coincidences with default value (PAL_NONE) + static_assert(PAL_NONE == 0); // Returning 0x4000 (resp. 0xC000) coincidences with default value (PAL_NONE) map = GB(callback, 0, 14); /* If bit 14 is set, then the company colours are applied to the * map else it's returned as-is. */ @@ -2552,9 +2552,9 @@ void Vehicle::ShowVisualEffect() const } else { effect_model = (VisualEffectSpawnModel)GB(v->vcache.cached_vis_effect, VE_TYPE_START, VE_TYPE_COUNT); assert(effect_model != (VisualEffectSpawnModel)VE_TYPE_DEFAULT); // should have been resolved by UpdateVisualEffect - assert_compile((uint)VESM_STEAM == (uint)VE_TYPE_STEAM); - assert_compile((uint)VESM_DIESEL == (uint)VE_TYPE_DIESEL); - assert_compile((uint)VESM_ELECTRIC == (uint)VE_TYPE_ELECTRIC); + static_assert((uint)VESM_STEAM == (uint)VE_TYPE_STEAM); + static_assert((uint)VESM_DIESEL == (uint)VE_TYPE_DIESEL); + static_assert((uint)VESM_ELECTRIC == (uint)VE_TYPE_ELECTRIC); } /* Show no smoke when: diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 2cc9f9d749..50a011c8ed 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2009,10 +2009,10 @@ void ShowVehicleListWindow(CompanyID company, VehicleType vehicle_type, TileInde /* Unified vehicle GUI - Vehicle Details Window */ -assert_compile(WID_VD_DETAILS_CARGO_CARRIED == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_CARGO ); -assert_compile(WID_VD_DETAILS_TRAIN_VEHICLES == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_INFO ); -assert_compile(WID_VD_DETAILS_CAPACITY_OF_EACH == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_CAPACITY); -assert_compile(WID_VD_DETAILS_TOTAL_CARGO == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_TOTALS ); +static_assert(WID_VD_DETAILS_CARGO_CARRIED == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_CARGO ); +static_assert(WID_VD_DETAILS_TRAIN_VEHICLES == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_INFO ); +static_assert(WID_VD_DETAILS_CAPACITY_OF_EACH == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_CAPACITY); +static_assert(WID_VD_DETAILS_TOTAL_CARGO == WID_VD_DETAILS_CARGO_CARRIED + TDW_TAB_TOTALS ); /** Vehicle details widgets (other than train). */ static const NWidgetPart _nested_nontrain_vehicle_details_widgets[] = { @@ -2554,10 +2554,10 @@ static WindowDesc _train_view_desc( /* Just to make sure, nobody has changed the vehicle type constants, as we are using them for array indexing in a number of places here. */ -assert_compile(VEH_TRAIN == 0); -assert_compile(VEH_ROAD == 1); -assert_compile(VEH_SHIP == 2); -assert_compile(VEH_AIRCRAFT == 3); +static_assert(VEH_TRAIN == 0); +static_assert(VEH_ROAD == 1); +static_assert(VEH_SHIP == 2); +static_assert(VEH_AIRCRAFT == 3); /** Zoom levels for vehicle views indexed by vehicle type. */ static const ZoomLevel _vehicle_view_zoom_levels[] = { diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 79df540cf4..a574d9b817 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -25,7 +25,7 @@ uint32 VehicleListIdentifier::Pack() const assert(this->vtype < (1 << 2)); assert(this->index < (1 << 20)); assert(this->type < VLT_END); - assert_compile(VLT_END <= (1 << 3)); + static_assert(VLT_END <= (1 << 3)); return c << 28 | this->type << 23 | this->vtype << 26 | this->index; } diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 0089d163df..b3acb82a4c 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -227,7 +227,7 @@ static void DedicatedHandleKeyInput() if (fgets(input_line, lengthof(input_line), stdin) == nullptr) return; #else /* Handle console input, and signal console thread, it can accept input again */ - assert_compile(lengthof(_win_console_thread_buffer) <= lengthof(input_line)); + static_assert(lengthof(_win_console_thread_buffer) <= lengthof(input_line)); strecpy(input_line, _win_console_thread_buffer, lastof(input_line)); SetEvent(_hWaitForInputHandling); #endif diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index 876821fdda..aac8333180 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -20,7 +20,7 @@ #include "safeguards.h" #ifdef _SQ64 - assert_compile((sizeof(ParentSpriteToDraw) % 16) == 0); + static_assert((sizeof(ParentSpriteToDraw) % 16) == 0); # define LOAD_128 _mm_load_si128 #else # define LOAD_128 _mm_loadu_si128 From dd138fc460dcbab37452e90ff070a31516994aa2 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:42 +0100 Subject: [PATCH 427/601] Codechange: Stringify config file paths. --- src/base_media_func.h | 13 ++++---- src/crashlog.cpp | 4 +-- src/fileio.cpp | 53 +++++++++++++++------------------ src/fileio_func.h | 3 +- src/fios_gui.cpp | 2 +- src/highscore.cpp | 6 ++-- src/hotkeys.cpp | 2 +- src/ini.cpp | 8 ++--- src/ini_load.cpp | 4 +-- src/ini_type.h | 4 +-- src/openttd.cpp | 7 ++--- src/os/windows/crashlog_win.cpp | 2 +- src/os/windows/win32.cpp | 6 ++-- src/screenshot.cpp | 2 +- src/settings.cpp | 2 +- src/window.cpp | 2 +- 16 files changed, 56 insertions(+), 64 deletions(-) diff --git a/src/base_media_func.h b/src/base_media_func.h index c5e2a6da23..703165db5e 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -157,17 +157,17 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, Tbase_set *set = new Tbase_set(); IniFile *ini = new IniFile(); - char *path = stredup(filename + basepath_length); + std::string path{ filename + basepath_length }; ini->LoadFromDisk(path, BASESET_DIR); - char *psep = strrchr(path, PATHSEPCHAR); - if (psep != nullptr) { - psep[1] = '\0'; + auto psep = path.rfind(PATHSEPCHAR); + if (psep != std::string::npos) { + path.erase(psep + 1); } else { - *path = '\0'; + path.clear(); } - if (set->FillSetDetails(ini, path, filename)) { + if (set->FillSetDetails(ini, path.c_str(), filename)) { Tbase_set *duplicate = nullptr; for (Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { if (c->name == set->name || c->shortname == set->shortname) { @@ -214,7 +214,6 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, } else { delete set; } - free(path); delete ini; return ret; diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 29e650b937..c447019fef 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -368,7 +368,7 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last) const */ bool CrashLog::WriteCrashLog(const char *buffer, char *filename, const char *filename_last) const { - seprintf(filename, filename_last, "%scrash.log", _personal_dir); + seprintf(filename, filename_last, "%scrash.log", _personal_dir.c_str()); FILE *file = FioFOpenFile(filename, "w", NO_DIRECTORY); if (file == nullptr) return false; @@ -403,7 +403,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const try { GamelogEmergency(); - seprintf(filename, filename_last, "%scrash.sav", _personal_dir); + seprintf(filename, filename_last, "%scrash.sav", _personal_dir.c_str()); /* Don't do a threaded saveload. */ return SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY, false) == SL_OK; diff --git a/src/fileio.cpp b/src/fileio.cpp index e409d9d2a4..135a6bee21 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -53,8 +53,8 @@ static Fio _fio; ///< #Fio instance. /** Whether the working directory should be scanned. */ static bool _do_scan_working_directory = true; -extern char *_config_file; -extern char *_highscore_file; +extern std::string _config_file; +extern std::string _highscore_file; /** * Get position in the current file. @@ -336,7 +336,7 @@ char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir) } /* Could not find the directory, fall back to a base path */ - strecpy(buf, _personal_dir, last); + strecpy(buf, _personal_dir.c_str(), last); return buf; } @@ -1064,7 +1064,7 @@ void DetermineBasePaths(const char *exe) char cwd[MAX_PATH]; if (getcwd(cwd, MAX_PATH) == nullptr) *cwd = '\0'; - if (_config_file == nullptr) { + if (_config_file.empty()) { /* Get the path to working directory of OpenTTD. */ if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; AppendPathSeparator(tmp, lastof(tmp)); @@ -1073,7 +1073,7 @@ void DetermineBasePaths(const char *exe) _do_scan_working_directory = DoScanWorkingDirectory(); } else { /* Use the folder of the config file as working directory. */ - char *config_dir = stredup(_config_file); + char *config_dir = stredup(_config_file.c_str()); char *end = strrchr(config_dir, PATHSEPCHAR); if (end == nullptr) { free(config_dir); @@ -1120,7 +1120,7 @@ extern void cocoaSetApplicationBundleDir(); } #endif /* defined(_WIN32) */ -const char *_personal_dir; +std::string _personal_dir; /** * Acquire the base paths (personal dir and game data dir), @@ -1149,16 +1149,15 @@ void DeterminePaths(const char *exe) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]); } - const char *config_dir; - if (_config_file != nullptr) { + std::string config_dir; + if (!_config_file.empty()) { config_dir = _searchpaths[SP_WORKING_DIR]; } else { char personal_dir[MAX_PATH]; if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) { char *end = strrchr(personal_dir, PATHSEPCHAR); if (end != nullptr) end[1] = '\0'; - config_dir = stredup(personal_dir); - _config_file = str_fmt("%sopenttd.cfg", config_dir); + config_dir = personal_dir; } else { #if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) /* No previous configuration file found. Use the configuration folder from XDG. */ @@ -1168,26 +1167,25 @@ void DeterminePaths(const char *exe) SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR }; - config_dir = nullptr; + config_dir.clear(); for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) { if (IsValidSearchPath(new_openttd_cfg_order[i])) { - config_dir = stredup(_searchpaths[new_openttd_cfg_order[i]]); + config_dir = _searchpaths[new_openttd_cfg_order[i]]; break; } } - assert(config_dir != nullptr); #endif - _config_file = str_fmt("%sopenttd.cfg", config_dir); } + _config_file = config_dir + "openttd.cfg"; } - DEBUG(misc, 3, "%s found as config directory", config_dir); + DEBUG(misc, 3, "%s found as config directory", config_dir.c_str()); - _highscore_file = str_fmt("%shs.dat", config_dir); - extern char *_hotkeys_file; - _hotkeys_file = str_fmt("%shotkeys.cfg", config_dir); - extern char *_windows_file; - _windows_file = str_fmt("%swindows.cfg", config_dir); + _highscore_file = config_dir + "hs.dat"; + extern std::string _hotkeys_file; + _hotkeys_file = config_dir + "hotkeys.cfg"; + extern std::string _windows_file; + _windows_file = config_dir + "windows.cfg"; #if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) if (config_dir == config_home) { @@ -1201,25 +1199,23 @@ void DeterminePaths(const char *exe) } /* Make the necessary folders */ - FioCreateDirectory(config_dir); + FioCreateDirectory(config_dir.c_str()); #if defined(WITH_PERSONAL_DIR) - FioCreateDirectory(_personal_dir); + FioCreateDirectory(_personal_dir.c_str()); #endif - DEBUG(misc, 3, "%s found as personal directory", _personal_dir); + DEBUG(misc, 3, "%s found as personal directory", _personal_dir.c_str()); static const Subdirectory default_subdirs[] = { SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR }; for (uint i = 0; i < lengthof(default_subdirs); i++) { - char *dir = str_fmt("%s%s", _personal_dir, _subdirs[default_subdirs[i]]); - FioCreateDirectory(dir); - free(dir); + FioCreateDirectory((_personal_dir + _subdirs[default_subdirs[i]]).c_str()); } /* If we have network we make a directory for the autodownloading of content */ - _searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir, "content_download" PATHSEP); + _searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir.c_str(), "content_download" PATHSEP); FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]); /* Create the directory for each of the types of content */ @@ -1231,8 +1227,7 @@ void DeterminePaths(const char *exe) } extern std::string _log_file; - _log_file = _personal_dir; - _log_file += "openttd.log"; + _log_file = _personal_dir + "openttd.log"; } /** diff --git a/src/fileio_func.h b/src/fileio_func.h index d951318801..b883a00e80 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -12,6 +12,7 @@ #include "core/enum_type.hpp" #include "fileio_type.h" +#include void FioSeekTo(size_t pos, int mode); void FioSeekToFile(uint8 slot, size_t pos); @@ -64,7 +65,7 @@ void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); bool FileExists(const char *filename); bool ExtractTar(const char *tar_filename, Subdirectory subdir); -extern const char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. +extern std::string _personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. /** Helper for scanning for files with a given name */ class FileScanner { diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 47f7e1e2dd..059bbf0ce9 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -382,7 +382,7 @@ public: break; default: - strecpy(o_dir.name, _personal_dir, lastof(o_dir.name)); + strecpy(o_dir.name, _personal_dir.c_str(), lastof(o_dir.name)); } switch (this->fop) { diff --git a/src/highscore.cpp b/src/highscore.cpp index d8fe348fe0..187df028bd 100644 --- a/src/highscore.cpp +++ b/src/highscore.cpp @@ -20,7 +20,7 @@ #include "safeguards.h" HighScore _highscore_table[SP_HIGHSCORE_END][5]; ///< various difficulty-settings; top 5 -char *_highscore_file; ///< The file to store the highscore data in. +std::string _highscore_file; ///< The file to store the highscore data in. static const StringID _endgame_perf_titles[] = { STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN, @@ -123,7 +123,7 @@ int8 SaveHighScoreValueNetwork() /** Save HighScore table to file */ void SaveToHighScore() { - FILE *fp = fopen(_highscore_file, "wb"); + FILE *fp = fopen(_highscore_file.c_str(), "wb"); if (fp != nullptr) { uint i; @@ -151,7 +151,7 @@ void SaveToHighScore() /** Initialize the highscore table to 0 and if any file exists, load in values */ void LoadFromHighScore() { - FILE *fp = fopen(_highscore_file, "rb"); + FILE *fp = fopen(_highscore_file.c_str(), "rb"); memset(_highscore_table, 0, sizeof(_highscore_table)); diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 6db3a406b3..0a10290c18 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -16,7 +16,7 @@ #include "safeguards.h" -char *_hotkeys_file; +std::string _hotkeys_file; /** * List of all HotkeyLists. diff --git a/src/ini.cpp b/src/ini.cpp index fc9b1e8fd2..036ced6688 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -43,7 +43,7 @@ IniFile::IniFile(const char * const *list_group_names) : IniLoadFile(list_group_ * @param filename the file to save to. * @return true if saving succeeded. */ -bool IniFile::SaveToDisk(const char *filename) +bool IniFile::SaveToDisk(const std::string &filename) { /* * First write the configuration to a (temporary) file and then rename @@ -96,7 +96,7 @@ bool IniFile::SaveToDisk(const char *filename) # undef strncpy /* Allocate space for one more \0 character. */ TCHAR tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1]; - _tcsncpy(tfilename, OTTD2FS(filename), MAX_PATH); + _tcsncpy(tfilename, OTTD2FS(filename.c_str()), MAX_PATH); _tcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH); /* SHFileOperation wants a double '\0' terminated string. */ tfilename[MAX_PATH - 1] = '\0'; @@ -113,8 +113,8 @@ bool IniFile::SaveToDisk(const char *filename) shfopt.pTo = tfilename; SHFileOperation(&shfopt); #else - if (rename(file_new.c_str(), filename) < 0) { - DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename); + if (rename(file_new.c_str(), filename.c_str()) < 0) { + DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename.c_str()); } #endif diff --git a/src/ini_load.cpp b/src/ini_load.cpp index 93b6bdf72d..e7c2b95fe6 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -192,7 +192,7 @@ void IniLoadFile::RemoveGroup(const char *name) * @param subdir the sub directory to load the file from. * @pre nothing has been loaded yet. */ -void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) +void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) { assert(this->last_group == &this->group); @@ -204,7 +204,7 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) uint comment_alloc = 0; size_t end; - FILE *in = this->OpenFile(filename, subdir, &end); + FILE *in = this->OpenFile(filename.c_str(), subdir, &end); if (in == nullptr) return; end += ftell(in); diff --git a/src/ini_type.h b/src/ini_type.h index b5f8398d97..1637174500 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -64,7 +64,7 @@ struct IniLoadFile { IniGroup *GetGroup(const std::string &name, bool create_new = true); void RemoveGroup(const char *name); - void LoadFromDisk(const char *filename, Subdirectory subdir); + void LoadFromDisk(const std::string &filename, Subdirectory subdir); /** * Open the INI file. @@ -88,7 +88,7 @@ struct IniLoadFile { struct IniFile : IniLoadFile { IniFile(const char * const *list_group_names = nullptr); - bool SaveToDisk(const char *filename); + bool SaveToDisk(const std::string &filename); virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size); virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post); diff --git a/src/openttd.cpp b/src/openttd.cpp index 89cc15c35a..2409e8e4e3 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -88,7 +88,7 @@ bool HandleBootstrap(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); extern void ShowOSErrorBox(const char *buf, bool system); -extern char *_config_file; +extern std::string _config_file; bool _save_config = false; @@ -316,8 +316,6 @@ static void ShutdownGame() /* Uninitialize variables that are allocated dynamically */ GamelogReset(); - free(_config_file); - LinkGraphSchedule::Clear(); PoolBase::Clean(PT_ALL); @@ -566,7 +564,6 @@ int openttd_main(int argc, char *argv[]) _game_mode = GM_MENU; _switch_mode = SM_MENU; - _config_file = nullptr; GetOptData mgo(argc - 1, argv + 1, _options); int ret = 0; @@ -672,7 +669,7 @@ int openttd_main(int argc, char *argv[]) return ret; } case 'G': scanner->generation_seed = strtoul(mgo.opt, nullptr, 10); break; - case 'c': free(_config_file); _config_file = stredup(mgo.opt); break; + case 'c': _config_file = mgo.opt; break; case 'x': scanner->save_config = false; break; case 'h': i = -2; // Force printing of help. diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index 7a1a524aa5..c96c4cf7c2 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -499,7 +499,7 @@ char *CrashLogWindows::AppendDecodedStacktrace(char *buffer, const char *last) c CONST PMINIDUMP_CALLBACK_INFORMATION); MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump"); if (funcMiniDumpWriteDump != nullptr) { - seprintf(filename, filename_last, "%scrash.dmp", _personal_dir); + seprintf(filename, filename_last, "%scrash.dmp", _personal_dir.c_str()); HANDLE file = CreateFile(OTTD2FS(filename), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, 0, 0); HANDLE proc = GetCurrentProcess(); DWORD procid = GetCurrentProcessId(); diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 468234391c..c4e400279a 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -451,7 +451,7 @@ char *getcwd(char *buf, size_t size) return buf; } -extern char *_config_file; +extern std::string _config_file; void DetermineBasePaths(const char *exe) { @@ -482,7 +482,7 @@ void DetermineBasePaths(const char *exe) _searchpaths[SP_SHARED_DIR] = nullptr; #endif - if (_config_file == nullptr) { + if (_config_file.empty()) { /* Get the path to working directory of OpenTTD. */ getcwd(tmp, lengthof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); @@ -490,7 +490,7 @@ void DetermineBasePaths(const char *exe) } else { /* Use the folder of the config file as working directory. */ TCHAR config_dir[MAX_PATH]; - _tcsncpy(path, convert_to_fs(_config_file, path, lengthof(path)), lengthof(path)); + _tcsncpy(path, convert_to_fs(_config_file.c_str(), path, lengthof(path)), lengthof(path)); if (!GetFullPathName(path, lengthof(config_dir), config_dir, nullptr)) { DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); _searchpaths[SP_WORKING_DIR] = nullptr; diff --git a/src/screenshot.cpp b/src/screenshot.cpp index b832e2224b..1274a4c50f 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -681,7 +681,7 @@ static const char *MakeScreenshotName(const char *default_fn, const char *ext, b size_t len = strlen(_screenshot_name); seprintf(&_screenshot_name[len], lastof(_screenshot_name), ".%s", ext); - const char *screenshot_dir = crashlog ? _personal_dir : FiosGetScreenshotDir(); + const char *screenshot_dir = crashlog ? _personal_dir.c_str() : FiosGetScreenshotDir(); for (uint serial = 1;; serial++) { if (seprintf(_full_screenshot_name, lastof(_full_screenshot_name), "%s%s", screenshot_dir, _screenshot_name) >= (int)lengthof(_full_screenshot_name)) { diff --git a/src/settings.cpp b/src/settings.cpp index 02cd520049..b5a07fbb25 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -80,7 +80,7 @@ ClientSettings _settings_client; GameSettings _settings_game; ///< Game settings of a running game or the scenario editor. GameSettings _settings_newgame; ///< Game settings for new games (updated from the intro screen). VehicleDefaultSettings _old_vds; ///< Used for loading default vehicles settings from old savegames -char *_config_file; ///< Configuration file of OpenTTD +std::string _config_file; ///< Configuration file of OpenTTD typedef std::list ErrorList; static ErrorList _settings_error_list; ///< Errors while loading minimal settings. diff --git a/src/window.cpp b/src/window.cpp index 6fd4d0d0b6..feabbfdd26 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -86,7 +86,7 @@ SpecialMouseMode _special_mouse_mode; ///< Mode of the mouse. static std::vector *_window_descs = nullptr; /** Config file to store WindowDesc */ -char *_windows_file; +std::string _windows_file; /** Window description constructor. */ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_width_trad, int16 def_height_trad, From 0c6e8a8123c9f74db757272f73adcbd8621e012d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:43 +0100 Subject: [PATCH 428/601] Codechange: Store file search paths as std::string. --- src/fileio.cpp | 93 ++++++++++++++++++++++---------------- src/fileio_func.h | 13 +----- src/fileio_type.h | 2 +- src/os/windows/win32.cpp | 31 +++++++------ src/string.cpp | 11 +++++ src/string_func.h | 1 + src/video/cocoa/cocoa_v.mm | 7 ++- 7 files changed, 89 insertions(+), 69 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 135a6bee21..aed0106fb1 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -25,6 +25,7 @@ #endif #include #include +#include #include #ifdef WITH_XDG_BASEDIR @@ -240,13 +241,29 @@ static const char * const _subdirs[] = { }; static_assert(lengthof(_subdirs) == NUM_SUBDIRS); -const char *_searchpaths[NUM_SEARCHPATHS]; +/** + * The search paths OpenTTD could search through. + * At least one of the slots has to be filled with a path. + * An empty string tells that there is no such path for the + * current operating system. + */ +std::array _searchpaths; TarList _tar_list[NUM_SUBDIRS]; TarFileList _tar_filelist[NUM_SUBDIRS]; typedef std::map TarLinkList; static TarLinkList _tar_linklist[NUM_SUBDIRS]; ///< List of directory links +/** + * Checks whether the given search path is a valid search path + * @param sp the search path to check + * @return true if the search path is valid + */ +bool IsValidSearchPath(Searchpath sp) +{ + return sp < _searchpaths.size() && !_searchpaths[sp].empty(); +} + /** * Check whether the given file exists * @param filename the file to try for existence. @@ -285,7 +302,7 @@ char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory su assert(subdir < NUM_SUBDIRS); assert(sp < NUM_SEARCHPATHS); - seprintf(buf, last, "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename); + seprintf(buf, last, "%s%s%s", _searchpaths[sp].c_str(), _subdirs[subdir], filename); return buf; } @@ -309,7 +326,7 @@ char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const ch /* Be, as opening files, aware that sometimes the filename * might be in uppercase when it is in lowercase on the * disk. Of course Windows doesn't care about casing. */ - if (strtolower(buf + strlen(_searchpaths[sp]) - 1) && FileExists(buf)) return buf; + if (strtolower(buf + _searchpaths[sp].size() - 1) && FileExists(buf)) return buf; #endif } @@ -321,7 +338,7 @@ char *FioAppendDirectory(char *buf, const char *last, Searchpath sp, Subdirector assert(subdir < NUM_SUBDIRS); assert(sp < NUM_SEARCHPATHS); - seprintf(buf, last, "%s%s", _searchpaths[sp], _subdirs[subdir]); + seprintf(buf, last, "%s%s", _searchpaths[sp].c_str(), _subdirs[subdir]); return buf; } @@ -352,22 +369,22 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, lengthof(Lmode)); #endif FILE *f = nullptr; - char buf[MAX_PATH]; + std::string buf; if (subdir == NO_DIRECTORY) { - strecpy(buf, filename, lastof(buf)); + buf = filename; } else { - seprintf(buf, lastof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename); + buf = _searchpaths[sp] + _subdirs[subdir] + filename; } #if defined(_WIN32) - if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf)) == INVALID_FILE_ATTRIBUTES) return nullptr; + if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf.c_str())) == INVALID_FILE_ATTRIBUTES) return nullptr; #endif - f = fopen(buf, mode); + f = fopen(buf.c_str(), mode); #if !defined(_WIN32) - if (f == nullptr && strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1))) { - f = fopen(buf, mode); + if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { + f = fopen(buf.c_str(), mode); } #endif if (f != nullptr && filesize != nullptr) { @@ -988,18 +1005,18 @@ static bool ChangeWorkingDirectoryToExecutable(const char *exe) bool DoScanWorkingDirectory() { /* No working directory, so nothing to do. */ - if (_searchpaths[SP_WORKING_DIR] == nullptr) return false; + if (_searchpaths[SP_WORKING_DIR].empty()) return false; /* Working directory is root, so do nothing. */ - if (strcmp(_searchpaths[SP_WORKING_DIR], PATHSEP) == 0) return false; + if (_searchpaths[SP_WORKING_DIR] == PATHSEP) return false; /* No personal/home directory, so the working directory won't be that. */ - if (_searchpaths[SP_PERSONAL_DIR] == nullptr) return true; + if (_searchpaths[SP_PERSONAL_DIR].empty()) return true; char tmp[MAX_PATH]; - seprintf(tmp, lastof(tmp), "%s%s", _searchpaths[SP_WORKING_DIR], PERSONAL_DIR); + seprintf(tmp, lastof(tmp), "%s%s", _searchpaths[SP_WORKING_DIR].c_str(), PERSONAL_DIR); AppendPathSeparator(tmp, lastof(tmp)); - return strcmp(tmp, _searchpaths[SP_PERSONAL_DIR]) != 0; + return _searchpaths[SP_PERSONAL_DIR] != tmp; } /** @@ -1016,10 +1033,10 @@ void DetermineBasePaths(const char *exe) free(xdg_data_home); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_PERSONAL_DIR_XDG] = stredup(tmp); + _searchpaths[SP_PERSONAL_DIR_XDG] = tmp; #endif #if defined(OS2) || !defined(WITH_PERSONAL_DIR) - _searchpaths[SP_PERSONAL_DIR] = nullptr; + _searchpaths[SP_PERSONAL_DIR].clear(); #else #ifdef __HAIKU__ BPath path; @@ -1046,19 +1063,19 @@ void DetermineBasePaths(const char *exe) seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", homedir, PERSONAL_DIR); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_PERSONAL_DIR] = stredup(tmp); + _searchpaths[SP_PERSONAL_DIR] = tmp; free(homedir); } else { - _searchpaths[SP_PERSONAL_DIR] = nullptr; + _searchpaths[SP_PERSONAL_DIR].clear(); } #endif #if defined(WITH_SHARED_DIR) seprintf(tmp, lastof(tmp), "%s", SHARED_DIR); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_SHARED_DIR] = stredup(tmp); + _searchpaths[SP_SHARED_DIR] = tmp; #else - _searchpaths[SP_SHARED_DIR] = nullptr; + _searchpaths[SP_SHARED_DIR].clear(); #endif char cwd[MAX_PATH]; @@ -1068,23 +1085,19 @@ void DetermineBasePaths(const char *exe) /* Get the path to working directory of OpenTTD. */ if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + _searchpaths[SP_WORKING_DIR] = tmp; _do_scan_working_directory = DoScanWorkingDirectory(); } else { /* Use the folder of the config file as working directory. */ - char *config_dir = stredup(_config_file.c_str()); - char *end = strrchr(config_dir, PATHSEPCHAR); - if (end == nullptr) { - free(config_dir); - + size_t end = _config_file.find_last_of(PATHSEPCHAR); + if (end == std::string::npos) { /* _config_file is not in a folder, so use current directory. */ if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + _searchpaths[SP_WORKING_DIR] = tmp; } else { - end[1] = '\0'; - _searchpaths[SP_WORKING_DIR] = config_dir; + _searchpaths[SP_WORKING_DIR] = _config_file.substr(0, end + 1); } } @@ -1092,9 +1105,9 @@ void DetermineBasePaths(const char *exe) if (ChangeWorkingDirectoryToExecutable(exe)) { if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_BINARY_DIR] = stredup(tmp); + _searchpaths[SP_BINARY_DIR] = tmp; } else { - _searchpaths[SP_BINARY_DIR] = nullptr; + _searchpaths[SP_BINARY_DIR].clear(); } if (cwd[0] != '\0') { @@ -1105,17 +1118,17 @@ void DetermineBasePaths(const char *exe) } #if !defined(GLOBAL_DATA_DIR) - _searchpaths[SP_INSTALLATION_DIR] = nullptr; + _searchpaths[SP_INSTALLATION_DIR].clear(); #else seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_INSTALLATION_DIR] = stredup(tmp); + _searchpaths[SP_INSTALLATION_DIR] = tmp; #endif #ifdef WITH_COCOA extern void cocoaSetApplicationBundleDir(); cocoaSetApplicationBundleDir(); #else - _searchpaths[SP_APPLICATION_BUNDLE_DIR] = nullptr; + _searchpaths[SP_APPLICATION_BUNDLE_DIR].clear(); #endif } #endif /* defined(_WIN32) */ @@ -1146,7 +1159,7 @@ void DeterminePaths(const char *exe) Searchpath sp; FOR_ALL_SEARCHPATHS(sp) { if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue; - DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]); + DEBUG(misc, 4, "%s added as search path", _searchpaths[sp].c_str()); } std::string config_dir; @@ -1215,13 +1228,13 @@ void DeterminePaths(const char *exe) } /* If we have network we make a directory for the autodownloading of content */ - _searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir.c_str(), "content_download" PATHSEP); - FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]); + _searchpaths[SP_AUTODOWNLOAD_DIR] = _personal_dir + "content_download" PATHSEP; + FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR].c_str()); /* Create the directory for each of the types of content */ const Subdirectory dirs[] = { SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR }; for (uint i = 0; i < lengthof(dirs); i++) { - char *tmp = str_fmt("%s%s", _searchpaths[SP_AUTODOWNLOAD_DIR], _subdirs[dirs[i]]); + char *tmp = str_fmt("%s%s", _searchpaths[SP_AUTODOWNLOAD_DIR].c_str(), _subdirs[dirs[i]]); FioCreateDirectory(tmp); free(tmp); } diff --git a/src/fileio_func.h b/src/fileio_func.h index b883a00e80..a4bdeb0076 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -26,23 +26,12 @@ void FioOpenFile(int slot, const char *filename, Subdirectory subdir); void FioReadBlock(void *ptr, size_t size); void FioSkipBytes(int n); -/** - * The search paths OpenTTD could search through. - * At least one of the slots has to be filled with a path. - * nullptr paths tell that there is no such path for the - * current operating system. - */ -extern const char *_searchpaths[NUM_SEARCHPATHS]; - /** * Checks whether the given search path is a valid search path * @param sp the search path to check * @return true if the search path is valid */ -static inline bool IsValidSearchPath(Searchpath sp) -{ - return sp < NUM_SEARCHPATHS && _searchpaths[sp] != nullptr; -} +bool IsValidSearchPath(Searchpath sp); /** Iterator for all the search paths */ #define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp)) diff --git a/src/fileio_type.h b/src/fileio_type.h index 15f886d050..62147f9e6e 100644 --- a/src/fileio_type.h +++ b/src/fileio_type.h @@ -128,7 +128,7 @@ enum Subdirectory { /** * Types of searchpaths OpenTTD might use */ -enum Searchpath { +enum Searchpath : unsigned { SP_FIRST_DIR, SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory #if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index c4e400279a..7553740e76 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -29,6 +29,7 @@ #include #include "../../language.h" #include "../../thread.h" +#include #include "../../safeguards.h" @@ -455,6 +456,8 @@ extern std::string _config_file; void DetermineBasePaths(const char *exe) { + extern std::array _searchpaths; + char tmp[MAX_PATH]; TCHAR path[MAX_PATH]; #ifdef WITH_PERSONAL_DIR @@ -463,9 +466,9 @@ void DetermineBasePaths(const char *exe) AppendPathSeparator(tmp, lastof(tmp)); strecat(tmp, PERSONAL_DIR, lastof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_PERSONAL_DIR] = stredup(tmp); + _searchpaths[SP_PERSONAL_DIR] = tmp; } else { - _searchpaths[SP_PERSONAL_DIR] = nullptr; + _searchpaths[SP_PERSONAL_DIR].clear(); } if (SUCCEEDED(OTTDSHGetFolderPath(nullptr, CSIDL_COMMON_DOCUMENTS, nullptr, SHGFP_TYPE_CURRENT, path))) { @@ -473,54 +476,54 @@ void DetermineBasePaths(const char *exe) AppendPathSeparator(tmp, lastof(tmp)); strecat(tmp, PERSONAL_DIR, lastof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_SHARED_DIR] = stredup(tmp); + _searchpaths[SP_SHARED_DIR] = tmp; } else { - _searchpaths[SP_SHARED_DIR] = nullptr; + _searchpaths[SP_SHARED_DIR].clear(); } #else - _searchpaths[SP_PERSONAL_DIR] = nullptr; - _searchpaths[SP_SHARED_DIR] = nullptr; + _searchpaths[SP_PERSONAL_DIR].clear(); + _searchpaths[SP_SHARED_DIR].clear(); #endif if (_config_file.empty()) { /* Get the path to working directory of OpenTTD. */ getcwd(tmp, lengthof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + _searchpaths[SP_WORKING_DIR] = tmp; } else { /* Use the folder of the config file as working directory. */ TCHAR config_dir[MAX_PATH]; _tcsncpy(path, convert_to_fs(_config_file.c_str(), path, lengthof(path)), lengthof(path)); if (!GetFullPathName(path, lengthof(config_dir), config_dir, nullptr)) { DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); - _searchpaths[SP_WORKING_DIR] = nullptr; + _searchpaths[SP_WORKING_DIR].clear(); } else { strecpy(tmp, convert_from_fs(config_dir, tmp, lengthof(tmp)), lastof(tmp)); char *s = strrchr(tmp, PATHSEPCHAR); *(s + 1) = '\0'; - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + _searchpaths[SP_WORKING_DIR] = tmp; } } if (!GetModuleFileName(nullptr, path, lengthof(path))) { DEBUG(misc, 0, "GetModuleFileName failed (%lu)\n", GetLastError()); - _searchpaths[SP_BINARY_DIR] = nullptr; + _searchpaths[SP_BINARY_DIR].clear(); } else { TCHAR exec_dir[MAX_PATH]; _tcsncpy(path, convert_to_fs(exe, path, lengthof(path)), lengthof(path)); if (!GetFullPathName(path, lengthof(exec_dir), exec_dir, nullptr)) { DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); - _searchpaths[SP_BINARY_DIR] = nullptr; + _searchpaths[SP_BINARY_DIR].clear(); } else { strecpy(tmp, convert_from_fs(exec_dir, tmp, lengthof(tmp)), lastof(tmp)); char *s = strrchr(tmp, PATHSEPCHAR); *(s + 1) = '\0'; - _searchpaths[SP_BINARY_DIR] = stredup(tmp); + _searchpaths[SP_BINARY_DIR] = tmp; } } - _searchpaths[SP_INSTALLATION_DIR] = nullptr; - _searchpaths[SP_APPLICATION_BUNDLE_DIR] = nullptr; + _searchpaths[SP_INSTALLATION_DIR].clear(); + _searchpaths[SP_APPLICATION_BUNDLE_DIR].clear(); } diff --git a/src/string.cpp b/src/string.cpp index d0de261e53..14bc926c1a 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -362,6 +362,17 @@ bool strtolower(char *str) return changed; } +bool strtolower(std::string &str, std::string::size_type offs) +{ + bool changed = false; + for (auto ch = str.begin() + offs; ch != str.end(); ++ch) { + auto new_ch = static_cast(tolower(static_cast(*ch))); + changed |= new_ch != *ch; + *ch = new_ch; + } + return changed; +} + /** * Only allow certain keys. You can define the filter to be used. This makes * sure no invalid keys can get into an editbox, like BELL. diff --git a/src/string_func.h b/src/string_func.h index 6c226c6104..13e14f2d39 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -46,6 +46,7 @@ void ValidateString(const char *str); void str_fix_scc_encoded(char *str, const char *last); void str_strip_colours(char *str); bool strtolower(char *str); +bool strtolower(std::string &str, std::string::size_type offs = 0); bool StrValid(const char *str, const char *last); diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 10f30027bc..f02599799c 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -34,6 +34,7 @@ #include "../../window_func.h" #include "../../window_gui.h" +#include #import /* for MAXPATHLEN */ /** @@ -545,13 +546,15 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel */ void cocoaSetApplicationBundleDir() { + extern std::array _searchpaths; + char tmp[MAXPATHLEN]; CFAutoRelease url(CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle())); if (CFURLGetFileSystemRepresentation(url.get(), true, (unsigned char*)tmp, MAXPATHLEN)) { AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_APPLICATION_BUNDLE_DIR] = stredup(tmp); + _searchpaths[SP_APPLICATION_BUNDLE_DIR] = tmp; } else { - _searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL; + _searchpaths[SP_APPLICATION_BUNDLE_DIR].clear(); } } From f3326d34e78bd28fba6d8cfd3bc455a506b429fe Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:44 +0100 Subject: [PATCH 429/601] Codechange: Use std::string in FIO search path handling. --- src/fileio.cpp | 138 ++++++++++++++------------------ src/fileio_func.h | 9 +-- src/fios.cpp | 109 +++++++++++-------------- src/fios_gui.cpp | 10 ++- src/music/midifile.cpp | 33 ++++---- src/network/network_content.cpp | 27 ++++--- src/os/windows/win32.cpp | 40 ++++----- src/script/script_instance.cpp | 11 ++- src/strings.cpp | 5 +- src/video/cocoa/cocoa_v.mm | 2 +- src/video/sdl2_v.cpp | 6 +- src/video/sdl_v.cpp | 6 +- 12 files changed, 180 insertions(+), 216 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index aed0106fb1..afdbdd256c 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -297,65 +297,52 @@ void FioFCloseFile(FILE *f) fclose(f); } -char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename) -{ - assert(subdir < NUM_SUBDIRS); - assert(sp < NUM_SEARCHPATHS); - - seprintf(buf, last, "%s%s%s", _searchpaths[sp].c_str(), _subdirs[subdir], filename); - return buf; -} - /** * Find a path to the filename in one of the search directories. - * @param[out] buf Destination buffer for the path. - * @param last End of the destination buffer. * @param subdir Subdirectory to try. * @param filename Filename to look for. - * @return \a buf containing the path if the path was found, else \c nullptr. + * @return String containing the path if the path was found, else an empty string. */ -char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename) +std::string FioFindFullPath(Subdirectory subdir, const char *filename) { Searchpath sp; assert(subdir < NUM_SUBDIRS); FOR_ALL_SEARCHPATHS(sp) { - FioGetFullPath(buf, last, sp, subdir, filename); - if (FileExists(buf)) return buf; + std::string buf = FioGetDirectory(sp, subdir); + buf += filename; + if (FileExists(buf.c_str())) return buf; #if !defined(_WIN32) /* Be, as opening files, aware that sometimes the filename * might be in uppercase when it is in lowercase on the * disk. Of course Windows doesn't care about casing. */ - if (strtolower(buf + _searchpaths[sp].size() - 1) && FileExists(buf)) return buf; + if (strtolower(buf, _searchpaths[sp].size() - 1) && FileExists(buf.c_str())) return buf; #endif } - return nullptr; + return {}; } -char *FioAppendDirectory(char *buf, const char *last, Searchpath sp, Subdirectory subdir) +std::string FioGetDirectory(Searchpath sp, Subdirectory subdir) { assert(subdir < NUM_SUBDIRS); assert(sp < NUM_SEARCHPATHS); - seprintf(buf, last, "%s%s", _searchpaths[sp].c_str(), _subdirs[subdir]); - return buf; + return _searchpaths[sp] + _subdirs[subdir]; } -char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir) +std::string FioFindDirectory(Subdirectory subdir) { Searchpath sp; /* Find and return the first valid directory */ FOR_ALL_SEARCHPATHS(sp) { - char *ret = FioAppendDirectory(buf, last, sp, subdir); - if (FileExists(buf)) return ret; + std::string ret = FioGetDirectory(sp, subdir); + if (FileExists(ret.c_str())) return ret; } /* Could not find the directory, fall back to a base path */ - strecpy(buf, _personal_dir.c_str(), last); - - return buf; + return _personal_dir; } static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) @@ -545,21 +532,13 @@ void FioCreateDirectory(const char *name) * Appends, if necessary, the path separator character to the end of the string. * It does not add the path separator to zero-sized strings. * @param buf string to append the separator to - * @param last the last element of \a buf. * @return true iff the operation succeeded */ -bool AppendPathSeparator(char *buf, const char *last) +void AppendPathSeparator(std::string &buf) { - size_t s = strlen(buf); + if (buf.empty()) return; - /* Length of string + path separator + '\0' */ - if (s != 0 && buf[s - 1] != PATHSEPCHAR) { - if (&buf[s] >= last) return false; - - seprintf(buf + s, last, "%c", PATHSEPCHAR); - } - - return true; + if (buf.back() != PATHSEPCHAR) buf.push_back(PATHSEPCHAR); } static void TarAddLink(const std::string &srcParam, const std::string &destParam, Subdirectory subdir) @@ -1013,9 +992,9 @@ bool DoScanWorkingDirectory() /* No personal/home directory, so the working directory won't be that. */ if (_searchpaths[SP_PERSONAL_DIR].empty()) return true; - char tmp[MAX_PATH]; - seprintf(tmp, lastof(tmp), "%s%s", _searchpaths[SP_WORKING_DIR].c_str(), PERSONAL_DIR); - AppendPathSeparator(tmp, lastof(tmp)); + std::string tmp = _searchpaths[SP_WORKING_DIR] + PERSONAL_DIR; + AppendPathSeparator(tmp); + return _searchpaths[SP_PERSONAL_DIR] != tmp; } @@ -1025,14 +1004,15 @@ bool DoScanWorkingDirectory() */ void DetermineBasePaths(const char *exe) { - char tmp[MAX_PATH]; + std::string tmp; #if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) const char *xdg_data_home = xdgDataHome(nullptr); - seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", xdg_data_home, - PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR); + tmp = xdg_data_home; + tmp += PATHSEP; + tmp += PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR; free(xdg_data_home); - AppendPathSeparator(tmp, lastof(tmp)); + AppendPathSeparator(tmp); _searchpaths[SP_PERSONAL_DIR_XDG] = tmp; #endif #if defined(OS2) || !defined(WITH_PERSONAL_DIR) @@ -1060,8 +1040,10 @@ void DetermineBasePaths(const char *exe) if (homedir != nullptr) { ValidateString(homedir); - seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", homedir, PERSONAL_DIR); - AppendPathSeparator(tmp, lastof(tmp)); + tmp = homedir; + tmp += PATHSEP; + tmp += PERSONAL_DIR; + AppendPathSeparator(tmp); _searchpaths[SP_PERSONAL_DIR] = tmp; free(homedir); @@ -1071,8 +1053,8 @@ void DetermineBasePaths(const char *exe) #endif #if defined(WITH_SHARED_DIR) - seprintf(tmp, lastof(tmp), "%s", SHARED_DIR); - AppendPathSeparator(tmp, lastof(tmp)); + tmp = SHARED_DIR; + AppendPathSeparator(tmp); _searchpaths[SP_SHARED_DIR] = tmp; #else _searchpaths[SP_SHARED_DIR].clear(); @@ -1083,8 +1065,8 @@ void DetermineBasePaths(const char *exe) if (_config_file.empty()) { /* Get the path to working directory of OpenTTD. */ - if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; - AppendPathSeparator(tmp, lastof(tmp)); + tmp = cwd; + AppendPathSeparator(tmp); _searchpaths[SP_WORKING_DIR] = tmp; _do_scan_working_directory = DoScanWorkingDirectory(); @@ -1093,8 +1075,8 @@ void DetermineBasePaths(const char *exe) size_t end = _config_file.find_last_of(PATHSEPCHAR); if (end == std::string::npos) { /* _config_file is not in a folder, so use current directory. */ - if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; - AppendPathSeparator(tmp, lastof(tmp)); + tmp = cwd; + AppendPathSeparator(tmp); _searchpaths[SP_WORKING_DIR] = tmp; } else { _searchpaths[SP_WORKING_DIR] = _config_file.substr(0, end + 1); @@ -1103,8 +1085,13 @@ void DetermineBasePaths(const char *exe) /* Change the working directory to that one of the executable */ if (ChangeWorkingDirectoryToExecutable(exe)) { - if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; - AppendPathSeparator(tmp, lastof(tmp)); + char buf[MAX_PATH]; + if (getcwd(buf, lengthof(buf)) == nullptr) { + tmp.clear(); + } else { + tmp = buf; + } + AppendPathSeparator(tmp); _searchpaths[SP_BINARY_DIR] = tmp; } else { _searchpaths[SP_BINARY_DIR].clear(); @@ -1120,8 +1107,8 @@ void DetermineBasePaths(const char *exe) #if !defined(GLOBAL_DATA_DIR) _searchpaths[SP_INSTALLATION_DIR].clear(); #else - seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR); - AppendPathSeparator(tmp, lastof(tmp)); + tmp = GLOBAL_DATA_DIR; + AppendPathSeparator(tmp); _searchpaths[SP_INSTALLATION_DIR] = tmp; #endif #ifdef WITH_COCOA @@ -1146,14 +1133,13 @@ void DeterminePaths(const char *exe) DetermineBasePaths(exe); #if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) - char config_home[MAX_PATH]; - const char *xdg_config_home = xdgConfigHome(nullptr); - seprintf(config_home, lastof(config_home), "%s" PATHSEP "%s", xdg_config_home, - PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR); + std::string config_home(xdg_config_home); + config_home += PATHSEP; + config_home += PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR; free(xdg_config_home); - AppendPathSeparator(config_home, lastof(config_home)); + AppendPathSeparator(config_home); #endif Searchpath sp; @@ -1166,10 +1152,10 @@ void DeterminePaths(const char *exe) if (!_config_file.empty()) { config_dir = _searchpaths[SP_WORKING_DIR]; } else { - char personal_dir[MAX_PATH]; - if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) { - char *end = strrchr(personal_dir, PATHSEPCHAR); - if (end != nullptr) end[1] = '\0'; + std::string personal_dir = FioFindFullPath(BASE_DIR, "openttd.cfg"); + if (!personal_dir.empty()) { + auto end = personal_dir.find_last_of(PATHSEPCHAR); + if (end != std::string::npos) personal_dir.erase(end + 1); config_dir = personal_dir; } else { #if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) @@ -1330,21 +1316,21 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s while ((dirent = readdir(dir)) != nullptr) { const char *d_name = FS2OTTD(dirent->d_name); - char filename[MAX_PATH]; if (!FiosIsValidFile(path, dirent, &sb)) continue; - seprintf(filename, lastof(filename), "%s%s", path, d_name); + std::string filename(path); + filename += d_name; if (S_ISDIR(sb.st_mode)) { /* Directory */ if (!recursive) continue; if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue; - if (!AppendPathSeparator(filename, lastof(filename))) continue; - num += ScanPath(fs, extension, filename, basepath_length, recursive); + AppendPathSeparator(filename); + num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive); } else if (S_ISREG(sb.st_mode)) { /* File */ - if (MatchesExtension(extension, filename) && fs->AddFile(filename, basepath_length, nullptr)) num++; + if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename.c_str(), basepath_length, nullptr)) num++; } } @@ -1383,7 +1369,6 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r this->subdir = sd; Searchpath sp; - char path[MAX_PATH]; TarFileList::iterator tar; uint num = 0; @@ -1391,8 +1376,8 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r /* Don't search in the working directory */ if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue; - FioAppendDirectory(path, lastof(path), sp, sd); - num += ScanPath(this, extension, path, strlen(path), recursive); + std::string path = FioGetDirectory(sp, sd); + num += ScanPath(this, extension, path.c_str(), path.size(), recursive); } if (tars && sd != NO_DIRECTORY) { @@ -1425,8 +1410,7 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r */ uint FileScanner::Scan(const char *extension, const char *directory, bool recursive) { - char path[MAX_PATH]; - strecpy(path, directory, lastof(path)); - if (!AppendPathSeparator(path, lastof(path))) return 0; - return ScanPath(this, extension, path, strlen(path), recursive); + std::string path(directory); + AppendPathSeparator(path); + return ScanPath(this, extension, path.c_str(), path.size(), recursive); } diff --git a/src/fileio_func.h b/src/fileio_func.h index a4bdeb0076..83e90be176 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -39,16 +39,15 @@ bool IsValidSearchPath(Searchpath sp); void FioFCloseFile(FILE *f); FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); bool FioCheckFileExists(const char *filename, Subdirectory subdir); -char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename); -char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename); -char *FioAppendDirectory(char *buf, const char *last, Searchpath sp, Subdirectory subdir); -char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir); +std::string FioFindFullPath(Subdirectory subdir, const char *filename); +std::string FioGetDirectory(Searchpath sp, Subdirectory subdir); +std::string FioFindDirectory(Subdirectory subdir); void FioCreateDirectory(const char *name); const char *FiosGetScreenshotDir(); void SanitizeFilename(char *filename); -bool AppendPathSeparator(char *buf, const char *last); +void AppendPathSeparator(std::string &buf); void DeterminePaths(const char *exe); void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); bool FileExists(const char *filename); diff --git a/src/fios.cpp b/src/fios.cpp index 61f08d93a9..4e2378a34b 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -19,6 +19,8 @@ #include "string_func.h" #include "tar_type.h" #include +#include +#include #ifndef _WIN32 # include @@ -29,8 +31,7 @@ #include "safeguards.h" /* Variables to display file lists */ -static char *_fios_path; -static const char *_fios_path_last; +static std::string *_fios_path = nullptr; SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; /* OS-specific functions are taken from their respective files (win32/unix/os2 .c) */ @@ -138,7 +139,7 @@ const FiosItem *FileList::FindItem(const char *file) */ StringID FiosGetDescText(const char **path, uint64 *total_free) { - *path = _fios_path; + *path = _fios_path->c_str(); return FiosGetDiskFreeSpace(*path, total_free) ? STR_SAVELOAD_BYTES_FREE : STR_ERROR_UNABLE_TO_READ_DRIVE; } @@ -152,7 +153,8 @@ const char *FiosBrowseTo(const FiosItem *item) switch (item->type) { case FIOS_TYPE_DRIVE: #if defined(_WIN32) || defined(__OS2__) - seprintf(_fios_path, _fios_path_last, "%c:" PATHSEP, item->title[0]); + assert(_fios_path != nullptr); + *_fios_path = std::string{ item->title[0] } + ":" PATHSEP; #endif break; @@ -160,25 +162,28 @@ const char *FiosBrowseTo(const FiosItem *item) break; case FIOS_TYPE_PARENT: { - /* Check for possible nullptr ptr */ - char *s = strrchr(_fios_path, PATHSEPCHAR); - if (s != nullptr && s != _fios_path) { - s[0] = '\0'; // Remove last path separator character, so we can go up one level. + assert(_fios_path != nullptr); + auto s = _fios_path->find_last_of(PATHSEPCHAR); + if (s != std::string::npos && s != 0) { + _fios_path->erase(s); // Remove last path separator character, so we can go up one level. } - s = strrchr(_fios_path, PATHSEPCHAR); - if (s != nullptr) { - s[1] = '\0'; // go up a directory + + s = _fios_path->find_last_of(PATHSEPCHAR); + if (s != std::string::npos) { + _fios_path->erase(s + 1); // go up a directory } break; } case FIOS_TYPE_DIR: - strecat(_fios_path, item->name, _fios_path_last); - strecat(_fios_path, PATHSEP, _fios_path_last); + assert(_fios_path != nullptr); + *_fios_path += item->name; + *_fios_path += PATHSEP; break; case FIOS_TYPE_DIRECT: - seprintf(_fios_path, _fios_path_last, "%s", item->name); + assert(_fios_path != nullptr); + *_fios_path = item->name; break; case FIOS_TYPE_FILE: @@ -227,7 +232,7 @@ void FiosMakeSavegameName(char *buf, const char *name, const char *last) { const char *extension = (_game_mode == GM_EDITOR) ? ".scn" : ".sav"; - FiosMakeFilename(buf, _fios_path, name, extension, last); + FiosMakeFilename(buf, _fios_path->c_str(), name, extension, last); } /** @@ -242,7 +247,7 @@ void FiosMakeHeightmapName(char *buf, const char *name, const char *last) ext[0] = '.'; strecpy(ext + 1, GetCurrentScreenshotExtension(), lastof(ext)); - FiosMakeFilename(buf, _fios_path, name, ext, last); + FiosMakeFilename(buf, _fios_path->c_str(), name, ext, last); } /** @@ -365,8 +370,10 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c file_list.Clear(); + assert(_fios_path != nullptr); + /* A parent directory link exists if we are not in the root directory */ - if (!FiosIsRoot(_fios_path)) { + if (!FiosIsRoot(_fios_path->c_str())) { fios = file_list.Append(); fios->type = FIOS_TYPE_PARENT; fios->mtime = 0; @@ -375,12 +382,12 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c } /* Show subdirectories */ - if ((dir = ttd_opendir(_fios_path)) != nullptr) { + if ((dir = ttd_opendir(_fios_path->c_str())) != nullptr) { while ((dirent = readdir(dir)) != nullptr) { strecpy(d_name, FS2OTTD(dirent->d_name), lastof(d_name)); /* found file must be directory, but not '.' or '..' */ - if (FiosIsValidFile(_fios_path, dirent, &sb) && S_ISDIR(sb.st_mode) && + if (FiosIsValidFile(_fios_path->c_str(), dirent, &sb) && S_ISDIR(sb.st_mode) && (!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) && strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) { fios = file_list.Append(); @@ -408,7 +415,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c /* Show files */ FiosFileScanner scanner(fop, callback_proc, file_list); if (subdir == NO_DIRECTORY) { - scanner.Scan(nullptr, _fios_path, false); + scanner.Scan(nullptr, _fios_path->c_str(), false); } else { scanner.Scan(nullptr, subdir, true, true); } @@ -491,17 +498,11 @@ FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, co */ void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list) { - static char *fios_save_path = nullptr; - static char *fios_save_path_last = nullptr; + static std::optional fios_save_path; - if (fios_save_path == nullptr) { - fios_save_path = MallocT(MAX_PATH); - fios_save_path_last = fios_save_path + MAX_PATH - 1; - FioGetDirectory(fios_save_path, fios_save_path_last, SAVE_DIR); - } + if (!fios_save_path) fios_save_path = FioFindDirectory(SAVE_DIR); - _fios_path = fios_save_path; - _fios_path_last = fios_save_path_last; + _fios_path = &(*fios_save_path); FiosGetFileList(fop, &FiosGetSavegameListCallback, NO_DIRECTORY, file_list); } @@ -546,23 +547,15 @@ static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const char *f */ void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list) { - static char *fios_scn_path = nullptr; - static char *fios_scn_path_last = nullptr; + static std::optional fios_scn_path; /* Copy the default path on first run or on 'New Game' */ - if (fios_scn_path == nullptr) { - fios_scn_path = MallocT(MAX_PATH); - fios_scn_path_last = fios_scn_path + MAX_PATH - 1; - FioGetDirectory(fios_scn_path, fios_scn_path_last, SCENARIO_DIR); - } + if (!fios_scn_path) fios_scn_path = FioFindDirectory(SCENARIO_DIR); - _fios_path = fios_scn_path; - _fios_path_last = fios_scn_path_last; + _fios_path = &(*fios_scn_path); - char base_path[MAX_PATH]; - FioGetDirectory(base_path, lastof(base_path), SCENARIO_DIR); - - Subdirectory subdir = (fop == SLO_LOAD && strcmp(base_path, _fios_path) == 0) ? SCENARIO_DIR : NO_DIRECTORY; + std::string base_path = FioFindDirectory(SCENARIO_DIR); + Subdirectory subdir = (fop == SLO_LOAD && base_path == *_fios_path) ? SCENARIO_DIR : NO_DIRECTORY; FiosGetFileList(fop, &FiosGetScenarioListCallback, subdir, file_list); } @@ -593,10 +586,9 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char * bool match = false; Searchpath sp; FOR_ALL_SEARCHPATHS(sp) { - char buf[MAX_PATH]; - FioAppendDirectory(buf, lastof(buf), sp, HEIGHTMAP_DIR); + std::string buf = FioGetDirectory(sp, HEIGHTMAP_DIR); - if (strncmp(buf, it->second.tar_filename, strlen(buf)) == 0) { + if (buf.compare(0, buf.size(), it->second.tar_filename, 0, buf.size()) == 0) { match = true; break; } @@ -617,22 +609,14 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char * */ void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list) { - static char *fios_hmap_path = nullptr; - static char *fios_hmap_path_last = nullptr; + static std::optional fios_hmap_path; - if (fios_hmap_path == nullptr) { - fios_hmap_path = MallocT(MAX_PATH); - fios_hmap_path_last = fios_hmap_path + MAX_PATH - 1; - FioGetDirectory(fios_hmap_path, fios_hmap_path_last, HEIGHTMAP_DIR); - } + if (!fios_hmap_path) fios_hmap_path = FioFindDirectory(HEIGHTMAP_DIR); - _fios_path = fios_hmap_path; - _fios_path_last = fios_hmap_path_last; + _fios_path = &(*fios_hmap_path); - char base_path[MAX_PATH]; - FioGetDirectory(base_path, lastof(base_path), HEIGHTMAP_DIR); - - Subdirectory subdir = strcmp(base_path, _fios_path) == 0 ? HEIGHTMAP_DIR : NO_DIRECTORY; + std::string base_path = FioFindDirectory(HEIGHTMAP_DIR); + Subdirectory subdir = base_path == *_fios_path ? HEIGHTMAP_DIR : NO_DIRECTORY; FiosGetFileList(fop, &FiosGetHeightmapListCallback, subdir, file_list); } @@ -642,14 +626,11 @@ void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list) */ const char *FiosGetScreenshotDir() { - static char *fios_screenshot_path = nullptr; + static std::optional fios_screenshot_path; - if (fios_screenshot_path == nullptr) { - fios_screenshot_path = MallocT(MAX_PATH); - FioGetDirectory(fios_screenshot_path, fios_screenshot_path + MAX_PATH - 1, SCREENSHOT_DIR); - } + if (!fios_screenshot_path) fios_screenshot_path = FioFindDirectory(SCREENSHOT_DIR); - return fios_screenshot_path; + return fios_screenshot_path->c_str(); } /** Basic data to distinguish a scenario. Used in the server list window */ diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 059bbf0ce9..53bb606f37 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -368,22 +368,24 @@ public: /* Select the initial directory. */ o_dir.type = FIOS_TYPE_DIRECT; + std::string dir; switch (this->abstract_filetype) { case FT_SAVEGAME: - FioGetDirectory(o_dir.name, lastof(o_dir.name), SAVE_DIR); + dir = FioFindDirectory(SAVE_DIR); break; case FT_SCENARIO: - FioGetDirectory(o_dir.name, lastof(o_dir.name), SCENARIO_DIR); + dir = FioFindDirectory(SCENARIO_DIR); break; case FT_HEIGHTMAP: - FioGetDirectory(o_dir.name, lastof(o_dir.name), HEIGHTMAP_DIR); + dir = FioFindDirectory(HEIGHTMAP_DIR); break; default: - strecpy(o_dir.name, _personal_dir.c_str(), lastof(o_dir.name)); + dir = _personal_dir; } + strecpy(o_dir.name, dir.c_str(), lastof(o_dir.name)); switch (this->fop) { case SLO_SAVE: diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 67cc7b192c..b15a27911c 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -1048,14 +1048,12 @@ bool MidiFile::WriteSMF(const char *filename) std::string MidiFile::GetSMFFile(const MusicSongInfo &song) { if (song.filetype == MTT_STANDARDMIDI) { - char filename[MAX_PATH]; - if (FioFindFullPath(filename, lastof(filename), Subdirectory::BASESET_DIR, song.filename)) { - return std::string(filename); - } else if (FioFindFullPath(filename, lastof(filename), Subdirectory::OLD_GM_DIR, song.filename)) { - return std::string(filename); - } else { - return std::string(); - } + std::string filename = FioFindFullPath(Subdirectory::BASESET_DIR, song.filename); + if (!filename.empty()) return filename; + filename = FioFindFullPath(Subdirectory::OLD_GM_DIR, song.filename); + if (!filename.empty()) return filename; + + return std::string(); } if (song.filetype != MTT_MPSMIDI) return std::string(); @@ -1077,17 +1075,16 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) *wp++ = '\0'; } - char tempdirname[MAX_PATH]; - FioGetFullPath(tempdirname, lastof(tempdirname), Searchpath::SP_AUTODOWNLOAD_DIR, Subdirectory::BASESET_DIR, basename); - if (!AppendPathSeparator(tempdirname, lastof(tempdirname))) return std::string(); - FioCreateDirectory(tempdirname); + std::string tempdirname = FioGetDirectory(Searchpath::SP_AUTODOWNLOAD_DIR, Subdirectory::BASESET_DIR); + tempdirname += basename; + AppendPathSeparator(tempdirname); + FioCreateDirectory(tempdirname.c_str()); - char output_filename[MAX_PATH]; - seprintf(output_filename, lastof(output_filename), "%s%d.mid", tempdirname, song.cat_index); + std::string output_filename = tempdirname + std::to_string(song.cat_index) + ".mid"; - if (FileExists(output_filename)) { + if (FileExists(output_filename.c_str())) { /* If the file already exists, assume it's the correct decoded data */ - return std::string(output_filename); + return output_filename; } byte *data; @@ -1102,8 +1099,8 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) } free(data); - if (midifile.WriteSMF(output_filename)) { - return std::string(output_filename); + if (midifile.WriteSMF(output_filename.c_str())) { + return output_filename; } else { return std::string(); } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index c4d26355c0..dc14a59fcb 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -385,14 +385,14 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const Co * @return a statically allocated buffer with the filename or * nullptr when no filename could be made. */ -static char *GetFullFilename(const ContentInfo *ci, bool compressed) +static std::string GetFullFilename(const ContentInfo *ci, bool compressed) { Subdirectory dir = GetContentInfoSubDir(ci->type); - if (dir == NO_DIRECTORY) return nullptr; + if (dir == NO_DIRECTORY) return {}; - static char buf[MAX_PATH]; - FioGetFullPath(buf, lastof(buf), SP_AUTODOWNLOAD_DIR, dir, ci->filename); - strecat(buf, compressed ? ".tar.gz" : ".tar", lastof(buf)); + std::string buf = FioGetDirectory(SP_AUTODOWNLOAD_DIR, dir); + buf += ci->filename; + buf += compressed ? ".tar.gz" : ".tar"; return buf; } @@ -408,13 +408,13 @@ static bool GunzipFile(const ContentInfo *ci) bool ret = true; /* Need to open the file with fopen() to support non-ASCII on Windows. */ - FILE *ftmp = fopen(GetFullFilename(ci, true), "rb"); + FILE *ftmp = fopen(GetFullFilename(ci, true).c_str(), "rb"); if (ftmp == nullptr) return false; /* Duplicate the handle, and close the FILE*, to avoid double-closing the handle later. */ gzFile fin = gzdopen(dup(fileno(ftmp)), "rb"); fclose(ftmp); - FILE *fout = fopen(GetFullFilename(ci, false), "wb"); + FILE *fout = fopen(GetFullFilename(ci, false).c_str(), "wb"); if (fin == nullptr || fout == nullptr) { ret = false; @@ -509,8 +509,8 @@ bool ClientNetworkContentSocketHandler::BeforeDownload() if (this->curInfo->filesize != 0) { /* The filesize is > 0, so we are going to download it */ - const char *filename = GetFullFilename(this->curInfo, true); - if (filename == nullptr || (this->curFile = fopen(filename, "wb")) == nullptr) { + std::string filename = GetFullFilename(this->curInfo, true); + if (filename.empty() || (this->curFile = fopen(filename.c_str(), "wb")) == nullptr) { /* Unless that fails of course... */ DeleteWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD); ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); @@ -532,18 +532,19 @@ void ClientNetworkContentSocketHandler::AfterDownload() this->curFile = nullptr; if (GunzipFile(this->curInfo)) { - unlink(GetFullFilename(this->curInfo, true)); + unlink(GetFullFilename(this->curInfo, true).c_str()); Subdirectory sd = GetContentInfoSubDir(this->curInfo->type); if (sd == NO_DIRECTORY) NOT_REACHED(); TarScanner ts; - ts.AddFile(sd, GetFullFilename(this->curInfo, false)); + std::string fname = GetFullFilename(this->curInfo, false); + ts.AddFile(sd, fname.c_str()); if (this->curInfo->type == CONTENT_TYPE_BASE_MUSIC) { /* Music can't be in a tar. So extract the tar! */ - ExtractTar(GetFullFilename(this->curInfo, false), BASESET_DIR); - unlink(GetFullFilename(this->curInfo, false)); + ExtractTar(fname.c_str(), BASESET_DIR); + unlink(fname.c_str()); } #ifdef __EMSCRIPTEN__ diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 7553740e76..bbb7e359a9 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -458,24 +458,23 @@ void DetermineBasePaths(const char *exe) { extern std::array _searchpaths; - char tmp[MAX_PATH]; TCHAR path[MAX_PATH]; #ifdef WITH_PERSONAL_DIR if (SUCCEEDED(OTTDSHGetFolderPath(nullptr, CSIDL_PERSONAL, nullptr, SHGFP_TYPE_CURRENT, path))) { - strecpy(tmp, FS2OTTD(path), lastof(tmp)); - AppendPathSeparator(tmp, lastof(tmp)); - strecat(tmp, PERSONAL_DIR, lastof(tmp)); - AppendPathSeparator(tmp, lastof(tmp)); + std::string tmp(FS2OTTD(path)); + AppendPathSeparator(tmp); + tmp += PERSONAL_DIR; + AppendPathSeparator(tmp); _searchpaths[SP_PERSONAL_DIR] = tmp; } else { _searchpaths[SP_PERSONAL_DIR].clear(); } if (SUCCEEDED(OTTDSHGetFolderPath(nullptr, CSIDL_COMMON_DOCUMENTS, nullptr, SHGFP_TYPE_CURRENT, path))) { - strecpy(tmp, FS2OTTD(path), lastof(tmp)); - AppendPathSeparator(tmp, lastof(tmp)); - strecat(tmp, PERSONAL_DIR, lastof(tmp)); - AppendPathSeparator(tmp, lastof(tmp)); + std::string tmp(FS2OTTD(path)); + AppendPathSeparator(tmp); + tmp += PERSONAL_DIR; + AppendPathSeparator(tmp); _searchpaths[SP_SHARED_DIR] = tmp; } else { _searchpaths[SP_SHARED_DIR].clear(); @@ -486,10 +485,11 @@ void DetermineBasePaths(const char *exe) #endif if (_config_file.empty()) { - /* Get the path to working directory of OpenTTD. */ - getcwd(tmp, lengthof(tmp)); - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = tmp; + char cwd[MAX_PATH]; + getcwd(cwd, lengthof(cwd)); + std::string cwd_s(cwd); + AppendPathSeparator(cwd_s); + _searchpaths[SP_WORKING_DIR] = cwd_s; } else { /* Use the folder of the config file as working directory. */ TCHAR config_dir[MAX_PATH]; @@ -498,9 +498,10 @@ void DetermineBasePaths(const char *exe) DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); _searchpaths[SP_WORKING_DIR].clear(); } else { - strecpy(tmp, convert_from_fs(config_dir, tmp, lengthof(tmp)), lastof(tmp)); - char *s = strrchr(tmp, PATHSEPCHAR); - *(s + 1) = '\0'; + std::string tmp(FS2OTTD(config_dir)); + auto pos = tmp.find_last_of(PATHSEPCHAR); + if (pos != std::string::npos) tmp.erase(pos + 1); + _searchpaths[SP_WORKING_DIR] = tmp; } } @@ -515,9 +516,10 @@ void DetermineBasePaths(const char *exe) DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); _searchpaths[SP_BINARY_DIR].clear(); } else { - strecpy(tmp, convert_from_fs(exec_dir, tmp, lengthof(tmp)), lastof(tmp)); - char *s = strrchr(tmp, PATHSEPCHAR); - *(s + 1) = '\0'; + std::string tmp(FS2OTTD(exec_dir)); + auto pos = tmp.find_last_of(PATHSEPCHAR); + if (pos != std::string::npos) tmp.erase(pos + 1); + _searchpaths[SP_BINARY_DIR] = tmp; } } diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 81283cb772..836bb82468 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -116,17 +116,16 @@ bool ScriptInstance::LoadCompatibilityScripts(const char *api_version, Subdirect { char script_name[32]; seprintf(script_name, lastof(script_name), "compat_%s.nut", api_version); - char buf[MAX_PATH]; Searchpath sp; FOR_ALL_SEARCHPATHS(sp) { - FioAppendDirectory(buf, lastof(buf), sp, dir); - strecat(buf, script_name, lastof(buf)); - if (!FileExists(buf)) continue; + std::string buf = FioGetDirectory(sp, dir); + buf += script_name; + if (!FileExists(buf.c_str())) continue; - if (this->engine->LoadScript(buf)) return true; + if (this->engine->LoadScript(buf.c_str())) return true; ScriptLog::Error("Failed to load API compatibility script"); - DEBUG(script, 0, "Error compiling / running API compatibility script: %s", buf); + DEBUG(script, 0, "Error compiling / running API compatibility script: %s", buf.c_str()); return false; } diff --git a/src/strings.cpp b/src/strings.cpp index ae0ab2c906..9f61ea5fd1 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1959,9 +1959,8 @@ void InitializeLanguagePacks() Searchpath sp; FOR_ALL_SEARCHPATHS(sp) { - char path[MAX_PATH]; - FioAppendDirectory(path, lastof(path), sp, LANG_DIR); - GetLanguageList(path); + std::string path = FioGetDirectory(sp, LANG_DIR); + GetLanguageList(path.c_str()); } if (_languages.size() == 0) usererror("No available language packs (invalid versions?)"); diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index f02599799c..e4a0a0c6f6 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -551,8 +551,8 @@ void cocoaSetApplicationBundleDir() char tmp[MAXPATHLEN]; CFAutoRelease url(CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle())); if (CFURLGetFileSystemRepresentation(url.get(), true, (unsigned char*)tmp, MAXPATHLEN)) { - AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_APPLICATION_BUNDLE_DIR] = tmp; + AppendPathSeparator(_searchpaths[SP_APPLICATION_BUNDLE_DIR]); } else { _searchpaths[SP_APPLICATION_BUNDLE_DIR].clear(); } diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 852f7298d9..ea2a88bb92 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -285,10 +285,10 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h, bool resize) return false; } - char icon_path[MAX_PATH]; - if (FioFindFullPath(icon_path, lastof(icon_path), BASESET_DIR, "openttd.32.bmp") != nullptr) { + std::string icon_path = FioFindFullPath(BASESET_DIR, "openttd.32.bmp"); + if (!icon_path.empty()) { /* Give the application an icon */ - SDL_Surface *icon = SDL_LoadBMP(icon_path); + SDL_Surface *icon = SDL_LoadBMP(icon_path.c_str()); if (icon != nullptr) { /* Get the colourkey, which will be magenta */ uint32 rgbmap = SDL_MapRGB(icon->format, 255, 0, 255); diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 98777a87d5..4f5167335a 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -266,10 +266,10 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) if (bpp == 0) usererror("Can't use a blitter that blits 0 bpp for normal visuals"); - char icon_path[MAX_PATH]; - if (FioFindFullPath(icon_path, lastof(icon_path), BASESET_DIR, "openttd.32.bmp") != nullptr) { + std::string icon_path = FioFindFullPath(BASESET_DIR, "openttd.32.bmp"); + if (!icon_path.empty()) { /* Give the application an icon */ - icon = SDL_LoadBMP(icon_path); + icon = SDL_LoadBMP(icon_path.c_str()); if (icon != nullptr) { /* Get the colourkey, which will be magenta */ uint32 rgbmap = SDL_MapRGB(icon->format, 255, 0, 255); From 65f65ad2ad8f029b99ef60e931b6d86952777610 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:45 +0100 Subject: [PATCH 430/601] Codechange: Convert some more FIO functions to take std::string. --- src/fileio.cpp | 44 ++++++++++++++++------------------ src/fileio_func.h | 6 ++--- src/fios.cpp | 37 +++++++++++++--------------- src/fios.h | 4 ++-- src/fios_gui.cpp | 4 ++-- src/genworld_gui.cpp | 2 +- src/landscape.cpp | 2 +- src/music/midifile.cpp | 4 ++-- src/network/network_client.cpp | 4 ++-- src/openttd.cpp | 14 +++++------ src/saveload/saveload.cpp | 2 +- src/saveload/saveload.h | 3 ++- src/script/script_instance.cpp | 2 +- src/video/dedicated_v.cpp | 2 +- 14 files changed, 62 insertions(+), 68 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index afdbdd256c..09e884e4fa 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -270,9 +270,9 @@ bool IsValidSearchPath(Searchpath sp) * @param subdir the subdirectory to look in * @return true if and only if the file can be opened */ -bool FioCheckFileExists(const char *filename, Subdirectory subdir) +bool FioCheckFileExists(const std::string &filename, Subdirectory subdir) { - FILE *f = FioFOpenFile(filename, "rb", subdir); + FILE *f = FioFOpenFile(filename.c_str(), "rb", subdir); if (f == nullptr) return false; FioFCloseFile(f); @@ -284,9 +284,9 @@ bool FioCheckFileExists(const char *filename, Subdirectory subdir) * @param filename the file to test. * @return true if and only if the file exists. */ -bool FileExists(const char *filename) +bool FileExists(const std::string &filename) { - return access(OTTD2FS(filename), 0) == 0; + return access(OTTD2FS(filename.c_str()), 0) == 0; } /** @@ -311,12 +311,12 @@ std::string FioFindFullPath(Subdirectory subdir, const char *filename) FOR_ALL_SEARCHPATHS(sp) { std::string buf = FioGetDirectory(sp, subdir); buf += filename; - if (FileExists(buf.c_str())) return buf; + if (FileExists(buf)) return buf; #if !defined(_WIN32) /* Be, as opening files, aware that sometimes the filename * might be in uppercase when it is in lowercase on the * disk. Of course Windows doesn't care about casing. */ - if (strtolower(buf, _searchpaths[sp].size() - 1) && FileExists(buf.c_str())) return buf; + if (strtolower(buf, _searchpaths[sp].size() - 1) && FileExists(buf)) return buf; #endif } @@ -338,7 +338,7 @@ std::string FioFindDirectory(Subdirectory subdir) /* Find and return the first valid directory */ FOR_ALL_SEARCHPATHS(sp) { std::string ret = FioGetDirectory(sp, subdir); - if (FileExists(ret.c_str())) return ret; + if (FileExists(ret)) return ret; } /* Could not find the directory, fall back to a base path */ @@ -502,14 +502,12 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, * If the parent directory does not exist, it will try to create that as well. * @param name the new name of the directory */ -void FioCreateDirectory(const char *name) +void FioCreateDirectory(const std::string &name) { - char dirname[MAX_PATH]; - strecpy(dirname, name, lastof(dirname)); - char *p = strrchr(dirname, PATHSEPCHAR); - if (p != nullptr) { - *p = '\0'; - DIR *dir = ttd_opendir(dirname); + auto p = name.find_last_of(PATHSEPCHAR); + if (p != std::string::npos) { + std::string dirname = name.substr(0, p); + DIR *dir = ttd_opendir(dirname.c_str()); if (dir == nullptr) { FioCreateDirectory(dirname); // Try creating the parent directory, if we couldn't open it } else { @@ -520,11 +518,11 @@ void FioCreateDirectory(const char *name) /* Ignore directory creation errors; they'll surface later on, and most * of the time they are 'directory already exists' errors anyhow. */ #if defined(_WIN32) - CreateDirectory(OTTD2FS(name), nullptr); + CreateDirectory(OTTD2FS(name.c_str()), nullptr); #elif defined(OS2) && !defined(__INNOTEK_LIBC__) - mkdir(OTTD2FS(name)); + mkdir(OTTD2FS(name.c_str())); #else - mkdir(OTTD2FS(name), 0755); + mkdir(OTTD2FS(name.c_str()), 0755); #endif } @@ -1198,9 +1196,9 @@ void DeterminePaths(const char *exe) } /* Make the necessary folders */ - FioCreateDirectory(config_dir.c_str()); + FioCreateDirectory(config_dir); #if defined(WITH_PERSONAL_DIR) - FioCreateDirectory(_personal_dir.c_str()); + FioCreateDirectory(_personal_dir); #endif DEBUG(misc, 3, "%s found as personal directory", _personal_dir.c_str()); @@ -1210,19 +1208,17 @@ void DeterminePaths(const char *exe) }; for (uint i = 0; i < lengthof(default_subdirs); i++) { - FioCreateDirectory((_personal_dir + _subdirs[default_subdirs[i]]).c_str()); + FioCreateDirectory(_personal_dir + _subdirs[default_subdirs[i]]); } /* If we have network we make a directory for the autodownloading of content */ _searchpaths[SP_AUTODOWNLOAD_DIR] = _personal_dir + "content_download" PATHSEP; - FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR].c_str()); + FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]); /* Create the directory for each of the types of content */ const Subdirectory dirs[] = { SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR }; for (uint i = 0; i < lengthof(dirs); i++) { - char *tmp = str_fmt("%s%s", _searchpaths[SP_AUTODOWNLOAD_DIR].c_str(), _subdirs[dirs[i]]); - FioCreateDirectory(tmp); - free(tmp); + FioCreateDirectory(FioGetDirectory(SP_AUTODOWNLOAD_DIR, dirs[i])); } extern std::string _log_file; diff --git a/src/fileio_func.h b/src/fileio_func.h index 83e90be176..5007a04e63 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -38,11 +38,11 @@ bool IsValidSearchPath(Searchpath sp); void FioFCloseFile(FILE *f); FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); -bool FioCheckFileExists(const char *filename, Subdirectory subdir); +bool FioCheckFileExists(const std::string &filename, Subdirectory subdir); std::string FioFindFullPath(Subdirectory subdir, const char *filename); std::string FioGetDirectory(Searchpath sp, Subdirectory subdir); std::string FioFindDirectory(Subdirectory subdir); -void FioCreateDirectory(const char *name); +void FioCreateDirectory(const std::string &name); const char *FiosGetScreenshotDir(); @@ -50,7 +50,7 @@ void SanitizeFilename(char *filename); void AppendPathSeparator(std::string &buf); void DeterminePaths(const char *exe); void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); -bool FileExists(const char *filename); +bool FileExists(const std::string &filename); bool ExtractTar(const char *tar_filename, Subdirectory subdir); extern std::string _personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. diff --git a/src/fios.cpp b/src/fios.cpp index 4e2378a34b..e7341b1f51 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -200,26 +200,26 @@ const char *FiosBrowseTo(const FiosItem *item) /** * Construct a filename from its components in destination buffer \a buf. - * @param buf Destination buffer. * @param path Directory path, may be \c nullptr. * @param name Filename. * @param ext Filename extension (use \c "" for no extension). - * @param last Last element of buffer \a buf. + * @return The completed filename. */ -static void FiosMakeFilename(char *buf, const char *path, const char *name, const char *ext, const char *last) +static std::string FiosMakeFilename(const std::string *path, const char *name, const char *ext) { + std::string buf; + if (path != nullptr) { - const char *buf_start = buf; - buf = strecpy(buf, path, last); + buf = *path; /* Remove trailing path separator, if present */ - if (buf > buf_start && buf[-1] == PATHSEPCHAR) buf--; + if (!buf.empty() && buf.back() == PATHSEPCHAR) buf.pop_back(); } /* Don't append the extension if it is already there */ const char *period = strrchr(name, '.'); if (period != nullptr && strcasecmp(period, ext) == 0) ext = ""; - seprintf(buf, last, PATHSEP "%s%s", name, ext); + return buf + name + ext; } /** @@ -227,27 +227,26 @@ static void FiosMakeFilename(char *buf, const char *path, const char *name, cons * @param buf Destination buffer for saving the filename. * @param name Name of the file. * @param last Last element of buffer \a buf. + * @return The completed filename. */ -void FiosMakeSavegameName(char *buf, const char *name, const char *last) +std::string FiosMakeSavegameName(const char *name) { const char *extension = (_game_mode == GM_EDITOR) ? ".scn" : ".sav"; - FiosMakeFilename(buf, _fios_path->c_str(), name, extension, last); + return FiosMakeFilename(_fios_path, name, extension); } /** * Construct a filename for a height map. - * @param buf Destination buffer. * @param name Filename. - * @param last Last element of buffer \a buf. + * @return The completed filename. */ -void FiosMakeHeightmapName(char *buf, const char *name, const char *last) +std::string FiosMakeHeightmapName(const char *name) { - char ext[5]; - ext[0] = '.'; - strecpy(ext + 1, GetCurrentScreenshotExtension(), lastof(ext)); + std::string ext("."); + ext += GetCurrentScreenshotExtension(); - FiosMakeFilename(buf, _fios_path->c_str(), name, ext, last); + return FiosMakeFilename(_fios_path, name, ext.c_str()); } /** @@ -257,10 +256,8 @@ void FiosMakeHeightmapName(char *buf, const char *name, const char *last) */ bool FiosDelete(const char *name) { - char filename[512]; - - FiosMakeSavegameName(filename, name, lastof(filename)); - return unlink(filename) == 0; + std::string filename = FiosMakeSavegameName(name); + return unlink(filename.c_str()) == 0; } typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const char *filename, const char *ext, char *title, const char *last); diff --git a/src/fios.h b/src/fios.h index 259e493b24..e211396c1f 100644 --- a/src/fios.h +++ b/src/fios.h @@ -220,8 +220,8 @@ const char *FiosBrowseTo(const FiosItem *item); StringID FiosGetDescText(const char **path, uint64 *total_free); bool FiosDelete(const char *name); -void FiosMakeHeightmapName(char *buf, const char *name, const char *last); -void FiosMakeSavegameName(char *buf, const char *name, const char *last); +std::string FiosMakeHeightmapName(const char *name); +std::string FiosMakeSavegameName(const char *name); FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last); diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 53bb606f37..a86bb7a222 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -771,14 +771,14 @@ public: } } else if (this->IsWidgetLowered(WID_SL_SAVE_GAME)) { // Save button clicked if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) { - FiosMakeSavegameName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); + _file_to_saveload.name = FiosMakeSavegameName(this->filename_editbox.text.buf); if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveGameConfirmationCallback); } else { _switch_mode = SM_SAVE_GAME; } } else { - FiosMakeHeightmapName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); + _file_to_saveload.name = FiosMakeHeightmapName(this->filename_editbox.text.buf); if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveHeightmapConfirmationCallback); } else { diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 4f1524f8ab..37f3962ec6 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -831,7 +831,7 @@ static void _ShowGenerateLandscape(GenerateLandscapeWindowMode mode) if (mode == GLWM_HEIGHTMAP) { /* If the function returns negative, it means there was a problem loading the heightmap */ - if (!GetHeightmapDimensions(_file_to_saveload.detail_ftype, _file_to_saveload.name, &x, &y)) return; + if (!GetHeightmapDimensions(_file_to_saveload.detail_ftype, _file_to_saveload.name.c_str(), &x, &y)) return; } WindowDesc *desc = (mode == GLWM_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc; diff --git a/src/landscape.cpp b/src/landscape.cpp index 6dddbfd70f..9f4116a232 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1305,7 +1305,7 @@ void GenerateLandscape(byte mode) if (mode == GWM_HEIGHTMAP) { SetGeneratingWorldProgress(GWP_LANDSCAPE, steps + GLS_HEIGHTMAP); - LoadHeightmap(_file_to_saveload.detail_ftype, _file_to_saveload.name); + LoadHeightmap(_file_to_saveload.detail_ftype, _file_to_saveload.name.c_str()); IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); } else if (_settings_game.game_creation.land_generator == LG_TERRAGENESIS) { SetGeneratingWorldProgress(GWP_LANDSCAPE, steps + GLS_TERRAGENESIS); diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index b15a27911c..59cc2a631f 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -1078,11 +1078,11 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) std::string tempdirname = FioGetDirectory(Searchpath::SP_AUTODOWNLOAD_DIR, Subdirectory::BASESET_DIR); tempdirname += basename; AppendPathSeparator(tempdirname); - FioCreateDirectory(tempdirname.c_str()); + FioCreateDirectory(tempdirname); std::string output_filename = tempdirname + std::to_string(song.cat_index) + ".mid"; - if (FileExists(output_filename.c_str())) { + if (FileExists(output_filename)) { /* If the file already exists, assume it's the correct decoded data */ return output_filename; } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index eb5c4cbb35..a66786dade 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -541,7 +541,7 @@ bool ClientNetworkGameSocketHandler::IsConnected() * DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p ************/ -extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr); +extern bool SafeLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr); NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *p) { @@ -867,7 +867,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet /* The map is done downloading, load it */ ClearErrorMessages(); - bool load_success = SafeLoad(nullptr, SLO_LOAD, DFT_GAME_FILE, GM_NORMAL, NO_DIRECTORY, lf); + bool load_success = SafeLoad({}, SLO_LOAD, DFT_GAME_FILE, GM_NORMAL, NO_DIRECTORY, lf); /* Long savegame loads shouldn't affect the lag calculation! */ this->last_packet = _realtime_tick; diff --git a/src/openttd.cpp b/src/openttd.cpp index 2409e8e4e3..3e1b36cd87 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -626,9 +626,9 @@ int openttd_main(int argc, char *argv[]) _file_to_saveload.SetMode(SLO_LOAD, is_scenario ? FT_SCENARIO : FT_SAVEGAME, DFT_GAME_FILE); /* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */ - const char *t = strrchr(_file_to_saveload.name, '.'); - if (t != nullptr) { - FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, t, nullptr, nullptr); + auto t = _file_to_saveload.name.find_last_of('.'); + if (t != std::string::npos) { + FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name.c_str(), _file_to_saveload.name.substr(t).c_str(), nullptr, nullptr); if (ft != FIOS_TYPE_INVALID) _file_to_saveload.SetMode(ft); } @@ -960,7 +960,7 @@ static void MakeNewEditorWorld() * @param subdir default directory to look for filename, set to 0 if not needed * @param lf Load filter to use, if nullptr: use filename + subdir. */ -bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr) +bool SafeLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr) { assert(fop == SLO_LOAD); assert(dft == DFT_GAME_FILE || (lf == nullptr && dft == DFT_OLD_GAME_FILE)); @@ -968,7 +968,7 @@ bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, _game_mode = newgm; - switch (lf == nullptr ? SaveOrLoad(filename, fop, dft, subdir) : LoadWithFilter(lf)) { + switch (lf == nullptr ? SaveOrLoad(filename.c_str(), fop, dft, subdir) : LoadWithFilter(lf)) { case SL_OK: return true; case SL_REINIT: @@ -1127,7 +1127,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_SAVE_GAME: // Save game. /* Make network saved games on pause compatible to singleplayer */ - if (SaveOrLoad(_file_to_saveload.name, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { + if (SaveOrLoad(_file_to_saveload.name.c_str(), SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { SetDParamStr(0, GetSaveLoadErrorString()); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); } else { @@ -1136,7 +1136,7 @@ void SwitchToMode(SwitchMode new_mode) break; case SM_SAVE_HEIGHTMAP: // Save heightmap. - MakeHeightmapScreenshot(_file_to_saveload.name); + MakeHeightmapScreenshot(_file_to_saveload.name.c_str()); DeleteWindowById(WC_SAVELOAD, 0); break; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index bfbf1957b8..2bb960da60 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2930,7 +2930,7 @@ void FileToSaveLoad::SetMode(SaveLoadOperation fop, AbstractFileType aft, Detail */ void FileToSaveLoad::SetName(const char *name) { - strecpy(this->name, name, lastof(this->name)); + this->name = name; } /** diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index a153b36301..5406462f6e 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -12,6 +12,7 @@ #include "../fileio_type.h" #include "../strings_type.h" +#include /** SaveLoad versions * Previous savegame versions, the trunk revision where they were @@ -337,7 +338,7 @@ struct FileToSaveLoad { SaveLoadOperation file_op; ///< File operation to perform. DetailedFileType detail_ftype; ///< Concrete file type (PNG, BMP, old save, etc). AbstractFileType abstract_ftype; ///< Abstract type of file (scenario, heightmap, etc). - char name[MAX_PATH]; ///< Name of the file. + std::string name; ///< Name of the file. char title[255]; ///< Internal name of the game. void SetMode(FiosType ft); diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 836bb82468..8227060d35 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -120,7 +120,7 @@ bool ScriptInstance::LoadCompatibilityScripts(const char *api_version, Subdirect FOR_ALL_SEARCHPATHS(sp) { std::string buf = FioGetDirectory(sp, dir); buf += script_name; - if (!FileExists(buf.c_str())) continue; + if (!FileExists(buf)) continue; if (this->engine->LoadScript(buf.c_str())) return true; diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index b3acb82a4c..7efd417ce9 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -128,7 +128,7 @@ static void *_dedicated_video_mem; /* Whether a fork has been done. */ bool _dedicated_forks; -extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr); +extern bool SafeLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr); static FVideoDriver_Dedicated iFVideoDriver_Dedicated; From 5cbb2da79434ec002831bd72b2c81f9dcd469601 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:47 +0100 Subject: [PATCH 431/601] Codechange: Even more std::string usage in file IO. --- src/fileio.cpp | 83 ++++++++++++++------------------- src/fileio_func.h | 4 +- src/game/game_text.cpp | 2 +- src/network/network_content.cpp | 2 +- src/newgrf_profiling.cpp | 2 +- src/openttd.cpp | 4 +- src/saveload/oldloader.cpp | 4 +- src/saveload/saveload.cpp | 8 ++-- src/saveload/saveload.h | 2 +- 9 files changed, 48 insertions(+), 63 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 09e884e4fa..5b8005929b 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -272,7 +272,7 @@ bool IsValidSearchPath(Searchpath sp) */ bool FioCheckFileExists(const std::string &filename, Subdirectory subdir) { - FILE *f = FioFOpenFile(filename.c_str(), "rb", subdir); + FILE *f = FioFOpenFile(filename, "rb", subdir); if (f == nullptr) return false; FioFCloseFile(f); @@ -345,7 +345,7 @@ std::string FioFindDirectory(Subdirectory subdir) return _personal_dir; } -static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) +static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) { #if defined(_WIN32) && defined(UNICODE) /* fopen is implemented as a define with ellipses for @@ -390,17 +390,17 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s * @return File handle of the opened file, or \c nullptr if the file is not available. * @note The file is read from within the tar file, and may not return \c EOF after reading the whole file. */ -FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize) +FILE *FioFOpenFileTar(const TarFileListEntry &entry, size_t *filesize) { - FILE *f = fopen(entry->tar_filename, "rb"); + FILE *f = fopen(entry.tar_filename, "rb"); if (f == nullptr) return f; - if (fseek(f, entry->position, SEEK_SET) < 0) { + if (fseek(f, entry.position, SEEK_SET) < 0) { fclose(f); return nullptr; } - if (filesize != nullptr) *filesize = entry->size; + if (filesize != nullptr) *filesize = entry.size; return f; } @@ -410,7 +410,7 @@ FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize) * @param subdir Subdirectory to open. * @return File handle of the opened file, or \c nullptr if the file is not available. */ -FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize) +FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize) { FILE *f = nullptr; Searchpath sp; @@ -424,11 +424,8 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, /* We can only use .tar in case of data-dir, and read-mode */ if (f == nullptr && mode[0] == 'r' && subdir != NO_DIRECTORY) { - static const uint MAX_RESOLVED_LENGTH = 2 * (100 + 100 + 155) + 1; // Enough space to hold two filenames plus link. See 'TarHeader'. - char resolved_name[MAX_RESOLVED_LENGTH]; - /* Filenames in tars are always forced to be lowercase */ - strecpy(resolved_name, filename, lastof(resolved_name)); + std::string resolved_name = filename; strtolower(resolved_name); /* Resolve ".." */ @@ -443,36 +440,31 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, tokens.push_back(token); } } - resolved_name[0] = '\0'; + + resolved_name.clear(); bool first = true; for (const std::string &token : tokens) { if (!first) { - strecat(resolved_name, PATHSEP, lastof(resolved_name)); + resolved_name += PATHSEP; } - strecat(resolved_name, token.c_str(), lastof(resolved_name)); + resolved_name += token; first = false; } - size_t resolved_len = strlen(resolved_name); - /* Resolve ONE directory link */ for (TarLinkList::iterator link = _tar_linklist[subdir].begin(); link != _tar_linklist[subdir].end(); link++) { const std::string &src = link->first; size_t len = src.length(); - if (resolved_len >= len && resolved_name[len - 1] == PATHSEPCHAR && strncmp(src.c_str(), resolved_name, len) == 0) { + if (resolved_name.length() >= len && resolved_name[len - 1] == PATHSEPCHAR && src.compare(0, len, resolved_name, 0, len) == 0) { /* Apply link */ - char resolved_name2[MAX_RESOLVED_LENGTH]; - const std::string &dest = link->second; - strecpy(resolved_name2, &(resolved_name[len]), lastof(resolved_name2)); - strecpy(resolved_name, dest.c_str(), lastof(resolved_name)); - strecpy(&(resolved_name[dest.length()]), resolved_name2, lastof(resolved_name)); + resolved_name.replace(0, len, link->second); break; // Only resolve one level } } TarFileList::iterator it = _tar_filelist[subdir].find(resolved_name); if (it != _tar_filelist[subdir].end()) { - f = FioFOpenFileTar(&((*it).second), filesize); + f = FioFOpenFileTar(it->second, filesize); } } @@ -859,7 +851,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha * @param subdir The sub directory the tar is in. * @return false on failure. */ -bool ExtractTar(const char *tar_filename, Subdirectory subdir) +bool ExtractTar(const std::string &tar_filename, Subdirectory subdir) { TarList::iterator it = _tar_list[subdir].find(tar_filename); /* We don't know the file. */ @@ -869,41 +861,38 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir) /* The file doesn't have a sub directory! */ if (dirname == nullptr) { - DEBUG(misc, 1, "Extracting %s failed; archive rejected, the contents must be in a sub directory", tar_filename); + DEBUG(misc, 1, "Extracting %s failed; archive rejected, the contents must be in a sub directory", tar_filename.c_str()); return false; } - char filename[MAX_PATH]; - strecpy(filename, tar_filename, lastof(filename)); - char *p = strrchr(filename, PATHSEPCHAR); + std::string filename = tar_filename; + auto p = filename.find_last_of(PATHSEPCHAR); /* The file's path does not have a separator? */ - if (p == nullptr) return false; + if (p == std::string::npos) return false; - p++; - strecpy(p, dirname, lastof(filename)); - DEBUG(misc, 8, "Extracting %s to directory %s", tar_filename, filename); + filename.replace(p + 1, std::string::npos, dirname); + DEBUG(misc, 8, "Extracting %s to directory %s", tar_filename.c_str(), filename.c_str()); FioCreateDirectory(filename); for (TarFileList::iterator it2 = _tar_filelist[subdir].begin(); it2 != _tar_filelist[subdir].end(); it2++) { - if (strcmp((*it2).second.tar_filename, tar_filename) != 0) continue; + if (tar_filename != it2->second.tar_filename) continue; - strecpy(p, (*it2).first.c_str(), lastof(filename)); + filename.replace(p + 1, std::string::npos, it2->first); - DEBUG(misc, 9, " extracting %s", filename); + DEBUG(misc, 9, " extracting %s", filename.c_str()); /* First open the file in the .tar. */ size_t to_copy = 0; - FILE *in = FioFOpenFileTar(&(*it2).second, &to_copy); - if (in == nullptr) { - DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename, tar_filename); + std::unique_ptr in(FioFOpenFileTar(it2->second, &to_copy)); + if (!in) { + DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename.c_str(), tar_filename.c_str()); return false; } /* Now open the 'output' file. */ - FILE *out = fopen(filename, "wb"); - if (out == nullptr) { - DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename, filename); - fclose(in); + std::unique_ptr out(fopen(filename.c_str(), "wb")); + if (!out) { + DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename.c_str(), filename.c_str()); return false; } @@ -911,16 +900,12 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir) char buffer[4096]; size_t read; for (; to_copy != 0; to_copy -= read) { - read = fread(buffer, 1, min(to_copy, lengthof(buffer)), in); - if (read <= 0 || fwrite(buffer, 1, read, out) != read) break; + read = fread(buffer, 1, min(to_copy, lengthof(buffer)), in.get()); + if (read <= 0 || fwrite(buffer, 1, read, out.get()) != read) break; } - /* Close everything up. */ - fclose(in); - fclose(out); - if (to_copy != 0) { - DEBUG(misc, 6, "Extracting %s failed; still %i bytes to copy", filename, (int)to_copy); + DEBUG(misc, 6, "Extracting %s failed; still %i bytes to copy", filename.c_str(), (int)to_copy); return false; } } diff --git a/src/fileio_func.h b/src/fileio_func.h index 5007a04e63..a2da910636 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -37,7 +37,7 @@ bool IsValidSearchPath(Searchpath sp); #define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp)) void FioFCloseFile(FILE *f); -FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); +FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); bool FioCheckFileExists(const std::string &filename, Subdirectory subdir); std::string FioFindFullPath(Subdirectory subdir, const char *filename); std::string FioGetDirectory(Searchpath sp, Subdirectory subdir); @@ -51,7 +51,7 @@ void AppendPathSeparator(std::string &buf); void DeterminePaths(const char *exe); void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); bool FileExists(const std::string &filename); -bool ExtractTar(const char *tar_filename, Subdirectory subdir); +bool ExtractTar(const std::string &tar_filename, Subdirectory subdir); extern std::string _personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 39732f7898..f704dbc2eb 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -66,7 +66,7 @@ void NORETURN CDECL strgen_fatal(const char *s, ...) LanguageStrings ReadRawLanguageStrings(const std::string &file) { size_t to_read; - FILE *fh = FioFOpenFile(file.c_str(), "rb", GAME_DIR, &to_read); + FILE *fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read); if (fh == nullptr) return LanguageStrings(); FileCloser fhClose(fh); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index dc14a59fcb..7f610d9d36 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -543,7 +543,7 @@ void ClientNetworkContentSocketHandler::AfterDownload() if (this->curInfo->type == CONTENT_TYPE_BASE_MUSIC) { /* Music can't be in a tar. So extract the tar! */ - ExtractTar(fname.c_str(), BASESET_DIR); + ExtractTar(fname, BASESET_DIR); unlink(fname.c_str()); } diff --git a/src/newgrf_profiling.cpp b/src/newgrf_profiling.cpp index 17f32384d7..b7848fa671 100644 --- a/src/newgrf_profiling.cpp +++ b/src/newgrf_profiling.cpp @@ -102,7 +102,7 @@ uint32 NewGRFProfiler::Finish() std::string filename = this->GetOutputFilename(); IConsolePrintF(CC_DEBUG, "Finished profile of NewGRF [%08X], writing %u events to %s", BSWAP32(this->grffile->grfid), (uint)this->calls.size(), filename.c_str()); - FILE *f = FioFOpenFile(filename.c_str(), "wt", Subdirectory::NO_DIRECTORY); + FILE *f = FioFOpenFile(filename, "wt", Subdirectory::NO_DIRECTORY); FileCloser fcloser(f); uint32 total_microseconds = 0; diff --git a/src/openttd.cpp b/src/openttd.cpp index 3e1b36cd87..aa98da7260 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -968,7 +968,7 @@ bool SafeLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileTy _game_mode = newgm; - switch (lf == nullptr ? SaveOrLoad(filename.c_str(), fop, dft, subdir) : LoadWithFilter(lf)) { + switch (lf == nullptr ? SaveOrLoad(filename, fop, dft, subdir) : LoadWithFilter(lf)) { case SL_OK: return true; case SL_REINIT: @@ -1127,7 +1127,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_SAVE_GAME: // Save game. /* Make network saved games on pause compatible to singleplayer */ - if (SaveOrLoad(_file_to_saveload.name.c_str(), SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { + if (SaveOrLoad(_file_to_saveload.name, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) { SetDParamStr(0, GetSaveLoadErrorString()); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); } else { diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 0c2c7f80bc..09f15e183f 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -271,7 +271,7 @@ static SavegameType DetermineOldSavegameType(FILE *f, char *title, const char *l typedef bool LoadOldMainProc(LoadgameState *ls); -bool LoadOldSaveGame(const char *file) +bool LoadOldSaveGame(const std::string &file) { LoadgameState ls; @@ -283,7 +283,7 @@ bool LoadOldSaveGame(const char *file) ls.file = FioFOpenFile(file, "rb", NO_DIRECTORY); if (ls.file == nullptr) { - DEBUG(oldloader, 0, "Cannot open file '%s'", file); + DEBUG(oldloader, 0, "Cannot open file '%s'", file.c_str()); return false; } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 2bb960da60..91f9c5a080 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2413,7 +2413,7 @@ static const SaveLoadFormat *GetSavegameFormat(char *s, byte *compression_level) /* actual loader/saver function */ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settings); extern bool AfterLoadGame(); -extern bool LoadOldSaveGame(const char *file); +extern bool LoadOldSaveGame(const std::string &file); /** * Clear temporary data that is passed between various saveload phases. @@ -2769,7 +2769,7 @@ SaveOrLoadResult LoadWithFilter(LoadFilter *reader) * @param threaded True when threaded saving is allowed * @return Return the result of the action. #SL_OK, #SL_ERROR, or #SL_REINIT ("unload" the game) */ -SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded) +SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded) { /* An instance of saving is already active, so don't go saving again */ if (_sl.saveinprogress && fop == SLO_SAVE && dft == DFT_GAME_FILE && threaded) { @@ -2833,7 +2833,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, Detaile } if (fop == SLO_SAVE) { // SAVE game - DEBUG(desync, 1, "save: %08x; %02x; %s", _date, _date_fract, filename); + DEBUG(desync, 1, "save: %08x; %02x; %s", _date, _date_fract, filename.c_str()); if (_network_server || !_settings_client.gui.threaded_saves) threaded = false; return DoSave(new FileWriter(fh), threaded); @@ -2841,7 +2841,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, Detaile /* LOAD game */ assert(fop == SLO_LOAD || fop == SLO_CHECK); - DEBUG(desync, 1, "load: %s", filename); + DEBUG(desync, 1, "load: %s", filename.c_str()); return DoLoad(new FileReader(fh), fop == SLO_CHECK); } catch (...) { /* This code may be executed both for old and new save games. */ diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 5406462f6e..f5ec936a2d 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -362,7 +362,7 @@ extern FileToSaveLoad _file_to_saveload; void GenerateDefaultSaveName(char *buf, const char *last); void SetSaveLoadError(StringID str); const char *GetSaveLoadErrorString(); -SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded = true); +SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded = true); void WaitTillSaved(); void ProcessAsyncSaveFinish(); void DoExitSave(); From 024a3f62593fd783285c5ff09b8c85ee1fc34e2d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:48 +0100 Subject: [PATCH 432/601] Codechange: Use automatic memory management for language pack reading. --- src/fileio.cpp | 29 +++++----- src/fileio_func.h | 2 +- src/language.h | 2 +- src/string.cpp | 2 +- src/strings.cpp | 102 ++++++++++++++++-------------------- src/table/misc_settings.ini | 6 +-- 6 files changed, 66 insertions(+), 77 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 5b8005929b..5431df814d 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1236,28 +1236,27 @@ void SanitizeFilename(char *filename) * @return Pointer to new memory containing the loaded data, or \c nullptr if loading failed. * @note If \a maxsize less than the length of the file, loading fails. */ -void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize) +std::unique_ptr ReadFileToMem(const std::string &filename, size_t &lenp, size_t maxsize) { - FILE *in = fopen(filename, "rb"); + FILE *in = fopen(filename.c_str(), "rb"); if (in == nullptr) return nullptr; + FileCloser fc(in); + fseek(in, 0, SEEK_END); size_t len = ftell(in); fseek(in, 0, SEEK_SET); - if (len > maxsize) { - fclose(in); - return nullptr; - } - byte *mem = MallocT(len + 1); - mem[len] = 0; - if (fread(mem, len, 1, in) != 1) { - fclose(in); - free(mem); - return nullptr; - } - fclose(in); + if (len > maxsize) return nullptr; - *lenp = len; + /* std::unique_ptr assumes new/delete unless a custom deleter is supplied. + * As we don't want to have to carry that deleter all over the place, use + * new directly to allocate the memory instead of malloc. */ + std::unique_ptr mem(static_cast(::operator new(len + 1))); + + mem.get()[len] = 0; + if (fread(mem.get(), len, 1, in) != 1) return nullptr; + + lenp = len; return mem; } diff --git a/src/fileio_func.h b/src/fileio_func.h index a2da910636..72d461863d 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -49,7 +49,7 @@ const char *FiosGetScreenshotDir(); void SanitizeFilename(char *filename); void AppendPathSeparator(std::string &buf); void DeterminePaths(const char *exe); -void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); +std::unique_ptr ReadFileToMem(const std::string &filename, size_t &lenp, size_t maxsize); bool FileExists(const std::string &filename); bool ExtractTar(const std::string &tar_filename, Subdirectory subdir); diff --git a/src/language.h b/src/language.h index 269b22c246..faac595613 100644 --- a/src/language.h +++ b/src/language.h @@ -103,7 +103,7 @@ extern LanguageList _languages; extern const LanguageMetadata *_current_language; #ifdef WITH_ICU_I18N -extern icu::Collator *_current_collator; +extern std::unique_ptr _current_collator; #endif /* WITH_ICU_I18N */ bool ReadLanguagePack(const LanguageMetadata *lang); diff --git a/src/string.cpp b/src/string.cpp index 14bc926c1a..91c1aa147d 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -630,7 +630,7 @@ int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front) } #ifdef WITH_ICU_I18N - if (_current_collator != nullptr) { + if (_current_collator) { UErrorCode status = U_ZERO_ERROR; int result = _current_collator->compareUTF8(s1, s2, status); if (U_SUCCESS(status)) return result; diff --git a/src/strings.cpp b/src/strings.cpp index 9f61ea5fd1..adb874ba14 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -41,14 +41,14 @@ #include "safeguards.h" -char _config_language_file[MAX_PATH]; ///< The file (name) stored in the configuration. +std::string _config_language_file; ///< The file (name) stored in the configuration. LanguageList _languages; ///< The actual list of language meta data. const LanguageMetadata *_current_language = nullptr; ///< The currently loaded language. TextDirection _current_text_dir; ///< Text direction of the currently selected language. #ifdef WITH_ICU_I18N -icu::Collator *_current_collator = nullptr; ///< Collator for the language currently in use. +std::unique_ptr _current_collator; ///< Collator for the language currently in use. #endif /* WITH_ICU_I18N */ static uint64 _global_string_params_data[20]; ///< Global array of string parameters. To access, use #SetDParam. @@ -185,10 +185,17 @@ struct LanguagePack : public LanguagePackHeader { char data[]; // list of strings }; -static char **_langpack_offs; -static LanguagePack *_langpack; -static uint _langtab_num[TEXT_TAB_END]; ///< Offset into langpack offs -static uint _langtab_start[TEXT_TAB_END]; ///< Offset into langpack offs +struct LoadedLanguagePack { + std::unique_ptr langpack; + + std::vector offsets; + + std::array langtab_num; ///< Offset into langpack offs + std::array langtab_start; ///< Offset into langpack offs +}; + +static LoadedLanguagePack _langpack; + static bool _scan_for_gender_data = false; ///< Are we scanning for the gender of the current string? (instead of formatting it) @@ -199,7 +206,7 @@ const char *GetStringPtr(StringID string) /* 0xD0xx and 0xD4xx IDs have been converted earlier. */ case TEXT_TAB_OLD_NEWGRF: NOT_REACHED(); case TEXT_TAB_NEWGRF_START: return GetGRFStringPtr(GetStringIndex(string)); - default: return _langpack_offs[_langtab_start[GetStringTab(string)] + GetStringIndex(string)]; + default: return _langpack.offsets[_langpack.langtab_start[GetStringTab(string)] + GetStringIndex(string)]; } } @@ -253,7 +260,7 @@ char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, co break; } - if (index >= _langtab_num[tab]) { + if (index >= _langpack.langtab_num[tab]) { if (game_script) { return GetStringWithArgs(buffr, STR_UNDEFINED, args, last); } @@ -318,7 +325,7 @@ static char *FormatNumber(char *buff, int64 number, const char *last, const char for (int i = 0; i < max_digits; i++) { if (i == max_digits - fractional_digits) { const char *decimal_separator = _settings_game.locale.digit_decimal_separator; - if (decimal_separator == nullptr) decimal_separator = _langpack->digit_decimal_separator; + if (decimal_separator == nullptr) decimal_separator = _langpack.langpack->digit_decimal_separator; buff += seprintf(buff, last, "%s", decimal_separator); } @@ -343,7 +350,7 @@ static char *FormatNumber(char *buff, int64 number, const char *last, const char static char *FormatCommaNumber(char *buff, int64 number, const char *last, int fractional_digits = 0) { const char *separator = _settings_game.locale.digit_group_separator; - if (separator == nullptr) separator = _langpack->digit_group_separator; + if (separator == nullptr) separator = _langpack.langpack->digit_group_separator; return FormatNumber(buff, number, last, separator, 1, fractional_digits); } @@ -382,7 +389,7 @@ static char *FormatBytes(char *buff, int64 number, const char *last) } const char *decimal_separator = _settings_game.locale.digit_decimal_separator; - if (decimal_separator == nullptr) decimal_separator = _langpack->digit_decimal_separator; + if (decimal_separator == nullptr) decimal_separator = _langpack.langpack->digit_decimal_separator; if (number < 1024) { id = 0; @@ -477,7 +484,7 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money n const char *separator = _settings_game.locale.digit_group_separator_currency; if (separator == nullptr && !StrEmpty(_currency->separator)) separator = _currency->separator; - if (separator == nullptr) separator = _langpack->digit_group_separator_currency; + if (separator == nullptr) separator = _langpack.langpack->digit_group_separator_currency; buff = FormatNumber(buff, number, last, separator); buff = strecpy(buff, multiplier, last); @@ -1721,16 +1728,15 @@ bool LanguagePackHeader::IsValid() const bool ReadLanguagePack(const LanguageMetadata *lang) { /* Current language pack */ - size_t len; - LanguagePack *lang_pack = (LanguagePack *)ReadFileToMem(lang->file, &len, 1U << 20); - if (lang_pack == nullptr) return false; + size_t len = 0; + std::unique_ptr lang_pack(reinterpret_cast(ReadFileToMem(lang->file, len, 1U << 20).release())); + if (!lang_pack) return false; /* End of read data (+ terminating zero added in ReadFileToMem()) */ - const char *end = (char *)lang_pack + len + 1; + const char *end = (char *)lang_pack.get() + len + 1; /* We need at least one byte of lang_pack->data */ if (end <= lang_pack->data || !lang_pack->IsValid()) { - free(lang_pack); return false; } @@ -1740,55 +1746,46 @@ bool ReadLanguagePack(const LanguageMetadata *lang) } #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ + std::array tab_start, tab_num; + uint count = 0; for (uint i = 0; i < TEXT_TAB_END; i++) { uint16 num = lang_pack->offsets[i]; - if (num > TAB_SIZE) { - free(lang_pack); - return false; - } + if (num > TAB_SIZE) return false; - _langtab_start[i] = count; - _langtab_num[i] = num; + tab_start[i] = count; + tab_num[i] = num; count += num; } /* Allocate offsets */ - char **langpack_offs = MallocT(count); + std::vector offs(count); /* Fill offsets */ char *s = lang_pack->data; len = (byte)*s++; for (uint i = 0; i < count; i++) { - if (s + len >= end) { - free(lang_pack); - free(langpack_offs); - return false; - } + if (s + len >= end) return false; + if (len >= 0xC0) { len = ((len & 0x3F) << 8) + (byte)*s++; - if (s + len >= end) { - free(lang_pack); - free(langpack_offs); - return false; - } + if (s + len >= end) return false; } - langpack_offs[i] = s; + offs[i] = s; s += len; len = (byte)*s; *s++ = '\0'; // zero terminate the string } - free(_langpack); - _langpack = lang_pack; - - free(_langpack_offs); - _langpack_offs = langpack_offs; + _langpack.langpack = std::move(lang_pack); + _langpack.offsets = std::move(offs); + _langpack.langtab_num = tab_num; + _langpack.langtab_start = tab_start; _current_language = lang; _current_text_dir = (TextDirection)_current_language->text_dir; const char *c_file = strrchr(_current_language->file, PATHSEPCHAR) + 1; - strecpy(_config_language_file, c_file, lastof(_config_language_file)); + _config_language_file = c_file; SetCurrentGrfLangID(_current_language->newgrflangid); #ifdef _WIN32 @@ -1802,21 +1799,14 @@ bool ReadLanguagePack(const LanguageMetadata *lang) #endif #ifdef WITH_ICU_I18N - /* Delete previous collator. */ - if (_current_collator != nullptr) { - delete _current_collator; - _current_collator = nullptr; - } - /* Create a collator instance for our current locale. */ UErrorCode status = U_ZERO_ERROR; - _current_collator = icu::Collator::createInstance(icu::Locale(_current_language->isocode), status); + _current_collator.reset(icu::Collator::createInstance(icu::Locale(_current_language->isocode), status)); /* Sort number substrings by their numerical value. */ - if (_current_collator != nullptr) _current_collator->setAttribute(UCOL_NUMERIC_COLLATION, UCOL_ON, status); + if (_current_collator) _current_collator->setAttribute(UCOL_NUMERIC_COLLATION, UCOL_ON, status); /* Avoid using the collator if it is not correctly set. */ if (U_FAILURE(status)) { - delete _current_collator; - _current_collator = nullptr; + _current_collator.reset(); } #endif /* WITH_ICU_I18N */ @@ -1978,7 +1968,7 @@ void InitializeLanguagePacks() * configuration file, local environment and last, if nothing found, * English. */ const char *lang_file = strrchr(lng.file, PATHSEPCHAR) + 1; - if (strcmp(lang_file, _config_language_file) == 0) { + if (_config_language_file == lang_file) { chosen_language = &lng; break; } @@ -2003,7 +1993,7 @@ void InitializeLanguagePacks() */ const char *GetCurrentLanguageIsoCode() { - return _langpack->isocode; + return _langpack.langpack->isocode; } /** @@ -2057,10 +2047,10 @@ class LanguagePackGlyphSearcher : public MissingGlyphSearcher { { if (this->i >= TEXT_TAB_END) return nullptr; - const char *ret = _langpack_offs[_langtab_start[this->i] + this->j]; + const char *ret = _langpack.offsets[_langpack.langtab_start[this->i] + this->j]; this->j++; - while (this->i < TEXT_TAB_END && this->j >= _langtab_num[this->i]) { + while (this->i < TEXT_TAB_END && this->j >= _langpack.langtab_num[this->i]) { this->i++; this->j = 0; } @@ -2116,7 +2106,7 @@ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) _freetype.mono.os_handle = nullptr; _freetype.medium.os_handle = nullptr; - bad_font = !SetFallbackFont(&_freetype, _langpack->isocode, _langpack->winlangid, searcher); + bad_font = !SetFallbackFont(&_freetype, _langpack.langpack->isocode, _langpack.langpack->winlangid, searcher); free(_freetype.mono.os_handle); free(_freetype.medium.os_handle); diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini index 60799a4369..edad848165 100644 --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -5,7 +5,7 @@ ; [pre-amble] -extern char _config_language_file[MAX_PATH]; +extern std::string _config_language_file; static const char *_support8bppmodes = "no|system|hardware"; @@ -107,9 +107,9 @@ type = SLE_STRQ var = _ini_blitter def = nullptr -[SDTG_STR] +[SDTG_SSTR] name = ""language"" -type = SLE_STRB +type = SLE_STR var = _config_language_file def = nullptr cat = SC_BASIC From 358056ec428d1938b8c9219a60c6fb400115f152 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:49 +0100 Subject: [PATCH 433/601] Codechange: Keep filenames of loaded Fio files in std::strings. --- src/fileio.cpp | 32 +++++++++++++++----------------- src/fileio_func.h | 2 +- src/ini.cpp | 2 +- src/ini_load.cpp | 2 +- src/ini_type.h | 4 ++-- src/settingsgen/settingsgen.cpp | 4 ++-- 6 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 5431df814d..7df22921e6 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -40,13 +40,13 @@ /** Structure for keeping several open files with just one data buffer. */ struct Fio { byte *buffer, *buffer_end; ///< position pointer in local buffer and last valid byte of buffer + byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file size_t pos; ///< current (system) position in file FILE *cur_fh; ///< current file handle - const char *filename; ///< current filename - FILE *handles[MAX_FILE_SLOTS]; ///< array of file handles we can have open - byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file - const char *filenames[MAX_FILE_SLOTS]; ///< array of filenames we (should) have open - char *shortnames[MAX_FILE_SLOTS]; ///< array of short names for spriteloader's use + std::string filename; ///< current filename + std::array handles; ///< array of file handles we can have open + std::array filenames; ///< array of filenames we (should) have open + std::array shortnames;///< array of short names for spriteloader's use }; static Fio _fio; ///< #Fio instance. @@ -73,7 +73,7 @@ size_t FioGetPos() */ const char *FioGetFilename(uint8 slot) { - return _fio.shortnames[slot]; + return _fio.shortnames[slot].c_str(); } /** @@ -87,7 +87,7 @@ void FioSeekTo(size_t pos, int mode) _fio.buffer = _fio.buffer_end = _fio.buffer_start + FIO_BUFFER_SIZE; _fio.pos = pos; if (fseek(_fio.cur_fh, _fio.pos, SEEK_SET) < 0) { - DEBUG(misc, 0, "Seeking in %s failed", _fio.filename); + DEBUG(misc, 0, "Seeking in %s failed", _fio.filename.c_str()); } } @@ -178,8 +178,7 @@ static inline void FioCloseFile(int slot) if (_fio.handles[slot] != nullptr) { fclose(_fio.handles[slot]); - free(_fio.shortnames[slot]); - _fio.shortnames[slot] = nullptr; + _fio.shortnames[slot].clear(); _fio.handles[slot] = nullptr; } @@ -199,27 +198,26 @@ void FioCloseAll() * @param filename Name of the file at the disk. * @param subdir The sub directory to search this file in. */ -void FioOpenFile(int slot, const char *filename, Subdirectory subdir) +void FioOpenFile(int slot, const std::string &filename, Subdirectory subdir) { FILE *f; f = FioFOpenFile(filename, "rb", subdir); - if (f == nullptr) usererror("Cannot open file '%s'", filename); + if (f == nullptr) usererror("Cannot open file '%s'", filename.c_str()); long pos = ftell(f); - if (pos < 0) usererror("Cannot read file '%s'", filename); + if (pos < 0) usererror("Cannot read file '%s'", filename.c_str()); FioCloseFile(slot); // if file was opened before, close it _fio.handles[slot] = f; _fio.filenames[slot] = filename; /* Store the filename without path and extension */ - const char *t = strrchr(filename, PATHSEPCHAR); - _fio.shortnames[slot] = stredup(t == nullptr ? filename : t); - char *t2 = strrchr(_fio.shortnames[slot], '.'); - if (t2 != nullptr) *t2 = '\0'; + auto t = filename.rfind(PATHSEPCHAR); + std::string sn = filename.substr(t != std::string::npos ? t + 1 : 0); + _fio.shortnames[slot] = sn.substr(0, sn.rfind('.')); strtolower(_fio.shortnames[slot]); - FioSeekToFile(slot, (uint32)pos); + FioSeekToFile(slot, (size_t)pos); } static const char * const _subdirs[] = { diff --git a/src/fileio_func.h b/src/fileio_func.h index 72d461863d..014050b4b9 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -22,7 +22,7 @@ byte FioReadByte(); uint16 FioReadWord(); uint32 FioReadDword(); void FioCloseAll(); -void FioOpenFile(int slot, const char *filename, Subdirectory subdir); +void FioOpenFile(int slot, const std::string &filename, Subdirectory subdir); void FioReadBlock(void *ptr, size_t size); void FioSkipBytes(int n); diff --git a/src/ini.cpp b/src/ini.cpp index 036ced6688..e70cc268aa 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -125,7 +125,7 @@ bool IniFile::SaveToDisk(const std::string &filename) return true; } -/* virtual */ FILE *IniFile::OpenFile(const char *filename, Subdirectory subdir, size_t *size) +/* virtual */ FILE *IniFile::OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) { /* Open the text file in binary mode to prevent end-of-line translations * done by ftell() and friends, as defined by K&R. */ diff --git a/src/ini_load.cpp b/src/ini_load.cpp index e7c2b95fe6..022e2bf180 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -204,7 +204,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) uint comment_alloc = 0; size_t end; - FILE *in = this->OpenFile(filename.c_str(), subdir, &end); + FILE *in = this->OpenFile(filename, subdir, &end); if (in == nullptr) return; end += ftell(in); diff --git a/src/ini_type.h b/src/ini_type.h index 1637174500..160ba7619c 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -73,7 +73,7 @@ struct IniLoadFile { * @param[out] size Size of the opened file. * @return File handle of the opened file, or \c nullptr. */ - virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size) = 0; + virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) = 0; /** * Report an error about the file contents. @@ -90,7 +90,7 @@ struct IniFile : IniLoadFile { bool SaveToDisk(const std::string &filename); - virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size); + virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size); virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post); }; diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index b2a3c76f64..513b4c7544 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -165,11 +165,11 @@ struct SettingsIniFile : IniLoadFile { { } - virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size) + virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) { /* Open the text file in binary mode to prevent end-of-line translations * done by ftell() and friends, as defined by K&R. */ - FILE *in = fopen(filename, "rb"); + FILE *in = fopen(filename.c_str(), "rb"); if (in == nullptr) return nullptr; fseek(in, 0L, SEEK_END); From b408fe77f792650ef569f9852165759f960fd52f Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 6 Dec 2020 21:11:50 +0100 Subject: [PATCH 434/601] Codechange: Use std::string in file scanners. --- src/ai/ai_scanner.cpp | 3 +-- src/base_media_base.h | 2 +- src/base_media_func.h | 10 +++---- src/fileio.cpp | 38 +++++++++++++-------------- src/fileio_func.h | 6 ++--- src/fios.cpp | 49 ++++++++++++++++------------------- src/fios.h | 2 +- src/game/game_text.cpp | 8 +++--- src/newgrf_config.cpp | 6 ++--- src/openttd.cpp | 2 +- src/saveload/oldloader.cpp | 2 +- src/script/script_info.cpp | 7 ++--- src/script/script_info.hpp | 10 +++---- src/script/script_scanner.cpp | 48 ++++++++++------------------------ src/script/script_scanner.hpp | 12 ++++----- src/tar_type.h | 18 +++---------- 16 files changed, 91 insertions(+), 132 deletions(-) diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index 1431a2820b..9b3613712d 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -32,8 +32,7 @@ void AIScannerInfo::Initialize() ScriptAllocatorScope alloc_scope(this->engine); /* Create the dummy AI */ - free(this->main_script); - this->main_script = stredup("%_dummy"); + this->main_script = "%_dummy"; extern void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir); Script_CreateDummyInfo(this->engine->GetVM(), "AI", "ai"); } diff --git a/src/base_media_base.h b/src/base_media_base.h index 881fdc3f38..790bb9d38c 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -167,7 +167,7 @@ protected: static Tbase_set *duplicate_sets; ///< All sets that aren't available, but needed for not downloading base sets when a newer version than the one on BaNaNaS is loaded. static const Tbase_set *used_set; ///< The currently used set - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; /** * Get the extension that is used to identify this set. diff --git a/src/base_media_func.h b/src/base_media_func.h index 703165db5e..8491f0e510 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -150,14 +150,14 @@ bool BaseSet::FillSetDetails(IniFile *ini, const } template -bool BaseMedia::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool BaseMedia::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { bool ret = false; - DEBUG(grf, 1, "Checking %s for base " SET_TYPE " set", filename); + DEBUG(grf, 1, "Checking %s for base " SET_TYPE " set", filename.c_str()); Tbase_set *set = new Tbase_set(); IniFile *ini = new IniFile(); - std::string path{ filename + basepath_length }; + std::string path{ filename, basepath_length }; ini->LoadFromDisk(path, BASESET_DIR); auto psep = path.rfind(PATHSEPCHAR); @@ -167,7 +167,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, path.clear(); } - if (set->FillSetDetails(ini, path.c_str(), filename)) { + if (set->FillSetDetails(ini, path.c_str(), filename.c_str())) { Tbase_set *duplicate = nullptr; for (Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { if (c->name == set->name || c->shortname == set->shortname) { @@ -377,7 +377,7 @@ template #define INSTANTIATE_BASE_MEDIA_METHODS(repl_type, set_type) \ template std::string repl_type::ini_set; \ template const char *repl_type::GetExtension(); \ - template bool repl_type::AddFile(const char *filename, size_t pathlength, const char *tar_filename); \ + template bool repl_type::AddFile(const std::string &filename, size_t pathlength, const std::string &tar_filename); \ template bool repl_type::HasSet(const struct ContentInfo *ci, bool md5sum); \ template bool repl_type::SetSet(const std::string &name); \ template char *repl_type::GetSetsList(char *p, const char *last); \ diff --git a/src/fileio.cpp b/src/fileio.cpp index 7df22921e6..cba18873a4 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -246,7 +246,7 @@ static_assert(lengthof(_subdirs) == NUM_SUBDIRS); * current operating system. */ std::array _searchpaths; -TarList _tar_list[NUM_SUBDIRS]; +std::array _tar_list; TarFileList _tar_filelist[NUM_SUBDIRS]; typedef std::map TarLinkList; @@ -390,7 +390,7 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc */ FILE *FioFOpenFileTar(const TarFileListEntry &entry, size_t *filesize) { - FILE *f = fopen(entry.tar_filename, "rb"); + FILE *f = fopen(entry.tar_filename.c_str(), "rb"); if (f == nullptr) return f; if (fseek(f, entry.position, SEEK_SET) < 0) { @@ -613,16 +613,16 @@ uint TarScanner::DoScan(Subdirectory sd) * @param filename The name of the file to add. * @return True if the additions went correctly. */ -bool TarScanner::AddFile(Subdirectory sd, const char *filename) +bool TarScanner::AddFile(Subdirectory sd, const std::string &filename) { this->subdir = sd; return this->AddFile(filename, 0); } -bool TarScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { /* No tar within tar. */ - assert(tar_filename == nullptr); + assert(tar_filename.empty()); /* The TAR-header, repeated for every file */ struct TarHeader { @@ -650,16 +650,14 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha TarList::iterator it = _tar_list[this->subdir].find(filename); if (it != _tar_list[this->subdir].end()) return false; - FILE *f = fopen(filename, "rb"); + FILE *f = fopen(filename.c_str(), "rb"); /* Although the file has been found there can be * a number of reasons we cannot open the file. * Most common case is when we simply have not * been given read access. */ if (f == nullptr) return false; - const char *dupped_filename = stredup(filename); - _tar_list[this->subdir][filename].filename = dupped_filename; - _tar_list[this->subdir][filename].dirname = nullptr; + _tar_list[this->subdir][filename] = std::string{}; TarLinkList links; ///< Temporary list to collect links @@ -684,7 +682,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* If we have only zeros in the block, it can be an end-of-file indicator */ if (memcmp(&th, &empty[0], 512) == 0) continue; - DEBUG(misc, 0, "The file '%s' isn't a valid tar-file", filename); + DEBUG(misc, 0, "The file '%s' isn't a valid tar-file", filename.c_str()); fclose(f); return false; } @@ -714,7 +712,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Store this entry in the list */ TarFileListEntry entry; - entry.tar_filename = dupped_filename; + entry.tar_filename = filename; entry.size = skip; entry.position = pos; @@ -782,7 +780,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha } if (destpos >= lastof(dest)) { - DEBUG(misc, 0, "The length of a link in tar-file '%s' is too large (malformed?)", filename); + DEBUG(misc, 0, "The length of a link in tar-file '%s' is too large (malformed?)", filename.c_str()); fclose(f); return false; } @@ -803,7 +801,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Store the first directory name we detect */ DEBUG(misc, 6, "Found dir in tar: %s", name); - if (_tar_list[this->subdir][filename].dirname == nullptr) _tar_list[this->subdir][filename].dirname = stredup(name); + if (_tar_list[this->subdir][filename].empty()) _tar_list[this->subdir][filename] = name; break; default: @@ -814,14 +812,14 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Skip to the next block.. */ skip = Align(skip, 512); if (fseek(f, skip, SEEK_CUR) < 0) { - DEBUG(misc, 0, "The file '%s' can't be read as a valid tar-file", filename); + DEBUG(misc, 0, "The file '%s' can't be read as a valid tar-file", filename.c_str()); fclose(f); return false; } pos += skip; } - DEBUG(misc, 1, "Found tar '%s' with " PRINTF_SIZE " new files", filename, num); + DEBUG(misc, 1, "Found tar '%s' with " PRINTF_SIZE " new files", filename.c_str(), num); fclose(f); /* Resolve file links and store directory links. @@ -855,10 +853,10 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir) /* We don't know the file. */ if (it == _tar_list[subdir].end()) return false; - const char *dirname = (*it).second.dirname; + const auto &dirname = (*it).second; /* The file doesn't have a sub directory! */ - if (dirname == nullptr) { + if (dirname.empty()) { DEBUG(misc, 1, "Extracting %s failed; archive rejected, the contents must be in a sub directory", tar_filename.c_str()); return false; } @@ -1308,7 +1306,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive); } else if (S_ISREG(sb.st_mode)) { /* File */ - if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename.c_str(), basepath_length, nullptr)) num++; + if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename, basepath_length, {})) num++; } } @@ -1326,9 +1324,9 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s static uint ScanTar(FileScanner *fs, const char *extension, TarFileList::iterator tar) { uint num = 0; - const char *filename = (*tar).first.c_str(); + const auto &filename = (*tar).first; - if (MatchesExtension(extension, filename) && fs->AddFile(filename, 0, (*tar).second.tar_filename)) num++; + if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename, 0, (*tar).second.tar_filename)) num++; return num; } diff --git a/src/fileio_func.h b/src/fileio_func.h index 014050b4b9..0195739061 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -74,7 +74,7 @@ public: * @param tar_filename the name of the tar file the file is read from. * @return true if the file is added. */ - virtual bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) = 0; + virtual bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) = 0; }; /** Helper for scanning for files with tar as extension */ @@ -92,9 +92,9 @@ public: ALL = BASESET | NEWGRF | AI | SCENARIO | GAME, ///< Scan for everything. }; - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename = nullptr) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename = nullptr) override; - bool AddFile(Subdirectory sd, const char *filename); + bool AddFile(Subdirectory sd, const std::string &filename); /** Do the scan for Tars. */ static uint DoScan(TarScanner::Mode mode); diff --git a/src/fios.cpp b/src/fios.cpp index e7341b1f51..698a0b5592 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -42,7 +42,7 @@ extern void FiosGetDrives(FileList &file_list); extern bool FiosGetDiskFreeSpace(const char *path, uint64 *tot); /* get the name of an oldstyle savegame */ -extern void GetOldSaveGameName(const char *file, char *title, const char *last); +extern void GetOldSaveGameName(const std::string &file, char *title, const char *last); /** * Compare two FiosItem's. Used with sort when sorting the file list. @@ -260,7 +260,7 @@ bool FiosDelete(const char *name) return unlink(filename.c_str()) == 0; } -typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const char *filename, const char *ext, char *title, const char *last); +typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const std::string &filename, const char *ext, char *title, const char *last); /** * Scanner to scan for a particular type of FIOS file. @@ -280,7 +280,7 @@ public: fop(fop), callback_proc(callback_proc), file_list(file_list) {} - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; }; /** @@ -289,25 +289,26 @@ public: * @param basepath_length amount of characters to chop of before to get a relative filename * @return true if the file is added. */ -bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool FiosFileScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { - const char *ext = strrchr(filename, '.'); - if (ext == nullptr) return false; + auto sep = filename.rfind('.'); + if (sep == std::string::npos) return false; + std::string ext = filename.substr(sep); char fios_title[64]; fios_title[0] = '\0'; // reset the title; - FiosType type = this->callback_proc(this->fop, filename, ext, fios_title, lastof(fios_title)); + FiosType type = this->callback_proc(this->fop, filename, ext.c_str(), fios_title, lastof(fios_title)); if (type == FIOS_TYPE_INVALID) return false; for (const FiosItem *fios = file_list.Begin(); fios != file_list.End(); fios++) { - if (strcmp(fios->name, filename) == 0) return false; + if (filename == fios->name) return false; } FiosItem *fios = file_list.Append(); #ifdef _WIN32 // Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP - HANDLE fh = CreateFile(OTTD2FS(filename), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); + HANDLE fh = CreateFile(OTTD2FS(filename.c_str()), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (fh != INVALID_HANDLE_VALUE) { FILETIME ft; @@ -326,7 +327,7 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons CloseHandle(fh); #else struct stat sb; - if (stat(filename, &sb) == 0) { + if (stat(filename.c_str(), &sb) == 0) { fios->mtime = sb.st_mtime; #endif } else { @@ -334,13 +335,13 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons } fios->type = type; - strecpy(fios->name, filename, lastof(fios->name)); + strecpy(fios->name, filename.c_str(), lastof(fios->name)); /* If the file doesn't have a title, use its filename */ const char *t = fios_title; if (StrEmpty(fios_title)) { - t = strrchr(filename, PATHSEPCHAR); - t = (t == nullptr) ? filename : (t + 1); + auto ps = filename.rfind(PATHSEPCHAR); + t = filename.c_str() + (ps == std::string::npos ? 0 : ps + 1); } strecpy(fios->title, t, lastof(fios->title)); str_validate(fios->title, lastof(fios->title)); @@ -433,11 +434,10 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c * @param last the last element in the title buffer * @param subdir the sub directory to search in */ -static void GetFileTitle(const char *file, char *title, const char *last, Subdirectory subdir) +static void GetFileTitle(const std::string &file, char *title, const char *last, Subdirectory subdir) { - char buf[MAX_PATH]; - strecpy(buf, file, lastof(buf)); - strecat(buf, ".title", lastof(buf)); + std::string buf = file; + buf += ".title"; FILE *f = FioFOpenFile(buf, "r", subdir); if (f == nullptr) return; @@ -460,7 +460,7 @@ static void GetFileTitle(const char *file, char *title, const char *last, Subdir * @see FiosGetFileList * @see FiosGetSavegameList */ -FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) +FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { /* Show savegame files * .SAV OpenTTD saved game @@ -515,7 +515,7 @@ void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list) * @see FiosGetFileList * @see FiosGetScenarioList */ -static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) +static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { /* Show scenario files * .SCN OpenTTD style scenario file @@ -556,7 +556,7 @@ void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list) FiosGetFileList(fop, &FiosGetScenarioListCallback, subdir, file_list); } -static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) +static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { /* Show heightmap files * .PNG PNG Based heightmap files @@ -669,7 +669,7 @@ public: this->scanned = true; } - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override { FILE *f = FioFOpenFile(filename, "r", SCENARIO_DIR); if (f == nullptr) return false; @@ -678,19 +678,16 @@ public: int fret = fscanf(f, "%u", &id.scenid); FioFCloseFile(f); if (fret != 1) return false; - strecpy(id.filename, filename, lastof(id.filename)); + strecpy(id.filename, filename.c_str(), lastof(id.filename)); Md5 checksum; uint8 buffer[1024]; - char basename[MAX_PATH]; ///< \a filename without the extension. size_t len, size; /* open the scenario file, but first get the name. * This is safe as we check on extension which * must always exist. */ - strecpy(basename, filename, lastof(basename)); - *strrchr(basename, '.') = '\0'; - f = FioFOpenFile(basename, "rb", SCENARIO_DIR, &size); + f = FioFOpenFile(filename.substr(0, filename.rfind('.')), "rb", SCENARIO_DIR, &size); if (f == nullptr) return false; /* calculate md5sum */ diff --git a/src/fios.h b/src/fios.h index e211396c1f..8d8faac07b 100644 --- a/src/fios.h +++ b/src/fios.h @@ -223,6 +223,6 @@ bool FiosDelete(const char *name); std::string FiosMakeHeightmapName(const char *name); std::string FiosMakeSavegameName(const char *name); -FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last); +FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last); #endif /* FIOS_H */ diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index f704dbc2eb..24f41c93ac 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -206,7 +206,7 @@ public: this->FileScanner::Scan(".txt", directory, false); } - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override { if (exclude == filename) return true; @@ -244,9 +244,9 @@ GameStrings *LoadTranslations() LanguageScanner scanner(gs, filename); std::string ldir = basename + "lang" PATHSEP; - const char *tar_filename = info->GetTarFile(); + const std::string tar_filename = info->GetTarFile(); TarList::iterator iter; - if (tar_filename != nullptr && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) { + if (!tar_filename.empty() && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) { /* The main script is in a tar file, so find all files that * are in the same tar and add them to the langfile scanner. */ TarFileList::iterator tar; @@ -258,7 +258,7 @@ GameStrings *LoadTranslations() if (tar->first.size() <= ldir.size() || tar->first.compare(0, ldir.size(), ldir) != 0) continue; if (tar->first.compare(tar->first.size() - 4, 4, ".txt") != 0) continue; - scanner.AddFile(tar->first.c_str(), 0, tar_filename); + scanner.AddFile(tar->first, 0, tar_filename); } } else { /* Scan filesystem */ diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 75c1977f2c..5ba54f26cf 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -586,7 +586,7 @@ public: { } - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; /** Do the scan for GRFs. */ static uint DoScan() @@ -600,9 +600,9 @@ public: } }; -bool GRFFileScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { - GRFConfig *c = new GRFConfig(filename + basepath_length); + GRFConfig *c = new GRFConfig(filename.c_str() + basepath_length); bool added = true; if (FillGRFDetails(c, false)) { diff --git a/src/openttd.cpp b/src/openttd.cpp index aa98da7260..6315b8fa15 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -628,7 +628,7 @@ int openttd_main(int argc, char *argv[]) /* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */ auto t = _file_to_saveload.name.find_last_of('.'); if (t != std::string::npos) { - FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name.c_str(), _file_to_saveload.name.substr(t).c_str(), nullptr, nullptr); + FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, _file_to_saveload.name.substr(t).c_str(), nullptr, nullptr); if (ft != FIOS_TYPE_INVALID) _file_to_saveload.SetMode(ft); } diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 09f15e183f..42970c9a2f 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -317,7 +317,7 @@ bool LoadOldSaveGame(const std::string &file) return true; } -void GetOldSaveGameName(const char *file, char *title, const char *last) +void GetOldSaveGameName(const std::string &file, char *title, const char *last) { FILE *f = FioFOpenFile(file, "rb", NO_DIRECTORY); diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index 4eebd548d3..d02bbe324e 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -39,8 +39,6 @@ ScriptInfo::~ScriptInfo() free(this->date); free(this->instance_name); free(this->url); - free(this->main_script); - free(this->tar_file); free(this->SQ_instance); } @@ -81,9 +79,8 @@ bool ScriptInfo::CheckMethod(const char *name) const } /* Get location information of the scanner */ - info->main_script = stredup(info->scanner->GetMainScript()); - const char *tar_name = info->scanner->GetTarFile(); - if (tar_name != nullptr) info->tar_file = stredup(tar_name); + info->main_script = info->scanner->GetMainScript(); + info->tar_file = info->scanner->GetTarFile(); /* Cache the data the info file gives us. */ if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR; diff --git a/src/script/script_info.hpp b/src/script/script_info.hpp index 5f90e9b23f..c2e952b821 100644 --- a/src/script/script_info.hpp +++ b/src/script/script_info.hpp @@ -32,8 +32,6 @@ public: ScriptInfo() : engine(nullptr), SQ_instance(nullptr), - main_script(nullptr), - tar_file(nullptr), author(nullptr), name(nullptr), short_name(nullptr), @@ -89,12 +87,12 @@ public: /** * Get the filename of the main.nut script. */ - const char *GetMainScript() const { return this->main_script; } + const char *GetMainScript() const { return this->main_script.c_str(); } /** * Get the filename of the tar the script is in. */ - const char *GetTarFile() const { return this->tar_file; } + std::string GetTarFile() const { return this->tar_file; } /** * Check if a given method exists. @@ -152,8 +150,8 @@ protected: ScriptConfigItemList config_list; ///< List of settings from this Script. private: - char *main_script; ///< The full path of the script. - char *tar_file; ///< If, which tar file the script was in. + std::string main_script; ///< The full path of the script. + std::string tar_file; ///< If, which tar file the script was in. const char *author; ///< Author of the script. const char *name; ///< Full name of the script. const char *short_name; ///< Short name (4 chars) which uniquely identifies the script. diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp index dc3feb58c7..6fa88bfee5 100644 --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -23,47 +23,29 @@ #include "../safeguards.h" -bool ScriptScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool ScriptScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { - free(this->main_script); - this->main_script = stredup(filename); - if (this->main_script == nullptr) return false; + this->main_script = filename; + this->tar_file = tar_filename; - free(this->tar_file); - if (tar_filename != nullptr) { - this->tar_file = stredup(tar_filename); - if (this->tar_file == nullptr) return false; - } else { - this->tar_file = nullptr; - } - - const char *end = this->main_script + strlen(this->main_script) + 1; - char *p = strrchr(this->main_script, PATHSEPCHAR); - if (p == nullptr) { - p = this->main_script; - } else { - /* Skip over the path separator character. We don't need that. */ - p++; - } - - strecpy(p, "main.nut", end); + auto p = this->main_script.rfind(PATHSEPCHAR); + this->main_script.erase(p != std::string::npos ? p + 1 : 0); + this->main_script += "main.nut"; if (!FioCheckFileExists(filename, this->subdir) || !FioCheckFileExists(this->main_script, this->subdir)) return false; this->ResetEngine(); try { - this->engine->LoadScript(filename); + this->engine->LoadScript(filename.c_str()); } catch (Script_FatalError &e) { - DEBUG(script, 0, "Fatal error '%s' when trying to load the script '%s'.", e.GetErrorMessage(), filename); + DEBUG(script, 0, "Fatal error '%s' when trying to load the script '%s'.", e.GetErrorMessage(), filename.c_str()); return false; } return true; } ScriptScanner::ScriptScanner() : - engine(nullptr), - main_script(nullptr), - tar_file(nullptr) + engine(nullptr) { } @@ -87,8 +69,6 @@ ScriptScanner::~ScriptScanner() { this->Reset(); - free(this->main_script); - free(this->tar_file); delete this->engine; } @@ -194,7 +174,7 @@ struct ScriptFileChecksumCreator : FileScanner { } /* Add the file and calculate the md5 sum. */ - virtual bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) + virtual bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { Md5 checksum; uint8 buffer[1024]; @@ -202,7 +182,7 @@ struct ScriptFileChecksumCreator : FileScanner { byte tmp_md5sum[16]; /* Open the file ... */ - FILE *f = FioFOpenFile(filename, "rb", this->dir, &size); + FILE *f = FioFOpenFile(filename.c_str(), "rb", this->dir, &size); if (f == nullptr) return false; /* ... calculate md5sum... */ @@ -239,9 +219,9 @@ static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, S if (!md5sum) return true; ScriptFileChecksumCreator checksum(dir); - const char *tar_filename = info->GetTarFile(); + auto tar_filename = info->GetTarFile(); TarList::iterator iter; - if (tar_filename != nullptr && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[dir].end()) { + if (!tar_filename.empty() && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[dir].end()) { /* The main script is in a tar file, so find all files that * are in the same tar and add them to the MD5 checksumming. */ TarFileList::iterator tar; @@ -253,7 +233,7 @@ static bool IsSameScript(const ContentInfo *ci, bool md5sum, ScriptInfo *info, S const char *ext = strrchr(tar->first.c_str(), '.'); if (ext == nullptr || strcasecmp(ext, ".nut") != 0) continue; - checksum.AddFile(tar->first.c_str(), 0, tar_filename); + checksum.AddFile(tar->first, 0, tar_filename); } } else { char path[MAX_PATH]; diff --git a/src/script/script_scanner.hpp b/src/script/script_scanner.hpp index eb65a197e4..ca9068ca10 100644 --- a/src/script/script_scanner.hpp +++ b/src/script/script_scanner.hpp @@ -32,12 +32,12 @@ public: /** * Get the current main script the ScanDir is currently tracking. */ - const char *GetMainScript() { return this->main_script; } + std::string GetMainScript() { return this->main_script; } /** * Get the current tar file the ScanDir is currently tracking. */ - const char *GetTarFile() { return this->tar_file; } + std::string GetTarFile() { return this->tar_file; } /** * Get the list of all registered scripts. @@ -75,7 +75,7 @@ public: */ const char *FindMainScript(const ContentInfo *ci, bool md5sum); - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; /** * Rescan the script dir. @@ -83,9 +83,9 @@ public: void RescanDir(); protected: - class Squirrel *engine; ///< The engine we're scanning with. - char *main_script; ///< The full path of the script. - char *tar_file; ///< If, which tar file the script was in. + class Squirrel *engine; ///< The engine we're scanning with. + std::string main_script; ///< The full path of the script. + std::string tar_file; ///< If, which tar file the script was in. ScriptInfoList info_list; ///< The list of all script. ScriptInfoList info_single_list; ///< The list of all unique script. The best script (highest version) is shown. diff --git a/src/tar_type.h b/src/tar_type.h index e428bc2496..c4e72df851 100644 --- a/src/tar_type.h +++ b/src/tar_type.h @@ -12,30 +12,20 @@ #include #include +#include #include "fileio_type.h" -/** The define of a TarList. */ -struct TarListEntry { - const char *filename; - const char *dirname; - - /* MSVC goes copying around this struct after initialisation, so it tries - * to free filename, which isn't set at that moment... but because it - * initializes the variable with garbage, it's going to segfault. */ - TarListEntry() : filename(nullptr), dirname(nullptr) {} - ~TarListEntry() { free(this->filename); free(this->dirname); } -}; struct TarFileListEntry { - const char *tar_filename; + std::string tar_filename; size_t size; size_t position; }; -typedef std::map TarList; +typedef std::map TarList; ///< Map of tar file to tar directory. typedef std::map TarFileList; -extern TarList _tar_list[NUM_SUBDIRS]; +extern std::array _tar_list; extern TarFileList _tar_filelist[NUM_SUBDIRS]; #define FOR_ALL_TARS(tar, sd) for (tar = _tar_filelist[sd].begin(); tar != _tar_filelist[sd].end(); tar++) From dc5b8020ccd41053f440371ccaa290ca7a2632b9 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sun, 27 Dec 2020 14:05:47 +0000 Subject: [PATCH 435/601] Fix #6452: Reset only editable and visible settings from GUI (#7890) Also enables the Reset button while in-game for AI configs. --- src/ai/ai_gui.cpp | 8 ++------ src/script/script_config.cpp | 20 ++++++++++++++++++++ src/script/script_config.hpp | 5 +++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index f1ee03fc17..9e16ec3ec1 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -315,8 +315,6 @@ struct AISettingsWindow : public Window { this->vscroll = this->GetScrollbar(WID_AIS_SCROLLBAR); this->FinishInitNested(slot); // Initializes 'this->line_height' as side effect. - this->SetWidgetDisabledState(WID_AIS_RESET, _game_mode != GM_MENU && Company::IsValidID(this->slot)); - this->RebuildVisibleSettings(); } @@ -524,10 +522,8 @@ struct AISettingsWindow : public Window { break; case WID_AIS_RESET: - if (_game_mode == GM_MENU || !Company::IsValidID(this->slot)) { - this->ai_config->ResetSettings(); - this->SetDirty(); - } + this->ai_config->ResetEditableSettings(_game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot))); + this->SetDirty(); break; } } diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index 8de141e662..9bb953c4c1 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -127,6 +127,26 @@ void ScriptConfig::ResetSettings() this->settings.clear(); } +void ScriptConfig::ResetEditableSettings(bool yet_to_start) +{ + if (this->info == nullptr) return ResetSettings(); + + for (SettingValueList::iterator it = this->settings.begin(); it != this->settings.end();) { + const ScriptConfigItem *config_item = this->info->GetConfigItem(it->first); + assert(config_item != nullptr); + + bool editable = yet_to_start || (config_item->flags & SCRIPTCONFIG_INGAME) != 0; + bool visible = _settings_client.gui.ai_developer_tools || (config_item->flags & SCRIPTCONFIG_DEVELOPER) == 0; + + if (editable && visible) { + free(it->first); + it = this->settings.erase(it); + } else { + it++; + } + } +} + void ScriptConfig::AddRandomDeviation() { for (const auto &item : *this->GetConfigList()) { diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp index 31004caba7..be231fcdc2 100644 --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -134,6 +134,11 @@ public: */ void ResetSettings(); + /** + * Reset only editable and visible settings to their default value. + */ + void ResetEditableSettings(bool yet_to_start); + /** * Randomize all settings the Script requested to be randomized. */ From 4f8e7b2a2b97475fa45a3117c63c91116a884703 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 27 Dec 2020 15:07:06 +0100 Subject: [PATCH 436/601] Fix 65f65ad2: Missing path separator that fell over a cliff. --- src/fios.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fios.cpp b/src/fios.cpp index 698a0b5592..4586f86b33 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -219,7 +219,7 @@ static std::string FiosMakeFilename(const std::string *path, const char *name, c const char *period = strrchr(name, '.'); if (period != nullptr && strcasecmp(period, ext) == 0) ext = ""; - return buf + name + ext; + return buf + PATHSEP + name + ext; } /** From 1bb0e6ed8cfba61818343a36111af3902f7d7199 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 27 Dec 2020 18:18:16 +0000 Subject: [PATCH 437/601] Update: Translations from eints russian: 19 changes by lexuslatvia finnish: 1 change by hpiirai latvian: 19 changes by lexuslatvia --- src/lang/afrikaans.txt | 2 +- src/lang/arabic_egypt.txt | 2 +- src/lang/basque.txt | 2 +- src/lang/belarusian.txt | 2 +- src/lang/brazilian_portuguese.txt | 2 +- src/lang/bulgarian.txt | 2 +- src/lang/catalan.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 2 +- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/esperanto.txt | 2 +- src/lang/estonian.txt | 2 +- src/lang/faroese.txt | 2 +- src/lang/finnish.txt | 4 ++-- src/lang/french.txt | 2 +- src/lang/gaelic.txt | 2 +- src/lang/galician.txt | 2 +- src/lang/german.txt | 2 +- src/lang/greek.txt | 2 +- src/lang/hebrew.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/icelandic.txt | 2 +- src/lang/indonesian.txt | 2 +- src/lang/irish.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/japanese.txt | 2 +- src/lang/korean.txt | 2 +- src/lang/latin.txt | 2 +- src/lang/latvian.txt | 21 ++++++++++++++++++++- src/lang/lithuanian.txt | 2 +- src/lang/luxembourgish.txt | 2 +- src/lang/malay.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/norwegian_nynorsk.txt | 2 +- src/lang/polish.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/romanian.txt | 2 +- src/lang/russian.txt | 21 ++++++++++++++++++++- src/lang/serbian.txt | 2 +- src/lang/simplified_chinese.txt | 2 +- src/lang/slovak.txt | 2 +- src/lang/slovenian.txt | 2 +- src/lang/spanish.txt | 2 +- src/lang/spanish_MX.txt | 2 +- src/lang/swedish.txt | 2 +- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 2 +- src/lang/traditional_chinese.txt | 2 +- src/lang/turkish.txt | 2 +- src/lang/ukrainian.txt | 2 +- src/lang/unfinished/chuvash.txt | 2 +- src/lang/unfinished/frisian.txt | 2 +- src/lang/unfinished/ido.txt | 2 +- src/lang/unfinished/macedonian.txt | 2 +- src/lang/unfinished/maltese.txt | 2 +- src/lang/unfinished/marathi.txt | 2 +- src/lang/unfinished/persian.txt | 2 +- src/lang/unfinished/urdu.txt | 2 +- src/lang/vietnamese.txt | 2 +- src/lang/welsh.txt | 2 +- 63 files changed, 102 insertions(+), 64 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 27c04099c3..a9c4fa4ce9 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2507,7 +2507,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: STR_OBJECT_CLASS_LTHS :Vuurtorings STR_OBJECT_CLASS_TRNS :Stuurders -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Boome STR_PLANT_TREE_TOOLTIP :{BLACK}Kies tipe boom om te plant. Indien die teel reeds 'n boom op het sal enige tipe bome by geplant word, ongeag van die gekose tipe STR_TREES_RANDOM_TYPE :{BLACK}Bome van lukraake tipe diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 7f342e7b3c..994889e0c2 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2103,7 +2103,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}حجم: STR_OBJECT_CLASS_LTHS :مناراة ضوئية STR_OBJECT_CLASS_TRNS :النواقل -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}اشجار STR_PLANT_TREE_TOOLTIP :{BLACK} اختر نوع الشجر لزراعتة, اذا المربع يحتوي على اشجار فهذا الامر يضيف المزيد STR_TREES_RANDOM_TYPE :{BLACK}شجر عشوائي diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 9e63803637..b797613a96 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2365,7 +2365,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Tamainua STR_OBJECT_CLASS_LTHS :Itsasargiak STR_OBJECT_CLASS_TRNS :Igorgailuak -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Zuhaitzak STR_PLANT_TREE_TOOLTIP :{BLACK} Aukeratu landatuko diren zuhaitz motak. Laukiak zuhaitza badauka mota ezberdinetako zuhaitz gehio geituko ditu STR_TREES_RANDOM_TYPE :{BLACK}Ausazko zuhaitz motak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index c297aefdf3..6f5bda851a 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2833,7 +2833,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Паме STR_OBJECT_CLASS_LTHS :Маякi STR_OBJECT_CLASS_TRNS :Перадатчыкi -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Дрэвы STR_PLANT_TREE_TOOLTIP :{BLACK}Выберыце тып дрэваў для пасадкі. Калі на ўчастку ўжо ёсьць дрэвы, будуць дададзены некалькі дрэваў рознага тыпу, незалежна ад выбранага. STR_TREES_RANDOM_TYPE :{BLACK}Дрэвы розных відаў diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 97a5f59fab..d75203968f 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2517,7 +2517,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: STR_OBJECT_CLASS_LTHS :Faróis STR_OBJECT_CLASS_TRNS :Transmissores -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árvores STR_PLANT_TREE_TOOLTIP :{BLACK}Selecionar um tipo de árvore para plantar. Se o local já tiver uma árvore, isso irá adicionar mais árvores do tipo misto indepentendemente do tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 99183c8498..752df0fb91 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2419,7 +2419,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Разм STR_OBJECT_CLASS_LTHS :Фарове STR_OBJECT_CLASS_TRNS :Предаватели -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Дървета STR_PLANT_TREE_TOOLTIP :{BLACK}Избор на вид дърво за засаждане. Ако на полето вече съществува дърво, ще бъдат добавени повече дървета от различни видове, независимо от избора на вид STR_TREES_RANDOM_TYPE :{BLACK}Дървета от произволен тип diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 872ed5974b..31d30d0c81 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2525,7 +2525,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Mida: {G STR_OBJECT_CLASS_LTHS :Fars STR_OBJECT_CLASS_TRNS :Transmissors -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbres STR_PLANT_TREE_TOOLTIP :{BLACK}Selecciona el tipus d'arbre a plantar. Si la casella ja conté un arbre, s'afegiran més arbres d'altres espècies independentment de quin estigui seleccionat STR_TREES_RANDOM_TYPE :{BLACK}Arbres de tipus aleatori diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 66b02221e2..40c5fd0aed 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2612,7 +2612,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Veličin STR_OBJECT_CLASS_LTHS :Svjetionici STR_OBJECT_CLASS_TRNS :Odašiljači -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Drveće STR_PLANT_TREE_TOOLTIP :{BLACK}Odaberi vrstu drveta za sadnju. Ako polje već ima drvo, ovo će dodati još drveća raznih vrsta neovisno o odabranoj vrsti STR_TREES_RANDOM_TYPE :{BLACK}Raznovrsno drveće diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 41b3020ade..0e753b1801 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2603,7 +2603,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Velikost STR_OBJECT_CLASS_LTHS :Majáky STR_OBJECT_CLASS_TRNS :Vysílače -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Stromy STR_PLANT_TREE_TOOLTIP :{BLACK}Zvol druh stromu na vysazení. Pokud se na políčku už nějaký strom nachází, přidá se k němu několik různých druhů bez ohledu na výběr druhu STR_TREES_RANDOM_TYPE :{BLACK}Různé stromy diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 892782abcd..f6507f02bb 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2516,7 +2516,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Størrel STR_OBJECT_CLASS_LTHS :Fyrtårn STR_OBJECT_CLASS_TRNS :Sendere -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Træer STR_PLANT_TREE_TOOLTIP :{BLACK}Vælg typen af træer der skal plantes. Hvis feltet allerede har et træ, vil dette tilføje flere træer i blandede typer, uafhængigt af den valgte type STR_TREES_RANDOM_TYPE :{BLACK}Træer af tilfældig type diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 1ff98d11da..d911f68383 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2516,7 +2516,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: STR_OBJECT_CLASS_LTHS :Vuurtorens STR_OBJECT_CLASS_TRNS :Zendmasten -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Bomen STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, komen er meer bomen van verschillende typen bij, onafhankelijk van het geselecteerde type. STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 44efedb7f7..e1fab3f29e 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2428,7 +2428,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Size: {G STR_OBJECT_CLASS_LTHS :Lighthouses STR_OBJECT_CLASS_TRNS :Transmitters -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trees STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 38d01204f4..013088aace 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2512,7 +2512,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Size: {G STR_OBJECT_CLASS_LTHS :Lighthouses STR_OBJECT_CLASS_TRNS :Transmitters -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trees STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 0adcf0b115..c68684eca6 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2061,7 +2061,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Grandeco STR_OBJECT_CLASS_LTHS :Lumturoj STR_OBJECT_CLASS_TRNS :Transigantoj -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arboj STR_PLANT_TREE_TOOLTIP :{BLACK}Elektu arbo-tipon por planti. Kiam la regiono jam havas arbojn, aliaj arb-tipoj plantiĝos STR_TREES_RANDOM_TYPE :{BLACK}Arboj de hazardaj tipoj diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 74b827f3f4..aa7277c7ba 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2526,7 +2526,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Suurus: STR_OBJECT_CLASS_LTHS :Majakad STR_OBJECT_CLASS_TRNS :Saatejaamad -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Puud STR_PLANT_TREE_TOOLTIP :{BLACK}Vali istutatava puu liik. Kui ruudus juba on puu, siis lisatakse rohkem eri liikide puid, olenemata valikust STR_TREES_RANDOM_TYPE :{BLACK}Suvalised puutüübid diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 0b2c1fa2b8..f439165102 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2207,7 +2207,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Stødd: STR_OBJECT_CLASS_LTHS :Vitar STR_OBJECT_CLASS_TRNS :Sendarir -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trø STR_TREES_RANDOM_TYPE :{BLACK}Tilvildarlig træ sløg STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Tilvildarlig trø diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 6a81b13454..64db506292 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2542,7 +2542,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {G STR_OBJECT_CLASS_LTHS :Majakat STR_OBJECT_CLASS_TRNS :Lähettimet -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Puita STR_PLANT_TREE_TOOLTIP :{BLACK}Valitse istutettava puutyyppi. Jos ruudussa on jo puu, tämä lisää uusia puita riippumatta valitun puun tyypistä STR_TREES_RANDOM_TYPE :{BLACK}Sattumanvaraisia puita @@ -3255,7 +3255,7 @@ STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Kuukausittainen tarjonta ja paikallinen arvio: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}{NBSP}%) -STR_STATION_VIEW_GROUP :{BLACK}Järjestä +STR_STATION_VIEW_GROUP :{BLACK}Ryhmittele STR_STATION_VIEW_WAITING_STATION :Asema: Odottaa STR_STATION_VIEW_WAITING_AMOUNT :Määrä: Odottaa STR_STATION_VIEW_PLANNED_STATION :Asema: Suunniteltu diff --git a/src/lang/french.txt b/src/lang/french.txt index 6b08754c75..b239fda099 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2525,7 +2525,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Taille{N STR_OBJECT_CLASS_LTHS :Phares STR_OBJECT_CLASS_TRNS :Transmetteurs -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbres STR_PLANT_TREE_TOOLTIP :{BLACK}Choix du type d'arbre. S'il y a déjà un arbre dans la case, plusieurs arbres de types différents y seront ajoutés, indépendamment du type sélectionné. STR_TREES_RANDOM_TYPE :{BLACK}Au hasard diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 3db73e8bb0..8c80c59532 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2686,7 +2686,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Meud: {G STR_OBJECT_CLASS_LTHS :Taighean-solais STR_OBJECT_CLASS_TRNS :Tùir chraobh-sgaoilidh -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Craobhan STR_PLANT_TREE_TOOLTIP :{BLACK}Tagh seòrsa na craoibhe airson cur. Ma tha craobh air an leac mu thràth, cuiridh seo barrachd chraobhan aig a bheil caochladh dhe sheòrsachan a tha neo-eisimeileach on t-seòrsa a thagh thu STR_TREES_RANDOM_TYPE :{BLACK}Craobhan dhe sheòrsa air thuaiream diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 82c7be26a3..9f56b15eb0 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2507,7 +2507,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Tamaño: STR_OBJECT_CLASS_LTHS :Faros STR_OBJECT_CLASS_TRNS :Transmisores -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árbores STR_PLANT_TREE_TOOLTIP :{BLACK}Selecciona-lo tipo de árbore a plantar. Se xa hai unha árbore no cadro, isto engadirá máis árbores de varios tipos independentemente do tipo seleccionado STR_TREES_RANDOM_TYPE :{BLACK}Árbores de tipo aleatorio diff --git a/src/lang/german.txt b/src/lang/german.txt index d5fa23a4b7..e5c2d24c5c 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2498,7 +2498,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Größe: STR_OBJECT_CLASS_LTHS :Leuchttürme STR_OBJECT_CLASS_TRNS :Sendemasten -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Bäume STR_PLANT_TREE_TOOLTIP :{BLACK}Wähle die zu pflanzende Baumart. Wenn auf dem Feld schon ein Baum steht, wird eine zufällige Baumart gepflanzt STR_TREES_RANDOM_TYPE :{BLACK}Zufällige Baumart diff --git a/src/lang/greek.txt b/src/lang/greek.txt index e60bdf374e..9ac448efc1 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2596,7 +2596,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Μέγε STR_OBJECT_CLASS_LTHS :Φάροι STR_OBJECT_CLASS_TRNS :Αναμεταδότες -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Δέντρα STR_PLANT_TREE_TOOLTIP :{BLACK}Επιλέξτε τύπο δέντρου για φύτευση. Αν το τετραγωνίδιο έχει ήδη ένα δέντρο, αυτό θα προσθέσει περισσότερα δέντρα μεικτών τύπων ανεξάρτητα από τον επιλεγμένο τύπο STR_TREES_RANDOM_TYPE :{BLACK}Δέντρα τυχαίου τύπου diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 2d59515113..4bffa240bc 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2479,7 +2479,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}גודל STR_OBJECT_CLASS_LTHS :מגדלורים STR_OBJECT_CLASS_TRNS :אנטנות -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}עצים STR_PLANT_TREE_TOOLTIP :{BLACK}בחר סוג עץ לנטיעה. במידה ויש עץ במשבצת, יתווספו עצים נוספים מסוגים שונים ללא קשר לסוג הנבחר STR_TREES_RANDOM_TYPE :{BLACK}עצים מסוג אקראי diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 1d543d19b6..c82cf92de3 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2580,7 +2580,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Méret: STR_OBJECT_CLASS_LTHS :Világítótornyok STR_OBJECT_CLASS_TRNS :Adótornyok -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Fák STR_PLANT_TREE_TOOLTIP :{BLACK}Ültetendő fa kiválasztása. Ha már van fa a mezőn, akkor újabb fák ültetése a kiválasztott fatípustól függetlenül STR_TREES_RANDOM_TYPE :{BLACK}Véletlenszerű fafélék diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 283221e8fb..2e7afccf83 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2305,7 +2305,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Stærð: STR_OBJECT_CLASS_LTHS :Vitar STR_OBJECT_CLASS_TRNS :Sendar -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Tré STR_PLANT_TREE_TOOLTIP :{BLACK}Veldu trjátegund sem á að gróðursetja. Ef það er fyrir tré á reitnum, verðu fleiri trjám mismunandi trjám plantað óhað hvaða tegund hefur verið valin STR_TREES_RANDOM_TYPE :{BLACK}Tré af handahófskenndri gerð diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index dbf51e6df2..48ef414720 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2516,7 +2516,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Ukuran: STR_OBJECT_CLASS_LTHS :Mercusuar STR_OBJECT_CLASS_TRNS :Pemancar -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Pepohonan STR_PLANT_TREE_TOOLTIP :{BLACK}Pilih jenis pohon untuk ditanam. Jika pohon sudah tertanam, ini akan menambah jenis pohon secara acak dari tipe yang sama. STR_TREES_RANDOM_TYPE :{BLACK}Tanam pohon secara acak diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 63fbce5b6e..4af615635c 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2453,7 +2453,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Méid: { STR_OBJECT_CLASS_LTHS :Tithe solais STR_OBJECT_CLASS_TRNS :Tarchuradóirí -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Crainnte STR_PLANT_TREE_TOOLTIP :{BLACK}Roghnaigh an cineál crainn le cur STR_TREES_RANDOM_TYPE :{BLACK}Crainnte randamacha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index f25f4dc493..0f22a045ad 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2546,7 +2546,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Dimensio STR_OBJECT_CLASS_LTHS :Fari STR_OBJECT_CLASS_TRNS :Trasmettitori -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Alberi STR_PLANT_TREE_TOOLTIP :{BLACK}Seleziona il tipo di albero da piantare. Se nel riquadro sono già presenti alberi, ne aggiunge altri di vari tipi, indipendentemente dal tipo selezionato STR_TREES_RANDOM_TYPE :{BLACK}Alberi casuali diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index d94701aa88..af48a6e6e2 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2453,7 +2453,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}サイ STR_OBJECT_CLASS_LTHS :灯台 STR_OBJECT_CLASS_TRNS :電波塔 -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}植林 STR_PLANT_TREE_TOOLTIP :{BLACK}植林する樹類を選択します。既に木がある場合は追加で植林されます STR_TREES_RANDOM_TYPE :{BLACK}ランダムな樹類 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 0a8612ca07..238d344a34 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2543,7 +2543,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}크기: STR_OBJECT_CLASS_LTHS :등대 STR_OBJECT_CLASS_TRNS :송신기 -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}나무 STR_PLANT_TREE_TOOLTIP :{BLACK}심고싶은 나무의 종류를 선택합니다. 이미 나무가 심어져있는 경우에는 선택한 나무의 크기를 키웁니다 STR_TREES_RANDOM_TYPE :{BLACK}여러 종류의 나무 같이 심기 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 98ebc4fc04..cec72a7fd1 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2688,7 +2688,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Magnitud STR_OBJECT_CLASS_LTHS :Phari STR_OBJECT_CLASS_TRNS :Emissoria -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbores STR_PLANT_TREE_TOOLTIP :{BLACK}Eligere arborem serendam. Si tegula iam arborem habet, plures arbores fortuitas addentur (forsitan non idem typus arboris) STR_TREES_RANDOM_TYPE :{BLACK}Arbor fortuita diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 175367f5a2..dac079fae8 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -317,8 +317,15 @@ STR_SORT_BY_CARGO_CAPACITY :kravnesības STR_SORT_BY_RANGE :apgabala STR_SORT_BY_POPULATION :iedzīvotāju skaita STR_SORT_BY_RATING :vērtējuma +STR_SORT_BY_NUM_VEHICLES :Autotransporta līdzekļu skaits +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kopējā peļņa pagājušajā gadā +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Kopējā peļņa šogad +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Vidējā peļņa iepriekšējā gadā +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Vidējā peļņa šajā gadā # Group by options for vehicle list +STR_GROUP_BY_NONE :Nav +STR_GROUP_BY_SHARED_ORDERS :Koplietojamie rīkojumi # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzēt spēli @@ -775,6 +782,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Rādīt STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Rādīt pēdējo ziņojumu vai avīzes rakstu STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUZE * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE} * * PAUZE (gaida saites diagrammas atjaunināšanu) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMĀTISKĀ SAGLABĀŠANA STR_STATUSBAR_SAVING_GAME :{RED}* * SPĒLE TIEK SAGLABĀTA * * @@ -1614,6 +1622,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Koku izvietojums spēlē: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Vadīt nejaušu koku parādīšanos spēles laikā. Tas var ietekmēt no kokaudzēšanas atkarīgas ražotnes, piemēram kokzāģētavas +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Augt, bet neizplatās {RED} (salauž kokzāģētavas) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Aug, bet izplatās tikai lietus mežos +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Aug un izplatās visur +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Augt, bet neizplatās {RED} (salauž kokzāģētavas) STR_CONFIG_SETTING_TOOLBAR_POS :Galvenās rīkjoslas novietojums: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Galvenās rīkjoslas horizontālais novietojums ekrāna augšējā daļā @@ -1979,6 +1991,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pievieno STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atsvaidzināt serveri STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atsvaidzināt servera informāciju +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :Meklēt internetā +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Meklēt publiskos serverus internetā +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Meklēt LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Meklēt serverus lokālajā tīklā STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pievienot serveri STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Pievienot serveri sarakstam, kurš vienmēr tiks pārbaudīts vai tajā nav palaistas spēles STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Palaist serveri @@ -2207,11 +2223,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spēle joprojā STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spēle joprojām pauzēta ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spēle joprojām pauzēta ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spēle vēl aizvien ir pauzēta ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spēle joprojām pauzēta ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spēle atsākta ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :spēlētāju skaits STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :savieno spēlētājus STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuālā STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spēles skripts +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :gaida uz saišu grafika atjaunošanu ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :aizeju STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} ir pievienojies spēlei @@ -2528,7 +2546,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Izmērs: STR_OBJECT_CLASS_LTHS :Bākas STR_OBJECT_CLASS_TRNS :Raidītāji -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Koki STR_PLANT_TREE_TOOLTIP :{BLACK}Izvēlēties koka veidu stādīšanai. Ja lauciņš jau ir koks, tas pievienos vairāk jauktu veidu kokus neatkarīgi no izvēlētā veida STR_TREES_RANDOM_TYPE :{BLACK}Nejauši izvēlēta veida koki @@ -4251,6 +4269,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spēle ir sagla STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Failu nevar nolasīt STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Failā nevar ierakstīt STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Datu integritātes pārbaude neizdevās +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Saglabāšana notiek ar modificētu versiju STR_GAME_SAVELOAD_NOT_AVAILABLE :